Necesito seleccionar entre 10 buses de 164 bits diferentes usando BCD de cuatro bits (8421, binario sin signo). ¿Cuál es la forma más eficiente de hacerlo?
Actualmente tengo la siguiente implementación de SystemVerilog
case (bcdIn)
4'd0: muxOut = optionA;
4'd1: muxOut = optionB;
4'd2: muxOut = optionC;
4'd3: muxOut = optionD;
4'd4: muxOut = optionE;
4'd5: muxOut = optionF;
4'd6: muxOut = optionG;
4'd7: muxOut = optionH;
4'd8: muxOut = optionI;
4'd9: muxOut = optionJ;
default: muxOut = 'x;
endcase
donde muxOut
y cada una de las "opciones" tienen 164 bits de ancho. El informe de tiempo para este fragmento de código revela un gran retraso debido al fanout de las líneas seleccionadas (los dígitos de bcdIn).
¿Hay una forma más eficiente de seleccionar entre los autobuses grandes? Tal vez una construcción de árbol de MUXes de algún tipo?
Estoy dispuesto a codificar esto a mano utilizando las declaraciones assign
y similares, pero si hay una manera de inferir una lógica más rápida usando case
, soy todo lo que oigo.