トレースモード2による構造解析3.20.1モードの違いトレースモード2は、概念的に難しい説明を必要とします。Verilogが初めての方は、スキップして構いません。1.28からトレースモード2を追加しました。3.19トレースモードとの違いは、コンパイルの仕方と、trace_file.txtの生成の有無です。aw=a;awは、aの参照。awとしての実体(シミュレータ上の)はない。awは、aにワイヤでつながっているイメージ。aw=a;awは、aを入力とするドライバ出力。従って、バッファ出力という実体をシミュレータ上で持っている。シミュレーション速度は、数%ダウンします。プロジェクトオプショントレースモードをCheckしてください。再コンパイル後に機能します。プロジェクトオプショントレースモード2をCheckしてください。再コンパイル後に機能します。テキストファイルは、プロジェクトフォルダに生成されるのでプロジェクトを作成する必要があります。aw=aと言う記述をコンパイラが意識しトレースできるようにするためです。このステートメントは、aの言い換え(Alias)とする見方と、トレースモード2のようにドライバとする見方と2種類の解釈が存在します。トレースモード2では、awは、バッファの出力であって、バッファという実体が生じ、記述をトレースすることができます。Alias的な見方をする従来モードでは、バッファは、存在しないのでトレーサビリィティが落ちてしまします。ドライバが存在するとその分メモリとシミュレーションサイクルを必要とするので速度的には、落ちてしまいますが、トレーサビリティの観点からは、あえて最適化しない方がいいのです。このモードの違いを端的に示すのは、次の例でしょう。begina=1;$dsiplay("aw=%b",aw)endこれを、二つのモードで走らせてみてください。トレースモード1では、awの実体は、aなので、a=1で代入されると、結果は、当然1になります。awという信号伝播パスの計算は、#時間文や、イベント文に遭遇しなかったので、されません。その結果未だ、xのままということになります。Verilogの言語仕様では、どちらの結果も許されます。とでもすればいいです。この辺の詳細は、言語編のチュートリアルをご参照ください。言語解説編でも書きましたが、Verilogシミュレータ内では、2種類の違ったエンジンを切り替えながら、シミュレーションサイクルは進みます。2種類とは、C言語的手続き構文(Procedual)と回路的(NET、structural)構文です。NET構文(assign文)では、旧来の回路シミュレータ的な動作をし、Procedual構文(always,initial)による動作では、C言語的仮想CPU動作が行われます。回路の記述をするには、NETで、テストベンチを書くには、Procedualで、とするのは、自然な発想でしょう。)従って、Veritakトレースファイルは、Procedula/Strcutualそれぞれの解析結果を出力します。それでは、実際の例で見ていきましょう。Project、Goします。WaveformView信号のScope列をクリックし、ScopeTreeViewをだします。選択されているSCOPEを右クリックするとメニューがでます。開いたファイル(trace_file.txt)が、次です。Scopeの下にSINGAL:が続くのは、ScopeTreeViewと同じイメージです。タグファイルは、Windowsの下の方に隠れている場合があります。そのときは、Windowsのツールバーが点滅しているので、そこから開いてみてください。タグファイルには、下のように信号からも飛ぶことができます。下は、開いたファイルです。信号名/Scope名ファイル名(行番号)が組になって記述されています。(テキストで記述されているので、VeriPad以外のEditorのタグジャンプ機能でも飛べますが、VeriPadが真価を発揮するのは、次です。)上のどちらの行をDBLCLICKしても、当該箇所に飛んで生きます。このとき、SCOPEも一緒に飛ぶ(ScopeTreeViewと連動している)ので、複数のインスタンス化をしているモジュールでも一意にツールチップをだすことができます。Note:同様にWaveformViewの信号からも飛ぶことができます。GUI内で、圧縮伸張作業が行われます。そのため、規模が大きいシミュレーションでは、ツールチップが現れるまで時間がかかる場合があります。SourceDriverの下のlint_test.sub3.subsub2.aregをDBLCLICKすると、ソースに飛ぶます。このモジュール(subsubmodule)は、6個インスタンス化されていますが、ツールチップをだしてみると、タグファイル上のインスタンス信号になっていることがわかります。値は、WaveformView上T1カーソルの値です。カーソルがでていないとツールチップはでません。Note:見てお分かりの通り、VeriPadの正規表現検索機能により飛んでいます。インスタンス化のパラメータは、MSBですが、本インスタンスの場合、7になっていることが分かります。VeriPad上からも、タグファイルに飛ぶことができます。タグファイルKEYWORDの意味タグファイルでは、KEYWORDとして、SCOPE、SIGNAL、PROCEDUAL_LOADS、PROCEDUAL_DRIVERS、Aliases、SourceDriver、Drivers_FANOUTS、DECLARED、ASSIGNEDを定義しています。その意味は以下の通りです。SCOPE:の下に複数のSIGNAL:が続きます。TreeViewで表示される信号すべてです。メモリはサポートしていません。手続き構文で、右辺に記述される箇所です。手続き構文で、左辺に記述される箇所です。親子モジュール間等、違う名前に変わっていても実体は、同じものをさしてる信号(s)です。ドライブしている信号の宣言箇所です。Structualな記述で、右辺に出現する箇所です。代入されている箇所です。(reg宣言では、DECLAREDと同じになります。Resolverに入力されている記述箇所です。次の記述は、WaveformViewの2番目の信号のタグファイルです。[0]は、LSB0で正規化した値のビットです。LOADS/DRIVERSは、ビットに関係なく1ビットでも記述があったなら出力します。Alisas以下は、全ビットが同じ記述箇所なら、たとえば、[3:0]となりますが、本例の場合、ビット毎の箇所が違うので、ビット毎に展開されています。F:\regression_test\node_check_test.v(43)::Notes:一般に、タグファイルは、テキストで記述しているため、巨大になり出力にも時間がかかります。100万ゲートクラスでは、100MB程度になる可能性があります。VeriPadのタグジャンプは、Veritakが起動していないと(トレースモードでコンパイル後でないと)機能しません。