はじめに
Coral Open NPU のテストベンチは、下記にあります。
今回は、ここを覗いてみたいと思います。
Google Coral Open NPU IP の検証環境
— Vengineerの妄想 (@Vengineer) 2025年10月16日
独自IP開発をするために非常に参考になると思います。
RISC-Vコアの検証では、riscv-dv / riscv-tests を cocotb で行っているようです。https://t.co/4FY3xMVcQM
コア全体では、vcs/verilator にて、SystemCベースで行っています。https://t.co/tef0brmfyo…
テストベンチの内容
- cocotb
- renode
- systemc
- uvm
- vcs_sim
- verilator_sim
それぞれ、色々な役割があるんだと思いますが、いっぱいありますね。
どれも Makefile ではなく、BUILD を使っているようです。
cocotb
Python ベースのテストベンチ環境である cocotb ですね。
- riscv-dv
- riscv-tests
のためのようですね。
renode
renode ですね。
SoftwareとのCo-Simulationみたいなものです。
Simulator としては、Verilatorを使っています。
uvm
uvm を使って、NPU IP の検証をしています
UVMなので、vcs でシミュレーションしているようです。
Xilinx の xsim でもできますかね。
vcs_sim
Synopsys社の VCS を使ったシミュレーション環境ですね。
- top.h/top.cc : SystemC の sc_top モジュールですね
- main.cc : SystemC の sc_main
ということは、トップ階層が SystemC 。なんでだろうか?
ソースコードを覗いてみたら、axi2tlm_bridge なるものがあるので、これを使いたいんだね。
int sc_main(int argc, char** argv) {
sc_top top("top");
sc_clock clock("clock", 100, SC_NS);
Xbar xbar("xbar");
tlm2axi_bridge<KP_axi2AddrBits, KP_lsuDataBits, KP_axi2IdBits, 8, 1, 0, 0, 0,
0, 0>
tlm2axi_bridge("tlm2axi_bridge");
axi2tlm_bridge<KP_axi2AddrBits, KP_lsuDataBits, KP_axi2IdBits, 8, 1, 0, 0, 0,
0, 0>
axi2tlm_bridge("axi2tlm_bridge");
typedef AXIProtocolChecker<KP_axi2AddrBits, KP_lsuDataBits, KP_axi2IdBits, 8,
1, 0, 0, 0, 0, 0>
CoreMiniAxiProtocolChecker;
CoreMiniAxiProtocolChecker tlm2axi_checker("tlm2axi_checker");
CoreMiniAxiProtocolChecker axi2tlm_checker("axi2tlm_checker");
typedef AXISignals<KP_axi2AddrBits, // ADDR_WIDTH
KP_lsuDataBits, // DATA_WIDTH
KP_axi2IdBits, // ID_WIDTH
8, // AxLEN_WIDTH
1, // AxLOCK_WIDTH
0, 0, 0, 0, 0 // User
>
CoreMiniAxiSignals;
systemc
SystemC ですね。
命令の部分の検証ですかね。
verilator_sim
vcs が SystemC なら、verilator_sim も SystemC じゃん。
- sysc_module.h : SystemC ですね
struct Sysc_module : sc_module {
sc_in_clk clock;
sc_in<bool> reset;
virtual void eval() = 0;
SC_CTOR(Sysc_module) {
SC_METHOD(eval);
sensitive << reset << clock.pos();
}
};
では、sc_main は、どこ?
coralnpu の下の
- core_mini_axi_non_incr_tests.cc
- valuint_tb.cc
- l1icache_tb.cc
- core_tb.cc
- regfile_tb.cc
- core_mini_axi_sim.cc
- valu_tb.cc
- vdecode_tb.cc
- vldst_tb.cc
- vst_tb.cc
- vregfilesegment_tb.cc
- l1dcache_tb.cc
- vcmdq_tb.cc
- vdecodeinstruction_tb.cc
- vconvctrl_tb.cc
- dbus2axi_tb.cc
- vconvalu_tb.cc
matcha の下の
- coralnpu_tb.cc
chai の下の
- chai_tb.cc
おわりに
SystemCをいっぱい使っていますね。
ということは、
が役に立ちそうですね。