关于if和case语句
reset 值写就行
多谢!
case不是完全组合的话,还是要写上default。
default是必须的,else就不一定了,按照编码规则是要写的。感觉和综合工具也有关系
原来如此,我以为default也是可以省略的呢
default当然可以省略,如果省略,状态由综合工具按有利于优化化简确定。
case不是完全组合的话,要写上default
综合出来的if是带优先级的电路,case是没有优先级的电路
看来小编对HDL生成的组合逻辑和时序逻辑理解还是有问题啊。时序逻辑就是寄存器而已,打一拍就完了,没有任何的附加功能,你要实现的功能,都体现在组合逻辑上,根据你的设计,你觉得if或者case需不要补完整呢? 如果不补完整,会出现哪些问题? 考虑这些,你自己就明白了
我感觉时序逻辑时是可以不写的,但是亲自试过一个case语句,没有写default和写了default时的结果就不一样,所以感觉还是写上比较好……
时序逻辑时,写不写没区别。
并不是说case里缺少default就一定会出问题,而是某些情况下会造成一些功能上的bug,如果逻辑内部某一时刻跑飞,你拿去匹配case的有效值跳变为了无效值,在没有default情况下,你说这个case会输出什么值? 这个根据综合器的不同而不同,如果综合器认定在缺省default情况下,遇到无效case匹配值,让输出寄存器保持上一个状态,那么你就会得到一个错误的case输出,而且你还不知道,后面的逻辑就乱了,尤其是状态机,就跳乱了。如果你在default上加入一个特殊的值,那么你的后级逻辑就会知道case没有匹配对,出了问题,你就可以设计出错的机制来抑制错误的延续,至少你知道了这个错误,定位问题的时候有方向。
学习了,谢谢!
组合逻辑必须把分支都补全。else和default必须有
时序逻辑的话可以不写,组合逻辑的话还是要写的,不然会出现锁存器的。不过规范一点都写吧
那要是在default情况下希望某个变量不变,是不是就写成例如 “ a <= a; ”这种啊?
