Verilog 正电平敏感锁存器建模

Verilog 正电平敏感锁存器建模,verilog,hardware,nonblocking,Verilog,Hardware,Nonblocking,我正在读某人的verilog代码。他用下面的方法编码 input f; reg fd; always @(f) fd <= f; 输入f; reg-fd; 始终@(f) fd它不是闩锁。锁存器至少有两个输入信号(SR锁存器的设置和复位,拨动锁存器的J+K,D锁存器的数据和启用) 您所描述的电路只是一个中继器或缓冲器。任何时候f改变(总是阻塞条件),fd取f的新值。这适用于任何赋值类型(阻塞或非阻塞) 如果需要级别敏感闩锁(如D型闩锁),应使用以下选项: always @(*)

我正在读某人的verilog代码。他用下面的方法编码

input f;
reg fd;

always @(f)
    fd <= f;
输入f;
reg-fd;
始终@(f)

fd它不是闩锁。锁存器至少有两个输入信号(SR锁存器的设置和复位,拨动锁存器的J+K,D锁存器的数据和启用)

您所描述的电路只是一个中继器或缓冲器。任何时候
f
改变(总是阻塞条件),
fd
f
的新值。这适用于任何赋值类型(阻塞或非阻塞)

如果需要级别敏感闩锁(如D型闩锁),应使用以下选项:

always @(*)
    if (en) fd = f;
只有当
en
为高电平时,此电路才会有
fd
跟随
f
。否则,
fd
的值将保持不变


(侧注-锁存器通常对FPGA设计来说是有害的。如果你使用的是FPGA,你应该考虑使用登记器)。< /P> < P>这不是闩锁。锁存器至少有两个输入信号(SR锁存器的设置和复位,拨动锁存器的J+K,D锁存器的数据和启用)

您所描述的电路只是一个中继器或缓冲器。任何时候
f
改变(总是阻塞条件),
fd
f
的新值。这适用于任何赋值类型(阻塞或非阻塞)

如果需要级别敏感闩锁(如D型闩锁),应使用以下选项:

always @(*)
    if (en) fd = f;
只有当
en
为高电平时,此电路才会有
fd
跟随
f
。否则,
fd
的值将保持不变


(侧注-锁存器通常对FPGA设计来说是有害的。如果你使用FPGA,你应该考虑使用登记器)。是否有理由缓冲f?在我看到的代码中,f被缓冲三次,就像f被分配给fd一样,fd被分配给fdd,fdd被分配给fddd一样。其次,因为有一个非阻塞语句,难道不会有一个delta延迟吗?如果是针对ASIC的,您有时会使用缓冲区来增加具有高扇出或电容负载的信号驱动。对于FPGA设计,您也可以使用缓冲区,尽管通常由合成工具处理它们。至于NBA,只有一种说法,不应该有任何不同。分配类型指的是合成或模拟工具如何处理它们,而不是合成电路。谢谢!是否有理由缓冲f?在我看到的代码中,f被缓冲三次,就像f被分配给fd一样,fd被分配给fdd,fdd被分配给fddd一样。其次,因为有一个非阻塞语句,难道不会有一个delta延迟吗?如果是针对ASIC的,您有时会使用缓冲区来增加具有高扇出或电容负载的信号驱动。对于FPGA设计,您也可以使用缓冲区,尽管通常由合成工具处理它们。至于NBA,只有一种说法,不应该有任何不同。指定类型指的是合成或模拟工具如何处理它们,而不是合成电路。