正电平敏感锁存器建模

时间:2017-01-27 15:49:10

标签: verilog hardware nonblocking

我正在阅读某人的verilog代码。他用以下方式编码锁定。

input f;
reg fd;

always @(f)
    fd <= f;

因为它是一个锁存器,我想知道它是否+ +级别敏感?即,当f为1时,fd将为= f,并且当f = 0时,fd将保持其先前的值。或者当f = 0和f = 1时,这个锁存器电平是否敏感。如果是这种情况,怎么能对+ ve电平敏感?

如果我将非阻塞语句(&lt; =)更改为阻塞(=)

,会发生什么

1 个答案:

答案 0 :(得分:2)

它不是闩锁。锁存器至少有两个输入信号(SR锁存器的置位和复位,Toggle锁存器的J + K,D锁存器的数据和使能)。

您描述的电路只是一个转发器或缓冲器。任何时候f更改(始终阻止条件),fd将获取f的新值。无论分配类型如何(阻塞或非阻塞),这都适用。

如果您想要一个电平敏感锁存器(如D-Latch),您应该使用以下内容:

always @(*)
    if (en) fd = f;

仅当fd为高时,此电路才会f关注en。否则,fd的值将保持不变。

(旁注 - 锁存通常对FPGA设计不利。如果您使用FPGA,则应考虑使用寄存器)。