Hola Carlos!
Perdona la tardanza en la respuesta. Estoy de vacaciones con acceso a internet muy restringido. Ahora te respondo a todas las preguntas.
Tu implementación del demux es genial! Ya habrás podido comprobar que hay infinidad de maneras de implementar las cosas. En cuanto a recursos, normalmente todas las implementaciones ocupan lo mismo. Una vez que el sintetizador infiere que se trata de un demux, lo implementa de la forma más óptima. Así que el cómo codificarlo en Verilog es una cuestión de gustos del diseñador.
A mí me gusta el estilo compacto
Este demux todavía se puede hacer más compacto
* Simplificación 1: Uso del operador de concatenación {} para asignar _o a la salida en una sola línea
El bloque código de icestudio quedaría así:
reg [3:0] _o;
wire [1:0] _sel;
assign _sel = {sel1, sel0};
assign {out3,out2,out1,out0} = _o;
always@(*) begin
_o = in0 << _sel;
end
* Simplificación 2: Sustitución de Always @(*) por assign
Al ser un circuito combinación sencillo, se puede integrar directamente en un assign, sin necesidad de definir un bloque combinacional con always. Este código sería totalmente equivalente:
reg [3:0] _o;
wire [1:0] _sel;
assign _sel = {sel1, sel0};
assign {out3,out2,out1,out0} = _o;
assign _o = in0 << _sel;
* Simplificación 3: Combinar los dos assign anteriores y eliminar la variable temporal _o
En la simplificación eiminamos la variable temporal _o y usamos un assign:
wire [1:0] _sel;
assign _sel = {sel1, sel0};
assign {out3,out2,out1,out0} = in0 << _sel;
Y esto nos conduce a la última simplificación:
* Simplificación 4: Un assign para unirlos a todos
Podemos eliminar el cable _sel y meter las dos entradas de selección directamente en el assign:
assign {out3,out2,out1,out0} = in0 << {sel1, sel0};
Insisto, los recursos consumidos son los mismos. El usar un código u otro depende de nuestras preferencias.
Normalmente en Verilog se prefiere que todo sea lo más compacto posible (similar a C).
En VHDL sin embargo, la preferencia es por la "verbosidad"
Pero es cuestión de los gustos del diseñador
Saludos, Obijuan