SystemVerilog Преобразовать `определить объединенную строку, оцененную в определение Int - PullRequest
0 голосов
/ 24 июня 2018

У меня длинный список defines defining with numerous properties for these registers. I'd like to have a function that takes the string of the register name and concatenates the big определение имени и вычисление значения `define int при обработке.

Простая функция под названием понравилась следующим образом:

PrintRegInfor (REGA);

Вот код класса, который не работает:

`define CHIP_REGA_ADDR   16'h0000
`define CHIP_REGA_RESET_VAL   0
`define CHIP_REGB_ADDR   16'h0100
`define CHIP_REGB_RESET_VAL   1

.
.
`define CHIP_REGZ_ADDR       16'h1000
`define CHIP_REGZ_RESET_VAL  0

clase module;
function PrintRegInfo(string reg_name)
    string reg_reset_string;
    string reg_addr_string;
    int reg_reset_int;
    int reg_addr_int;
    reg_reset_string = {"`CHIP_",reg_name,"_RESET_VAL"};
    reg_addr_string = {"`CHIP_",reg_name,"_ADDR"};
    reg_reset_int = reg_reset_string;
    reg_add_int = reg_add_string;
    $display("Reg %s at address 0x%x has a reset value of 0x%x\n",reg_name, reg_add_int,reg_reset_int);
endfunction
endclass

Похоже, преобразование строки в int преобразовывает фактическую строку из значения ascii в int.Я хотел бы, чтобы он оценил `определение созданной строки.Возможно ли это?

Я хотел бы получить:

Reg Rega по адресу 0x0000 имеет значение сброса 0x0

Я получаю что-то вроде: Reg Rega по адресу 0x3478 имеетзначение сброса 0x8373

Спасибо!

1 Ответ

0 голосов
/ 24 июня 2018

Нельзя использовать строковые переменные для формирования идентификаторов в процедурном коде.Вы можете создать макрос для этого

`define PrintRegInfo(reg_name) \
  $display("Reg %s at address 0x%x has a reset value of 0x%x\n", `"reg_name`", \
 `CHIP_``reg_name``_ADDR, \
  `CHIP_``reg_name``RESET_VAL);

Однако аргумент, передаваемый макросу, не может быть строковой переменной.Вы можете переосмыслить способ организации данных, не используя операторы define, а вместо этого создать базу данных с ассоциативными массивами.

...