问个关于不规则写法的问题?求帮助
会产生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个来,不能一起来,等待的用户,需要你先缓存。
顶一个!
