大多数FPGA程序员认为,高级工具总是发出更大的比特流,作为提高生产率的 "代价"。但是这总是真的吗?
在本文中,我们展示了一个真实的例子,我们使用传统的RTL/Verilog工具创建了一个普通的网络函数(RSS),然后在相同的硬件上使用高级合成工具(HLS)来实现相同的功能。
我们发现,令人惊讶的是:HLS方法实际上使用了更少的FPGA门和内存。这好像和我们习惯的思维不太一致啊…
通过使用Vivado(Xilinx)或Intel(Quartus)工具,FPGA开发的HLS方法是只抽象出可以在C/C++环境中轻松表达的应用程序的部分。
要想在HLS取得成功,重要的是要认识到项目中哪些部分或模块适合在HLS中实现。基本准则可以概括如下(可能描述不太清楚准确):
目前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块,将开发时间从大约一个月缩短到一周。我们还发现,它实际上使用了更少的门电路来实现。
---------------------------------------------
参考文献:
[1] 《使用网络实例比较FPGA RTL和HLS C/C++》, FPGA之家.
免责声明:本文转载于网络,转载此文目的在于传播相关技术知识,版权归原作者所有,如涉及侵权,请联系小编删除(联系邮箱:service@eetrend.com )。