例如
// test.sv
class cls;
int b;
endclass
module m
cls testObj;
int map[cls];
initial begin
inst = new;
inst.b = 10;
map[cls] = 12;
$VPIcall;
end
endmoudle
// 伪代码 vpi c
vpiHandle mapHandle = vpi_handle_by_name("m.map", 0); // return valid handle
vpiHandle valueHandle = vpi_handle_by_name("map[testObj]", mapHandle); // return zero
好像我们无法像这样获取valueHandle,我想知道是否可以通过VPI迭代或获取存储在关联数组中的值?
注意事项:
这是一个适用于我的 vcs 示例:
verilog:
class cls;
int b;
endclass
module m;
cls testObj, obj1;
int map[cls];
initial begin
testObj = new;
testObj.b = 10;
map[testObj] = 12;
obj1 = new;
obj1.b = 20;
map[obj1] = 13;
$testme;
end
endmodule
vpi:
#include <stdio.h>
#include <vpi_user.h>
void testme() {
vpiHandle mapHandle = vpi_handle_by_name("m.map", 0); // return valid handle
vpi_printf("map: %p\n", mapHandle);
vpiHandle el;
s_vpi_value val = {vpiIntVal};
vpiHandle iterator = vpi_iterate(vpiReg, mapHandle);
while ((el = vpi_scan(iterator))) {
vpi_get_value(el, &val);
vpi_printf("%s: %d\n", vpi_get_str(vpiType, el), val.value.integer);
}
}