Verilog 벤치에서 시스템을 시뮬레이트하는 동안 문제가 있습니다. 나는주기와 높은 시간과 낮은 시간을 측정하고 자동 점검하기를 원하는 신호 (clk_out)를 가지고있다. 신호 clk_out은 1 초의주기를 가지며, 하이 및 로우 시간은 모두 500ms이다.modelsim의 timescale 정의
기간 1000000000.000000이며, 높은 시간 500000000.000000이며, 낮은 시간 500000000.000000
이다 ============= :
`timescale 1ms/1ps module tb; parameter PASSED = 1; parameter FAILED = 0; wire clk_out; reg reset_n; reg result; realtime time1; realtime time2; realtime time3; initial begin result = PASSED; reset_n = 1'b0; // stay in reset for 100ms reset_n = #100 1'b1; @(negedge clk_out); time1 = $realtime; @(posedge clk_out); time2 = $realtime; @(negedge clk_out); time3 = $realtime; $display("\n"); $display("period is %f, high time is %f, and low time is %f",time3-time1,time3-time2,time2-time1); $display("\n"); if (time3-time1 <= 999 || time3-time1 >= 1001) begin result = FAILED; end if (time2-time1 <= time3*0.998/2 || time2-time1 >= time3*1.002/2) begin result = FAILED; end if (time3-time2 <= time3*0.998/2 || time3-time2 >= time3*1.002/2) begin result = FAILED; end $display("\n"); $display("================================================="); if (result) begin $display("Test is PASSED"); end else begin $display("Test is FAILED"); end // create the 1Hz signal when not in reset my_module my_module_under_test ( .RESET_N (reset_n), .CLK_OUT (clk_out) );
ModelSim을 출력은 다음과 같다 ====================================
테스트 ===
실패한다 ============ 시뮬레이션 끝 ===============
파일 상단에 정의 된 시간계는 시뮬레이터에서 읽지 않은 것으로 보입니다. 나는이 예상 : 내가 잘못 뭐하는 거지
time3 - time1 = 1000.00000
time2 - time1 = 500.00000
time3 - time2 = 500.00000
?
감사
my_module에 대한 코드를 게시하면 clk_out이 어떻게 보이는지 알 수 있습니다. – toolic