Estoy programando en el coolrunner II cpld. Se está quedando sin recursos, así que decidí implementar mi propio mux de 4 puertos y 12 bits. Después de la implementación encuentro que está usando más de 40 macrocélulas. ¿Alguna forma de reducir este número? Ya he intentado usar las técnicas de optimización con ISE XST, pero no ha reducido el número. Aquí está mi código
module mux_2to1_gates(a,b,sel,y);
input a,b,sel;
output y;
wire sel,a_sel,b_sel;
not U_inv (inv_sel,sel);
and U_anda (asel,a,inv_sel),
U_andb (bsel,b,sel);
or U_or (y,asel,bsel);
endmodule
module mux_four_to_one(a,b,c,d,sel,y);
input a,b,c,d;
input [1:0] sel;
output y;
integer i;
wire mux_1,mux_2;
mux_2to1_gates U_mux1 (a,b,sel[0],mux_1),
U_mux2 (c,d,sel[0],mux_2),
U_mux3 (mux_1,mux_2,sel[1],y);
endmodule
module muxing( selecting, d1,d2,d3,d4, q );
input[1:0] selecting;
input[11:0] d1;
input[11:0] d2;
input[11:0] d3;
input[11:0] d4;
output[11:0] q;
genvar i;
generate
for(i=0; i < 12; i= i+1) begin: test
mux_four_to_one named (d1[i],d2[i],d3[i],d4[i],selecting,q[i]);
end
endgenerate
endmodule