TEL:086-227-0113
info@gopher-tec.jp
TOP page 製品情報 FPGAサンプルコードリポジトリ SimVisFSM
SimVisFSM

シミュレーション時に、ステートマシンのステート名が波形表示されるようにコーディングしたVerilog
サンプルコードです。

ステートマシンのコード例として、VHDLの場合は、type宣言で列挙したステート名を使ってコーディング
したものが一般的です。またVerilogの場合は、parameter宣言(localparam宣言も含む)した
ステート名を使ってコーディングしたものを多く目にします。これらをModelSim等でシミュレーション
すると、VHDLの場合は波形にステート名が表示されますが、Verilogの場合はステート名ではなく、
エンコード値(parameter宣言部における代入元の即値)が表示されます。後者の場合、表示される2進
や16進の数値からでは、それがどのステートを表しているか分かり難いため、常にparameter宣言部と
照合しながら波形確認したり、表示のためだけに別途デコード表記を追加したりすることもあるようです。
本サンプルコードでは、あまり大ごとに考えず、波形にステート名を表示するためのトリックをご紹介
します。

ネタバレになるため詳細はソースに譲りますが、その多くを占めるコメント文で、今回例として用いた
ステートマシンの仕様と、普段目にすることの多いステート名が表示されないスタイルのサンプルを
記載しています。そしてソースの最後に登場する非コメント部分が、シミュレーション時にステート名が
表示されるスタイルのサンプルとなっています。

なお、本サンプルコードは、”個々のステートが重複しないこと”、”ステート信号とステート名との比較に
よって、簡単にデコード部が記述できること”等の基本部分を満足すれば、回路的に冗長なステートビットが
コーディングされていてもOK、それらは後の論理合成ツール等によって除去されるはず、という方針の
トリックコードです。各ステートにどんなビット列を設定するか、どんなカウンタをベースにするか等を、
ツールではなく、設計者が工夫してハンドアセンブルするようなケースには全く向きませんので、
悪しからず。

Port I/O  Description 
RESET in 非同期リセット入力です。パワーオン時、またはシステムリセット時にアサートして
下さい。
CLOCK in 同期クロックです。本モジュールの全ての信号は、本クロックに同期している想定です。
START in ステートマシンの動作開始を促す信号です。
ステート遷移条件等の詳細については、ソース内コメントを参照下さい。
OUT_A
OUT_B
OUT_C
out ステートマシンのデコード出力です。
ステートとデコード出力の関係については、ソース内コメントを参照下さい。
(このステートマシンは例であり、その仕様自体は本題とは関係ありません)
※特に注記のない限り、信号は全て正論理です。
本ソースコードはVerilog版のみとなっております。
詳細は下記の資料ダウンロードをクリックください。

SimVisFSM
資料ダウンロード