Как передать переменную в макрос определения, используемый для доступа к пути в системном verilog

Я использую макрос определения, чтобы установить путь для модуля, то есть `define DUT_PATH(CH) dut_top.u_channel_```CH``_mode

и используя этот макрос определения в модуле, где мы передаем номер канала,

модуль channel_oper # (int channel_num = 0) (входная логика addr_base;);

assign addr_base = `DUT_PATH (channel_num).addr_base;

endmodule

В верхнем файле мы называем модуль как

channel_oper(3); //channel_oper(channel_num)

где я ожидаю, что выход addr_base будет dut_top.u_channel_3_mode.addr_base, но я получаю значение, назначенное как dut_top.u_channel_ channel_num _mode.addr_base, и ошибка перекрестной разыменования.

Можете ли вы предоставить мне решение или какие-либо предложения для этого, чтобы использовать параметризованную переменную для определения макроса.

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

1 ответ

Вот пример, который может работать в некоторых случаях (работает в synopsys vcs/system verilog). Он генерирует имя экземпляра для каждого канала, но в несколько иной форме. Он автоматически вставляет [num] из итерации цикла, а также вставляет дополнительную иерархию для оператора 'if', я назвал его 'number'. Вам также необходимо знать максимальное количество каналов, чтобы правильно организовать цикл.

module top;
   mod#(1) mod1();
   mod#(4) mod2();
endmodule // top

module mod#(int P = 0);
   for (genvar i = 0; i < 10; i++) begin: channel
      if (i == P) begin:number
        mx mx();
      end
   end
endmodule

module mx;
   initial
     $display("%m");
   initial #2 $finish;
endmodule // mx

Теперь вот списки экземпляров 'mx':

top.mod1.channel[1].number.mx
top.mod2.channel[4].number.mx
Другие вопросы по тегам