Alle 28-nm-Gerätereihen, einschließlich Stratix® V, Arria® V und Cyclone® V, können eine komplexe 25x18-Multiplikatorstruktur mit 3 DSP-Blöcken mit variabler Präzision unterstützen.
Bei der Quartus® II Software besteht eine Einschränkung, wenn der Megacore® verwendet wird, der diese Struktur mit 4 DSP-Blöcken implementiert.
Um diese Einschränkung zu umgehen, verwenden Sie die Complex 25x18 Multiply Code-Vorlage, die in den Quartus II Software-Vorlagen zu finden ist, um Ihren komplexen Multiplikator zu inferieren. Um diese Code-Vorlage zu verwenden, müssen Sie zunächst eine neue Designdatei öffnen und dann diese Vorlage aus den in der Quartus II Software verfügbaren Vorlagen auswählen. Diese Vorlage finden Sie in den Verilog- oder VHDL-Vorlagen unter Volldesigns > arithmetischen > DSP-Funktionen (Stratix-V, Arria-V und Cyclone-V).
Diese Code-Vorlage für Verilog ist zu Ihrer Bequemlichkeit unten:
Quartus II Verilog Vorlage
Komplexes 25x18 Multiplikator
Zum Einsatz mit den Stratix V-, Arria-V-, Cyclone-V- und neueren Gerätereihen
Modul complex_25x18(x_r, x_i, y_r, y_i, Takt, ena1, ena0, Reset, p_r, p_i);
Diese Vorlage gilt für den komplexen 25x18-Modus auf Stratix-V
Eingabe [24:0] x_r;
Eingabe [24:0] x_i;
Eingabe [17:0] y_r;
Eingabe [17:0] y_i;
Stratix-V DSP unterstützt bis zu 3 Takt-/Ena-Paare und 2 async-Reset-Signale
Eingabetakt;
Eingabe ena1;
Eingabe ena0;
Eingabe-Reset;
Ausgabe [43:0] p_r;
Ausgabe [43:0] p_i;
Alle Ein-/Ausgänge müssen unterzeichnet sein.
Alle Eingaberegister müssen den gleichen {clock, ena, reset}
Alle Ausgaberegister müssen den gleichen {clock, ena, reset}
reg unterzeichnet [24:0] x_r_reg, x_i_reg;
reg unterzeichnet [17:0] y_r_reg, y_i_reg;
reg unterzeichnet [43:0] p_r, p_i;
kabelsigniert [25:0] a1;
Kabelsigniert [18:0] a2;
Kabelsigniert [18:0] a3;
Drahtsigniert [43:0] p1;
drahtsigniert [43:0] p2;
drahtsigniert [43:0] p3;
assign a1 = x_r_reg - x_i_reg;
assign p1 = a1 * y_i_reg;
assign a2 = y_r_reg - y_i_reg;
assign p2 = a2 * x_r_reg;
assign a3 = y_r_reg y_i_reg;
assign p3 = a3 * x_i_reg;
always @(posedge clock oder posedge reset)
Beginnen
wenn (reset == 1\'b1)
Beginnen
x_r_reg < = 0;
x_i_reg < = 0;
y_r_reg < = 0;
y_i_reg < = 0;
p_r < = 0;
p_i < = 0;
Ende
oder
Beginnen
if (ena0 == 1\'b1)
Beginnen
x_r_reg < = x_r;
x_i_reg < = x_i;
y_r_reg <= y_r;
y_i_reg < = y_i;
Ende
if (ena1 == 1\'b1)
Beginnen
p_r < = p1 p2;
p_i < = p1 p3;
Ende
Ende
Ende
Endmodule