AR# 16616

|

10.1 ステート ダイアグラム エディタ - ブロッキング/非ブロッキング文が Verilog ステート マシン コードで最適に使用されない

説明

キーワード : Statecad, Verilog, Blocking, Non-blocking, ブロッキング, 非ブロッキング

StateCAD で生成された Verilog ステート マシン コードが最適でない場合があります。

次は、StateCAD からの最適でないコード出力の一例です。

always @(posedge CLK)
begin
cnt1 = next_cnt1;
end

always @(posedge CLK)
begin
cnt0 = next_cnt0;
end

上記のコードは、各クロック エッジに次を割り当てます。
cnt1 = next_cnt1
cnt0 = next_cnt0
非ブロッキング文を使用した場合、必要なのは次のコードのみです。

always @(posedge CLK)
begin
cnt1 <= next_cnt1;
cnt0 <= next_cnt0;
end

ソリューション

このコードは最適ではありませんが、機能的には正しく、実際のデバイス上でパフォーマンスの問題を引き起こすことはありません。StateCAD のコード ジェネレータのこの箇所を修正するリスクを考慮し、この機能はこのままの状態に残すことになりました。

ビヘイビア シミュレーションで、レース コンディションが発生する可能性があることに注意してください。1 つのプロセスの代わりに複数のプロセスが使用されている場合、シミュレータでどのプロセスを最初に実行するかを決定する必要があります。値がほかのプロセスで割り当てられる値に依存している場合、プロセスの処理順により、異なるシミュレーション結果が得られる場合があります。


AR# 16616
日付 12/15/2012
ステータス アーカイブ
種類 一般
People Also Viewed