FPGA核心开发技能

        从事FPGA工程开发及团队带领的工作差不多有13年左右的时间,其实在近12年才开始思考这个问题,有点后知后觉。从科学上说真理是有保质期的,因此以下的一些经验总结只是个人的一些看法。

        1个能力是做事的方法。首先是区分研究还是工程,这个其实针对做技术是通用的。如果是研究性的课题,首先设定目标就要考虑量级的进步,至少是10倍,比如FPGA用作加速,那相对CPU就需要达到10倍的性价比,否则做出来后,人家也进步了。其次是验证关键技术,去除不重要因素,只考虑理想状态,识别出最需要验证的关键点。第三是编程时用最方便工具实现算法验证,不做20%代码优化。而做工程项目,5%的提升也是极有效的,因为那是真金白银。做工程需要找到业界当前最好的方法,这个是基线,再改进细节,否则每次重复造轮子,这个教训最大,工程师总有些情怀,认为自己最牛,但其实业界厉害的人多了去了。然后做工程就是要明白采用方法的边界在哪,比如各种排序算法的复杂度,工程能力再好,也无法突破数学上的限制。

       2个能力是各项开发技能的熟悉:新流程、新工具、编码及仿真、仿真新方法及工具、常见电路设计、后端约束及工具使用、各种IO相关的IP应用及调试。

       3个能力是必备的数学基础,以及拆解标准协议的能力:算法快速理解及验证,设计出并行的硬件化电路。目前流行的机器学习的数学基础是微积分、线性代数、概率统计。具备这些基础后就需要能进行算法推导及拆解到逻辑电路实现。不具备这个核心能力,FPGA的开发人员就只能看作一个翻译工,谈不上设计。

       4个能力是高效的软硬件配合机制设计能力。目前为了让更多软件人员使用FPGA,经常会有python或者opencl这样的工具,但个人认为,高级语言的简便调用建立在底层软硬件的高效配合及交互上,以及大量成熟的IPcoreFPGA实现硬件加速器时软硬件交互包含以下这些设计: 1)虚拟化时软硬件配合(SRIOVVFIO 2)基于报文传递的配合(低延迟DMA 3)基于块数据的配合(高吞吐DMA 4)基于队列操作的配合(RDMA中的QP)。当然除了这些快速的数据搬运还有一些简单的存储空间的访问、中断等。若是实现一些松耦合的设计,比如报文转发,那可能就是通过接口进行一些简单的配置,让电路实时动起来就好。

        5个比较重要的就是建立所从事行业的知识体系,因为这个知识体系会让我们在设计时发现很多隐含条件。具备这个能力FPGA工程师也就具备了跨界应用的能力,比如把FPGA用到金融中的计算。

         个人觉得1是方法,第4个来自项目经验,而35是目前FPGA开发人员比较缺乏的能力,也是自己需要长期持续积累的方向。



猜你喜欢

转载自blog.csdn.net/weixin_38712697/article/details/80212260
今日推荐