我是verilog的新手,如果任何人都可以帮助我翻译这个并解释其中的差异,我会非常感激地将行为级代码转换为注册转移级别。我的代码似乎正在工作,但我似乎无法找到任何帮助,以便在寄存器传输级别写入它。
module combinational_mult(product,multiplier,multiplicand);
input [31:0] multiplier,
input [63:0] multiplicand;
output product;
reg [63:0] product;
reg c;
reg [63:0] m;
integer i;
always @( multiplier or multiplicand )
begin
//initialize
product[63:32] = 32'd0;
product[31:0] = multiplier;
m = multiplicand;
c = 1'd0;
//add,shift algorithm for unsigned multiplication.
//following the notes.
for(i=0; i<32; i=i+1)
begin
if(product[0]) {c,product[63:32]} = product[31:16] + m ;
product[63:0] = {c,product[63:1]};
c = 0;
end
endmodule
module testbench;
reg [31:0] multiplier;
reg [63:0] multiplicand;
initial begin
$dumpfile("dump.vcd");
$dumpvars;
#10ns;
multiplier = 16'b1101_1001_1101_1001;
multiplicand = 16'b0110_1010_1101_1000;
#50ns;
multiplier = 16'b0;
multiplicand = 16'b0;
$finish;
end
combinational_mult dut ( product, multiplier, multiplicand);
endmodule
答案 0 :(得分:0)
由于您的设计纯粹是组合,因此实际上没有RTL(寄存器传输级别)描述非常有意义或有意义。
从Verilog描述RTL级别的数字时序逻辑;您需要了解系统中的寄存器(数据保持)元素以及影响每个寄存器所具有的值的因素。在你的情况下,因为没有寄存器,你实际上没有任何RTL,只是一个乘数,它是RTL中的有效单位。您可以更深入地描述您的多路复用器,了解系统中各种加法器的连接方式,但这比Id称为RTL要低一些。
快速谷歌搜索会产生关于RTL的教科书章节:http://cseweb.ucsd.edu/classes/sp13/cse140-a/lectures/rtl.pdf