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

verilog 新手的一个疑问----关于一个简单程序的RTL图,第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]<=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@(poseadge

clk

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.


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8188227.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-14
下一篇2023-04-14

发表评论

登录后才能评论

评论列表(0条)

    保存