所以我在我的verilog中定义了以下寄存器
reg [31:0] register_mem [0:15]/* verilator public */;
我的目标是从我的验证器 C++ 代码中读取存储在其中的 16 个值中的每一个。
我发现这个 VPI 东西的文档很难找到。我仍然无法弄清楚 at_vpi_vecval
是什么以及它的参数是什么,或者它是否是正确的方法。
这是我读取寄存器中第 5 个值的方法
unsigned int read_regs() {
const std::string path = "TOP.TOP.cpu.reg_file.register_mem";
vpiHandle vh1 = vpi_handle_by_name((PLI_BYTE8*)path.c_str(), NULL);
if (!vh1) {
printf("Name %s", path.c_str());
vl_fatal(__FILE__, __LINE__, "sim_main", "No handle found: ");
}
const char* name = vpi_get_str(vpiName, vh1);
s_vpi_value v;
v.format = vpiVectorVal;
vpi_get_value(vh1, &v);
return v.value.vector[4].aval;
}
无论我在这里做什么,该方法都返回 0,表明我没有查看 register_mem 数组。
我究竟做错了什么?