用Verilog实现流水移位寄存器,你需要了解这4种描述方法(一)( 二 )

data_in在clk上升沿,进入第一个REG的D端口,输出为q_ff,进入第二个REG的D端口,输出为q_2ff,进入进入第三个REG的D端口,输出为q_3ff。q_ff、q_2ff、q_3ff数据呈现出流水线特点。

下面我开始用4种方式对上面的电路进行描述,并且比较使用“非阻塞赋值”和“阻塞赋值”对电路的影响。

用Verilog实现流水移位寄存器,你需要了解这4种描述方法(一)

第一种描述方式,用“阻塞赋值”描述

使用“阻塞赋值”进行描述。

reg q_ff,q_2ff,q_3ff;

always@(posedge clk) begin

q_ff = data_in;

q_2ff = q_ff;

q_3ff = q_2ff;

end

以上的描述的结果是错误的。因为是“阻塞赋值”,所以data_in将覆盖掉中间REG的输出,直接在CLK的上升沿,将data_in赋给了第三个REG的输出q_3ff上面。具体的电路如下图所示:

推荐阅读