Проблема создания задержки в Verilog - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь использовать задержку в моем коде в Verilog. В файле, который я делаю, у меня есть блок всегда, внутри него оператор case, и несколько частей значений case должны содержать задержку. Я попробовал протестировать простую программу со светодиодами. Я написал задержку в одной строке, но она не работает !! Никаких задержек не происходит. Что здесь происходит??? Линия это: для (i = 0; i <= 100000000; i = i + 1) @ (заданные часы); А также, как я могу добавить задержку в случайном месте? </p>

Вот мой код, он прост для проверки задержки:

module testni (clk, keypad, led1, led2);
input [0:6] keypad;
input clk;
output reg led1=1;
output reg led2=1;
integer i;
always@(keypad) begin
led1=0;
for(i=0;i<=100000000;i=i+1) @(posedge clk);
led2=0;
end
endmodule

Я пытаюсь сделать это: сделать одно утверждение, затем подождать 2 с, затем сделать другое утверждение. Разве это не должно ждать 2 с, а затем выключить led2 ??? Но в моем случае они оба выключены все время.

1 Ответ

0 голосов
/ 13 января 2019

Большинство инструментов синтеза ПЛИС хотят, чтобы вы описывали оборудование как конечный автомат. Это означает, что каждый тактовый цикл, [@(posedge clk)], просматривает текущее состояние и другие входы, затем определяет следующее состояние и выходы. Как то так

module testni (
  input clk,
  input [0:6] keypad,
  output reg led1,
  output reg led2
);
reg [31:0] counter;
integer state;
parameter IDLE = 0, COUNTING = 1;


always@(posedge clk) begin
            case(state)
          IDLE: begin 
                   led1 <= 1; led2 <= 1; 
                   counter = 0 ;
                   if (keypad) STATE <= COUNTING;
                end
          COUNTING: begin
                   led1 <= 0;
                   counter <= counter + 1;
                   if (counter > 100000000) begin
                          led2 = 0;
                          STATE <= IDLE;
                        end
          default: STATE <= IDLE;
        endcase
endmodule

Обратите внимание, что в начале блока всегда есть только один @(posedge clk).

...