Iverilog帮助组合移位倍增器

时间:2014-11-18 11:22:12

标签: c verilog wave object-test-bench

我的代码编译但不转储gtkwave的任何dat文件。我试图实现组合移位乘数对象。我不认为我的测试仪是正确的。

module combinational_mult(product,multiplier,multiplicand);
   input [31:0] multiplier;
   input[63:0] multiplicand;
   output reg [63:0] product;
   reg           c;
   reg [31:0]    m;  
   integer       i;

   always @( multiplier or multiplicand )
     begin
//initialize
        product[63:32] = 16'b0000_0000_0000_0000;
        product[32:16] = multiplier;
        m = multiplicand;
        c = 1'b0;


//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[63:32] + m ;

         product[63:0] = {c,product[63:1]};
          c = 0;
      end              


  end    
endmodule

module tester(output reg [31:0] multiplier, output reg [63:0] multiplicand, output reg [63:0] product, output reg c, output reg i);



initial begin
i = 0;

$dumpfile("USAMv1.dat");
$dumpvars;

#10 multiplier = 16'b1101_1001_1101_1001;
multiplicand = 16'b0110_1010_1101_1000;
#50 $finish;

end
endmodule

module testbench;
 wire[31:0] multiplier;
wire[63:0] multiplicand;
wire[63:0] product;
wire c, i;

tester sim( multiplier, multiplicand, product, c, i);
combinational_mult dut ( product, multiplier, multiplicand);
endmodule 

1 个答案:

答案 0 :(得分:2)

我在EDA Playground上创建了一个版本,它删除了测试人员并在测试平台中运行了一个测试程序。

我已将dump.dat重命名为dump.vcd以与EDA Playground一起使用。这应该在运行时启动波形窗口。

除了将测试程序移动到测试平台以及向测试向量添加第二个数据点以便可以观察它们之外,代码没有真正的更改。否则VCD会在他们改变的地方结束。

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