2

Verilog で合成可能なコードを記述しようとしていますが、数秒の時間遅延を含める必要があります。#delay を使用してシミュレーションを実行しましたが、これはシンセサイザーでは受け入れられません。

条件によってではなく、数秒の時間遅延後に状態が変化する FSM を合成する過程で、上記の時間遅延方法が必要です。FSM は、state_1 から state_2 に 4 秒後に、state_2 から state_3 に 2 秒後に、というように状態を切り替える必要があります。

4

2 に答える 2

7

クロック周波数が x Hz であることがわかっていて、y 秒待ちたい場合は、単純にカウンターを使用して x*y の数値に達するまで待ちます。

たとえば、クロックが 1kHz で遅延が 3 秒の場合、このコードは遅延時間の後に do_something をトリガーします。

`define CLOCK_FREQ 1000
`define TIME_DELAY 3

reg [31:0] count=0;

assign do_something = (count==`CLOCK_FREQ*`TIME_DELAY);

always @(posedge clk)
begin
   count <= count + 1'b1;
end
于 2013-06-28T10:16:05.530 に答える
2

時間遅延後に状態を切り替えるために、このコードが役立つことを願っています。

current_state=state_1;
for(i=0;i<=timedelay*freq;i=i+1)
@posedge;
current_state=state_2;

于 2013-07-01T04:52:01.357 に答える