verilog 新手的一个疑问----关于一个简单程序的RTL图

2025-04-04 02:07:07
推荐回答(1个)
回答1:

`timescale 1ns / 1ps

module shiftreg(
input clk,
input datai,
output datao
);

reg [0:4]regs;//如果这里改成reg[0:4],那你的datai和datao就要改,两个差别只是左移和右移的问题,你的for循环意思是将reg[高位]<=reg[低位],所以此时你就应该让regs[4]<=datai;assign datao=regs[0];

integer i;

always @ (posedge clk) begin
regs[4] <= datai;//此处修改了
for(i=1;i<5;i=i+1)
regs[i] <=regs[i-1];
end

assign datao = regs[0];//此处修改了

endmodule

改动后的rtl应该和上面一样了,如果你不改动的话,数据来源就不对了,相当于regs[0]有两处来源,输出也只是将最高位输出