无法在 verilog 中创建时间延迟

Trouble creating time delay in verilog

我正在尝试在我的 Verilog 代码中使用时间延迟。在我制作的文件中,我有一个 always 块,里面有一个 case 语句,case 值的多个部分应该包含延迟。 我尝试用 LED 测试一个简单的程序。我在一行中写了延迟,但它似乎不起作用!!没有延迟发生。这里发生了什么??? 该行是: 对于(i=0;i<=100000000;i=i+1)@(姿态时钟); 而且,如何在随机位置添加延迟?

这是我的代码,这是一个简单的代码,只是为了测试延迟:

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

我正在尝试这样做:做一个语句,然后等待 2s 然后再做另一个语句。这不应该等待 2 秒然后关闭 led2 吗???但就我而言,它们一直都处于关闭状态。

大多数 FPGA 综合工具都希望您将硬件描述为状态机。这意味着每个时钟周期,[@(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

注意在 always 块的开头只有一个 @(posedge clk)