Skip to content

VPI: Unable to get driver/load #1101

Description

@heyfey

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions