微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 问个关于不规则写法的问题?求帮助

问个关于不规则写法的问题?求帮助

时间:10-02 整理:3721RD 点击:
比如我这样写always@(*) begin if(a) b=1'b1; if(c)b=1'b0;end这样综合出来的电路是什么样的?相当于两个平行的条件。还有我最近遇到个问题,比如一个信号但有很多条件都可以让这个信号变化,如果全用IF ELSE的语句的话就会嵌套很多,而且条件之间本来也不可能同时来,本来也没有优先级,所以我不想用if else来嵌套。如果就像我开始写的这种写法不知道有问题没有?请问这种多条件驱动一个信号而条件之间没有竞争关第的应该怎样写才好呢?如果是一两个我就用if else了,关键是很多。


会产生latch,这种写法应该被禁止。如果条件比较多的话,建议你设计一些中间变量,或者用编码/译码

用一个bus把所需信号括在一起,
然后用case bus:语句,列出所需条目,
然后加full case和parallel case指导

第一个问题可以自己综合,去看rtl视图,这个不回答,第二个问题可以用你之前的写法,语义是begin end之间的语句是顺序执行的,如果if(a) b = 1; if(C ) b = 0;当C和A同时为1时,先判断a是否为1,a为1 b置1,然后判断C C也为1,B置0.最终结果B为0,综合成的的硬件电路肯定也是根据verilog的语义完成这样的功能,所以if   if是有优先级的,最下面的if优先级最高,最上边的if优先级最低,而ifelse 无优先级,综合为多路选择器。



    嗯,你说的这个我也想过,但觉得case里面的位宽有点大,哎,我是想写点小而精的风格,但这种情况感觉不好整。


if else是多路选择啊,那CASE呢,我一直理解的是case是多路选择,条件只可能会满足一个,if else if else里面的条件可能同时来多个,但最早的那个优先级最高。后面满足的都执行不到那里去。我想写点容易理解的小巧风格,不太喜欢太长的case条件和太多的if else 嵌套。哎,


第一个: if else 和case 通用,唯一的不同在case 可比较X 和Z,你可以找个代码去综合一下。第二个关于优先级的问题,if(a)  else if(b)之所以说他没有优先级,其实他的结构是这样的 if(a)  if( a == 0 && b)所有的状态都不冲突,所以没有优先判断一说,自己写个if else 和if if 综合看看。

    位宽大不大的标准是综合后的电路大不大,而不是RTL写的大不大
加full case和parallel case指导后,会生成小而精的电路的。

希望别人能帮到你

你的代码有偏向多驱的倾向,这种在RTL设计里是不允许的。
还有你的那种“很多信号同时导致1个信号变化”,这种情况也不行,必须重新设计,要么有优先级,要么同时只有一种情况出现。
有一种情况,如果是多个用户要同时申请1个资源,可能就是你描述的问题,就需要仲裁,但无论怎么仲裁,必须是有先后地执行,1个1个来,不能一起来,等待的用户,需要你先缓存。

顶一个!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top