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

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

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

設計のポイント

VHDL記述のポイント:列挙型でステートマシンの状態を定義する

設計内容分類FPGA

実現したい仕様・課題

ステートマシンの状態を “00”・”01″ のようなビット列や数値で直接管理すると、コード上で状態の意味が読み取れず、状態の追加時にはコード割り当ての振り直しが必要になり、波形デバッグでも数値と状態の対応を常に照合しなければなりません。状態を意味の分かる形で安全に管理したいというのが課題です。

設計のポイント

ステートマシンの状態は、VHDLのユーザー定義列挙型(enumeration type)で定義します。type state_t is (IDLE, RUN, DONE); のように状態名を列挙して型を宣言し、状態信号をその型で持つことで、遷移の記述がそのまま状態遷移図と対応し、可読性が大きく向上します。列挙型の利点は名前の分かりやすさだけではありません。状態信号には定義した値しか代入できないため、無関係な数値の混入を型検査が防ぎます。状態の追加・削除も型定義と該当分岐の修正だけで済み、コード割り当ての管理から解放されます。多くのシミュレータは列挙型信号を状態名のまま波形表示するため、デバッグ効率も高まります。状態コードの実際の割り当て(バイナリ、ワンホット等)は合成ツールが最適化しますが、必要に応じて属性やツール設定で方式を指定することも可能です。case文で状態分岐を記述する際、VHDLではcaseが全選択肢の網羅を要求するため、列挙した状態をすべて書くかwhen othersを設けることになり、分岐漏れがコンパイル時に検出される点も、列挙型ならではの安全性です。

【コード例】
type state_t is (IDLE, RUN, DONE);
signal state : state_t;

process(clk, rst_n)
begin
if rst_n = ‘0’ then
state <= IDLE;
elsif rising_edge(clk) then
case state is
when IDLE => if start = ‘1’ then state <= RUN; end if;
when RUN => if finished = ‘1’ then state <= DONE; end if;
when DONE => state <= IDLE;
end case;
end if;
end process;

VHDL記述のポイント:列挙型でステートマシンの状態を定義する | 組み込み機器・ハードウェア設計製作.com

補足情報

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

FPGA設計のポイント

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

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

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

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