組み込み機器・ハードウェアの設計開発から装置製作まで社内一貫対応!

組み込み機器・ハードウェア設計製作.com
組み込み機器・ハードウェア設計製作.com

produced by株式会社アイディアイ

設計のポイント

verilog記述のポイント:ブロッキング・ノンブロッキング

設計内容分類verilog記述
解決できる課題期待通りの動作

実現したい仕様・課題

always文内の代入で「=(ブロッキング代入)」と「<=(ノンブロッキング代入)」を混同すると、シミュレーション結果と合成後の回路が意図と異なり、レースコンディションや想定外の動作を引き起こします。正しい使い分けを理解し、意図どおりの回路を確実に生成したいというのが課題です。

設計のポイント

“ブロッキング代入(=)はalways文内で記述順に逐次実行され、ノンブロッキング代入(<=)はブロック内の右辺がいったん全て評価されてから一斉に左辺へ反映されます。たとえばクロック同期のalways内で a <= input; b <= a; と書くと、a には input、b には「更新前のa(前回値)」が入り、レジスタ2段(シフトレジスタ的動作)になります。一方 a = input; b = a; とブロッキングで書くと、a も b も同じ input になり、意図とずれます。基本ルールとして、順序回路(クロック同期、always @(posedge clk))ではノンブロッキング代入(<=)を、組み合わせ回路(always @(*))ではブロッキング代入(=)を用います。これを混在させると、レースコンディション、シミュレーションと合成結果の不一致、意図しないラッチなどの原因になります。1つのalwaysブロック内で同じ信号に両方の代入種別を使わないこと、順序回路ブロックと組み合わせ回路ブロックを分けて記述することが、安全で再現性の高い設計の要点です。

【コード例】
// ノンブロッキング(順序回路) … b は前回のaの値(2段FF)
always @(posedge clk) begin
a <= input;
b <= a;
end

// ブロッキングを順序回路に使うと誤り … a も b も input になる
always @(posedge clk) begin
a = input;
b = a;
end”

verilog記述のポイント:ブロッキング・ノンブロッキング | 組み込み機器・ハードウェア設計製作.com

補足情報

当事例のような、FPGA設計に関するポイントをまとめた冊子の無料DLが可能です。
是非以下よりご確認ください。

FPGA設計のポイント

>>ダウンロードはこちら!

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

組み込み機器・ハードウェア 設計製作.comを運営する株式会社アイディアイは、組み込み機器・ハードウェアの設計開発代行サービスを提供しています。
試験装置や制御機器、組み込みボードなど、設計・開発委託先をお探しの皆様、お気軽に当社に御相談ください。

技術資料のダウンロードはこちらから 技術資料ダウンロ―ド メールフォームでのお問い合わせはこちらから ご相談お問合せ