Hi, I'm doing design analysis using VPI but cannot get driver/load with vpiDriver/vpiLoad. Does UHDM plan to support this? Or can I find driver/load using other API?
Thanks a lot!
test.v:
module top;
wire a;
wire b;
assign b = a;
endmodule
.uhdm created with surelog -parse -d uhdm -elabuhdm test.v
surelog.uhdm.tar.gz
main.cpp:
g++ -std=c++17 main.cpp -I$UHDM_DIR/build/generated $UHDM_DIR/build/lib/libuhdm.a $UHDM_DIR/build/third_party/capnproto/c++/src/capnp/libcapnp.a $UHDM_DIR/build/third_party/capnproto/c++/src/kj/libkj.a -ldl -lutil -lm -lrt -lpthread
// UHDM
#include <uhdm/uhdm.h>
#include <uhdm/vpi_user.h>
#include <iostream>
int main(int argc, const char** argv) {
UHDM::Serializer serializer;
vpiHandle design = nullptr;
const std::string filename = "./surelog.uhdm";
const std::vector<vpiHandle>& restoredDesigns = serializer.Restore(filename);
if (restoredDesigns.empty()) {
std::cerr << "Failed to restore design from " << filename << std::endl;
return 1;
}
design = restoredDesigns[0]; // consider only the first design
vpiHandle instItr = vpi_iterate(UHDM::uhdmtopModules, design);
while (vpiHandle inst_h = vpi_scan(instItr)) {
vpiHandle iter = vpi_iterate(vpiNet, inst_h);
while (vpiHandle obj_h = vpi_scan(iter)) {
char* name = vpi_get_str(vpiFullName, obj_h);
std::cout << "Net: " << name << ", file:" << vpi_get_str(vpiFile, obj_h)
<< ", line:" << std::to_string(vpi_get(vpiLineNo, obj_h)) << ":"
<< std::to_string(vpi_get(vpiColumnNo, obj_h)) << std::endl;
vpiHandle driversItr = vpi_iterate(vpiDriver, obj_h);
if (driversItr == NULL) {
std::cout << " Error: driver not found for: " << name << std::endl;
}
vpi_release_handle(driversItr);
vpiHandle loadItr = vpi_iterate(vpiLoad, obj_h);
if (loadItr == NULL) {
std::cout << " Error: load not found for: " << name << std::endl;
}
vpi_release_handle(loadItr);
}
}
vpi_release_handle(instItr);
}
Output:
Net: work@top.a, file:/home/heyfey/git-repos/uhdm-test/verilog/driverTest/test.v, line:2:10
Error: driver not found for: work@top.a
Error: load not found for: work@top.a
Net: work@top.b, file:/home/heyfey/git-repos/uhdm-test/verilog/driverTest/test.v, line:3:10
Error: driver not found for: work@top.b
Error: load not found for: work@top.b
Hi, I'm doing design analysis using VPI but cannot get driver/load with vpiDriver/vpiLoad. Does UHDM plan to support this? Or can I find driver/load using other API?
Thanks a lot!
test.v:
.uhdm created with
surelog -parse -d uhdm -elabuhdm test.vsurelog.uhdm.tar.gz
main.cpp:
Output:
Net: work@top.a, file:/home/heyfey/git-repos/uhdm-test/verilog/driverTest/test.v, line:2:10 Error: driver not found for: work@top.a Error: load not found for: work@top.a Net: work@top.b, file:/home/heyfey/git-repos/uhdm-test/verilog/driverTest/test.v, line:3:10 Error: driver not found for: work@top.b Error: load not found for: work@top.b