SimVisFSM
シミュレーション時に、ステートマシンのステート名が波形表示されるようにコーディングしたVerilog
サンプルコードです。
ステートマシンのコード例として、VHDLの場合は、type宣言で列挙したステート名を使ってコーディング
したものが一般的です。またVerilogの場合は、parameter宣言(localparam宣言も含む)した
ステート名を使ってコーディングしたものを多く目にします。これらをModelSim等でシミュレーション
すると、VHDLの場合は波形にステート名が表示されますが、Verilogの場合はステート名ではなく、
エンコード値(parameter宣言部における代入元の即値)が表示されます。後者の場合、表示される2進
や16進の数値からでは、それがどのステートを表しているか分かり難いため、常にparameter宣言部と
照合しながら波形確認したり、表示のためだけに別途デコード表記を追加したりすることもあるようです。
本サンプルコードでは、あまり大ごとに考えず、波形にステート名を表示するためのトリックをご紹介
します。
ネタバレになるため詳細はソースに譲りますが、その多くを占めるコメント文で、今回例として用いた
ステートマシンの仕様と、普段目にすることの多いステート名が表示されないスタイルのサンプルを
記載しています。そしてソースの最後に登場する非コメント部分が、シミュレーション時にステート名が
表示されるスタイルのサンプルとなっています。
なお、本サンプルコードは、”個々のステートが重複しないこと”、”ステート信号とステート名との比較に
よって、簡単にデコード部が記述できること”等の基本部分を満足すれば、回路的に冗長なステートビットが
コーディングされていてもOK、それらは後の論理合成ツール等によって除去されるはず、という方針の
トリックコードです。各ステートにどんなビット列を設定するか、どんなカウンタをベースにするか等を、
ツールではなく、設計者が工夫してハンドアセンブルするようなケースには全く向きませんので、
悪しからず。
サンプルコードです。
ステートマシンのコード例として、VHDLの場合は、type宣言で列挙したステート名を使ってコーディング
したものが一般的です。またVerilogの場合は、parameter宣言(localparam宣言も含む)した
ステート名を使ってコーディングしたものを多く目にします。これらをModelSim等でシミュレーション
すると、VHDLの場合は波形にステート名が表示されますが、Verilogの場合はステート名ではなく、
エンコード値(parameter宣言部における代入元の即値)が表示されます。後者の場合、表示される2進
や16進の数値からでは、それがどのステートを表しているか分かり難いため、常にparameter宣言部と
照合しながら波形確認したり、表示のためだけに別途デコード表記を追加したりすることもあるようです。
本サンプルコードでは、あまり大ごとに考えず、波形にステート名を表示するためのトリックをご紹介
します。
ネタバレになるため詳細はソースに譲りますが、その多くを占めるコメント文で、今回例として用いた
ステートマシンの仕様と、普段目にすることの多いステート名が表示されないスタイルのサンプルを
記載しています。そしてソースの最後に登場する非コメント部分が、シミュレーション時にステート名が
表示されるスタイルのサンプルとなっています。
なお、本サンプルコードは、”個々のステートが重複しないこと”、”ステート信号とステート名との比較に
よって、簡単にデコード部が記述できること”等の基本部分を満足すれば、回路的に冗長なステートビットが
コーディングされていてもOK、それらは後の論理合成ツール等によって除去されるはず、という方針の
トリックコードです。各ステートにどんなビット列を設定するか、どんなカウンタをベースにするか等を、
ツールではなく、設計者が工夫してハンドアセンブルするようなケースには全く向きませんので、
悪しからず。
※特に注記のない限り、信号は全て正論理です。
本ソースコードはVerilog版のみとなっております。
詳細は下記の資料ダウンロードをクリックください。
詳細は下記の資料ダウンロードをクリックください。