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

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

3天内不再提示

如何在不改变RTL代码的情况下,优化FPGA HLS设计

454398 来源:赛灵思中文社区 作者:赛灵思中文社区 2020-12-20 11:46 次阅读

用软件从 C 转化来的 RTL 代码其实并不好理解。今天我们就来谈谈,如何在不改变 RTL 代码的情况下,提升设计性能。

本项目所需应用与工具:赛灵思HLS、Plunify Cloud 以及 InTime。

前言
高层次的设计可以让设计以更简洁的方法捕捉,从而让错误更少,调试更轻松。然而,这种方法最受诟病的是对性能的牺牲。在复杂的 FPGA 设计上实现高性能,往往需要手动优化 RTL 代码,这也意味着从 C 转化得到 RTL 基本不可能。其实,使用 FPGA 工具设置来优化设计可以最小限度地减少对性能的牺牲,这种方法是存在的。

高效地找到合适的FPGA工具设置
尽管工程师们知道 FPGA 工具的设置,但是这些设置往往并没有充分利用。一般而言,工具设置只有在出现时序问题的时候才会派上用途。然而,对于已经达到性能目标的设计来说,如果继续调整工具设计,仍然有10%-50%的性能提升潜力。

真正的难点在于选择正确的工具设置,毕竟各种 FPGA 工具一般都有有30-70个不同的布局布线设置,可选的设置组合实在是太多了。您可以写脚本来运行不同的推荐指令/策略。市面上也有工具,来自动管理并运行设计探索。

另一个难点就是不充裕的计算能力。典型的嵌入式应用是在单台电脑上设计的。运行多个编译需要更多的计算能力,这就要求更多的时间。如果您可以(使用云计算)并行运行,周转时间就会变短。

如何优化高层次的设计 - “Sobel滤镜”项目
这是一个用于视屏处理的参考设计,来自赛灵思的官网 https://china.xilinx.com/support/documentation/application_notes/xapp890... 。该设计的功能是 Sobel 滤镜,目标器件是拥有双核Dual ARM® Cortex®-A9MPCore 的 FPGA。

我们使用赛灵思 HLS 来打开这个设计。

图一:参考设计– Sobel滤镜

图一:参考设计– Sobel滤镜

它的时钟周期是5.00ns,也就是200MHz。从下图的时序预估中可以看出,它离时序目标还差506ps(181MH1),也就是比目标速率还差10%。

图二:当前时序结果

图二:当前时序结果

导出成 RTL 项目
不需要改变 C++ 代码,把设计输出成一个RTL 的 Vivado 项目。在 “Solution”下面,选择“Export RTL”。

图三:从HLS输出Vivado项目

图三:从HLS输出Vivado项目

它会在后台执行 Vivado,并生成一个项目文件(XPR)。它同时也会编译设计,您应该在控制台(Console)看到真实的时序细节。一旦完成,您可以在 /solution/impl/verilog/ 文件夹下找到项目文件。

图四:Vivado 项目文件

图四:Vivado 项目文件

找到这个 XPR 文件之后,您可以用 Vivado 打开它来验证。您将看到生成好的 RTL 源文件。

图五:从 HLS 生成的 RTL

图五:从 HLS 生成的 RTL

时序优化
下一步,是使用 InTime 设计探索工具,当然,您也可以自己写脚本来尝试 Vivado 工具中自带的指令和策略。请申请 InTime 的免费试用在本地运行,也可以注册一个 Plunify Cloud 云平台的账户,试用所提供的免费云币来在云端运行预置好的 FPGA 工具。

启动 InTime 之后,打开项目文件。在选择 Vivado 版本时,请使用“相同的”版本。例如,如果您使用2017.3 HLS,请选择2017.3 Vivado。

选择“Hot Start”配方(recipe)。此配方包含一系列更具以往其他设计的经验而推荐的策略。

图六:选择

图六:选择 "Hot Start" 配方

点击“Start Recipe”来开始优化。如果您在云端运行,您应该并行运行多个编译来减少周转时间。

优化过程和结果
第一轮结束之后 (“Hot Start”配方),最好的结果是“hotstart_1”策略。然而,它仍然距离目标时序90ns。

我们在“HotStart_1”的结果上使用了第二个配方,叫做“Extra Opt Exploration”。这一轮将集中优化关键的路径。这是一次迭代优化,并且只要仍有提升,就不断地重复自己。如果达到时序目标或者不再提升的时候,它就会停止。

图七:仅通过工具设置完成时序收敛

图七:仅通过工具设置完成时序收敛

经过两轮优化,总共15此编译后,设计达到了目标时序,200MHz。而这一切完全没有修改 RTL 源代码。

让性能更进一步
让性能更进一步需要各方面的优化 – 结构设计、代码和工具。工具设置的探索可以克服高层次设计的性能牺牲,并且不会让生产效率的好处减少。对于高层次设计的工程师来说,这是一种共赢。

编辑:hfy


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

    关注

    1630

    文章

    21762

    浏览量

    604480
收藏 人收藏

    评论

    相关推荐

    LMX2595在不改变设定参数的情况下,能实现多宽范围的倍频?

    我想问一LMX2595在倍频的过程中,在不改变设定参数的情况下,能实现多宽范围的倍频?
    发表于 12-12 07:05

    请问ADS1292R如何在MCU休眠的情况下通过脱落检测唤醒MCU?

    请问ADS1292R如何在MCU休眠的情况下通过脱落检测唤醒MCU?
    发表于 11-28 08:03

    AIC3106如何在不改变BCLK和LRCLK的情况下,能够调好?

    你好,请问:AIC3106现在配置为从设备、DAC采样率为16K、数据宽度为32位。现在主设备给的BCLK是2048K,LRCLK为16K,播放现在有问题,如何在不改变BCLK和LRCLK的情况下,能够调好?
    发表于 10-28 07:06

    有没有什么办法在不改变电源和功率的情况下来解决TPA311XD2失真的问题?

    换了大电源之后就没有失真了,有没有什么办法在不改变电源和功率的情况下来解决芯片失真的问题,谢谢!!!
    发表于 10-25 08:34

    TAS5548如何在输入信号改变情况下,让38和39这两个引脚输出的PWM产生变化?

    请问如何调整,才能在输入信号改变情况下,38和39这两个引脚输出的PWM产生变化?通过配置I2C可以调整这三个AD Mode, BD Mode and Ternary Mode模式,但是输入
    发表于 10-17 08:01

    PCM1795如何在通电的情况下切换PCM模式和DSD模式?

    Ti工程师您好,项目上有用到PCM1795这枚芯片,因为它具有DSD解码与PCM解码功能,之前没有使用过类似产品 有两个问题请教下: 1、用MCU初始化PCM1795让它能正常工作,至少需要配置哪几个相关寄存器 2、如何在通电的情况下 切换PCM模式和DSD模式或者说
    发表于 09-29 06:00

    优化 FPGA HLS 设计

    优化 FPGA HLS 设计 用工具用 C 生成 RTL代码基本不可读。以下是如何在
    发表于 08-16 19:56

    ESP8266如何在没有SNTP的情况下写入当前的系统时间?

    当我开发SSL应用程序时,我首先需要SNTP。我们希望通过添加外部RTC模块来记录有效时间,从而避免每次使用SSL时先使用SNTP。但是,我们没有找到设置系统时间的接口。如何在没有SNTP的情况下写入当前的系统时间?
    发表于 07-09 07:19

    何在UDP的情况下监听自己通信是否中断?

    请教大佬一个问题。 我如何在UDP的情况下监听自己通信是否中断? 不知道有没有什么可以参考的?
    发表于 06-24 06:04

    谷景揭秘如何在色环电感封装尺寸不变的情况下升级电感性能

    谷景揭秘如何在色环电感封装尺寸不变的情况下升级电感性能 编辑:谷景电子 色环电感作为电子电路中的一种特别重要的电感元件,它对于电路运行的稳定性有着重要影响。色环电感的种类很多,不同的电路需求对色环
    的头像 发表于 06-23 09:45 415次阅读

    请问如何在不使用代码配置的情况下闪烁LED指示灯?

    我试图闪烁端口引脚上不闪烁的 LED 指示灯,但当我使用内置代码配置器进行尝试时,在这种情况下 LED 指示灯会闪烁。 但我想使用代码配置器以及我自己的函数,在这种情况下,我遇到了问题
    发表于 05-24 07:47

    使用增量式编码器,在PI参数不改变情况下,为什么MCSDK初始定位后转速波动大?

    使用增量式编码器,第一次启动时,转速波动较大,然后第二次启动转速波动就平稳了,我想问一,在PI参数不改变情况下,为什么MCSDK初始定位后转速波动大?
    发表于 03-20 06:03

    何在不更换固件的情况下控制cyusb3014在USB 2.0和USB 3.0模式的读写速度?

    您好,我想通过上层机测试cyusb3014在 USB 2.0和 USB 3.0模式的读写速度。 如何在不更换固件的情况下控制是通过上位机以 USB 2.0 还是 USB 3.0 速度连接? 谢谢。
    发表于 02-27 06:24

    何在幅度频率不变的情况下将正弦波变为方波?

    何在幅度频率不变的情况下将正弦波变为方波? 方波是一种特殊形式的波形,它的波形在周期内由两个值之间的突然跳变组成,通常是由高电平和低电平组成。与之相反,正弦波是一种平滑连续的波形,其幅度变化是沿着
    的头像 发表于 02-06 15:51 4853次阅读

    何在不改变频率的情况下改变PWM占空比?

    我需要支持来改变 PWM 的到期周期,而不会发生故障,每 10 毫秒就会改变频率。 目前我遇到了故障,这导致 PWM 在驱动电机方面出现了意想不到的功能。
    发表于 01-29 08:37