verilator的DPI-C交互机制
DPI-C的交互机制主要有
.C –> .V
.V –> .C
本文重点介绍.v文件中使用C函数的思路
verilator 工具编译命令会把所有的.V 和 .C 统一打包成cpp文件进行分析
$(VERILATOR) --cc --exe --build -j 0 \
--trace-fst \
--Mdir obj_dir \
$(C_file) \
$(TOP).v $(V_file) \
-top $(TOP)
生成可执行文件
因此构建NPC时的思路大体上为构建一个类似nemu的控制台,使用execute_once 来达到每次仿真一次,也就是一个周期clk的命令,这样在控制台时,可以任意的进行单步执行和调试,而verilator提供的头文件可以很完美地实现这一点
#include "VTop.h"
#include "verilated.h"
VTop *demo = new VTop;
demo->clock = 1; // 时钟翻转 now from 1 -> 0
demo->eval(); // 模块评估
demo->clock = 0; // 时钟翻转 now from 0 - > 1
demo->eval(); // 模块评估
其中地demo->eval()即代表仿真一次