3

学fpga(从verilog到hls)

 2 years ago
source link: https://blog.csdn.net/feixiaoxing/article/details/124288086
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

学fpga(从verilog到hls)

费晓行 已于 2022-04-20 21:06:42 修改 133

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        hls,全称为high level synthesis。也就是说从更高一级的语言来完成电路的综合。从前,编写fpga只有一个方法,都是编写verilog类似的硬件语言。但是如何用c、c++编写可综合的逻辑,这就变得很重要了,毕竟c、c++工程师比fpga的工程师要多得多。

1、hls的重要性

        从某种意义上,hls会极大拓展目前fpga的应用领域。相比较mcu、arm soc来说,fpga目前还是集中于信号采样、数字信号处理、模数转换这些场景。但是在目前比较兴起的人工智能领域,fpga着墨不多,一个相反的例子就是gpu。从前gpu只是一个图形加速器,后来连续在游戏和人工领域不断发力,使得gpu的应用领域越来越多,关联公司的规模也越来越大。

2、c语言和并发的悖论

        c语言本身是一个串行代码,它和并发并不完全一致,从这方面来说,可以看成一个周期为1的特殊fpga代码。所以,在设计的过程中,难点不在于语言本身,而是在于并行的思维。c语言本身不直接变成网表,也是先变成verilog语言,再转成网表的。要实现这一步,就要在c语言上做一些修改和限制,这就是hls的初衷。

3、verilog和waveform不能丢

        对于时序要求很高的protocol,verilog不能丢,这个用hls是很难做到的。而对于通用逻辑、非标算法逻辑、规模算法的加速,这是hls的强项。此外,hls改造后,如何判断hls是不是想要的效果,除了看综合效果后,也需要看对应的waveform,这点无可取代。不要指望代码编写好,就有一个立马的性能改善效果。

4、先编写c代码,再优化hls

        对于软件工程师来说,先保证c逻辑没问题,再一步一步优化。优化的方法基本就是添加各种directive,也就是pragma标志。基本方法是三种,1、边收集数据边处理;2、并发;3、流水线。本质上都是各种串行限制,减少算法的latency。

5、hls仍然需要时序图、波形图设计

       hls一般都是默认做串行处理,比如下面一段代码,

         如果没有任何的说明,那基本上就是loop body里面的运算代码顺序执行10次。如果需要进行显式的加速,可以把循环打开、用pipeline,这样基本就可以加速处理。加速不是没有代价的,基本的方法都是空间换时间,这中间有一个权衡,算法可能快了,但是资源也可能不够了。一个巧妙的办法,就是先设计图形,等testbench的时候,把测试的图形和设计的图形进行对比,这样就可以达到事半功倍的效果,不过度优化也是很重要的

6、注意接口、内存、hls提供的函数

        hls怎么和bus接口沟通,函数里面的内存怎么映射,这里面hls都提供了很好的方法。此外,对于一般的函数功能,hls也提供了对应的优化,尤其是opencv提供的一些函数,hls都有对应的版本。

7、学习hls的另一个思路

        用对比的思维来学习并发编程是一个不错的思路,比如openmp。openmp本身其实也是c、c++语言,但是通过#pragma可以实现并发的效果,这一点和hls有点类似。hls通常适合复杂的算法优化,不太适合精准的硬件协议,如果需要把fpga应用到更多的场合,那么hls至少从目前来说还是必由之路

8、hls视频教程

https://www.bilibili.com/video/BV1J5411t7uE

        很多人可能很难理解,既然fpga做算法这么烦,为什么还要用。我想主要还是因为低频的fpga算法性能可以和数倍于自己的soc一样好,电路相对还简单一点,成本、供应链也没那么紧张。尤其是对于非标产品来说,特别合适。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK