2017-10-16 84 views
-1

我正在嘗試使用添加和移位來爲連續乘法器寫一個測試臺。 但是,由於輸入和輸出波形錯位20ns,我遇到了問題。我的輸入端在t = 0ns時接收信號,但在t = 20ns之前,我的輸出端沒有信號。 (從t = 0到t = 20的輸出都是XX)。視覺忽略20ns的延遲,我的結果是正確的。但是,由於輸入輸出波形未對準20ns,tcl控制檯告訴我這是不正確的。下面是我的代碼:Verilog時序邏輯測試臺

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到輸出。我相信問題來自我的時鐘,但我沒有成功將它放在其他地方。我知道我真的很接近,但我似乎無法弄清楚什麼是錯的。

在此先感謝。

+0

你在'initial'塊裏面使用了一個非常先進的* verilog特性'procedural assignments',特別是把端口分配給寄存器。你確定你真的想在那裏使用'assign a = i'和'assign b = j'嗎? – Serge

+0

定義了「a」,「b」和「結果」在哪裏?因爲他們都推斷一位電線。也許你應該打算將它們連接到'x','y'和'product'? – Greg

+0

感謝您的意見和建議。我已經知道我的測試臺有什麼問題。原來我缺少多模塊內的子模塊。 – CowEatsGrass

回答

0

延遲可能來自子模塊multi。分享它,以便我們提供幫助。

+1

這不是一個答案,只是一個評論。 – Serge

+0

@Serge我必須有50個評論的評論,我有38 – Mortada