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

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

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

設計のポイント

VHDL記述のポイント:属性(’range・’length)で幅に依存しない記述

設計内容分類FPGA

実現したい仕様・課題

ループ範囲やビット幅をコード中に数値で直書きすると、信号の幅を変更した際に関連するすべての数値を探して修正する必要があり、修正漏れは範囲外アクセスや切り捨てなどの不具合につながります。信号の幅変更に自動で追従するコードにしたいというのが課題です。

設計のポイント

VHDLの属性(attribute)を使うと、信号や型から範囲・幅などの情報を取得でき、幅に依存しない記述が可能になります。代表的な属性は、’range(インデックス範囲そのもの)、’length(要素数・ビット数)、’high/’low(範囲の上限・下限)、’left/’right(範囲の左端・右端)です。たとえばループは for i in data’range loop と書けば、dataの幅が8bitでも32bitでもそのまま動作し、範囲の直書きに伴う修正漏れが構造的になくなります。to_unsigned(i, cnt’length) のように変換関数の幅指定にも’lengthを使えば、信号幅の変更が変換箇所へ自動で波及します。genericでパラメータ化したモジュールでは、ポート幅がgeneric依存になるため、内部処理は属性ベースで書くことが事実上必須です。MSBの参照も data(data’high) と書けば幅非依存になります。属性を活用したコードは「この処理は信号の幅によらず正しい」ことがコード自体から読み取れるため、レビューの観点でも有利です。数値の直書きは、プロトコル仕様などで本質的に固定の値に限定し、それらはconstantとして名前を付けて管理する、という組み合わせが保守性の高いコードの定石です。

【コード例】
signal data : std_logic_vector(31 downto 0);

— 幅に依存しないループ
process(data)
variable p : std_logic := ‘0’;
begin
for i in data’range loop
p := p xor data(i); — パリティ計算(幅非依存)
end loop;
parity <= p;
end process;

msb <= data(data’high); — MSB参照
u <= to_unsigned(i, cnt’length); — 幅指定に属性を使用

VHDL記述のポイント:属性(’range・’length)で幅に依存しない記述 | 組み込み機器・ハードウェア設計製作.com

補足情報

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

FPGA設計のポイント

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

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

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

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