正电平敏感锁存器建模

positive level sensitive latch modeling

我正在阅读某人的 verilog 代码。他用以下方式对闩锁进行了编码。

input f;
reg fd;

always @(f)
    fd <= f;

因为它是一个锁存器,我想知道它是否对电平敏感?即,当 f 为 1 时,fd 将 = f,而当 f = 0 时,fd 将保持其先前的值。或者这个锁存器电平对 f = 0 和 f = 1 时都敏感。如果是这种情况,如何使其对电平敏感?

如果我将非阻塞语句 (<=) 更改为阻塞语句 (=) 会发生什么

这不是闩锁。锁存器至少有两个输入信号(SR 锁存器的设置和重置,切换锁存器的 J+K,D 锁存器的数据和启用)。

您描述的电路只是一个中继器或缓冲器。任何时候 f 发生变化(始终阻塞条件),fd 都会采用 f 的新值。无论分配类型如何(阻塞或 non-blocking),这都适用。

如果你想要一个电平敏感的锁存器(比如 D-Latch),你应该使用下面的:

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

只有当 en 为高电平时,此电路才会有 fd 跟随 f。否则,fd的值将保持不变。

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