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

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

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

設計のポイント

VHDL記述のポイント:integerにはrange指定を付ける

設計内容分類FPGA

実現したい仕様・課題

VHDLのinteger型は既定で32bit相当の範囲を持つため、カウンタやインデックスを無指定のintegerで合成すると、必要以上に広いビット幅の回路が生成されたり、実際の値域がコードから読み取れなかったりします。またシミュレーションでは範囲外の値の混入に気付けません。整数信号の値域を明示して、回路規模と検証性を両立したいというのが課題です。

設計のポイント

integer型の信号・変数には range指定を付け、取り得る値の範囲を明示します。signal idx : integer range 0 to 255; のように宣言すれば、合成ツールは必要なビット幅(この場合8bit)を正しく見積もることができ、無指定時の32bit相当の過大な回路を避けられます。さらに重要なのはシミュレーションでの検証効果で、範囲外の値を代入するとその場でエラーとして検出されるため、カウンタのオーバーフローやインデックスの範囲逸脱といった不具合を、症状が波及する前の発生箇所で捉えられます。range指定は「この信号は0〜255しか取らない」という設計意図の文書化でもあり、コードを読む側が値域を推測する必要がなくなります。配列のインデックスに使うintegerは、配列の範囲と一致するrangeを指定しておくと、範囲外アクセスの検出がより確実になります。ループ変数(for文のインデックス)は範囲がループ指定から自明なため宣言不要ですが、信号・変数として保持する整数はすべてrange付きにする、を規約化することを推奨します。なお、値域が2のべき乗できりの良いカウンタ等は、unsigned型で宣言して自然にラップアラウンドさせる設計との使い分けも検討します(integerのrange境界での折り返しは自動では起こらず、明示的な記述が必要です)。

【コード例】
— ○ 範囲を明示(8bit相当と見積もられ、範囲逸脱も検出される)
signal idx : integer range 0 to 255;

— △ 無指定(32bit相当で見積もられ、値域も不明)
signal idx_ng : integer;

process(clk)
begin
if rising_edge(clk) then
if idx = 255 then idx <= 0; — 折り返しは明示的に記述
else idx <= idx + 1;
end if;
end if;
end process;

VHDL記述のポイント:integerにはrange指定を付ける | 組み込み機器・ハードウェア設計製作.com

補足情報

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

FPGA設計のポイント

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

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

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

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