Diga que crea una instancia de un número de instancias parametrizadas en una matriz y cada una de estas instancias produce un valor de salida de 8 bits si se selecciona. ¿Cuál sería la mejor manera de conectar estas salidas?
Actualmente utilizo búferes de tres estados como en el siguiente ejemplo:
module foo(output wire [7:0] out);
parameter N = 4;
bar bars[0:N-1] (.out(out));
endmodule
module bar(output wire [7:0] out);
wire selected = ...;
wire [7:0] value = ...;
assign out = selected ? value : 8'bz;
endmodule
Aquí la lógica garantiza que la señal selected
será 1
para una y solo una instancia.
Todo esto funciona bien en el simulador, así como en un FPGA. Sin embargo, dado que recibo advertencias sobre esta construcción al sintetizar y, según tengo entendido, Xilinx eliminó los búferes tri-estatales internos en los FPGA más nuevos, me preguntaba cuál sería la mejor forma de conectar estos buses de salida.
Estaba pensando en cambiar la asignación de salida a
assign out = selected ? value : 8'b0;
y luego OR-ing las salidas juntas. Sin embargo, no estoy seguro de cómo hacerlo, ya que el tamaño de la compuerta OR depende de un parámetro.