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
    +关注

    关注

    1655

    文章

    22283

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    何在vivadoHLS中使用.TLite模型

    测试 在Vivado HLS中运行综合、高级综合和RTL仿真,确保设计正确。 注意事项 以上步骤是一个简化的示例,具体的实现可能因您的模型和需求而有所不同。在实际应用中,您可能需要进一步优化接口和数据传输,以满足性能和资源要
    发表于 10-22 06:29

    何在“SD 卡 NAND 闪存”的情况下使用 Non-OS NVTFAT?

    何在“SD 卡 NAND 闪存”的情况下使用 Non-OS NVTFAT
    发表于 09-01 07:58

    当不同的数据放在同一个Flash页面上时,请问如何在不影响其他数据的情况下更改一些单独的数据?

    当不同的数据放在同一个Flash页面上时,如何在不影响其他数据的情况下更改一些单独的数据?
    发表于 08-22 06:25

    请问如何在keil μVision 5上进行ARM编译器的代码优化

    何在keil μVision 5上进行ARM编译器的代码优化
    发表于 08-20 07:37

    何在没有 NuLink 编程器的情况下执行 SWD 解锁序列?

    我迫切需要知道如何在没有 NuLink 编程器的情况下执行 SWD 解锁序列。
    发表于 08-18 07:04

    RTL级机器人电机控制器的FPGA设计

    借助Verilog,在FPGA中实现了带编码器的两台电机的电机控制系统的RTL级设计。
    的头像 发表于 07-07 14:01 2524次阅读
    <b class='flag-5'>RTL</b>级机器人电机控制器的<b class='flag-5'>FPGA</b>设计

    何在Unified IDE中创建视觉库HLS组件

    最近我们分享了开发者分享|AMD Vitis HLS 系列 1 - AMD Vivado IP 流程(Vitis 传统 IDE)和开发者分享|AMD Vitis HLS 系列 2:AMD
    的头像 发表于 07-02 10:55 1129次阅读
    如<b class='flag-5'>何在</b>Unified IDE中创建视觉库<b class='flag-5'>HLS</b>组件

    如何使用AMD Vitis HLS创建HLS IP

    本文逐步演示了如何使用 AMD Vitis HLS 来创建一个 HLS IP,通过 AXI4 接口从存储器读取数据、执行简单的数学运算,然后将数据写回存储器。接着会在 AMD Vivado Design Suite 设计中使用此 HLS
    的头像 发表于 06-13 09:50 1277次阅读
    如何使用AMD Vitis <b class='flag-5'>HLS</b>创建<b class='flag-5'>HLS</b> IP

    FX2LP如何在不更改硬件的情况下对其进行重新编程?

    我正在使用 FX2LP/ CY7C68013A-128AXC设备(定制板),我有一些问题需要您的帮助。 1如果我的 EEPROM 已经有固件并且正在运行,如何在不更改硬件的情况下对其进行重新
    发表于 05-06 11:16

    Vivado HLS设计流程

    直接使用C、C++或 System C 来对 Xilinx 系列的 FPGA 进行编程,从而提高抽象的层级,大大减少了使用传统 RTL描述进行 FPGA 开发所需的时间。
    的头像 发表于 04-16 10:43 1349次阅读
    Vivado <b class='flag-5'>HLS</b>设计流程

    LPC1227FBD48如何在没有SDK的情况下配置FreeRTOS?

    我想在基于 LPC1227FBD48 系列的现有项目中使用 FreeRTOS,但我们没有可用于控制器的 SDK。我们如何在没有 SDK 的情况下配置 FreeRTOS。
    发表于 04-02 06:33

    英诺达推出RTL功耗优化工具

    英诺达(成都)电子科技有限公司隆重推出芯片设计早期RTL级功耗优化工具—EnFortius RTL Power Explorer(ERPE),该工具可以高效、全面地在RTL设计阶段进行
    的头像 发表于 03-20 17:06 939次阅读

    想控制NIRSCAN NANO在程序中改变他不使用的情况下不休眠,怎么操作?

    大家好,我们想控制 NIRSCAN NANO 在程序中改变他不使用的情况下不休眠,现在的情况是 低功耗 5分钟 不使用就休眠。我们想实现的效果是 一直测试不休眠 (1)可否设置为延长休眠时间 (2) 可否设置为永久不休眠。
    发表于 02-28 07:45

    在VDD1没有供电的情况下,VDD2正常供电的情况下,AMC1200的输出应该是什么状态?

    请教一,在前端VDD1没有供电的情况下,VDD2正常供电的情况下,AMC1200的输出状态为什么P端是3.8V ,N端是1.2V ,每一次都是这样子, 请问,在VDD1没有供电的情况下
    发表于 12-17 07:37

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

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