Ответ 1
Из IEEE Std 1364-2001:
12.1.3.3 generate-conditional Условие генерации-генерации является конструкцией if-else-if generate, которая разрешает модули, определяемые пользователем примитивы, Verilog gate примитивы, непрерывные задания, начальные блоки и всегда блокируется для условного создания экземпляра в другом модуле основанный на выражении, которое является детерминированным во время проектирования развернутый.
пример приведен в LRM:
module multiplier(a,b,product);
parameter a_width = 8, b_width = 8;
localparam product_width = a_width+b_width; // can not be modified
// directly with the defparam statement
// or the module instance statement #
input [a_width-1:0] a;
input [b_width-1:0] b;
output [product_width-1:0] product;
generate
if((a_width < 8) || (b_width < 8))
CLA_multiplier #(a_width,b_width) u1(a, b, product);
// instantiate a CLA multiplier
else
WALLACE_multiplier #(a_width,b_width) u1(a, b, product);
// instantiate a Wallace-tree multiplier
endgenerate
// The generated instance name is u1
endmodule