数字信号处理-04- FPGA常用运算模块-除法器(一)

简介: 数字信号处理-04- FPGA常用运算模块-除法器

写在前面


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

除法器


除法器生成器IP 创建了一个基于基数 2 非恢复除法或具有预分频的高基数除法的整数除法电路。 Radix-2 算法利用 FPGA 逻辑来实现一系列吞吐量选项,包括单周期,而高基数算法在较低吞吐量下利用 DSP 切片,但通过重用来减少资源。

该IP符合 AXI4-Stream 的接口。操作数最大为 64 位宽的整数除法。提供Radix-2、LUTMult 和High Radix 实现算法以允许选择资源和延迟权衡。可选操作数宽度、同步控制和可选延迟。可选的除以零检测。

三种除法器实现方式


LUTMult


除数倒数的简单查找估计,后跟乘数。 由于倒数估计中需要偏差,因此仅支持余数输出类型。 如果用于创建小数输出,此偏差会引入偏移(错误)。 推荐用于小于或等于 12 位的操作数宽度。 此实现方式使用 DSP Slice、块 RAM 和少量 FPGA 逻辑原语(寄存器和LUT)。 对于可以使用 Radix2 或 LUTMult 选项的操作数宽度,由于使用了 DSP 和块 RAM 原语,LUTMult 解决方案提供了使用较少 FPGA 逻辑资源的解决方案。

该实现方式特点如下:

  • 提供了带有整数余数的商;
  • 可以使用流水线并行架构以提高吞吐量;
  • 可配置延迟;
  • 2 到 17 位的分频宽度;
  • 2 到 12 位的除数宽度(被除数宽度和除数宽度之和限制为 23 位);
  • 独立的除数和除数位宽;
  • 使用单个时钟的完全同步设计;
  • 支持无符号或二进制补码有符号数。

Radix-2


使用整数操作数的基数 2 非恢复整数除法,允许生成小数或整数余数。 对于小于 16 位左右的操作数宽度或需要高吞吐量的应用程序,建议使用该种实现方式。 实现使用 FPGA 逻辑原语(寄存器和 LUT)。Radix2 解决方案不使用 DSP 或块 RAM 原语,因此当其他地方需要这些原语时,建议使用此实现。

该实现方式特点如下:

  • 提供整数或小数余数的商;
  • 流水线并行架构以提高吞吐量;
  • 减少流水线大小与吞吐量可选;
  • 被除数宽度从 2 到 64 位;
  • 除数宽度从 2 到 64 位;
  • 独立的被除数、除数和小数位宽;
  • 使用单个时钟的同步设计;
  • 支持无符号数或二进制补码有符号数;
  • 可以实现 1/X(倒数)功能。

High Radix


带有预缩放的高基数除法。 对于大于 16 位左右的操作数宽度,建议这样做。 此实现使用 DSP Slice 和 Block RAM。

该实现方式特点如下:

  • 通过预缩放启用高基数除法;
  • 提供可选的商和小数输出;
  • 可配置宽度、同步控制、可选延迟和除以零检测;
  • 使用 DSP Slices。

Divider Generator 内核使用三种实现中的一种。 LUTMult 推荐用于非常小的操作数宽度、高吞吐量以及必须最小化切片使用的情况。 对于较小的操作数宽度、高吞吐量或必须最小化 DSP 切片使用的情况,建议使用 Radix-2 解决方案。 对于较大的操作数宽度,建议使用高基数解决方案。

三种实现方式延迟对比


分频器内核的延迟是 AXI4-Stream 配置参数和所选算法延迟的函数。 当 AXI4-Stream 模式设置为非阻塞且核心算法和吞吐量设置为每个时钟周期输入一个样本时,延迟仅是一个常数。 如果选择了完整的 AXI4-Stream 行为。 这是因为 FIFO 用于管理此模式的数据,并且 FIFO 的深度增加了延迟。

LUTMult


完全流水线化的 LUTMult 的延迟为 8。

Radix-2


完全流水线分频器的延迟(内核生成第一个有效输出之前所需的启用时钟周期数)是被除数位宽的函数。 如果需要小数输出,则完全流水线延迟也是小数位宽的函数。 一般来说:

  • 对于整数余数除法器,完全流水线延迟的数量级为 M,其中 M 是商的宽度。
  • 对于分数余数除法器,完全流水线延迟的数量级为 M + F,其中 F 是分数输出的宽度。

下表提供了用于分频器选择的完全流水线延迟公式的列表。 通过完整的流水线,可以实现最大可能的性能。 当每格时钟数为 1 时,可以手动将延迟设置为介于 0 和表 2-1 中所示值之间的数字。 这允许以降低内核可以计时的最大时钟频率为代价来减少内核的延迟。 减少延迟会减少使用的寄存器数量,但 LUT 计数保持大致相同。

image.png

M = 被除数和商宽度,F = 小数宽度,A = AXI 接口的总延迟。

High Radix


表中位宽范围为被除数和商宽度 + 分数宽度。

4 to 12 13 to 26 27 to 40 41 to 54 55 to 68 69 to 82
2 3 4 5 6 7

表中行位宽范围为被除数和商宽度 + 分数宽度。

image.png

三种实现方式吞吐量对比


LUTMult


此解决方案始终支持全吞吐量。

Radix-2


Clocks per Division 参数允许对吞吐量与资源进行一系列选择。当 Clocks per Division 设置为 1 时,内核是完全流水线化的,因此每个时钟周期的最大吞吐量为一个分频,但使用的资源最多。 Clock per Division 设置为 2、4 和 8,对于较小的内核尺寸,这些相应的因素会降低吞吐量。AXI 接口为非阻塞提供 0 的额外延迟,无输出线程的阻塞为 1,输出线程为阻塞 (m_axis_dout_tready) 为 3。但是,当选择阻塞模式时,延迟会随运行时间而变化。

High Radix


迭代过程是作为循环来实现的,以减少资源。 这意味着必须推迟新输入,直到在迭代电路中完成先前的计算。 因此,最大可能的吞吐量是每个时钟 1/N 分频,其中 N 是所需的迭代次数。 然而,为了达到这个最大吞吐量,输入可能需要是突发的。 这是因为迭代引擎可以通过管道的每个阶段进行流水线化,为隔行分割提供一个轮播位置。

添加 AXI4-Stream 接口后,平均吞吐量保持不变。 阻塞模式为数据提供了 FIFO 缓冲元素,因此无法对内核何时准备好接受新数据进行确定性预测。 对于 NonBlocking 模式,时序更可预测。 Vivado IDE 中的分频器生成器接口提供分频器以恒定间隔连续接受输入的速率(N 中的 1)的反馈。 这在接口的吞吐量字段上表示,并表示为每 N 个启用的时钟周期 1 个输入。

IP核图示及端口介绍


IP核图示如下图所示:

image.png

image.png

image.png

运算方式区别


LUTMult


此参数化解决方案将M位宽的变量除数除以N位宽的变量除数。输出由商和整数余数组成。除法的结果是M位宽的商和N位宽的整数余数。

image.png

当选择有符号运算时,所有操作数和结果都使用两个补号,但会导致结果的大小减少一位。

image.png

LUTMult解决方案支持可选的零除输出。对于除零,商和余数结果是未定义的。LUTMult解决方案始终支持全吞吐量(每个时钟周期一个结果)。延迟可以配置为完全流水线所需的最大值(超过该值,进一步的寄存器将无法提高性能)。由于LUTMult解使用倒数的常数有限精度估计乘以被除数,从而获得结果,因此除数的最大宽度是被除数宽度的函数。操作数宽度之和限制为23位。就商和余数的符号而言,LUTMult解决方案以与Radix2解决方案相同的方式处理负操作数。

Radix-2


此参数化解决方案将M位宽的变量除数除以N位宽的变量除数。输出由商和整数余数或分数结果(商继续超过二进制点)组成。在整数余数情况下,除法的结果是商的M位宽字段和整数余数的N位宽字段。对于带整数余数的有符号模式,商和余数的正负也对应于下式。

image.png

在分数情况下,结果是商的M位宽字段,结果的分数部分为F位宽字段。

image.png


当选择有符号运算时,所有操作数和结果都使用一个2补符号位,从而使结果的大小减少一位。

image.png

对于带分数输出的带符号模式,在商和分数字段中都有符号位。对于除零,商、余数和分数结果未定义。IP是高度流水化的。核心的吞吐量是可配置的,可以从每个分区1个时钟周期减少到每个分区2、4或8个时钟周期,以减少资源。可以独立设置被除数和除数的位宽度。商的位宽度等于被除数的位宽度。整数余数的位宽度等于除数的宽度。对于分数输出,余数位宽度与被除数和除数无关。核心处理2到64位的数据范围,用于被除数、除数和分数输出。

除法器可用于实现X的倒数;这就是1/X函数。为此,将被除数位宽度设置为2,并选择分数模式。然后,对于无符号或有符号运算,被除数输入都绑定到01,并且X值通过除数输入提供。上电复位或ARESETn后,IP的输出商和分数的零,直到出现新结果。

High Radix Solution


高基数实现在采用加速高基数除法算法之前,通过预缩放操作数执行除法。该设计是完全流水线的最大时钟频率。首先,对除数进行归一化,然后对其倒数进行估计。两个操作数都乘以此估计值,使除数更接近1。预刻度的精度和精确度决定了在每次后续迭代中可以解析的商位数。预缩放除数接近于1的事实允许新商位的估计正好是上一次迭代剩余的顶部位。迭代操作本身以进位保存表示法执行,因此没有长进位链限制性能。由于只使用剩余的顶部位作为估计值,且除数不完全为1,因此每次迭代的内部结果中都会出现错误;因此,在每次迭代中解析的商位与先前解析的位略微重叠,以允许在后续迭代中校正错误。

由于迭代计算由进位-保存乘法和减法组成,因此它非常适合于DSP(乘法-加法)切片,从而提供高效、低延迟的迭代。

协议描述


该内核遵循AXI4流规范。

AXI4-Stream注意事项


转换为AXI4流接口,使得接口协议更加标准并增强了IP的互操作性。除aclk、ACLKEN和ARESETn等常规控制信号外,除法器发生器的所有输入和输出均通过AXI4流通道传输。通道由tvalid和tdata always以及几个可选端口和字段组成。在除法器中,支持的可选端口为tready、tlast和tuser。tvalid和tready一起执行握手以传输消息,其中有效负载为tdata、tuser和tlast。除法器对tdata中包含的操作数进行操作,并在输出通道的tdata中输出结果。除法器不使用input、tuser和tlast,但提供了以与tdata延迟传输的功能。

除法器使用输出tuser保持除法零(divide_by_zero)指示信号。这种将tlast和tuser从输入传递到输出的功能旨在简化系统中除法器的使用。例如,除法器可能对流式分组数据进行操作。在此示例中,可以将核心配置为通过打包数据通道的tlast,从而减小工作量。

基本握手协议


下图显示了AXI4流通道中的数据传输。

image.png

tvalid 由通道的源(主)端驱动,而tready 由接收器(从)驱动。 tvalid 表示有效载荷字段(tdata、tuser 和 tlast)中的值有效。 tready 表示从机已准备好接收数据。 当循环中 tvalid 和treaty 都为TRUE 时,就会发生传输。master 和 slave 分别为下一次传输适当地设置了 tvalid 和tready。

非阻塞模式


除法器提供了一种模式,用于简化从该内核以前的非 AXI 版本迁移。 非阻塞用于表示一个输入通道上缺少数据不会导致另一通道上的传入数据被缓冲。

因为在 NonBlocking 模式下,输出通道没有不稳定的信号。 并非总是需要 AXI4-Stream 的完整流量控制。 使用 FlowControl 参数或用户界面字段选择阻塞或非阻塞行为。Blocking 或 NonBlocking 的选择适用于整个IP,而不是单独的每个通道。 通道仍然具有非可选的 tvalid 信号,这类似于采用 AXI4-Stream 之前许多内核上的新数据 (ND) 信号。 由于没有阻止数据流的功能,内部实现大大简化,因此这种模式需要的资源更少。 对于希望从 AXI 之前的版本迁移到此版本且更改最少的用户,建议使用此模式。

当所有当前的输入通道都接收到一个有效的 tvalid(并且tready被断言),那么这个操作是有效的。这是为了允许从 v3.0 进行最小的迁移。如果一个通道接收到 tvalid 而另一个没有接收,则不会发生操作,即使存在和断言tready也是如此。 因此,与完全符合 AXI4-Stream 的阻塞模式不同,在非阻塞模式下可以忽略单个通道上的有效事务。

出于性能考虑,ARESETn 是在内部的,这会将其操作延迟一个时钟周期。效果是在取消置位 ARESETn 之后的循环中,内核仍然复位并且不接受输入。 tvalid 在此周期的输出通道上也处于非活动状态。

image.png

上图显示了操作中的非阻塞模式。 内核的延迟为零。 正如 s_axis_dividend_tready 和 s_axis_divisor_tready 所指示的,它们最终是相同的信号,内核可以每三个周期接受一次数据。 由于 s_axis_divisor_tvalid 被置低,被除数通道中的数据 A1 被忽略。 数据输入 A2 和 B1 被接受,因为 tvalids 和 traily 都被断言。

阻塞模式


术语“阻塞”意味着每个通道都在缓冲数据以供使用。 AXI4-Stream 的完整流控制有助于系统设计,因为数据流是自我调节的。使用 FlowControl 参数选择阻塞或非阻塞行为。 背压(tready)的存在可以防止数据丢失,因此只有在下游数据路径准备好处理数据时才会传播数据。

除法器有两个输入通道和一个输出通道。 当所有输入通道都有可用的有效数据时,就会发生操作,结果在输出上可用。 如果由于 m_axis_dout_tready 为低而阻止输出装载数据,则数据会在内部的输出缓冲区中累积。当这个输出缓冲器快满时,内核停止进一步的操作。 这可以防止输入缓冲区为新操作装载数据,以便在输入新数据时填充输入缓冲区。 当输入缓冲区填满时,它们各自(s_axis_divisor_tready 和 s_axis_dividend_tready)被置为无效以防止进一步输入。

从某种意义上说,这两个输入通道是相互关联的,每个通道都必须先接收经过有效的数据,然后才能继续进行操作。 因此,有一种额外的阻塞机制,其中一个输入通道不接收有效数据,而另一个接收。 在这种情况下,经过有效的数据存储在通道的输入缓冲区中。

在这种情况下,经过有效的数据存储在通道的输入缓冲区中。 在这种情况的几个循环之后,接收数据的通道的缓冲区被填满并且该通道的tready被取消断言,直到饥饿的通道接收到一些数据。

image.png

上图显示了阻塞行为和背压。 通道 s_axis_dividend 上的第一个数据与通道 s_axis_divisor 上的第一个数据配对,第二个与第二个数据配对,依此类推。 这展示了“阻塞”的概念。 概念上使用通道名称 s_axis_dividend 和 s_axis_divisor。 两者都可以表示除数或被除数通道。

并且在图中进一步显示了数据输出是如何被延迟的,不仅是延迟,还有握手信号 m_axis_dout_tready。 是背压的。 输出上的持续背压以及输入上的数据可用性最终会导致核心缓冲区饱和,从而导致核心发出信号,表明它无法再通过取消断言来接受进一步的输入通道的tready信号。

这个例子中的最小延迟是两个周期,但需要注意的是,Blocking 操作中的延迟并不是一个有用的概念。 一个重要的思想是每个通道都充当一个队列,确保每个通道上的第一个、第二个、第三个数据样本与其他通道上的相应样本配对以进行每次操作。


目录
相关文章
|
2月前
|
数据采集 算法 测试技术
【硬件测试】基于FPGA的1024QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的1024QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集和vio在线SNR设置模块,支持不同SNR条件下的性能测试。1024QAM调制将10比特映射到复平面上的1024个星座点之一,实现高效数据传输。硬件测试结果表明,在SNR=32dB和40dB时,系统表现出良好的性能。Verilog核心程序展示了各模块的连接与功能实现。
68 7
|
1月前
|
数据采集 移动开发 算法
【硬件测试】基于FPGA的QPSK调制+软解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于FPGA实现QPSK调制与软解调系统,包含Testbench、高斯信道、误码率统计模块,并支持不同SNR设置。硬件版本新增ILA在线数据采集和VIO在线SNR设置功能,提供无水印完整代码及测试结果。通过VIO分别设置SNR为6dB和12dB,验证系统性能。配套操作视频便于用户快速上手。 理论部分详细解析QPSK调制原理及其软解调实现过程,涵盖信号采样、相位估计、判决与解调等关键步骤。软解调通过概率估计(如最大似然法)提高抗噪能力,核心公式为*d = d_hat / P(d_hat|r[n])*,需考虑噪声对信号点分布的影响。 附Verilog核心程序代码及注释,助力理解与开发。
71 5
|
2月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的MSK调制解调系统系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于FPGA实现MSK调制解调系统,采用Verilog开发,包含同步模块、高斯信道模拟、误码率统计等功能。相比仿真版本,新增ILA数据采集与VIO在线SNR设置模块。通过硬件测试验证,展示不同SNR(如10dB和16dB)下的性能表现。研究聚焦软件无线电领域,优化算法复杂度以适应硬件限制,利用MSK恒定包络、相位连续等特性提升频谱效率。核心代码实现信号生成、调制解调、滤波及误码统计,提供完整的硬件设计与分析方案。
108 19
|
2月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的4ASK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的4ASK调制解调系统的硬件测试版本,该系统包括testbench、高斯信道模块和误码率统计模块,并新增了ILA在线数据采集和VIO在线SNR设置功能。通过VIO设置不同SNR(如15dB和25dB),实现了对系统性能的实时监测与调整。4ASK是一种通过改变载波幅度表示数据的数字调制方式,适用于多种通信场景。FPGA平台的高效性和灵活性使其成为构建高性能通信系统的理想选择。
89 17
|
2月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的16QAM调制+软解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于之前开发的16QAM调制与软解调系统,增加了硬件测试功能。该系统包含FPGA实现的16QAM调制、软解调、高斯信道、误码率统计模块,并新增了ILA在线数据采集和VIO在线SNR设置模块。通过硬件测试,验证了不同SNR条件下的系统性能。16QAM软解调通过比较接收信号采样值与16个调制点的距离,选择最近的调制点来恢复原始数据。核心Verilog代码实现了整个系统的功能,包括SNR设置、信号处理及误码率统计。硬件测试结果表明系统在不同SNR下表现良好,详细操作步骤可参考配套视频。
80 13
|
2月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的4FSK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于之前的文章《基于FPGA的4FSK调制解调系统》,增加了ILA在线数据采集模块和VIO在线SNR设置模块,实现了硬件测试版本。通过VIO设置不同SNR(如10dB和20dB),并展示了ILA采集的数据结果。四频移键控(4FSK)是一种数字调制方法,利用四个不同频率传输二进制数据,具有较高的频带利用率和抗干扰性能。输入的二进制数据分为两组,每组两个比特,对应四个频率f1、f2、f3、f4,分别代表二进制组合00、01、10、11。调制过程中选择相应频率输出,并进行幅度调制以增强抗干扰能力。接收端通过带通滤波器提取信号并还原为原始二进制数据。
65 7
|
2月前
|
数据采集 算法 数据处理
【硬件测试】基于FPGA的256QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的256QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集和vio在线SNR设置模块,支持不同信噪比(如30dB和40dB)的仿真测试,并提供配套操作视频。256QAM调制方案每个符号携带8比特信息,通过复数值星座图映射实现高效传输。Verilog代码展示了核心模块设计,包括SNR设置、数据处理和ILA测试分析,确保系统在实际硬件环境中的稳定性和性能。
41 2
|
28天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于FPGA的SNN脉冲神经网络之LIF神经元verilog实现,包含testbench
本项目展示了 LIF(Leaky Integrate-and-Fire)神经元算法的实现与应用,含无水印运行效果预览。基于 Vivado2019.2 开发,完整代码配有中文注释及操作视频。LIF 模型模拟生物神经元特性,通过积分输入信号并判断膜电位是否达阈值产生脉冲,相较于 Hodgkin-Huxley 模型更简化,适合大规模神经网络模拟。核心程序片段示例,助您快速上手。
|
2月前
|
算法 数据安全/隐私保护 异构计算
基于LSB最低有效位的音频水印嵌入提取算法FPGA实现,包含testbench和MATLAB对比
本项目展示了一种基于FPGA的音频水印算法,采用LSB(最低有效位)技术实现版权保护与数据追踪功能。使用Vivado2019.2和Matlab2022a开发,完整代码含中文注释及操作视频。算法通过修改音频采样点的最低有效位嵌入水印,人耳难以察觉变化。然而,面对滤波或压缩等攻击时,水印提取可能受影响。该项目运行效果无水印干扰,适合实时应用场景,核心逻辑简单高效,时间复杂度低。
|
4月前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的变步长LMS自适应滤波器verilog实现,包括testbench
### 自适应滤波器仿真与实现简介 本项目基于Vivado2022a实现了变步长LMS自适应滤波器的FPGA设计。通过动态调整步长因子,该滤波器在收敛速度和稳态误差之间取得良好平衡,适用于信道均衡、噪声消除等信号处理应用。Verilog代码展示了关键模块如延迟单元和LMS更新逻辑。仿真结果验证了算法的有效性,具体操作可参考配套视频。
179 74

热门文章

最新文章