テストベンチは未だにHDL(VerilogかVHDL)です。
ZeBuでは、信号イベントごとにテストベンチと
DUTとで同期を行ないます。

標準的な結果:50 kHz(RTLシミュレーションの100倍)
Verilogコードのサンプル
always @(posedge clk) begin
if (!ce && !we) begin
mem[add] <= data;
$displayPixel(add, data);
end
end
テストベンチはC++で記述します。信号はクロックの
境界で同期化されます。クロックはC++テストベンチ
制御のもとで進みます。

標準的な結果:スピードは200 kHzのレベルに
C++コードのサンプル
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);
}
テストベンチはC++か、SystemCかSystemVerilogで
記述します。テストベンチとDUTの間ではデータ
パケットが交換されます。DUTでパケットを信号に
エンコードしたりデコードしたりするのはハードウェアの
役割で、非常に高速です(DUTより速く、典型値で
50 MHz)。
この例では、パケットは有効画素に対応します。

標準的な結果:数10MHzのレベルに
C++コードのサンプル
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++か、トランザクタを介して直接ハードウェアで行なうか)、同じ画像でも生成速度が違うわけです。