Как мне найти все драйверы для провода / переменной с помощью VPI?
Я сделал тестовый модуль и хочу выяснить, какие именно цепи и переменные влияют друг на друга. Вот код:
module test(
input logic unsigned [7:0] x,
input logic unsigned [7:0] y,
output logic unsigned [7:0] res
);
logic unsigned [7:0] inner1;
logic [7:0] inner2;
logic [7:0] inner3;
assign inner1 = x * y;
assign inner2 = -inner1;
assign inner3 = -x;
assign res = inner2 + inner3;
endmodule
Здесь движет и, и диски
inner2
И вся конструкция выглядит как это . В следующем коде я просто пытаюсь найти отношения
inner1
с помощью vpiDriver и vpiLoad .
static int initiate(s_cb_data* cbdata) {
// Get handle
vpiHandle inner1 = vpi_handle_by_name("test.inner1", NULL);
vpi_printf("ANALYSE DRIVERS AND LOADS FOR: %s\n", vpi_get_str(vpiFullName, inner1));
// List all drivers
vpiHandle driver_itr = vpi_iterate(vpiDriver, inner1);
vpiHandle driver;
while(driver_itr && (driver = vpi_scan(driver_itr))){
vpi_printf("DRIVER FOUND OF TYPE: %s\n", vpi_get_str(vpiType, driver));
}
// List all loads
vpiHandle load_itr = vpi_iterate(vpiLoad, inner1);
vpiHandle load;
while(load_itr && (load = vpi_scan(load_itr))){
vpi_printf("LOAD FOUND OF TYPE: %s\n", vpi_get_str(vpiType, load));
}
return 0;
}
Однако я получаю сообщение об ошибке «Невозможно сканировать драйверы / нагрузки с помощью дескриптора векторной ссылки». Это кажется странным, поскольку, глядя на раздел 37.21 IEEE Std 1800-2017, мне кажется, что я смогу получить эту информацию.
Я пробовал использовать
vpi_handle_by_index(inner1, <bit>);
чтобы получить дескриптор отдельных битов (хотя это кажется неэффективным, так как мне нужно пройти каждый бит). Тем не менее, при запуске программы я получаю только следующий результат:
ANALYSE DRIVERS AND LOADS FOR: test.inner1
ANALYSE BIT 3: test.inner1[3]
LOAD FOUND OF TYPE: vpiContAssign
Я не уверен, почему он не находит драйверов. Примечание:
x
а также
y
вот сети, а остальные - переменные.