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

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

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

設計のポイント

verilog記述のポイント:組み合わせ回路のalwaysはalways @(*)で記述する

設計内容分類FPGA

実現したい仕様・課題

組み合わせ回路をalways文で記述する際、センシティビティリスト(感度リスト)に参照信号を手動で列挙すると、信号の追加・変更時に列挙漏れが起こりがちです。列挙漏れがあるとシミュレーションと合成後の実回路で動作が食い違い、原因究明が難しい不具合になります。記述ミスの入り込む余地をなくしたいというのが課題です。

設計のポイント

組み合わせ回路のalways文は、センシティビティリストを個別に列挙せず、always @(*)(または always @*)で記述します。@(*)はブロック内で参照されるすべての信号を自動的に感度リストへ含める記法で、信号の列挙漏れという人為ミスを構造的に排除できます。感度リストに漏れがあると、シミュレーションでは漏れた信号の変化にブロックが反応せず、一方で合成ツールは感度リストを無視して組み合わせ回路を生成するため、「シミュレーションは通るのに実機で動かない」あるいはその逆という、発見しにくい不整合が生じます。@(*)を使えばこの食い違いは起こりません。あわせて、組み合わせ回路のalways内ではブロッキング代入(=)を使うこと、すべての分岐で出力を確定させてラッチを防ぐことを徹底します。クロック同期の順序回路(always @(posedge clk))と組み合わせ回路(always @(*))を明確に分けて記述するスタイルが、安全で読みやすい設計につながります(SystemVerilogでは always_comb を使うとさらに意図が明確になります)。

【コード例】
// ○ 参照信号が自動で感度リストに含まれる
always @(*) begin
y = (en) ? (a & b) : 8’d0;
end

// △ 手動列挙は漏れの危険(bを追加したのにリスト更新を忘れる等)
always @(a or en) begin
y = (en) ? (a & b) : 8’d0; // bの変化に反応しない
end

verilog記述のポイント:組み合わせ回路のalwaysはalways @(*)で記述する | 組み込み機器・ハードウェア設計製作.com

補足情報

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

FPGA設計のポイント

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

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

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

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