正电平敏感锁存器建模
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,则应考虑改用寄存器)。
我正在阅读某人的 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,则应考虑改用寄存器)。