Vivado HLS 能否取代HDL开发

关注、星标公众号,精彩内容每日送达
来源:网络素材

本文来源于网络,版权归原作者所有,如有侵权,请联系删除。

大多数FPGA程序员认为,高级工具总是发出更大的比特流,作为提高生产率的 "代价"。但是这总是真的吗?

在本文中,我们展示了一个真实的例子,我们使用传统的RTL/Verilog工具创建了一个普通的网络函数(RSS),然后在相同的硬件上使用高级合成工具(HLS)来实现相同的功能。

我们发现,令人惊讶的是:HLS方法实际上使用了更少的FPGA门和内存。这好像和我们习惯的思维不太一致啊…

通过使用Vivado(Xilinx)或Intel(Quartus)工具,FPGA开发的HLS方法是只抽象出可以在C/C++环境中轻松表达的应用程序的部分。

要想在HLS取得成功,重要的是要认识到项目中哪些部分或模块适合在HLS中实现。基本准则可以概括如下(可能描述不太清楚准确)

  • 目标用途一般是以高级语言开始定义的IP块。一个数学算法会很有效,或者像我们的RSS块那样,一些网络协议处理。

  • 另一类用途是定义不明确的块,因此可能需要多轮的实现。这里最大的好处是允许HLS工具自动对产生的本地FPGA代码进行流水线处理,通常比快速手工编码流水线的阶段要少。另外,当需要修改手工编码的流水线时,一个并行路径上的延迟变化会对所有的东西产生连锁反应。使用HLS工具自动进行第二次流水线,从头开始,消除了这种头痛的问题。

  • 最后,HLS流程使不同FPGA品牌之间的代码移植变得更加容易。这是因为HLS会自动生成适当数量的流水线阶段--这是你在使用Verilog或VHDL时需要手动指定的。

目前HLS的局限性很明显,它的范围限于IP块。应用团队仍然需要其他组件的RTL。还应该注意的是,对于最简单的代码或主要由预先优化的组件组成的大型设计来说,HLS是一个不太理想的选择。

1. 用于做对比的应用,FPGA上的联网RSS

什么是RSS?RSS是 "接收方扩展 "的意思。它是一种散列算法,用于在多个CPU上有效分配网络数据包。RSS是现代以太网卡的一项功能,一般实现微软定义的特定托普利茨哈希。

ab152d1f5e719c58743a57b6d397a8c9.jpeg

SmartNIC Shell框架的实施实例框图。这里的RSS块被替换成了HLS实现。

2. 用RTL和HLS实现RSS的结果对比

我们评估的假设如下:本地FPGA编码总是导致最小的资源使用。然而,BittWare的一位工程师对这一决定提出了质疑,并在HLS中重新实现了RSS,以测试这一方法。他是对的,现在BittWare已经用HLS代码取代了我们SmartNIC Shell中的RSS模块和解析器模块。

8c40f9ad51af141db98e119ccc6d63ce.jpeg

两种实现方式的最大区别是Verilog/RTL版本使用了FIFO,而HLS C++版本没有使用。我们很惊讶地看到,通过转移到HLS,资源的使用量实际上下降了——这与我们预想的差异较大。

开发时间呢?粗略地说,我们看到原生RTL版本的时间线为一个月,而HLS代码在一周内完成。

3. 总结

“今天的高层FPGA开发工具被设计用来减少上市时间和对硬件工程师的依赖。然而,使用这些工具总是带来应用性能的妥协——无论是速度还是硅资源”。然而这种假设是错误的。

我们发现使用HLS为BittWare的SmartNIC Shell开发IP块,将开发时间从大约一个月缩短到一周。我们还发现,它实际上使用了更少的门电路来实现。

---------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
视频课程源:http://xilinx.eetop.cn/category-83 目录 1 从软件工程师的角度来看 FPGA 架构 3 2 Vivado HLS的工作机制 5 3-4 HLS设计流程基本概念 9 5 任意精度数据类型 15 5.1 C语言支持的数据类型 15 5.2 sizeof()函数使用 16 5.3 设置Visual Studio支持任意精度数据类型 17 6 数组类型转换 17 6.1 变量的定义和初始化 17 6.2 定点数据类型 18 6.3 浮点数据类型的定义和初始化 19 6.4 隐式数据类型转换 19 6.5 显示数据类型转换 19 7 Vivado HLS中的复合数据类型 20 7.1 结构体 20 7.2 枚举类型 22 8 Vivado HLS中的C++基本运算 23 9 测试平台的基本架构 25 9.1 Test Bench 25 9.2 C Test Bench 26 10 测试激励 28 11 测试输出检测与格式控制 28 11.1 Scoreboard 28 11.2 输出格式控制 30 12 接口综合基本介绍 33 12.1 接口综合概述 33 12.2 block-level interface protocol和port-level interface protocol 34 13 接口综合之数组 35 14 接口综合案例演示 37 14.1 添加寄存器 37 14.2 添加时钟使能信号 38 14.3 指令优化 38 15 for循环优化-基本性能指标 40 15.1 基本衡量指标 40 15.2 for循环pipeline 41 15.3 for循环UNROLL展开 41 15.4 for循环变量i 42 16 for循环优化-循环合并 42 17 for循环优化-数据流 46 18 for循环优化-嵌套的for循环优化 54 18.1 循环嵌套类型 54 18.2 Perfect loop nest示例 55 18.3 Imperfect loop nest示例 56 19 for循环优化-其他优化方法 59 19.1 for循环的并行性 59 19.2 for循环pipeline时的rewind选项 61 19.3 for循环的循环边界是变量时处理方法 64 20 数组优化-数组分割 67 20.1 数组接口 67 20.2 数组分割 67 21 数组优化-数组映射和重组 69 21.1 数组的映射 69 21.2 数组的重组 72 21.3 综合对比 72 22 数组优化-其他优化方法 72 22.1 定义ROM 72 22.2 数组的初始化 74 23 函数层面优化 75 23.1 代码风格 75 23.2 Inline 75 23.3 Allocation 75 23.3 Dataflow 75 24 总结分析 77 24.1 改善吞吐率(Throughput) 77 24.2 改善时延(Latency) 78 24.3 改善资源(Area) 79
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值