4 port 12 bit mux consume 48 macrocélulas!

1

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
    
pregunta Legen Diary

1 respuesta

5

En lugar de implementar el mux como una lógica de nivel de puerta, que puede confundir al sintetizador, intente usar alguna descripción de comportamiento o RTL, que permitirá al sintetizador elegir la manera de implementarlo de manera óptima. Estoy bastante seguro de que el dispositivo tiene algunas macrocélulas integradas para implementar tal mux en recursos mínimos, de los que no tiene conocimiento, pero el software sí lo está. Por ejemplo, puede usar el siguiente código para deducir el MUX de 12 bits de 4 a 1:

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;

wire [11:0] d[3:0];

assign d[0] = d1;
assign d[1] = d2;
assign d[2] = d3;
assign d[3] = d4;

assign q = d[selecting];

endmodule

Como nota al margen, ambas implementaciones, la dada en la pregunta y la propuesta resultaron en el uso de 12 macrocélulas cuando se probaron en mi máquina (Xilinx ISE 14.1).

    
respondido por el Eugene Sh.

Lea otras preguntas en las etiquetas