SystemC Verification Methodology

2,206 views
2,009 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,206
On SlideShare
0
From Embeds
0
Number of Embeds
884
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

SystemC Verification Methodology

  1. 1. SystemCVerificationMethodology@LSI設計雑記帳2013/6/21 - SystemC Japan 2013
  2. 2. SystemC/TLM• SystemCモデル• サイクルベース• 高位合成を対象• TLMモデル• トランザクションベース• ソフトウェア開発環境を対象
  3. 3. SystemCモデル検証• 課題はありますか?
  4. 4. SystemCモデル検証• いいえ。ありません!(キリッ
  5. 5. _人人人人人人_>そんなバカな!< ̄Y^Y^Y^Y^Y ̄
  6. 6. SystemCモデル設計• C/C++のアルゴリズムが存在機能(処理)を流用してモデリング• RTLスタイル(RTL→SystemC)※PSYスタイルではありません• コード上にデバッグコードを書かない
  7. 7. SystemCモデル検証• 検証環境の構築は?• アルゴリズム環境を流用• RTL検証手法を適用• 等価性検証は?• 静的:SLEC, HECTOR• 動的:SystemC-RTLシミュレーション
  8. 8. RTL検証手法• ダイナミック• ランダム• アサーション• カバレッジ• フォーマル• UVM/OVM/VMM• エミュレーション• FPGAボード
  9. 9. SystemC検証への適用• ダイナミック• ランダム• アサーション• カバレッジ• フォーマル• UVM/OVM/VMM• エミュレーション• FPGAボード有償シミュレータであれば三角マークは解消!
  10. 10. ランダム生成(SCV)• ランダム分布指定• 重み付けランダム• 値そのもの/値の範囲• 制約付きランダムhttp://lsifrontend.blog100.fc2.com/blog-category-27.html
  11. 11. 項目 ツール or 手法 コメントアサーション PSL ほどほどカバレッジ JEDA/gcov ほどほどフォーマル SLEC/HECTOR ほどほどUVM/e Co-Simulation 敷居高いSystemCモデル検証
  12. 12. とある実験結果
  13. 13. • SystemCモデル作成• SystemCモデル検証• 高位合成• RTLシミュレーション• カバレッジ結果(Line)SystemC→高位合成
  14. 14. • SystemCモデル作成• SystemCモデル検証• 高位合成• RTLシミュレーション• カバレッジ結果(Line)SystemC→高位合成100%99%
  15. 15. SystemC検証環境は重要!!!
  16. 16. • アルゴリズムの機能保証• SystemCモデルの品質確保• 高位合成後のRTL品質に直結• RTLシミュレーションへの移植性• Interface合成などSystemCモデルに無い
  17. 17. EDAベンダーがいつかはやる・・・
  18. 18. でも、趣味でやってみっか!
  19. 19. SystemCVerificationMethodology
  20. 20. 項目 ライブラリ リリース予定アサーション svm_ovl 2013/11カバレッジ svm_cover_xxx 201x/xx/xxフォーマル ー むりぽーUVM/e svm_xxx 2013/12作ります。
  21. 21. assertion:svm_ovl• OVL(OpenVerication Libraryベース)• 基本Cycleベース(clock→event)• 独自な部分はこれから検討
  22. 22. coverage:svm_coverxhttp://www.design-reuse.com/articles/26688/coverage-driven-verification-to-improve-the-quality-of-ip.htmlUnified CoverageInteroperability Standard(UCIS)
  23. 23. platform:svm_xxx• svm_env/agent/driver/monitor/scoreboad• svm_sequence/_item/sequencer• svm_test/factory/register
  24. 24. 作る上で・・・
  25. 25. SystemC難しい><
  26. 26. こんなの作りながら悩んでます。
  27. 27. 全階層信号波形取得• svm_waves(char* tf, sc_module top);#include “svm.h”int sc_main( int argc, char* argv[] ) {top utop("utop");svm_waves(“systemc”, utop);sc_start();return 0;}全階層がVCD形式で出力・sc_in/out/inout・sc_signal※標準SystemCでは無理です
  28. 28. get_child_object()inline svm_waves::svm_waves(const char* tf_name, const sc_module& m_top){create( tf_name );std::vector<sc_object*> children = m_top.get_child_objects();svm_trace(tf, children);}void svm_waves::svm_trace(sc_trace_file *tf, std::vector<sc_object*>& children){for (std::vector<sc_object*>::iterator i = children.begin(); i != children.end(); i++){if ( std::string((*i)->kind())=="sc_module" ) {sc_module* mptr = dynamic_cast<sc_module*>(*i);std::vector<sc_object*> r_children = mptr->get_child_objects();svm_trace(tf, r_children);}else if(std::string((*i)->kind()) == "sc_in" || std::string((*i)->kind()) == "sc_out"|| std::string((*i)->kind()) == "sc_inout" || std::string((*i)->kind()) == "sc_signal"){(*i)->trace(tf);}}}
  29. 29. pre/post_random()struct packet : public svm_sequence_item {svm_rand<int> a;svm_rand<double> b;svm_rand<sc_int<8> > c;packet() {svm_sequence_item::regist(&a);svm_sequence_item::regist(&b);svm_sequence_item::regist(&c);a.keep_only(-30, 30);b.keep_only(-10, 20);c.keep_only(30);}void post_randmize() {a -= 10000;}};int sc_main( int argc, char* argv[] ) {packet data_p;for (int i=0; i<20; i++) {data_p.randmize();:}return 0;}# a = -9987, b = 10.016675, c = 30# a = -9971, b = -4.749229, c = 30# a = -10008, b = -4.446328, c = 30# a = -10004, b = 10.039535, c = 30:
  30. 30. 接続元の信号名取得DUTassertion module_人人人人_> Assert!< ̄Y^Y^Y^Y ̄表示メッセージは緑部分の信号名で表示したい
  31. 31. こんな感じです。先は長そう・・・
  32. 32. おわり

×