文章来源:FPGA入门到精通
FPGA 中的 DSP,全称 Digital Signal Processing Block(数字信号处理块),是 FPGA 芯片内部专用的硬件运算硬核,专为乘法 (Multiplication) 和乘累加 (MAC, Multiply-Accumulate) 优化,替代通用逻辑单元(LUT)执行密集数学运算,速度更快、占用资源更少、功耗更低。
7系列FPGA中的乘加器是DSP48E1,是25×18的有符号数乘法器。
UltraScale/UltraScale+FPGA中的乘加器是DSP48E2,是27×18的有符号数乘法器。
这里分享几个使用要点:
1、仅支持同步复位。
DSP48E1内部的寄存器(AREG/BREG/MREG/PREG)仅支持同步复位。
异步复位会使综合工具不得不使用Slice中的寄存器外加LUT来模拟复位功能,显著增加资源消耗。
2、三级流水线,可改善时序。
三级流水代码示例。
module dsp_mult (
input clk,
input rst, // 同步复位
input signed [24:0] a,
input signed [17:0] b,
output reg signed [42:0] p
);
// 输入寄存
reg signed [24:0] a_reg;
reg signed [17:0] b_reg;
// 乘法结果寄存(MREG)
reg signed [42:0] mult_reg;
always @(posedge clk) begin
if (rst) begin
a_reg <= '0;
b_reg <= '0;
mult_reg <= '0;
p <= '0;
end else begin
a_reg <= a;
b_reg <= b;
mult_reg <= a_reg * b_reg; // MREG级
p <= mult_reg; // PREG级
end
end
endmodule