を使用してブロック常に自己トリガ内部イベントiflag、スケジュールされたdt秒後のいずれか早い方。Iのいずれか</p> <p>a)は外部イベントEFLAG、または、b)はその状態に応じて、によってトリガされるブロック(行動は、合成されるべきではない)を実装する必要が遅延
遅延(#)演算子を使用した私の試行では、ブロック動作が発生しました。長いdtは次のeflagをブロックしました。可能であれば、私は長いdtのためのオーバーヘッドのカウントとしてdtmaxを避けるでしょう。
ワーキングと意図したが、失敗コード:
`timescale 1ns/100fs
`define tick 1.0e-9
parameter real dtmax = 1;
initial iflag=1'b0;
initial toggle=1'b0;
always @(eflag, iflag) begin
// time step control
dt = ...;
iticks = dt/`tick;
toggle = !toggle;
end
//------------------------------------------------------
/*
a) time step counter - working
always #1 begin
iticks = iticks - 1;
if (iticks < 1) begin
iflag = !iflag;
iticks=dtmax/`tick;
end
end
*/
// b) intended
always @(toggle) begin
#(iticks) iflag <= !iflag; // failing, not changing iflag
// #(iticks) iflag = !iflag; // failing, blocking simulation
end
あなたは、私はあなたのコードをchanagedしており、この新しいコードは私のために正常に動作しますedaplayground link
Thxを
答えていただきありがとうございました。実際には歩行者の減量スタイルを取り除きたいと思っていました。質問の編集コードをご覧ください。 – bardo
iflag <=#(iticks)!iflagに変更するとどうなりますか? – Laleh
あなたの質問をより明確にして全体のコードを投稿して、私がそれをデバッグできるようにすることができます。 – Laleh