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

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

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

設計のポイント

VHDL記述のポイント:配列型の定義と活用

設計内容分類FPGA

実現したい仕様・課題

バッファ、係数テーブル、複数チャネル分の信号など、同じ型のデータを多数扱う場面で、信号を個別に宣言すると記述が冗長になり、インデックスによる規則的なアクセスやループ処理も書けません。まとまったデータ群を型として定義し、簡潔に扱いたいというのが課題です。

設計のポイント

同種データの集まりは、type宣言によるユーザー定義配列型で表現します。type mem_t is array (0 to 255) of std_logic_vector(7 downto 0); のように「要素の型」と「インデックス範囲」を持つ配列型を定義し、信号をその型で宣言すれば、mem(addr)のようにインデックスでアクセスできます。この記述はFPGAのメモリ推論の基本形でもあり、クロック同期の書き込み・読み出しと組み合わせることでブロックRAMへマッピングされます。定数テーブル(フィルタ係数、ルックアップテーブル等)は、配列型のconstantとして初期値付きで定義すれば、ROMとして実装されます。また、複数チャネルの信号処理では「チャネル数分の信号の配列」を宣言し、for-generateと組み合わせることで、チャネル数をgenericで変更可能な拡張性の高い構造を実現できます。配列型・record型を組み合わせれば(recordの配列、配列を含むrecord)、複雑なデータ構造も型として整理でき、意味のあるまとまりで信号を扱えます。設計内で使う配列型はpackageに集約して定義しておくと、モジュール間で型の不一致が起こらず、インターフェースの一貫性を保てます。

【コード例】
— メモリ(ブロックRAM推論の基本形)
type mem_t is array (0 to 255) of std_logic_vector(7 downto 0);
signal mem : mem_t;

process(clk)
begin
if rising_edge(clk) then
if we = ‘1’ then mem(to_integer(waddr)) <= wdata; end if;
rdata <= mem(to_integer(raddr));
end if;
end process;

— 係数テーブル(ROM)
type coef_t is array (0 to 3) of signed(15 downto 0);
constant COEF : coef_t := (x”0012″, x”0034″, x”0034″, x”0012″);

VHDL記述のポイント:配列型の定義と活用 | 組み込み機器・ハードウェア設計製作.com

補足情報

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

FPGA設計のポイント

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

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

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

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