微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于if和case语句

关于if和case语句

时间:10-02 整理:3721RD 点击:
if语句和case语句用在组合逻辑时需要写完整,用在时序逻辑时是不是可以不写else和default啊?还是写上最好?谢谢啦!

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; ”这种啊?

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

网站地图

Top