数字信号处理-03- FPGA常用运算模块-乘加器

本文详细介绍了Xilinx FPGA中的乘加器IP核,该核利用DSP片实现乘加运算,支持有符号和无符号数据,可流水线化操作。乘加器执行P=C+/-A*B的操作,输入包括乘法操作数A和B,加减操作数C,以及级联输入PCIN。通过配置IP核,可以设定输入输出位宽、数据类型以及延迟等参数。此外,文中还展示了级联输入对延迟的影响以及数据调整的方法。乘加器IP适用于基于多项式算法的应用,如FIR和IIR滤波器实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面

本文是本系列的第三篇,本文主要介绍FPGA常用运算模块-乘加器,xilinx提供了相关的IP以便于用户进行开发使用。

乘加器

乘加器核提供使用DSP片的乘加实现。它执行两个操作数的乘法,并将全精度乘积加(或减)到第三个操作数,执行P = C +/- A * B的操作。乘加器模块对有符号或无符号数据进行操作。该模块可以流水线化。支持二补符号和无符号操作。支持从1到52位无符号或2到53位有符号的乘数输入和从1到105位无符号或2到106位有符号的加减操作数输入。可选时钟启用和同步清除。

乘加器IP在许多配置中比单独的乘和加操作更有效,因为它使用DSP48原语。可以在许多应用程序中使用这个IP,特别是那些基于多项式算法的应用程序,如FIR和IIR实现。

IP核图示以及端口介绍

image-20210816104757323

NameI/ODescription
A[N:0]InputA输入(乘法操作数1)
B[M:0]InputB输入(乘法操作数2)
C[L:0]InputC输入(加减操作数)
PCINInput级联输入
SUBTRACTInput控制加/减操作(1=减法,0=加法)
CEInput时钟使能 (高有效)
CLKInput时钟信号,上升沿有效
SCLRInput同步复位,高有效
PCOUTOutput输出级联
P[Q:0]Output输出端口

操作指南

流水操作

乘法器核心考虑了两种不同的延迟路径;一个是从A和B输入到P输出,另一个是从C/PCIN输入到P输出。这些延迟被定义为A:B - P延迟和C - P延迟。

这些延迟只能采用两个值:0 表示无延迟或 -1 表示最大/最佳延迟。 如果这两个延迟中的任何一个指定为 -1,则它们都被视为 -1; 对于完全组合的设计,两者都必须设置为 0。

级联的PCIN端口的使用也会影响延迟。

不用级联输入:

image-20210816111500738

使用级联输入:

image-20210816111537251

下图显示了乘加器的内部结构,在内部相当于引用了一个乘法器和一个加减法器。从该结构中可以清楚的看出,A:B - P 延时和C - P延时路径。

image-20210816112011538

数据调整

当传递给IP输入时,所有输入都是右对齐的。必须设置输入的正确 LSB 或 MSB 填充或符号扩展(相当于二进制小数点)。

在乘法加法器中,乘法器输出没有截断或舍入;这是一个完整的精确结果。 C 输入被添加到乘积中。下面的例子实现了切片操作的功能。切片选取输出的0到11位。

image-20210816113035897

向量相乘的例子

图3-4(单DSP片实现)和图3-5(多DSP片实现)实现了一个简单的矢量乘法。在3-4图中,如果使用单DSP片实现向量相乘,则按照该图示连接进行实现。采用级联操作,将级联是输入输出相互连接。此时不能进行设置C的输入。

image-20210816113432636

在3-5图中,如果使用多DSP片实现,则按照该图示连接进行实现。此时可以进行设置C的输入,级联操作通过连接P和C端相互连接。

image-20210816113445230

乘加器IP配置

在乘加器IP配置界面,可以对输入输出的位宽进行配置,以及相关IP的配置。

image-20210816113536147

A/B Input Width :设置端口A或者B输入的宽度。有效的范围是1 ~ 52无符号和2 ~ 53有符号。默认值为18。该值在IP中自动设置,可以手动设置。

C Input Width :设置端口C(加/减操作数)输入的宽度。有效的范围是1到105无符号和2到106有符号。默认值为48。该值在IP中自动设置,可以手动设置。

A/B/C Input Type :设置端口A、B 、C数据的类型。0表示有符号,1表示无符号。默认值为0。该值在IP中自动设置,可以手动设置。

Output MSB / Output LSB :设置输出的切片位宽范围。

Use PCIN :当该参数设置为1时,使用PCIN 端口。 PCIN 端口是
加法器/减法器操作数的级联输入端口。设置为0时,PCIN 端口为
忽略。设置为 1 时,C 输入宽度限制为 48 位。

Sync Control CE Priority :此参数控制 SCLR和CE信号的优先级当该信号为0时,Sync Control CE Priority。当该信号为1时,SCLR 仅在 CE 为高电平时有效。这默认值为0。

A:B - P Latency : A、B端口到输出端口P的时延。取值如下: -1, 0。默认值为-1。

C - P Latency :从 C 或 PCIN 端口到输出端口 P 的延迟。取值如下: -1, 0。默认值为-1。

References

  1. PG192
<think>好的,用户想了解Vivado中的(Multiply Adder)的使用。首先,我需要确认用户的基础,可能是一位FPGA开发者,正在处理数字信号处理或数学密集型应用,比如滤波或矩阵运算。用户可能已经知道基本的DSP概念,但需要具体如何在Vivado中实现法的优化。 接下来,我应该解释Multiply Adder的基本概念,强调它在FPGA中的重要性,尤其是利用DSP Slice来提升效率和性能。需要分步骤说明,可能包括IP核的使用、代码示例以及注意事项。 用户可能需要具体的操作步骤,比如如何调用IP核,或者如何在HDL代码中实例化。同时,代码示例应该包括Verilog和VHDL,因为用户可能使用其中一种语言。需要确保语法正确,并解释关键部分,比如流水线寄存和复位信号的作用。 还要注意资源优化和时序约束的问题,因为这是实际开发中常见的挑战。可能需要提到如何通过调整流水线阶段来提高时钟频率,或者如何避免时序违规。 另外,用户可能没有明确说出的需求包括性能优化、资源节省以及正确实现DSP功能。需要覆盖这些方面,确保回答全面。最后,应该总结使用Multiply Adadder的好处,并提醒参考官方文档获取最新信息。</think>在FPGA开发中,Vivado的(Multiply Adder)是实现数字信号处理(DSP)功能的核心模块。以下是分步骤的技术说明: 一、硬件原理 1. Xilinx FPGA内置DSP48 Slice - 每个Slice包含: $$ \text{输出} = (A \times B) + C $$ - 支持27x18位有符号- 最高支持48位累 - 可配置流水线寄存(提升时序性能) 二、实现方式 1. IP核调用(推荐方法) ```tcl create_ip -name mult_add \ -vendor xilinx.com -library ip \ -version 1.0 \ -module_name mult_add_0 ``` 参数配置: - 输入位宽(A/B/C) - 输出位宽 - 流水线级数(Latency) - 是否使用预 2. HDL直接实现(Verilog示例) ```verilog module dsp_mac ( input clk, input [17:0] a, b, input [47:0] c, output reg [47:0] p ); always @(posedge clk) begin p <= (a * b) + c; // 自动推断DSP48 end endmodule ``` 三、优化要点 1. 时序约束 ```tcl set_max_delay 2.5 -from [get_pins dsp_unit/CLK] \ -to [get_pins dsp_unit/P] ``` 2. 资源复用 - 单DSP48可支持: - 2个24x24- 4个12x12法 四、调试技巧 1. 使用ILA抓取中间信号: ```tcl create_debug_core u_ila ila set_property C_DATA_DEPTH 1024 [get_debug_cores u_ila] ``` 2. 功耗估算公式: $$ P_{dyn} = C \times f_{clk} \times V^2 $$ 五、典型应用场景 1. FIR滤波实现 $$ y[n] = \sum_{k=0}^{N-1} h[k] \cdot x[n-k] $$ 2. 矩阵运算 $$ C_{ij} = \sum_{k=1}^{n} A_{ik} \times B_{kj} $$ 注意:实际开发时应始终参照对应件的《DSP48使用指南》,7系列与UltraScale+架构的配置参数存在差异。建议通过RTL分析视图验证DSP资源的实际利用率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FPGA and ICer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值