verilog 电平触发问题

来源:百度知道 编辑:UC知道 时间:2024/06/20 17:28:14
output reg[7:0]data_out;
reg[7:0] tmp[2:0];
always@(data_in)
begin
tmp[0]<=tmp[1];
tmp[1]<=tmp[2];
tmp[2]<=data_in;
end

我data_in输入只一个数45,理论上出来的结果
tmp[0]=0;
tmp[1]=0;
tmp[2]=45;
但是实际出来的结果是tmp全部都为45.为什么呢?
我试了其他输入情况,结果还是一样,没有移位寄存.

always@(data_in)
begin
tmp[0]<=tmp[1];
tmp[1]<=tmp[2];
tmp[2]<=data_in;
end
这个语句综合出来的电路应该是组合逻辑,由于没有时钟驱动,其本意应该是:每次data_in 变化,都执行以下语句,搂住可以看看综合后的电路,应该是data_in在DFF的q端,其他在D端,所以一个会驱动所有。
如果是有始终驱动,就以上语句就会有一个pipeline的结构去赋值了。
有问题在联系