Verilog顺序逻辑测试台

时间:2017-10-16 05:04:29

标签: verilog

我正在尝试使用add和shift为顺序乘法器编写测试平台。 但是,由于输入和输出波形未对准20ns,我遇到了问题。我的输入在t = 0ns时接收信号但我的输出在t = 20ns之前没有信号。 (从t = 0到t = 20的输出都是XX)。在视觉上忽略20ns延迟,我的结果是正确的。但是,由于输入输出波形未对准20ns,因此tcl控制台告诉我它不正确。以下是我的代码:

module multiplier_testbench;
reg[3:0]x,y;
wire [7:0] product;
integer i,j; //loop counter
integer k = 0;
reg clock, reset, enable;  

multi mul(clock, reset, enable, a,b, result); //Instantiate multiplier module

initial
    begin

       clock = 0;
       reset = 0;
       enable = 0;

       for(i = 0; i < 16; i = i + 1) 
       begin
           for(j = 0; j < 16; j = j + 1) 
           begin
               clock = 1;
               enable = 1;

               assign a = i;
               assign b = j;

              #5;
               clock = 0;
               enable = 0;
               #5;

               if(result !== {a} * {b})//comparing result using * operator in verilog
               begin
                $display("Wrong");
                    k = k + 1;
                end
           end
       end 
       if (k == 0) $display("success");
       else $display("%d Error(s)", k);
   end 
   endmodule

以下是测试台生成的波形: enter image description here

我试图将输入延迟20ns,但这只会为输出增加20ns。我相信这个问题来自我的时钟,但我没有把它放在别处。我知道我很接近它,但我似乎无法弄清楚出了什么问题。

提前致谢。

1 个答案:

答案 0 :(得分:0)

延迟可能来自子模块multi。分享它,以便我们可以提供帮助。