
module shiftreg(
input clk,
input datai,
output datao
)
reg [0:4]regs//如果这里改成reg[0:4],那差喊你的datai和datao就要改,稿庆察两个差别只是左移和右移的问题,你的for循环意键茄思是将reg[高位]<=reg[低位],所以此时你就应该让regs[4]<=dataiassign datao=regs[0]
integer i
always @ (posedge clk) begin
regs[4] <= datai//此处修改了
for(i=1i<5i=i+1)
regs[i] <=regs[i-1]
end
assign datao = regs[0]//此处修改了
endmodule
改动后的rtl应该和上面一样了,如果你不改动的话,数据来源就不对了,相当于regs[0]有两处来源,输出也只是将最高位输出
always@(poseadgeclk
or
negeadge
rst_n)
begin
if(~rst_n)
counter
<=
8'h00
else
counter
<=
counter
+
8'h01
end
RTL级即寄存器传输级,也就是说,代码描述的是寄存器以及它们之间的组合电路(传输)。上面这个例子,counter是8位寄存器,而对如答counter进行赋值则是组合电路了,代表闹拍了数据的传输。RTL是verilog编程中最常用的液橡羡抽象级。
书上的原话:
For
RTL
design,
you
use
"register",
"Flip/flop",
"combination
logic",
"mux"
as
basic
building
element
to
setup
your
whole
chip.
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)