У меня есть несколько параметризованных Verilog, и мне нужно динамически генерировать имена модулей экземпляров, но я не знаю, как, в пределах самого Verilog (т.е. без создания сценария или аналогичного для создания плоского Verilog).
Немного фона, у меня есть большое количество модулей памяти в библиотеке памяти.Все они названы, примерно, MemModuleDepth_Width в широком диапазоне глубины и ширины.У меня есть параметризованный модуль, который хотел бы использовать воспоминания из этой библиотеки.Однако, чтобы сделать это, мне нужно динамически генерировать имена модулей, как показано ниже.
module fifo(in, out)
parameter width;
parameter depth;
...fifo stuff...
MemModule"depth"_"width" (read_address, read_data, etc.) <== where depth and width sweep in values
endmodule
Это не типичное использование чего-то вроде оператора generate, и, как я уже пробовал, также внеобласть определения макросов, поскольку макросы раскрываются до синтаксического анализа тела кода.Это не работает:
`define DATAMEM(depth, width) MemModule``depth``_``width``
...
generate
genvar i;
for(i = 1; i <= depth; i = i++) begin : depth
genvar j;
for(j = 1; j <= width 0; j = j++) begin : width
`DATAMEM(i, j) dpRam
end
end
endgenerate
Этот код просто пытается создать экземпляр "MemModulei_j" вместо того, чтобы подставлять фактические числовые значения для i и j.
Любые подсказки относительно того, как можно сделатьэто?