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

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

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

設計のポイント

VHDL記述のポイント:aliasで信号やスライスに別名を付ける

設計内容分類FPGA
解決できる課題CPU負荷低減

実現したい仕様・課題

1本のレジスタやバスの中に複数のフィールド(フラグ、モード、データ部など)が詰め込まれている場合、参照のたびに reg(11 downto 8) のようなスライス指定を書くと、ビット位置の意味がコードから読めず、フィールド位置の変更時には全参照箇所の修正が必要になります。フィールドに名前でアクセスしたいというのが課題です。

設計のポイント

既存の信号やそのスライスに別名を付けるalias宣言を使うと、ビットフィールドへ意味のある名前でアクセスできます。alias mode : std_logic_vector(1 downto 0) is ctrl_reg(9 downto 8); のように宣言すれば、以後は mode と書くだけでctrl_regの該当ビットを読み書きでき、実体は同じ信号なので追加のレジスタや配線は生成されません。レジスタマップ実装(制御レジスタの各ビットに意味がある場合)、通信フレームのフィールド分解、既存コードの長い階層名・信号名の短縮などが典型的な使いどころです。フィールドのビット位置を変更する場合もalias宣言の1か所を直すだけで全参照箇所へ波及するため、仕様変更に強くなります。record型との使い分けは、「新規設計で信号群を構造化するならrecord、既存の1本のベクタ上のフィールドに名前を付けるならalias」と整理できます。レジスタマップのように「ハードウェア上は1本のベクタである」ことに意味がある場合は、ベクタ+aliasの組み合わせが実体と一致した素直な表現になります。aliasはアーキテクチャ宣言部に置き、フィールド定義(ビット位置)はコメントではなくalias宣言そのものとしてコードに残すことで、ドキュメントとコードの乖離を防げます。

【コード例】
signal ctrl_reg : std_logic_vector(15 downto 0);

— フィールドに名前を付ける(実体はctrl_regの一部)
alias enable : std_logic is ctrl_reg(0);
alias irq_en : std_logic is ctrl_reg(1);
alias mode : std_logic_vector(1 downto 0) is ctrl_reg(9 downto 8);

— 名前でアクセスできる
if enable = ‘1’ and mode = “01” then …

VHDL記述のポイント:aliasで信号やスライスに別名を付ける | 組み込み機器・ハードウェア設計製作.com

補足情報

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

FPGA設計のポイント

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

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

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

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