Xilinx DSP Macro IP (PG323) 详细介绍
概述
Xilinx DSP Macro IP 是 AMD Xilinx 提供的一个 LogiCORE™ IP 核,专为利用 FPGA 的 DSP 切片(DSP48 或 DSP58)实现高效的数字信号处理(DSP)运算而设计。该 IP 核允许用户通过简单的配置界面定义复杂的 DSP 操作(如乘累加、加法/减法、移位等),并自动映射到 FPGA 的 DSP 切片资源。DSP Macro IP 提供了高度灵活的指令集配置,支持动态或静态操作选择,适用于信号处理、通信、图像处理和机器学习等高性能应用。
主要功能
DSP Macro IP 的核心功能是通过用户定义的指令集,利用 DSP 切片执行高效的数学运算。其主要特点包括:
- 灵活的指令集:
- 支持用户定义的多条 DSP 操作指令(如 A*B+P、A+B、P+C 等)。
- 支持动态指令选择(通过 SEL 端口)或静态指令(在生成时固定)。
- 高效利用 DSP 切片:
- 自动映射到 DSP48E1(7 系列)、DSP48E2(UltraScale)或 DSP58(Versal)切片。
- 支持前加法器(Pre-adder)、乘法器、加法/减法器和累加器的组合操作。
- 宽位支持:
- 输入端口(A、B、C、D)支持多种位宽,最大 58 位(有符号)或 48 位(无符号)。
- 输出端口(P)支持全精度输出,最大 48 位(7 系列)或 96 位(Versal)。
- 流水线配置:
- 支持 0 至 4 级流水线寄存器,平衡延迟和吞吐量。
- 可配置每个输入(A、B、C、D)的寄存器深度。
- 控制信号:
- 支持时钟使能(CE)、复位(RST)、进位输入(CARRYIN)、级联输入(ACIN、BCIN、PCIN)等。
- 支持动态操作选择(SEL 端口)和进位级联(CARRYCASCIN)。
- 舍入和溢出处理:
- 支持简单舍入(RNDSIMPLE)和随机舍入(通过 CARRYIN 控制)。
- 提供溢出/进位输出(CARRYOUT、CARRYCASCOUT)。
- 广泛的器件支持:
- 7 系列 FPGA(Artix-7、Kintex-7、Virtex-7、Zynq-7000)。
- UltraScale 和 UltraScale+ 系列。
- Versal 自适应计算加速平台。
IP 核架构
DSP Macro IP 的内部架构基于 FPGA 的 DSP 切片,其核心组件包括:
- 输入端口:
- A、B:乘法器输入,典型用于 A*B 运算。
- C:加法/减法输入,常用于累加或独立加法。
- D:前加法器输入,用于 D±A 或 D±B 操作。
- ACIN、BCIN、PCIN:级联输入,用于多 DSP 切片的大规模运算。
- 控制端口:
- SEL:动态选择指令(宽度为 ceil(log2(num_instructions)))。
- CE:时钟使能,控制寄存器更新(CED1、CED2、CED3 等)。
- RST:同步复位,清除寄存器状态。
- CARRYIN、CARRYCASCIN:进位输入,支持舍入或级联加法。
- 输出端口:
- P:主输出,包含运算结果(最大 48 位或 96 位)。
- ACOUT、BCOUT、PCOUT:级联输出,用于多 DSP 切片连接。
- CARRYOUT、CARRYCASCOUT:进位输出,支持溢出检测。
- DSP 切片映射:
- 利用 DSP 切片的乘法器(25x18 位或 27x18 位)、前加法器(D±A)和加法/减法器(P±C)。
- 支持动态多路复用器(Dynamic Mux)或静态多路复用器(Static Mux)实现指令选择。
- 流水线寄存器:
- 可配置 A、B、C、D 和 P 路径的寄存器级数(0 至 4 级)。
- 提高时钟频率,但增加延迟。
该 IP 核通过 Vivado IP Integrator 或 HDL 实例化生成,自动优化 DSP 切片的使用和时序性能。
配置选项
DSP Macro IP 提供丰富的配置选项,用户可通过 Vivado 的 IP 定制界面或 Tcl 脚本进行设置。主要配置参数包括:
- 指令集(Instructions):
- 用户定义的操作列表,例如:
- A*B+P(乘累加,MACC)。
- A+B(加法)。
- P+C(累加)。
- D-A(前加法器减法)。
- 支持多达 16 条指令,通过 SEL 端口动态选择。
- 用户定义的操作列表,例如:
- 输入端口配置:
- A、B、C、D 位宽:可配置为 1 至 58 位(有符号)或 1 至 48 位(无符号)。
- ACIN、BCIN、PCIN:启用级联输入,用于多 DSP 切片运算。
- 输出端口配置:
- P 位宽:支持全精度(最大 48 位或 96 位)或用户定义的截断宽度。
- 舍入模式:
- RNDSIMPLE:添加 0.499 的舍入常数,截取 MSB。
- 随机舍入:通过 CARRYIN 修改舍入方向。
- 流水线级别:
- A、B、C、D 寄存器:0 至 4 级。
- P 寄存器:0 至 2 级。
- 反馈寄存器:用于累加操作的额外流水线。
- 控制信号:
- CE 使能:支持独立的 CED1、CED2、CED3(D 路径)、CEA1、CEA2(A 路径)等。
- RST 复位:支持同步复位,作用于指定寄存器。
- CARRYINSEL:选择进位输入源(CARRYIN 或 CARRYCASCIN)。
- 实现优化:
- 速度优化:优先提高时钟频率。
- 面积优化:减少 DSP 切片和 LUT 使用。
- 其他选项:
- OPMODE 控制:支持动态 OPMODE(通过 SEL)或静态 OPMODE。
- ALUMODE:配置加法/减法模式。
- INMODE:控制前加法器和输入选择。
示例配置
以下是一个简单的 MACC(乘累加)运算的 Verilog 实例化示例:
module dsp_macro_example (
input wire clk, // 时钟输入
input wire rst, // 复位信号
input wire ce, // 时钟使能
input wire [17:0] a, // A 输入
input wire [17:0] b, // B 输入
input wire [47:0] c, // C 输入
output wire [47:0] p // 输出
);
dsp_macro #(
.INSTRUCTIONS("A*B+P"), // 乘累加指令
.A_WIDTH(18), // A 位宽
.B_WIDTH(18), // B 位宽
.C_WIDTH(48), // C 位宽
.P_WIDTH(48), // P 位宽
.LATENCY(2), // 2 级流水线
.ROUNDING("RNDSIMPLE") // 简单舍入
) dsp_inst (
.CLK(clk),
.RST(rst),
.CE(ce),
.A(a),
.B(b),
.C(c),
.P(p),
.SEL(1'b0), // 静态指令
.CARRYIN(1'b0)
);
endmodule
FPGA设计工具推荐
-
SZ901:
SZ901 是一款基于XVC协议的FPGA网络下载器。- 最高支持53M
- 支持4路JTAG独立使用
- 支持端口合并
- 支持国产FLASH烧写
- 下载器无限扩展
- 配备专属程序固化软件,一键烧写,能大大减小程序固化时间!
-
SZ501(PRO_A7):
- SZ501 是一款适合初学者FPGA开发板,包含低速高速接口!
- 双网口(RGMII)
- 双SFP+
- DDR
- UART
- IIC