0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用OpenCL for FPGA设计200万点频域滤波器

星星科技指导员 来源:嵌入式计算设计 作者:嵌入式计算设计 2022-06-09 16:21 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

考虑在当前 FPGA 架构上创建一个支持 100 万到 1600 万个点的频域滤波器,采样率从每秒 1.2 亿到 2.4 亿个样本。该示例着眼于使用 OpenCL 的 200 万点单精度频域滤波器的设计决策选项。

这种滤波器使用数百万点一维 (1D) FFT 将其输入转换为频域,将每个频率和相位分量乘以一个单独的用户提供的值,然后将结果转换回时域快速傅里叶变换。整个系统的总体目标性能要求是每秒 1.5 亿个样本 (MSPS),在具有两个 DDR3 外部存储器组的当前一代 FPGA 上实现 200 万点的样本大小。输入和输出通过 10 Gb 以太网 (GbE) 直接进入 FPGA。

该设计使用面向具有 Stratix V GSD8 FPGA 的 BittWare S5-PCIe-HQ 板的 Altera SDK for OpenCL FPGA 编译器。使用 OpenCL 而不是低级语言有两个原因:

第一个原因是设计数百万点滤波器需要构建复杂但高效的外部存储系统。使用较低级别的设计工具,创建单个块,例如片上 FFT 或拐角转角相对容易(特别是因为每个 FPGA 供应商都已经提供了包含此类块的库)。然而,创建外部存储器系统通常需要大量的 HDL 工作。正如我们稍后会看到的,这种情况可能特别具有挑战性,因为整个系统的配置在一开始是未知的。

选择 OpenCL 的第二个原因是对 FPGA 逻辑的主机级控制。对于这个设计,从一开始就很明显,两个完整副本的数百万点 FFT 内核无法容纳在单个设备上,因此单个数据集必须至少通过 FPGA 逻辑两次才能产生最终输出。协调这种共享,同时允许动态改变数据集大小、乘法系数,甚至完全改变 FPGA 功能以实现其他功能,最好留给 CPU

使用面向 FPGA 的 OpenCL 编译器解决了这两个挑战,因为它构建了一个定制的高效外部存储器系统,同时允许对 FPGA 逻辑进行细粒度控制。

片上 FFT

对于这个设计,假设我们已经有一个 FFT 内核,可以处理完全适合 FPGA 的数据大小(称为“片上 FFT”),因为每个 FPGA 供应商都提供这样的内核。这样的核心至少可以通过以下方式参数化:

数据类型(固定或单精度浮点)

要处理的点数 (N)

并行处理的点数 (POINTS)

动态支持更改要处理的点数

给定这样一个片上 FFT 核,构建整个系统需要两个步骤:首先,构建一个可以处理数百万点的 FFT 核,其次,将两个这样的核拼接在一起,并在它们之间进行复杂的乘法运算以创建整个系统。

数百万点 FFT

使用外部存储实现 FFT 的经典方法是图 1 所示的六步算法,该算法将单个一维数据集视为二维 (2M = 2K x 1K)[1]。

图 1:六步 FFT 算法的逻辑视图。

pYYBAGKhrbGAWKhjAAJJ6ZWS2ow750.png

六步算法显示了单独的计算内核和外部内存缓冲区。“Fetch”内核从外部存储器读取数据,可选择转置,并将其输出到通道(在 OpenCL 2.0 命名法中也称为“管道”)。在硬件中,通道被实现为具有编译器计算深度的 FIFO。“片上 1D FFT”是未经修改的供应商的 FFT 内核,使用通道获取输入并产生位反转输出。“转置”总是转置从其输入通道读取的数据,可选择将其乘以特殊的旋转因子,并以自然顺序将输出写入外部存储器。

如图所示,数据通过 Fetch ➝ 1D FFT ➝ Transpose (F1T) 管道发送两次以产生最终输出。这为我们提供了第一个重要的设计选择:要么拥有一个 F1T 管道副本以节省空间,要么拥有两个副本以获得更高的吞吐量。

该算法的初始原型设计是在模拟器中完成的,以确保转置和旋转因子的地址操作是正确的。仿真器将 OpenCL 内核编译为 x86-64 二进制代码,可以在没有 FPGA 的开发机器上运行。从模拟器到硬件编译是一个轻松的步骤,因为模拟器中功能正确的代码变成了硬件中功能正确的代码,因此不需要模拟。

出于性能和面积原因,唯一需要修改的是 Fetch 和 Transpose 内核使用的本地内存系统。高效的转置需要缓冲POINTS本地内存中的列/行数据。OpenCL 编译器分析 OpenCL 代码中对本地存储器的所有访问,并创建针对该代码优化的自定义片上存储器系统。在 POINTS=4 的情况下,原始转置内核有四次写入和四次读取。一个双泵的片上 RAM 块最多可以服务四个单独的请求,其中最多两个是写入。为了支持四写四读,片上存储器需要同时复制并包含请求仲裁逻辑,这会导致区域膨胀和性能损失。但是,可以更改写入模式以使所有四个写入连续。OpenCL 编译器将这四次写入分组为一次宽写入,只提供对本地内存系统的五次访问:一次写入和四次读取。有了这样的改变,

将设计编译到硬件后,就可以测量性能了。使用 FPGA 上的 F1T 流水线的单个副本,我们测量了 217 MSPS,POINTS=4 和 457 MSPS,POINTS=8,对于 400 万-点 FFT[2]。POINTS=8 版本使用了两倍的片上 Block RAM,并且此配置中的两个副本不适合。这为我们提供了第一个要探索的设计维度——并行处理的点数与面积。

全过滤设计

现在我们有了数百万点的 FFT,我们准备将整个设计放在一起。只需拼接两个片外 FFT,我们就可以得到图 2 中整个流水线的逻辑视图。

图 2:为简洁起见,完整过滤器系统的此逻辑视图显示 F1T 管道表示为单个块。

poYBAGKhrbqAeTMFAAIWicPJeQI958.png

除了复制单个片外 FFT 计算流水线外,系统还添加了以下部分:

频域中的复数乘法被吸收到第三个 F1T 块中。coef缓冲区保存着两百万个复数乘法系数。

添加了 I/O 输入和 I/O 输出内核,以真实地模拟外部存储器上 10 GbE 通道的额外负载。使用这些内核,我们可以继续纯粹基于软件的开发,并在核心计算管道完全优化之前离开以太网通道集成。内核中的 I/O 每个时钟周期生成一个样本,而 I/O 输出每个时钟周期消耗一个样本。

正如片外 FFT 的实验所示,我们只能拟合两个 F1T 块,并且只能使用 POINTS=4。因此,数据必须通过硬件两次才能进行完整计算。这使我们的 200 万个点的整体系统吞吐量仅为 120 MSPS,低于我们 150 MSPS 的目标。但是,通过将数据大小减少到 100 万个点,我们能够拟合 POINTS=8 的版本并获得 198 MSPS 的吞吐量。这表明,只要我们能制作一个适合 200 万个点的 POINTS=8 版本,性能还是有的。

选择图 2 中完整流水线的优化结构是整个设计过程的下一步。我们可以做的第一个改进是删除tmp3缓冲区。双方以相同的方式访问它(转置写入和读取),因此第二个和第三个 F1T 块可以通过通道直接连接。这需要让 Transpose 内核将其输出写入外部存储器或写入通道,并对 Fetch 进行类似的更改。这种变化是由主机动态控制的,因此可以使用单个物理 Fetch 实例。请注意,这会改变我们与外部存储器的连接,但我们完全不必担心这一点,因为 OpenCL 编译器总是为我们的系统生成高效的自定义外部存储器互连。

进一步的改进是将第二个转置“T”从写入tmp1移动到从tmp1读取(tmp1中的数据存储方式不同,但最终效果相同)。这消除了对转置使用的一个本地内存缓冲区的需要。尽管这种改变并不难实施,但我们决定放弃它以代替更激进的想法。

我们最初的转置实现分两个阶段完成:

首先将所有需要的数据加载到本地内存中,然后使用转置地址从本地内存中读取。为了有效利用这样的管道,OpenCL 编译器会自动对本地内存系统进行双缓冲。这样,管道的加载部分可以将数据加载到一个副本中,而读取部分可以从另一个副本中读取先前的数据集。

这种自动双缓冲对我们的转置算法来说是正确的,但它很昂贵。相反,我们将转置内核重写为就地。这样的内核只需要一个缓冲区,并且支持同时读取和写入多个数据点(但是关于这个转置内核我们将在另一时间详细描述)。

通过这些更改,我们能够在 POINTS=8 配置中安装 200 万点 FFT,并实现 164 MSPS 吞吐量。

调度

只有两个 F1T 副本可以容纳,但图 3 显示了如何安排数据流以充分利用管道。请注意,在稳定状态下,管道会在一次处理两个和三个数据集之间交替,而无需额外的缓冲区。此调度由在 CPU 上运行的主机程序控制,并使用 Dynamic Profiler 工具进行验证。

图 3:在内核调度方面,“0”是 F1T 管道的第一个物理副本,“1”是第二个副本。紫色箭头通过管道跟随单个数据集。

pYYBAGKhrcKAbZ35AATz4VGrdVg895.png

缓冲区分配

在 OpenCL 系统中,主机程序控制哪个 DDR bank 包含哪些缓冲区。由于 DDR bank 在读取或写入时效率最高,但不是两者兼而有之,因此我们可以将五个缓冲区拆分为两个 DDR bank,如下所示:

DDR bank #0 获得输入和tmp2

DDR bank #1 获取tmp1、coef和out

将缓冲区分配给 DDR bank 是 OpenCL 主机程序中的一行更改。编译器和底层平台负责其余的工作。鉴于这种自动化,我们可以在 2-DDR 和 4-DDR 板上进行试验,以找到每个板的缓冲区到 bank 的最佳映射。

结论

本文介绍如何使用 Altera OpenCL SDK for FPGA 设计 200 万点频域滤波器。所有功能验证均使用软件样式的仿真完成,并且每个硬件编译都能正常工作。我们没有打开硬件模拟器,也从不担心时序收敛。

作者:Dmitry Denisenko,Mykhailo Popryaga

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 滤波器
    +关注

    关注

    162

    文章

    8356

    浏览量

    184776
  • DDR
    DDR
    +关注

    关注

    11

    文章

    747

    浏览量

    68540
  • 模拟器
    +关注

    关注

    2

    文章

    992

    浏览量

    45382
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    华碧实验室助力天通瑞宏滤波器产品顺利通过AEC-Q200认证

    近日, 华碧实验室 协助 天通瑞宏科技有限公司 自主研发的车规级滤波器产品顺利通过 AEC-Q200 检测认证, 这是天通瑞宏滤波器产品研发实力的又一次印证,标志着 天通瑞宏 在智能网联汽车时代迈出
    的头像 发表于 10-23 11:07 159次阅读
    华碧实验室助力天通瑞宏<b class='flag-5'>滤波器</b>产品顺利通过AEC-Q<b class='flag-5'>200</b>认证

    有源滤波器与无源滤波器的区别

    滤波器是根据电路参数对电路频带宽度的影响而设计出来的工程应用电路,滤波器种类很多,有源滤波器和无源滤波器的区别我们最简单的分别办法是看看是否需要电源,在作用上最大的区别在于有源
    的头像 发表于 06-18 09:03 1222次阅读

    GNSS 低噪声放大器前端模块,集成前滤波器和后滤波器 skyworksinc

    电子发烧友网为你提供()GNSS 低噪声放大器前端模块,集成前滤波器和后滤波器相关产品参数、数据手册,更有GNSS 低噪声放大器前端模块,集成前滤波器和后滤波器的引脚图、接线图、封装手
    发表于 06-06 18:34
    GNSS 低噪声放大器前端模块,集成前<b class='flag-5'>滤波器</b>和后<b class='flag-5'>滤波器</b> skyworksinc

    Sky5® 低电流 GNSS LNA 前端模块,集成前置滤波器和后置滤波器 skyworksinc

    电子发烧友网为你提供()Sky5® 低电流 GNSS LNA 前端模块,集成前置滤波器和后置滤波器相关产品参数、数据手册,更有Sky5® 低电流 GNSS LNA 前端模块,集成前置滤波器和后置
    发表于 05-14 18:31
    Sky5® 低电流 GNSS LNA 前端模块,集成前置<b class='flag-5'>滤波器</b>和后置<b class='flag-5'>滤波器</b> skyworksinc

    基于 FPGA 的任意波形发生+低通滤波器系统设计

    第一部分 设计概述 1.1 设计目的 本次设计包括基于FPGA的任意波形发生设计实现和基于FPGA的低通滤波器设计实现。 波形发生是一种
    发表于 05-07 15:34

    高带通TSIF集成滤波器

    低通滤波器 高通滤波器 带通滤波器 带阻滤波器 全通滤波器 滤波器类型 作用 频率特性 应用场景
    的头像 发表于 03-20 15:42 723次阅读
    高带通TSIF集成<b class='flag-5'>滤波器</b>

    在电源滤波器中,使用不同技术的滤波器有何性能差异

    电源滤波器分电容、电感、有源三类,各有优劣。电容滤波器结构简单成本低,但低频滤波效果差;电感滤波器低频效果好但体积大;有源滤波器
    的头像 发表于 02-17 10:49 819次阅读
    在电源<b class='flag-5'>滤波器</b>中,使用不同技术的<b class='flag-5'>滤波器</b>有何性能差异

    普源数字用表在滤波器电路调试应用

    是一项精密的工作,往往需要借助先进的测量工具来确保电路在不同条件下的正常运行。而在这其中,普源数字用表凭借其多功能、精确度高、使用方便等优势,成为了滤波器电路调试中的得力助手。 滤波器电路调试的过程中,工
    的头像 发表于 02-11 16:37 794次阅读
    普源数字<b class='flag-5'>万</b>用表在<b class='flag-5'>滤波器</b>电路调试应用

    如何区分有源滤波器和无源滤波器,它们各自的应用场景是什么

    有源滤波器与无源滤波器的主要区别在于元件构成。无源滤波器主要由无源元件组成,如电阻、电容和电感,它们自身不具备放大信号的能力。而有源滤波器则在无源元件的基础上引入了有源器件,通常是放大
    的头像 发表于 02-08 11:45 1798次阅读
    如何区分有源<b class='flag-5'>滤波器</b>和无源<b class='flag-5'>滤波器</b>,它们各自的应用场景是什么

    低通滤波器的工作原理 低通滤波器在音频处理中的应用

    一、低通滤波器的工作原理 低通滤波器(Low Pass Filter,LPF)是一种电子滤波装置,其主要功能是允许低频信号通过,同时抑制高于特定截止频率的信号。这种滤波器的工作原理基于
    的头像 发表于 02-01 10:24 2639次阅读

    低通滤波器的常见误区

    在电子工程和信号处理领域,低通滤波器(Low Pass Filter, LPF)扮演着至关重要的角色。它们用于去除信号中的高频噪声,平滑数据,或者在通信系统中限制信号带宽。尽管低通滤波器的应用广泛
    的头像 发表于 01-21 10:02 1159次阅读

    电源滤波器滤波精度如何?

    电源滤波器滤波精度受频率响应、设计、元件选择、布局及测试影响,需综合考虑优化。合理选择和配置可降低电磁干扰,提高设备稳定性。期待更高效、可靠的滤波器产品。
    的头像 发表于 12-30 13:47 818次阅读
    电源<b class='flag-5'>滤波器</b>的<b class='flag-5'>滤波</b>精度如何?

    5G射频滤波器技术原理

    射频滤波器可分为表声波滤波器和体声波滤波器,其中表声波滤波器细分为SAW滤波器、TC-SAW、I.H.P-SAW(IncredibleHig
    的头像 发表于 12-26 15:34 1421次阅读
    5G射频<b class='flag-5'>滤波器</b>技术原理

    滤波器的一些常识

    滤波器简介:滤波器是一种用于信号处理的设备或系统,用于改变信号的频率特性,以实现信号的滤波、增强、去噪或降噪等功能。滤波器根据其工作方式可以分为数字
    的头像 发表于 12-18 17:05 1517次阅读
    <b class='flag-5'>滤波器</b>的一些常识