大多数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是现代以太网卡的一项功能,一般实现微软定义的特定托普利茨哈希。
smartnic shell框架的实施实例框图。这里的rss块被替换成了hls实现。
2. 用rtl和hls实现rss的结果对比
我们评估的假设如下:本地fpga编码总是导致最小的资源使用。然而,bittware的一位工程师对这一决定提出了质疑,并在hls中重新实现了rss,以测试这一方法。他是对的,现在bittware已经用hls代码取代了我们smartnic shell中的rss模块和解析器模块。
两种实现方式的最大区别是verilog/rtl版本使用了fifo,而hls c++版本没有使用。我们很惊讶地看到,通过转移到hls,资源的使用量实际上下降了——这与我们预想的差异较大。
开发时间呢?粗略地说,我们看到原生rtl版本的时间线为一个月,而hls代码在一周内完成。
3. 总结
“今天的高层fpga开发工具被设计用来减少上市时间和对硬件工程师的依赖。然而,使用这些工具总是带来应用性能的妥协——无论是速度还是硅资源”。然而这种假设是错误的。
我们发现使用hls为bittware的smartnic shell开发ip块,将开发时间从大约一个月缩短到一周。我们还发现,它实际上使用了更少的门电路来实现。
苹果iPhone手机在参加电商平台的补贴活动?
基于移动机器人的拣货系统RMFS的实践应用案例
一文解析x86的保护机制
美国政府推出物联网安全标签计划,中国物联网产业如何应对?
中国的5G发展迅速的关键是什么
Vivado HLS能否取代HDL开发
JDL京东物流全自主研制的“京蜓”自转旋翼支线物流无人机首飞成功
摄影补光灯如何选择高可靠的防水连接器?
辐射EMI的抑制措施,EMI滤波器的发展趋势
智能吸油烟机 —— 语音芯片实用的选型技巧
国星光电发布了2018年年度报告,公司实现营业总收入36.26亿元
2021年彩电行业有望迎来崭新的局面
关于未来电池的简要介绍
室内布线有哪几种布线方式
AppsFlyer一站式解决方案SK360正式发布
科大讯飞联手展讯SC9832制作的一块A.I.人工智能手表
CES2013前瞻:1080p屏幕手机集中爆发
MBO是怎样节省Tyneside PCB工厂的
QNAP首发Ryzen NAS,多核心,可同时运行16个虚拟机
基于ATMEGA48单片机的USART串口与PC通讯解析