2012-03-09 9 views
1

こんにちは、ありがとう。SystemVerilogテストベンチシミュレーション(VCS)用の非アクティブキルスイッチ

私はSystemVerilogシミュレーションのための非アクティブkillswitchのアイデアを熟考していました。

"simv"を実行している間に長時間(プログラム可能な)非アクティブな期間が内部イベントをトリガして '$ finish'を呼び出すことはできますか?または、VCSコマンドを使用することは可能ですか?

ブレインストームを許します。何か不明な点がある場合はお知らせください。

RRS私が働いてきたチップ設計企業内

答えて

1

VHDLでは解決された信号を使用します。

データを生成または分析する各プロセスは、動作中にその信号に0を書き込みます。シミュレーションが終了すると、1と書き込まれます。

すべてのプロセスが満足している場合にのみ、信号変更状態は1(残りはXまたは0)です。

クロック生成プロセスはこの信号を監視し、1になるとクロック生成を停止します。それ以上の遷移はスケジュールされず、シミュレータは停止することがわかります。

おそらくVerilogは類似したことをすることができます。

+0

これは良いアイデアのように思えます。この時点で私はkillswitchを使用して0にカウントダウンし、$ finishをトリガします。私はシミュレータのイベントリストにアクセスし、シミュレートするイベントが残っていないときにトリガする方法があれば考えていました。私はここで大きな問題は、クロックの移行がイベントとみなされることです。私が間違っているなら、私を訂正してください。 – boffin

+0

シミュレータは正確に(イベントリストを見て、スケジューリングされていないときに終了する)、すべてのイベントソースをオフにするようにします(テストベンチでは、テストベンチは非常に行動的)。 –

1

、これは「静止チェック」と呼ばれているが、私はそれは、業界標準の名前だかはわかりません。システムが休止状態に達したことをチェックする「計装コード」を実装します。 CadenceのSpecman-e toolは、これを非常にうまくやっていますが、テスト機構の終わりに反対します(raise_objection(MAIN_TEST_DONE)/drop_objection(MAIN_TEST_DONE))。基本的に、システム全体のモニターは、シミュレーションの開始時に異議を「持ち上げる」(つまりカウンタを増やす)と、シミュレーションが実行されると、DUTのピースが静止していると判断し、異議を「低く」ますこのグローバルカウンター)。テストを終了することに異議がなくなる(すなわち、グローバルカウンタが0である)場合、$finishが呼び出される。モニタは、テスト中に異議を出したり下したりすることができますが、カウンタが0になった時点で、テストは$finishとなります。

ユニバーサル検証方法論(UVM)は、この方法論をスペックマン(Specman)から受け取り、そのUVM Reference Manualに記載されています。 UVMはまずVerilogで実装されていますので、自由に利用できるライブラリを使用して「静止検査」を実装することは間違いありません。 Cadence社のSpecman UVMリファレンスマニュアルにもこのメカニズムがhttp://support.cadence.comと記載されています。残念ながら、Cadenceはドキュメントを表示する前に顧客であることを要求しているため、必要なものを見つけるためにGoogle以外の検索エンジンを使用する必要があります。それは少し痛みです。

+0

答えをいただきありがとうございます...これは多くの意味があります。私はSynopsys VCSを使用していますので、VCSの「静止チェック」と同等のものを見つける必要があります。 UVMを経由せずにイベントリスト/カウンタにアクセスする方法はありますか? – boffin

+0

AFAIK、静止チェックは、(Specman環境と同様に)VCSからデフォルトでは行われません。このグローバルカウンタを自分で実装することも、uvmからインポートすることもできます。ところで、デバッグの目的でテストが終了するのに際立つ反対意見を持つ人を追跡することが不可欠です。私はそれをC++で 'set'として実装し、DPI呼び出しで' incr(my_rtl_path) '' decr(my_rtl_path) 'にVCSを接続します。 –

関連する問題