Google Custom Search
THE LEADER IN HARDWARE/SOFTWARE CO-VERIFICATION EVE English Website

HDL協調シミュレーション対サイクルベース対トランザクションベース

HDL協調シミュレーション

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

HDL Co-Simulation Demo

標準的な結果:50 kHz(RTLシミュレーションの100倍)

Verilogコードのサンプル

always @(posedge clk) begin
  if (!ce && !we) begin
    mem[add] <= data;
    $displayPixel(add, data);
  end
end

C++での協調シミュレーション

テストベンチはC++で記述します。信号はクロックの
境界で同期化されます。クロックはC++テストベンチ
制御のもとで進みます。

C-Cosim Demo

標準的な結果:スピードは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)。
この例では、パケットは有効画素に対応します。

Transaction-Based Verification

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