2017-10-16 3 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

내가 20 나노초 (ns)에 의해 입력을 지연 시도했지만 그건 그냥 출력에 추가 나노초 (ns)를 추가합니다. 나는 문제가 내 시계에서 오는 것이라고 믿지만 다른 곳에 배치하는 데 성공하지 못했습니다. 나는 내가 그것을 얻기에 정말로 가깝다는 것을 압니다. 그러나 나는 잘못된 것을 알아낼 수 없습니다.

미리 감사드립니다.

+0

"초기"블록 내에서 매우 * 고급 * Verilog 기능인'절차 할당 '을 사용했습니다. 특히 포트를 레지스터에 할당했습니다. 정말로'assign a = i'와'assign b = j'을 사용하고 싶습니까? – Serge

+0

'a','b' 및'result'는 어디에 정의되어 있습니까? 마찬가지로 그들은 모두 하나의 비트 선으로 추측됩니다. 어쩌면 당신은 그것들을'x','y','product'에 연결해야할까요? – Greg

+0

조언과 제안에 감사드립니다. 테스트 벤치에 무엇이 잘못되었는지 알아 냈습니다. 멀티 모듈 내부에 서브 모듈이없는 것 같습니다. – CowEatsGrass

답변

0

지연은 하위 모듈 multi에서 오는 것 같습니다. 우리가 도울 수 있도록 그것을 나누십시오.

+1

이것은 대답이 아니며 단지 의견입니다. – Serge

+0

@ Serge 50 개의 평판이 있어야 의견을 말할 수 있습니다. 38 점이 있습니다. – Mortada