我正在阅读某人的verilog代码。他用以下方式编码锁定。
input f;
reg fd;
always @(f)
fd <= f;
因为它是一个锁存器,我想知道它是否+ +级别敏感?即,当f为1时,fd将为= f,并且当f = 0时,fd将保持其先前的值。或者当f = 0和f = 1时,这个锁存器电平是否敏感。如果是这种情况,怎么能对+ ve电平敏感?
如果我将非阻塞语句(&lt; =)更改为阻塞(=)
,会发生什么答案 0 :(得分:2)
它不是闩锁。锁存器至少有两个输入信号(SR锁存器的置位和复位,Toggle锁存器的J + K,D锁存器的数据和使能)。
您描述的电路只是一个转发器或缓冲器。任何时候f
更改(始终阻止条件),fd
将获取f
的新值。无论分配类型如何(阻塞或非阻塞),这都适用。
如果您想要一个电平敏感锁存器(如D-Latch),您应该使用以下内容:
always @(*)
if (en) fd = f;
仅当fd
为高时,此电路才会f
关注en
。否则,fd
的值将保持不变。
(旁注 - 锁存通常对FPGA设计不利。如果您使用FPGA,则应考虑使用寄存器)。