Ich programmiere auf dem Coolrunner II cpld. Ihm gehen die Ressourcen aus, also habe ich mich entschieden, meinen eigenen 12-Bit-Mux mit 4 Ports zu implementieren. Nach der Implementierung finde ich, dass es über 40 Makrozellen verwendet. Gibt es eine Möglichkeit, diese Zahl zu reduzieren? Ich habe bereits versucht, die Optimierungstechniken mit ISE XST zu verwenden, aber es hat die Anzahl nicht verringert. Hier ist mein Code
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
Anstatt den Mux als Logik auf Gate-Ebene zu implementieren, was den Synthesizer verwirren könnte, versuchen Sie, eine Verhaltens- oder RTL-Beschreibung zu verwenden, die es dem Synthesizer ermöglicht, den Weg zur optimalen Implementierung zu wählen. Ich bin mir ziemlich sicher, dass das Gerät einige eingebaute Makrozellen hat, um einen solchen Mux mit minimalen Ressourcen zu implementieren, die Sie nicht kennen, aber die Software ist es. Sie können beispielsweise den folgenden Code verwenden, um den 12-Bit-4-zu-1-MUX abzuleiten:
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
Nebenbei bemerkt - beide Implementierungen, die in der Frage angegebene und die vorgeschlagene, führten beim Testen auf meinem Computer (Xilinx ISE 14.1) zu einer Verwendung von 12 Makrozellen.
Tagebuch legen