추가 및 시프트를 사용하여 순차 멀티 플라이어 용 테스트 벤치를 작성하려고합니다. 그러나 입력 및 출력 파형이 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
테스트 벤치에 의해 생성 된 파형 : 다음은 내 코드입니다
내가 20 나노초 (ns)에 의해 입력을 지연 시도했지만 그건 그냥 출력에 추가 나노초 (ns)를 추가합니다. 나는 문제가 내 시계에서 오는 것이라고 믿지만 다른 곳에 배치하는 데 성공하지 못했습니다. 나는 내가 그것을 얻기에 정말로 가깝다는 것을 압니다. 그러나 나는 잘못된 것을 알아낼 수 없습니다.
미리 감사드립니다.
"초기"블록 내에서 매우 * 고급 * Verilog 기능인'절차 할당 '을 사용했습니다. 특히 포트를 레지스터에 할당했습니다. 정말로'assign a = i'와'assign b = j'을 사용하고 싶습니까? – Serge
'a','b' 및'result'는 어디에 정의되어 있습니까? 마찬가지로 그들은 모두 하나의 비트 선으로 추측됩니다. 어쩌면 당신은 그것들을'x','y','product'에 연결해야할까요? – Greg
조언과 제안에 감사드립니다. 테스트 벤치에 무엇이 잘못되었는지 알아 냈습니다. 멀티 모듈 내부에 서브 모듈이없는 것 같습니다. – CowEatsGrass