ตระกูลอุปกรณ์ 28 nm ทั้งหมด รวมถึง Stratix® V, Arria® V และ Cyclone® V สามารถรองรับโครงสร้างตัวคูณที่ซับซ้อนขนาด 25x18 โดยใช้บล็อก DSP แบบผันแปร 3 บล็อก
มีข้อจํากัดในซอฟต์แวร์ Quartus® II เมื่อใช้ Megacore® ที่ใช้โครงสร้างนี้โดยใช้ 4 บล็อก DSP
ในการแก้ไขปัญหาข้อจํากัดนี้ ให้ใช้เทมเพลตโค้ดตัวคูณ Complex 25x18 ที่พบในเทมเพลตซอฟต์แวร์ Quartus II เพื่ออนุมานตัวคูณที่ซับซ้อนของคุณ ในการใช้เทมเพลตโค้ดนี้ ก่อนอื่นคุณจะต้องเปิดไฟล์การออกแบบใหม่ จากนั้นเลือกเทมเพลตนี้จากเทมเพลตที่มีในซอฟต์แวร์ Quartus II เทมเพลตนี้พบได้ในเทมเพลต Verilog หรือ VHDL ภายใต้การออกแบบเต็มรูปแบบ>คุณสมบัติ DSP > ด้านเลขคณิต (Stratix-V, Arria-V และ Cyclone-V)
เพื่อความสะดวกของคุณ เทมเพลตโค้ดสําหรับ Verilog มีด้านล่าง:
เทมเพลต Quartus II Verilog
คอมเพล็กซ์ 25x18 คูณ
สําหรับการใช้งานกับตระกูลอุปกรณ์ Stratix V, Arria-V, Cyclone-V และรุ่นที่ใหม่กว่า
โมดูล complex_25x18 (x_r, x_i, y_r, y_i, นาฬิกา, ena1, ena0, รีเซ็ต, p_r, p_i);
เทมเพลตนี้ใช้กับโหมด 25x18 ที่ซับซ้อนบน Stratix-V
อินพุต [24:0] x_r;
อินพุต [24:0] x_i;
อินพุต [17:0] y_r;
อินพุต [17:0] y_i;
Stratix-V DSP รองรับคู่สัญญาณนาฬิกา/ena สูงสุด 3 คู่ และสัญญาณรีเซ็ตไม่ต่อเนื่อง 2 ตัว
สัญญาณนาฬิกาอินพุต;
อินพุต ena1;
อินพุต ena0;
รีเซ็ตอินพุต;
เอาต์พุต [43:0] p_r;
เอาต์พุต [43:0] p_i;
อินพุต/เอาต์พุตทั้งหมดต้องลงชื่อ
การลงทะเบียนอินพุตทั้งหมดต้องใช้ {clock, ena, reset} เดียวกัน
การลงทะเบียนเอาต์พุตทั้งหมดต้องใช้ {clock, ena, reset} เดียวกัน
reged [24:0] x_r_reg, x_i_reg;
reg ลงนามแล้ว [17:0] y_r_reg, y_i_reg;
reg ลงนามแล้ว [43:0] p_r, p_i;
สายที่ลงชื่อไว้ [25:0] a1;
สายที่ลงชื่อไว้ [18:0] a2;
สายที่ลงชื่อไว้ [18:0] a3;
ใช้สายแบบลงนาม [43:0] p1;
มีสายที่ลงชื่อไว้ [43:0] p2;
มีสายที่ลงชื่อไว้ [43:0] p3;
มอบหมาย a1 = x_r_reg - x_i_reg;
มอบหมาย p1 = a1 * y_i_reg;
มอบหมาย a2 = y_r_reg - y_i_reg;
มอบหมาย p2 = a2 * x_r_reg;
มอบหมาย A3 = y_r_reg y_i_reg;
มอบหมาย p3 = a3 * x_i_reg;
@(posedge clock หรือ posedge รีเซ็ตเสมอ)
เริ่ม ต้น
if (reset == 1\'b1)
เริ่ม ต้น
x_r_reg <= 0
x_i_reg <= 0;
y_r_reg <= 0;
y_i_reg <= 0;
p_r <= 0
p_i <= 0
สิ้น สุด
อื่น
เริ่ม ต้น
ถ้า (ena0 == 1\'b1)
เริ่ม ต้น
x_r_reg <= x_r;
x_i_reg <= x_i;
y_r_reg <= y_r;
y_i_reg <= y_i;
สิ้น สุด
if (ena1 == 1\'b1)
เริ่ม ต้น
p_r <= p1 p2;
p_i <= p1 p3;
สิ้น สุด
สิ้น สุด
สิ้น สุด
endmodule