Estoy tratando de generar un multi-puerta de entrada para que las entradas se pueden seleccionar cuando el diseño se elabora.
Permítanme darles un ejemplo que (con suerte) de hacer esto más claro:
module selectable_xor(input [7:0] in, output out);
parameter [7:0] SELECT = 8'b10010100;
// this should be generated for the default value of SELECT:
assign out = in[7] ^ in[4] ^ in[2]
endmodule
Así, out
debe ser la salida de una puerta XOR que tiene los bits de in
como datos de entrada para que el bit correspondiente en SELECT
está configurado.
Estoy intentando algo como la siguiente:
generate
genvar gen_i;
assign out = 1'b0;
for (gen_i = 0; gen_i < 8; gen_i = gen_i + 1)
if (SELECT[gen_i])
assign out = out ^ in[gen_i];
endgenerate
Pero esto produce valores no definidos por la out
de la señal.
Hay una buena manera de generar una puerta con un número variable de entradas en Verilog?
PS: Sobre el caso de uso: estoy tratando de implementar un LFSR para que el polinomio es un parámetro.
Edit: El consenso parece ser que me debe utilizar la siguiente expresión equivalente y la confianza que el sintetizador para optimizarlo para el circuito que quiero:
assign out = ^(in & SELECT);
Aunque me hacen confiar en que cualquier sintetizador decente va a ser capaz de hacer esto, todavía me gustaría saber si hay una manera en Verilog que en realidad el código de este circuito de mí mismo.
Considere la posibilidad de que, en lugar de la XOR-puerta de arriba, yo quería código de una puerta. La expresión equivalente es:
assign out = |(in & SELECT);
Ok, eso es prácticamente el mismo que para el XOR-gate. Para una Y la puerta, sin embargo, la expresión es diferente:
assign out = &(in | ~SELECT);
Mi punto es que para cada tipo de puerta, voy a tener que venir para arriba con una diferente expresión equivalente. Prefiero tener una forma general en el código de una puerta para que las entradas pueden ser parametrizadas porque entonces puedo utilizar la misma técnica para cualquier tipo de puerta.
Edit 2: Ya que mi recompensa expira mañana, voy a editar esta pregunta una vez más para que lo golpee. Este es un comentario que he dejado para explicar lo que quiero que espero sea más visible en la cuestión del cuerpo:
Lo que yo quiero no tiene nada que ver con los recursos físicos. Cuando hablo acerca de "puertas", me refiero a la Verilog concepto. Quiero ser capaz de definir una puerta con entradas en función de algún parámetro. Más específicamente, me quiero esta puerta para tener
in[i]
como una entrada fibSELECT[i]
está configurado. Yo no quiero una expresión equivalente que puede ser optimizado para la puerta que yo quiero. Como he dicho antes, esta expresión equivalente podría como bien ser implementado como 8 Y puertas y 8 entradas XOR-puerta porque eso es lo que realmente está codificado. Espero que esto te aclare las cosas :-)