请教这几种编码,结果有什么不同,因为什么?
时间:10-02
整理:3721RD
点击:
附件中的几种编码方式有什么结果有什么异同,为什么

就是阻塞与非阻塞的异同
组合逻辑不应该用非阻塞赋值,另外个人觉得应该把data_out放在case所在的always块外面,声明成wire类型(也可以不声明,因为verilog默认输出为wire),用assign data_out = temp;
个人分析一下,结果都是基于data_in改变的时间点发生的:
1. 前7个结果一样,data_out等于temp之前的值,temp等于case里面取决于data_in的值。
2. 最后一个结果是,data_out等于temp在case里面赋的值,temp等于case里面取决于data_in的值。
当然,推荐的代码风格是最后一种
最右侧两个结果是一样的,剩下六个结果是一样的。
这就是verilog不好的地方,太自由了,很多人想当然的写代码。语法上都能通得过,但是结果完全不一样。verilog默认的原则是很多的,上面代码却没有遵守:不要在同一个always块里面混合使用“阻塞赋值”和“非阻塞赋值”!
即使不遵照默认的规则也有可能仿真出正确的结果,但前仿结果也许会和后仿结果不匹配。研究为什么不一样是没有意义的,真想知道8个例子为什么会出现这种结果,看下最后生成的电路就知道了。
