无法在 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)
。
我正在尝试在我的 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)
。