Este es mi código para un multiplexor simple de 2-1 8 bits, donde SW[17]
es mi selector.
Si está activado, muestra Y = SW[15:8]
, si está desactivado, muestra X = SW[7:0]
.
module part2 (SW, LEDR, LEDG);
input [17:0] SW; //inputs
output [17:0] LEDR; //light every switch
output [7:0] LEDG; //byte desired
//All switches to red leds.
assign LEDR = SW;
//Green leds get the desired byte.
assign LEDG[0] = (~SW[17] & SW[0]) | (SW[17] & SW[8]);
assign LEDG[1] = (~SW[17] & SW[1]) | (SW[17] & SW[9]);
assign LEDG[2] = (~SW[17] & SW[2]) | (SW[17] & SW[10]);
assign LEDG[3] = (~SW[17] & SW[3]) | (SW[17] & SW[11]);
assign LEDG[4] = (~SW[17] & SW[4]) | (SW[17] & SW[12]);
assign LEDG[5] = (~SW[17] & SW[5]) | (SW[17] & SW[13]);
assign LEDG[6] = (~SW[17] & SW[6]) | (SW[17] & SW[14]);
assign LEDG[7] = (~SW[17] & SW[7]) | (SW[17] & SW[15]);
endmodule
Este código es simple, pero estoy tratando de optimizarlo y reemplazar las 8 líneas.
Quería usar algún tipo de bucle, pero fallé:
integer index;
initial
begin
for(index = 0; index < 8; index = index+1)
begin
assign LEDG[index] = (~SW[17] & SW[index]) | (SW[17] & SW[index+8]);
end
end
También probé esto y fallé:
//Green leds get the desired byte.
always @(SW) begin
if (~SW[17])
assign LEDG = SW[7:0];
else
assign LEDG = SW[15:5];
end
Recibo un error que dice que la parte izquierda de la tarea debe tener un tipo de datos variable.