На мой взгляд, следующий код выглядел бы немного лаконичным и более читабельным, поскольку он имеет только один l oop. Однако это зависит от вас.
Но одна вещь заключается в том, что ваши if
условия немного перекрываются, поэтому я подумал, что следующее отразит их немного лучше.
Теперь, здесь лучше использовать параметры вместо макросов. Есть как минимум 2 причины:
параметры ограничены и принадлежат, вы избежите возможных конфликтов глобального пространства, если сделаете это.
вы можете достаточно легко создать экземпляр этого модуля с другим набором параметров, но вам будет сложно заставить все текстовые макросы правильно работать в Verilog.
Итак, вот мой пример:
parameter isInt=1; // i guess, if it is not int, it is float
parameter isFixed=0;
parameter inputPortCount = 4; // or whatever number.
generate
genvar m ;
for(m=0;m<inputPortCount;m=m+1) begin: loop
if (isFixed)
floatcomputeBlock m_computeBlock_in(i/o assign);
else if (isInt)
integercomputeBlockPynq m_computeBlock_in(i/o assign);
else
floatcomputeBlockPynq m_computeBlock_in(i/o assign);
end
endgenerate