図 1. C/RTL 検証フロー
C/RTL 協調シミュレーションでは、C テストベンチを使用し、main()
関数を実行して、ビヘイビアー シミュレーションで実行される RTL デザインを自動的に検証します。C/RTL 検証プロセスには、次の 3 つの段階があります。
- C シミュレーションが実行され、最上位関数またはテスト対象デザイン (DUT) への入力が入力ベクターとして保存されます。
- この入力ベクターは、Vivado シミュレータまたはサポートされるサードパーティ HDL シミュレータの C 合成で作成された RTL を使用して、RTL シミュレーションで使用されます。RTL からの出力またはシミュレーションの結果は、出力ベクターとして保存されます。
- RTL シミュレーションからの出力ベクターは C テストベンチの
main()
関数に戻され、結果が正しいかどうかが検証されます。C テストベンチで、場合によっては既知の良い結果と比較することにより、結果が検証されます。
次に、HLS コンパイラから検証中に出力されるメッセージを示します。
C シミュレーション中:
INFO: [COSIM 212-14] Instrumenting C test bench ...
Build using ".../bin/g++"
Compiling dct_test.cpp_pre.cpp.tb.cpp
Compiling dct_inline.cpp_pre.cpp.tb.cpp
Compiling apatb_dct.cpp
Generating cosim.tv.exe
INFO: [COSIM 212-302] Starting C TB testing ...
Test passed !
この段階では、C シミュレーションが実行されているので、C テストベンチで生成されるメッセージはすべて、コンソール ビューまたはログ ファイルに出力されます。
RTL シミュレーション中:
INFO: [COSIM 212-333] Generating C post check test bench ...
INFO: [COSIM 212-12] Generating RTL test bench ...
INFO: [COSIM 212-1] *** C/RTL co-simulation file generation completed. ***
INFO: [COSIM 212-323] Starting verilog/vhdl simulation.
INFO: [COSIM 212-15] Starting XSIM ...
この段階では、RTL シミュレーションからのメッセージはすべてコンソール ビューまたはログ ファイルに出力されます。
C テストベンチで結果をチェック中:
INFO: [COSIM 212-316] Starting C post checking ...
Test passed !
INFO: [COSIM 212-1000] *** C/RTL co-simulation finished: PASS ***
C/RTL 協調シミュレーションの要件は次のとおりです。
- テストベンチが テストベンチの記述 に説明されているようにセルフチェックで、問題がなかった場合は 0、問題があった場合は 0 以外の値を返す。
- インターフェイス合成用の協調シミュレーション要件 を満たしている。
- デザイン インターフェイスの
arrays
またはstructs
で 協調シミュレーションでサポートされない最適化 にリストされる最適化指示子を使用していない。 - サードパーティ シミュレータは、検索パスに存在しないと、Vitis Unified IDE または
vitis-run
コマンドで起動できません。 - サードパーティ シミュレータを使用する場合、IP コアのシミュレーション に説明されるように、IP シミュレーション ライブラリがサードパーティ シミュレータで使用できるようにコンパイルされる必要があります。