微言电子 MicroLan https://bbs.21ic.com/?663866 [收藏] [复制] [RSS] 微言电子致力于国内领先的嵌入式系统解决方案的研发、实施,拥有一批思想先进,技术过硬的软硬件工程师组成,可向中小企业提供完整的嵌入式解决方案。

日志

verilog case如果没有default的话

已有 2348 次阅读2013-2-3 21:15 |个人分类:一日一志|系统分类:EDA/PLD| case, default, 锁存器

其实并不是说锁存器会有什么坏处,只是产生锁存器一般都是不想得到的(锁存器是由
电平触发的存储器)。用verilog写的话,进程有两种,一种是电平触发的,一种是边缘
触发的。边沿触发的是触发器,电平触发的一般是组合逻辑,但也有锁存器,有时会需
要锁存器。但锁存器的产生一般并不是我们所希望得到的。
看下边的例子:(如果你用的VHDL,也是类似)
reg [2:0]
case(a)
  0:q=d0;
  1:q=d1;
  2:q=d2;
  3:q=d3;
  4:q=d4;
endcase
可能是根本不需要a等于其它值的情形,或者是电路根本不会产生a的其它值(实际上不
可能不产生其它值的)。
但综合器不这样认为,他会产生一个锁存器来保存状态,所以综合后的结果就不完全是个数据选择器,而是选择器加一个锁存器,这个锁存器当然是不需要的。
所以case语句如果不完全一定要加一个default项。
在上面的语句中加入default:q='bx;
这样就可以避免产生锁存器,生成一个单纯的选择器(组合逻辑)。不光是case语句,
就是if语句在电平触发的的进程中如果有一个else分支没有对某个变量进行赋值的话也
会产生锁存器。还有事件敏感表中变量不完全也是同理。边沿触发的不会有这种担心,
因为边沿触发的本身就是存储器,可以保持状态的。

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)