トレースモードソースデバッグモードより、詳細にWaveformView表示を行います。本モードでは、WaveformView上の変化点に対応するソース行へのジャンプ機能Resolver表示機能Editor−とTreeViewScopeの一対一対応化が可能になります。非常に便利なモードでRTLのデバッグに威力を発揮します。例で見ていきましょう。Modeにしてコンパイルします。「1.24の新機能テストその1.prj」というプロジェクトファイルがありますので、それをロードプロジェクト=>Goします。すると、次の画面となります。(Version1.24から、作業環境のResotoreが簡単になりました。)このソースは、以下です。Ver.1.24のテストを開始しよう。$sformat(str,"Ver.1.24ではドライバへのJUMPが追加されました。$sformat(str,"Version1.24では、parameterのTOOLTIPも付加されました。$sformat(str,"Version1.24では、RESOLVERのJUMPも追加になりました。$sformat(str,"以上は、TraceModeで利用可能です。ソース行へジャンプしたところです。ドライバ記述へ飛ぶ」とするとT1カーソル(この画面では、黄色のカーソル)時刻に対応するドライバ箇所に飛びます。この場合、宣言箇所に飛んでいますが、この時刻では、まだ、代入記述がされていないためです。代入箇所に飛んで行きます。Recover_modeをダブルクリックしてみましょう。(”Recovery_mode”は、パラメータですが、Version1.24からツールチップ表示を可能にしました。)同様にして、T1カーソルを動かして、任意時刻の、任意信号のドライバ記述に飛ばすことができます。下の信号clockは、2階層下(totemonagai..)インスタンスのclock(入力信号)をViewに追加したものです。これで、飛ばすと、TOP層のclock記述箇所に飛んできます。clockであり、2階層下のclockは、それを参照(線でつながっている信号を観測)したという風に理解できます。同じ線でつながっていながら、親と子で名前が違うのは、よくあることです。この機能で、ドライバ(その値を駆動している者)をすぐに特定することができます。Note:任意時刻というのは、正確でありません。$strobeでサンプルされる任意時刻が正しい表現です。次の例は、Vector信号で飛び先が分かれている例です。信号選択と、T1カーソルを下の図の位置として、ドライバへ飛ばすと、飛び先が分かれていると言われますので、ダブルクリックしてビット展開してください。ビット展開して飛ばすと、対応記述に飛んできました。2'bxxの後、[0]ビットを1にしている記述ですが、Waveformviewと記述が対応していることが分かります。次の例は、リゾルバです。[1:0]resolve_wireで、飛ばすと、ビット展開、リゾルバの展開の催促の後、次の画面となります。確かに、resolve_wireという信号は、下の記述のように、二つの信号でドライブされています。シミュレータでは、、一つの信号名に、二つ以上のドライブソースがあるとき、内部的には、リゾルバで表現しています。この例の場合、リゾルバはの入力は、constant値の1と、resolve_source信号になります。出力は、reoslve_wireになります。通常観測できるのは、名前がついているResolverの出力だけですが、トレースモードでは、ダブルクリックすることで、Resolverの入力状態を出力できます。(Reoslverの入力は、たとえば、constant値だったり、a&bの結果だったりして名前がついていないこともあります。その場合は、Resolverという仮想の名前にしています。Resolverの論理は、streangthが同じ場合、以下の論理となります。要は、0/1の値が違っていたらx、01/zでは、01が勝ち、01/xでは、xが勝つということです。Waveform上で、Resolverの入力と出力の論理を確認してみてください。x<xの解析方法>どうしてxになっているのが、不明なときがあります。その場合は、Findpatternで、最初のxを見つけて、Resolverの入力を追っていけばいいのです。Resolverの入力は、前述のように必ずしも名前はついていませんが、該当行には飛んでゆきます。継続代入文では、EditorのTooltipでその行の信号の値表示をすれば、捕まえることができます。Non−Blockingの記述では、その行の信号をWaveformViewに追加して、ドライバーへ飛ぶ、で追います。22で飛ばして、counterの値をToolTipで表示しました。(下画面)確かに、counterは、22になっています。bcounterをToolTipさせて見ると、23になっています。そこで、bcounterをWaveformViewに追加します。WaveformView:counterの下にbcounterが追加されました。選択直後は、defaultHex表示のため17になっていますが、前のクロックを見るとHex16=22decimalになっており、確かに、counterが12から22になったのは、bcounterの値をNon-Blocking文でLoadした結果であることが分かりました。ソースデバッグモードとの違いをまとめると、下表になります。シミュレーションエンジンが生きている間の現在値を指します。シミュレーションエンジンが終了するとToolTipはでません。T1カーソルの時刻を指します。シミュレーションエンジンが終了していてもOKですが、T1カーソルが出ていないと時刻が指定されないため、Tooltipはでません。ScopeTreeViewと連動していません。ファイル名と行番号から推定されるインスタンス全部を表示、追加になります。ScopeTreeViewと連動しています。インスタンスが一つに限定されるため、波形追加もインスタンスを指定した形で限定的に行え、よりトレースしやすくなります。選択されていないScopeのソースを指定しても無視されます。従いViewからEditorに行くようにしてください。2-3倍に遅くなります。RTL記述によります。