Home>>Demos>>HDL Co-simulation vs. Cycle-Based Verification vs. Transaction-Based Verification
HDL コ・シミュレーションHDL コ・シミュレーション (シミュレーション・アクセラレーションとも呼ばれる)では、テストベンチは未だにHDL(VerilogかVHDL)です。ZeBuでは、信号イベントごとにテストベンチとDUTとで同期を行ないます。 |
C++ コ・シミュレーションC++ コ・シミュレーションでは、テストベンチはC++で記述します。信号はクロックの境界で同期化されます。クロックはC++テストベンチ制御のもとで進みます。 |
トランザクション・レベル・コ・エミュレーショントランザクション・レベル・コ・エミュレーションでは、テストベンチはC++か、SystemCかSystemVerilogで記述します。テストベンチとDUTの間ではデータパケットが交換されます。DUTでパケットを信号にエンコードしたりデコードしたりするのはハードウェアの役割で、非常に高速です(DUTより速く、典型値で50 MHz)。この例では、パケットは有効画素に対応します。 |
標準的な結果:50 kHz(RTLシミュレーションの100倍) Verilogコードサンプル |
標準的な結果:スピードは200 kHzのレベルに C++コードサンプル |
標準的な結果:数10MHzのレベルに C++コードサンプル |
always @(posedge clk) begin
if (!ce && !we) begin
mem[add] <= data;
$displayPixel(add, data);
end
end
|
Signal &ce = *(top->ce);
Signal &we = *(top->we);
Signal &add = *(top->add);
Signal &data = *(top->data);
while(1) {
if(!ce && !we){
mem[add] = data;
displayPixel(add, data);
}
top->run(1);
}
|
Port *rcv_port;
unsigned int *msg;
while(1) {
while(!rcvPort->isPossibleToReceive());
msg = rcvPort->receiveMessage();
*add = msg[1] & 0x1fff;
*data = msg[0];
displayPixel(add, data);
}
|
このサンプルデザインはグラフィック・レンダリングエンジンで、Mandelbrotと呼ばれるフラクタルを計算するものです。テストベンチの選択による影響を明らかにするために、いろいろな処理方式で同じデザインを使用しました。
このデザインはビデオバス(信号CE、WE、ADD、DATA)に画素を書き込むことで出力しています。このバスのデコード方法によって(HDLシミュレータか、C++か、トランザクタを介して直接ハードウェアで行なうか)、同じ画像でも生成速度が違うわけです。