Vengineerの戯言

人生は短いけど、長いです。人生を楽しみましょう!

VTA で DPI & Verilator を使う

@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

TVM の VTA。TVM から分かれたのよね。

github.com

VTA の対応 Hardware としては、ここ にあるんですが、

chisel は、Verilog HDL に変換後、Verilator にてシミュレーションできるようになっていますね。

dpi は、tsim_device.cc の Cモデルですね。

VTADPIInit関数にて、

  • VTAContextHandle handle
  • VTASimDPIFunc sim_dpi
  • VTAHostDPIFunc host_dpi
  • VTAMemDPIFunc mem_dpi

を設定して、

  • VTASimDPI
  • VTAHostDPI
  • VTAMemDPI

を使って実行するようです。

VTADPISim で Verilator にてシミュレーションするって感じですね。

Cインターフェースを使っていて、TRACEでは、Vcd だけでなく、Fst もサポート。

 

これらを使っているのが、src/dpi/module.cc の ここ

void Init(const std::string& name) {
  Load(name);
  VTADPIInitFunc finit = reinterpret_cast<VTADPIInitFunc>(
  GetSymbol("VTADPIInit"));
  CHECK(finit != nullptr);
  finit(this, VTASimDPI, VTAHostDPI, VTAMemDPI);
  ftsim_ = reinterpret_cast<VTADPISimFunc>(GetSymbol("VTADPISim"));
  CHECK(ftsim_ != nullptr);
}

 

よく考えられていると思う。