Hay una manera mucho mejor de hacer un multiplexor, usando un vector.
Ejemplo:
module mux(
input wire a,
input wire b,
input wire c,
input wire[1:0] sel,
output wire y
);
wire [3:0] mux = {1'b0,c,b,a};
assign y = mux[sel];
endmodule
En este caso, asigna sus salidas a la variable 'mux' y luego la salida será el elemento sel
'th en el vector.
Realmente no existe un mux 3: 1: siempre tendrá una entrada \ $ 2 ^ n \ $ donde \ $ n \ $ es el número de bits en la señal de selección. Así que tienes que tener alguna forma de manejar la condición extra. Una opción es elegir una constante fija como 0 o 1 (que depende de a qué se conecta más adelante, por ejemplo, es posible que desee un 1 si está manejando un bus que se considera 'inactivo' cuando está alto). Alternativamente, puede agregar algún tipo de comprobación de errores, por ejemplo, tener un bit de salida adicional para indicar que hubo un error (o tener la lógica opuesta y significa que la salida es válida).
Ejemplo:
module mux(
input wire a,
input wire b,
input wire c,
input wire[1:0] sel,
output wire y,
output wire valid
);
wire [3:0] mux = {1'b0,c,b,a};
assign y = mux[sel];
assign valid = (sel != 2'b11);
endmodule
En este ejemplo, cuando la señal sel
tiene un valor que no es 3, entonces la señal de salida valid
será alta para indicar que la entrada fue correcta. De lo contrario, si la entrada es 3, entonces la señal valid
será baja para indicar que la entrada no fue válida.
Vale la pena señalar las razones por las que es preferible usar un vector de esta manera. En primer lugar, es bastante fácil de seguir: si comparas tu código con el ejemplo, es mucho más claro lo que sucede utilizando un vector comparado con tener que descodificar la lógica. En segundo lugar, y lo que es más importante, permite una parametrización más fácil, puede agregar un parámetro a su bloque que escalará correctamente la señal de selección y la señal de mux en función del parámetro, aunque para hacer esto, también tendría que convertir las señales de entrada en un vector también que incluso eliminaría la necesidad de la variable 'mux'.