Technology Reports 2007

SystemCデバッガの必要性

はじめに

 昨今のSoCの上流設計においては、アーキテクチャの早期検証、ハードウェア・ソフトウェアの高速協調検証、および抽象度の高い記述からの動作合成等が注目されており、実際の設計現場において適用するケースが増えています。中でも、C/C++/SystemC記述を用いた設計環境は、ソフトウェアとの親和性が高く、ハードウェアの記述も可能なことから急速に普及してきています。

しかしながら、実際にこのようなCベースのモデリングをし始めている設計者は、今までHDL記述を行っていたハードウェア設計者が多く、SystemCの環境下でモデリングや、デバッグをするツールの整備が不十分だと、本来期待すべき高抽象度の設計環境の恩恵を受けるまでに至りません。特に、 SystemC言語環境は、C++というソフトウェア言語をベースにしながら、ハードウェアの並列性と時間の概念を取り入れた環境であることから、ソフトウェアとハードウェアの両方の側面をサポートする設計環境が待ち望まれていました。

例えば、従来の環境では、単に波形を見たいというだけでも、C++のメンバー変数やユーザー定義クラスのために特別な書き方をしなければいけない等、様々な制約があり、本来のC++言語の良さを引き出すことが非常に困難でした。また、ある一つのプロセスのデバッグをしているときに、並列に動作している他のプロセスがどこでwaitしているのか、その中のローカル変数がどのような値になっているのかといったことを調べることは、一般のソフトウェアデバッガでは難しく、問題が発生したときの解決に多大な労力を要していました。

Vista SystemC IDE

  メンター・グラフィックスのVistaは、標準的なgdb、gcc、OSCIのリファレンスシミュレータに加え、 SystemCエディタ、デザイン/C++クラスブラウザ、波形ビューワ、トランザクション解析などSystemCのコード開発に必要な機能と検証環境が オールインパッケージ化されています。それぞれの機能は密に結合され直感的に使いやすいGUI上に実装されていますので、既存のEDAツールに慣れたハー ドウェア設計者のみならずソフトウェアIDEを使いこなすアーキテクチャ開発者が使用しても十分にSystemCの高度なモデリングに集中できる様に作ら れています。

Vistaの特徴:

  • SystemC IDEとしてのプロジェクト管理
  • 既存SystemCソースおよびMakefileをそのまま流用可能
  • 統合されたSystemCブラウザとC++クラスブラウザおよびSystemCエディタ
  • ソースコードに対して手を加えることな くあらゆる型の信号・変数を波形表示
  • フルトレース機能を用いても高速なシミュレーション環境
  • 抽象度の高いモデリング時に必要なΔ(デルタ)タイム解析機能
  • 特別なAPIなどを利用せずにトランザクションの応答や引数を検証
  • 並列プロセスの切り替えおよびスタック解析機能
  • 他社SystemCシミュレータ、コードスタイルチェッカー、動作合成ツールとのインテグレーション

デザイン解析の効率化

Vistaには、Project/Design/Codeと呼ばれる3つのブラウズ機能が統合されています。これにより設計者は様々な角度からデザインの 構造を見ることができます。例えばハードウェアとして確認したいモジュールの階層やポートとチャネルの構造、モジュール内で定義されている SC_THREADやSC_METHODといったプロセスの情報を確認できます。またチャネルを例にとるとC++のデバッグに必要なクラスの継承関係やメ ンバー変数、メソッド、引数などを簡単に切り替えながら確認する機会が多くなります。このようなケースにおいてVistaでは該当するモジュール構造を トップダウンに探索しながら目的とするクラス(sc_module)を検索し、そのままC++のクラスブラウズであるCode Viewに切り替え、クラスの継承やメンバー変数、コンストラクタやデストラクタを解析することが瞬時にできます。またこの3つのブラウザは SystemCエディタと完全なリンクが図られており、特定のプロセスの宣言と実装部、およびインスタンス部を簡単なマウス操作で切り替えて表示すること が可能です。これにより闇雲に複数のソースファイルを探索する必要は無くデザインの解析および編集が簡単に且つ効率的に行えます。

図1: Design ViewとCode View図1: Design ViewとCode View

ハードウェアのデバッグ

ハードウェアのデバッグには波形観測が一番効果的です。一般的な手順ではソースコードに対して信号トレース用の関数(sc_trace)を事前に挿入して VCD(valuechange dump)を出力し波形表示ツールを利用します。しかしこの手法では事前に観測したい信号の指定が必要であり、またソースコード内のローカル変数の値がダ ンプできない、バッチ処理でのシミュレーション終了までVCDを得ることができない等、様々な課題があります。さらにトレース用関数によるシミュレーショ ンのオーバーヘッドが大きく、多くの観測ポイントが指定できない、生成されたVCDファイルサイズがネックとなり効率的なデバッグが行えないといった問題 も生じています。Vistaではこの根本的な課題に対してトレース用の関数を使うことなく、ダイナミックにSystemCシミュレーションを実行しながら デザイン内の信号や変数、更には関数内に定義しているローカル変数を選択して波形上で検証可能としています。この際、波形表示できる変数の型には一切制限 がないこともVistaの大きな特長です。

図2: コントロールパネルによる並列プロセスのデバッグとスタック解析例図2: コントロールパネルによる並列プロセスのデバッグとスタック解析例

マルチプロセスに対するSystemCデバッグ

Vistaは、ソースレベルデバッグの際に並列動作しているプロセス(THREADやCTHREAD)をダイナミックに切り替えながら検証することが可能 です。例えばSystemCソースに対してソース行・実行時間・プロセス・コンストラクタなどに対してブレークポイントを設定します。ブレーク条件に合致 すると、該当するソースの表示と同時にメンバー変数やローカル変数の値をブラウザ上やシミュレーション・コントロールパネルで確認することが可能です。

この時、サスペンド状態にある他のプロセスに表示を切り替えてどこでwait状態になっているのかを検証する事が簡単にできます。またプロセスを切り替え ながら特定のプロセスにおいて実行された関数のスタック履歴を見たり、特定のスタックフレーム内のローカル変数の値を確認することができます。多数のIP がオンチップバスに繋がるような現在のSoC設計において、このようなデバッグ機能が必須となります。

トランザクションの解析

トランザクション・モデリングでは、バスやFIFOのような通信機構をチャネルとしてモデル化しインタフェースクラスを使ったモジュールに接続します。 Vistaでは、モジュールおよびチャネルのポートを使用するいかなるトランザクションも検証可能です。この際トランザクションの解析においてソースコー ドに対する検証用APIなどの挿入は一切必要ありません。どのポートにおいてどのようなメソッドがいつ発生するのか、またその際の戻り値や引数を詳細に検 証することが可能です。

図3: TSVと波形ビューワ図3: TSVと波形ビューワ

まとめ

既に設計現場では様々なアプリケーションを対象としてSystemCの適用が広がっており、ニーズに伴いリント、アサーション、カバレージ、動作合成など Verilog/VHDLの設計環境と同等のEDAツールのサポートが進められてきました。しかしこのようなツールを効果的に活用するためには Modeling→Coding→Compilation→Debuggingといった基盤となるモデリング技術の整備が必要となります。Vistaは直 感的に使用できるSystemC専用のIDEとして設計効率を飛躍的に高めます。