我在读别人的verilog代码。他按以下方式编码锁存器。
input f;
reg fd;
always @(f)
fd <= f;因为它是一个锁存器,所以我想知道它是否对级别敏感?也就是说,当f为1时,fd =f,当f=0时,fd将保持其先前的值。或者,当f=0和f=1时,这个锁存级别是否都是敏感的。如果是这样的话,如何使它对+v级别敏感?
如果我将非阻塞语句(<=)改为阻塞(=),会发生什么?
发布于 2017-01-27 16:06:12
不是门闩。锁存器至少有两个输入信号(或者为SR锁存设置和重置,J+K用于切换锁存,数据和启用D锁存)。
您所描述的电路只是一个中继器或缓冲器。每当f更改(总是块条件)时,fd就会获得f的新值。无论赋值类型(阻塞还是非阻塞),这都适用.
如果您想要一个级别敏感锁存器(如D),则应使用以下方法:
always @(*)
if (en) fd = f;只有当fd很高时,这个电路才能使en跟随f。否则,fd的值将保持不变。
(旁注锁存通常对FPGA设计不利。如果您使用的是FPGA,则应该考虑使用寄存器)。
https://stackoverflow.com/questions/41897868
复制相似问题