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

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

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

設計のポイント

VHDL記述のポイント:others => ‘0’ を活用する

設計内容分類FPGA

実現したい仕様・課題

ベクタ信号の初期化やゼロクリアを “00000000” のようにビット数分の文字列で記述すると、ビット幅の変更時に文字列も修正が必要になり、桁数の数え間違いによるエラーも起きがちです。ビット幅に依存しない、安全で簡潔な一括代入の書き方を確立したいというのが課題です。

設計のポイント

ベクタ全ビットへの一括代入には集合体(アグリゲート)記法 others => を活用します。(others => ‘0’) はベクタの全ビットに’0’を代入する記述で、信号のビット幅がいくつであってもそのまま通用するため、幅変更に強く、桁数の数え間違いも起こりません。リセット時のゼロクリア、初期値の設定、全ビット’1’の生成(others => ‘1’)などで多用します。特定ビットだけ値を変えたい場合は、(0 => ‘1’, others => ‘0’) のように位置指定とothersを組み合わせられ、「LSBのみ1」といったパターンをビット幅非依存で表現できます。また、genericでビット幅をパラメータ化したモジュールでは、リテラル文字列による代入は幅が固定されてしまうため、others記法が事実上必須になります。二次元配列(メモリ型)の初期化でも (others => (others => ‘0’)) と入れ子で記述でき、テーブルやバッファの初期化を簡潔に書けます。定型的な値の代入をothersで統一しておくと、コードレビューでも「全ビット初期化されている」ことが一目で確認でき、初期化漏れの検出が容易になります。

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

data <= (others => ‘0’); — 全ビット0(幅非依存)
flag <= (0 => ‘1’, others => ‘0’); — LSBのみ1

type mem_t is array (0 to 255) of std_logic_vector(7 downto 0);
signal mem : mem_t := (others => (others => ‘0’)); — 2次元初期化

VHDL記述のポイント:others => ‘0’ を活用する | 組み込み機器・ハードウェア設計製作.com

補足情報

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

FPGA設計のポイント

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

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

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

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