2014-12-18 6 views
0

Я хочу захватить время между событием. Затем я должен использовать это значение для другого события. моя проблема в том, что единица измерения time_2 в моей программе. Как я могу использовать это значение в цикле if. Я думаю, что это значение не является фактическим значением.Расчет времени между событием в verilog

`timescale 1ns/1ps 

module time_control(input clk ); 
    reg [7:0] memory [0:15] ; 
    integer k=0; 

    realtime time_1 =0; 
    realtime time_2 =0; 

    always @ (posedge clk) 
    begin 

    time_2=time_1 ; 
    time_1 = $realtime ; 

    if(time_2 < 500) //Comparison Not working 
    begin 
     memory[k] <=k; 
     k   <=k+1 ; 
    end  

    end 
endmodule 

В части программирования в старте не работает. Мой вопрос состоял в том, что, используя значение tine_2, я могу заполнить память. всякий раз, когда значение time_2 больше 500 нс, оно не должно размещать значение в памяти. я не хочу хранить значение времени.

Это только для моделирования.

+0

Вы ищете что-то синтезируемого? Временные переменные предназначены только для моделирования. Чтобы быть синтезируемым, вам нужно подсчитывать часы. – Greg

+0

«Я хочу захватить время между событием». Здесь событие означает край часов? Ваш комментарий спрашивает «как я могу использовать значение времени для события». Я не знаю, что вы подразумеваете под «событием» во втором контексте. Пожалуйста, обновите ответ, описывающий это. – Morgan

ответ

1

Если ваш массив хранит данные в реальном времени или разницу во времени в зависимости от реального времени, он должен быть соответствующего типа.

reg [7:0] memory [0:15] ; 

Должно быть

realtime memory [0:15]; 

Для сравнения времени, используйте время:

if(time_2 < 500) begin 

становится:

if(time_2 < 500ns) begin 

NB: первая версия работала хорошо для меня поскольку единицы времени по умолчанию часто являются «ns» или указанный как «ns» с использованием `timescale.

Ваш пример станет:

module time_control(input clk ); 
    realtime memory [0:15] ; 
    integer k=0; 

    realtime time_1 =0; 
    realtime time_2 =0; 

    always @(posedge clk) begin 
    time_2 = time_1 ; 
    time_1 = $realtime ; 

    if(time_2 < 500ns) begin 
     memory[k] <=k; 
     k   <=k+1 ; 
    end 
    end 
endmodule 
Смежные вопросы