集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1118|回复: 1

FPGA核心开发技能

[复制链接]
fpga_feixiang 发表于 2018-7-10 15:41:33 | 显示全部楼层 |阅读模式
从事FPGA工程开发及团队带领的工作差不多有13年左右的时间,其实在近1,2年才开始思考这个问题,有点后知后觉。从科学上说真理是有保质期的,因此以下的一些经验总结只是个人的一些看法。

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

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

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

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

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

         个人觉得1是方法,第4个来自项目经验,而3和5是目前FPGA开发人员比较缺乏的能力,也是自己需要长期持续积累的方向。
lixirui 发表于 2018-8-10 17:49:48 | 显示全部楼层
FPGA核心开发技能
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-5-2 00:30 , Processed in 0.055590 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表