У меня проблема при моделировании моей системы с помощью скамьи verilog. У меня есть сигнал (clk_out), из которого я хочу измерять и автоматически проверять период и как высокое, так и низкое время. Сигнал clk_out имеет период в 1 секунду, а максимальное время и время - 500 мс.определение сроков в modelsim
`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 выглядит следующим образом:
период 1000000000,000000, высокое время +500000000,000000, и низкое время 500000000,000000
============= ====================================
тест провален
=== ============ КОНЕЦ МОДЕЛИРОВАНИЯ ===============
Похоже, что временная шкала, определяемая в верхней части файла, не считывается симулятором. Я ожидал иметь:
time3 - time1 = 1000.00000
time2 - time1 = 500.00000
time3 - time2 = 500.00000
Что я делаю неправильно?
Благодаря
Отправьте свой код для my_module, чтобы мы могли видеть, как выглядит clk_out. – toolic