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

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

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

設計のポイント

verilog記述のポイント:`defineとparameterの使い分け

設計内容分類FPGA

実現したい仕様・課題

定数や設定値の定義に`define(マクロ)とparameterのどちらを使うべきか曖昧なまま混用すると、名前空間の衝突、ファイルの読み込み順による値の変化、インスタンスごとの値変更ができないなど、規模拡大時に管理しづらいコードになります。定数管理の方針を明確にしたいというのが課題です。

設計のポイント

モジュールの構成や動作に関わる定数(バス幅、深さ、しきい値、状態コードなど)はparameter/localparamで定義し、`defineの使用はプロジェクト全体の条件コンパイル制御など限定的な用途に留める、という方針を推奨します。parameterはモジュールの名前空間に属し、インスタンス化時に上位から値を上書きできるため、同じモジュールを設定違いで複数使う設計に対応できます。合成・シミュレーションのツール側からトップレベルparameterを変更して構成違いのビルドを作ることも容易です。一方、`defineはテキスト置換のグローバルマクロであり、ファイルの読み込み順序に依存し、同名マクロの再定義による衝突リスクがあります。インスタンス単位での値の使い分けもできません。`defineが適するのは、`ifdefと組み合わせた機能の有効/無効切り替え(デバッグ回路の挿入、製品バリエーションの選択、シミュレーション専用コードの分離)といった、コンパイル単位での構成制御です。この使い分けにより、定数の影響範囲が明確になり、再利用と構成管理の両立が図れます。マクロ名には接頭辞(プロジェクト名等)を付けて衝突を避けることも実務上有効です。

【コード例】
// 回路の定数はparameterで(インスタンスごとに変更可)
module fifo #(parameter WIDTH = 8, DEPTH = 256) (…);
fifo #(.WIDTH(16), .DEPTH(512)) u_fifo (…);

// 条件コンパイルは`defineで
`define ENABLE_DEBUG
`ifdef ENABLE_DEBUG
ila u_ila (.clk(clk), .probe(state)); // デバッグ回路を挿入
`endif

verilog記述のポイント:`defineとparameterの使い分け | 組み込み機器・ハードウェア設計製作.com

補足情報

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

FPGA設計のポイント

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

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

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

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