对于FPGA工程师的核心竞争力,其实FPGA工程师在真正工业界还是有细分的,大致可以分为两部分,做IC原型验证的(包括design和verification),用FPGA开发产品的。
做IC原型验证大多不需要了解算法,只是根据设计人员的设计框图实现逻辑(大公司);做产品开发的可能离具体的应用和算法更近一些,相当于将特定应用和算法做硬件实现。我这里讲的更加侧重的是做FPGA实现这类的工程师(包括IC原型验证的design和产品设计的design)。我将更细致的给出一些我认为重要的能力。
1、 RTL设计实现能力。
关于FPGA工程师的核心竞争力,很多人会提到算法实现能力,我将这归结为RTL设计实现能力的一部分,RTL实现是FPGA工程师或者说HDL开发人员的入门首先接触到的东西,我将其总结为如下几点:
a、 硬件的实现思路
HDL设计实现和软件实现的思路不同,HDL作为一种描述语言,侧重的是对硬件的映射和连接关系的描述,当然也有逻辑、处理的实现,但归根揭底所有的逻辑都是在硬件上实现的,最终都会映射为加法器,乘法器,状态机,计数器,编码器(优先),解码器等等一些列硬件资源,对于逻辑拆解和抽象能力将直接关系到最终编码的效率。
简单的来说,好的HDL编码人员编写的代码更容易被编译器综合,对于初学者来讲,编译器的综合(包括后续Map布局布线)时间以及warning数量以及最后综合出来资源和你预先设计的吻合程度可以做为考量HDL代码好坏的一种方式。
b、 资源和时序的优化能力
资源和时序的优化能力是作为FPGA(ASIC)开发人员进阶的能力,这里就需要大量的经验和反复的迭代,不断对硬件(FPGA底层结构)深入理解才能够达到。
对于FPGA来讲和ASIC设计有所不同,ASIC的硬件实现很多是由综合器决定的(比如用什么样的乘法器),但是对于FPGA来讲,资源全部是固定的,FPGA资源可以分为三块,运算逻辑(LUT DSP carry chain等),存储单元(REG SRL BRAM DRAM),IO(各种高速低速接口),相同的算法应用可以用不同的资源,不同资源的组合方式来实现。
那么如何用更少的资源,更快的主频实现某一算法,这就需要有很强的资源和时序优化能力,通常这种优化是经过多次迭代的,当然通常顶层的设计人员会对系统层次的资源和时序有着较为准确的把握,也会给出各个模块的设计指标和边界,但是不同开发人员水平和能力最终设计的结果是不一样的,好的资源和时序优化能力是FPGA工程师的重要竞争力。
再反过头来说软件开发,其实从优化上来讲和RTL设计或者说HDL开发没什么不同,好的软件设计人员更了解计算机底层,对于资源(时间,空间)的使用,对于算法的效率的分析也更加深刻,因此也能写出更好的软件代码,我觉得在这一层面上无论软件还是硬件开发都是对于逻辑的抽象能力(当然术有所不同)。
2、 硬件调试能力。
调试能力,也是作为FPGA开发人员和所有从事硬件开发人员都一直认可的能力或者说核心竞争力。
举个例子,在找工作的时候如果你能向别人展示出你无与伦比的调试能力,别人没有理由不要你。调试能力需要大量的现场经验作为积累,同时也需要人的逻辑分析能力,当然还需要耐心,细致等等人的高尚品质 ,这里我也做一个小小的总结。
a、 FPGA本身调试工具的使用
我想这里又可以分为两个阶段,仿真和上板调试,仿真我想作为FPGA工程师都不陌生,大型的开发,通常有多个不同层次的模型,基本算法原理的模型,硬件仿真模型(通过C或matlab做定点仿真),然后再试HDL仿真模型(通过modelsim仿真最后的实现),仿真是一门很大的学问,现在都有专门的verification人员做。
但是对于普通FPGA开发人员来京,如何利用仿真这个工具来高效率的调试是一个值得思考的问题,一些异步的输入情况如何用仿真来排除问题,上板调试发现问题,根据问题输入情况仿真排除问题,这些都是利用FPGA仿真工具来调试的手段。
对于上板调试,主要就是利用chipsocpe添加调试信号,这里又涉及到如何利用有限资源(chipsocpe信号数量和深度)来排除问题,通常在上板调试发现问题后,仿真又无法定位解决(仿真是有和硬件不一致的情况的,比如一些RAM冲突的问题)。
经过分析加入合适的调试信号,设置合适的触发条件,然后定位排除问题。这些说起来容易,实际还是需要大量的上板经验,特别是大型系统的调试经历不断磨练提升。
此外还有一些应用需要配合外部仪器来获取更多信息帮助定位问题,包括示波器,谱分析仪,网络分析仪等常用实验室仪器。
b、问题定位分析能力
上面讲的是都是利用工具来进行调试,但是硬件比软件难得地方就在于其调试的复杂性,很多时候无法利用工具进行问题的定位,比如现象无法复现,输入条件随机或者过于复杂,涉及模块逻辑很多等等情况,这时候去定位问题大多靠想,就是逻辑分析来排出问题。我认为这是FPGA工程师真正的核心竞争力,因为这不仅仅需要经验的积累,同时还需要很好的逻辑思维和分析能力。
c、系统调试能力
系统调试能力是更加难得一项能力,通常做到系统层次的人员不会再具体的写代码或者上手调了,当然对于小团队小公司还是得自己上手。系统层面的调试能力一方面是对FPGA顶层的调试能力,各个模块构成的片上系统的问题分析定位能力。
通常各个模块在系统联调之前都是经过验证的,但是在联调的时候还是会出现各种各样的问题,这时候的问题反馈的信息更加少,设计的逻辑模块更加多,如何一步步抽丝拨茧定位到问题所在,并且采用什么样的方式去解决(这时候通常不是单独解决一个内部模块就行的),都需要很深厚的功力。
另外一方面是整个硬件软件系统层次的调试能力,要看得懂原理图PCB,懂硬件,了解软件接口,现在FPGA越来越讲究Hardware Software Co-design,软件硬件这个系统层次的调试能力对人的要求更加高,当然这通常已经远离了通常FPGA工程师的职责,但是我认为这是作为FPGA工程师上升通道中的重要能力。
3、更加高层次的
更加高层次的东西,我个人的理解,还是系统层次的东西,算法和架构。
怎样将一系列数学公式,转换为算法,再最终形成系统硬件的实现;整个系统采用什么样的架构,纯FPGA,arm FPGA,DSP FPGA,SOC FPGA;FPGA顶层采用什么架构,通用总线还是自定义总线,如何考虑通用性和可扩展性等等。
再大至什么样的应用适合用FPGA实现,什么样的问题适合软件实现,怎样的组合能更加低成本高效率的解决问题,这一些列问题涉及的东西就很多了,我讲的都是以FPGA为核心做开发要面临的问题,其实其他平台的硬件、软件产品都是类似,系统层面的问题都是复杂的问题,同时我也认为,从系统层面去优化,解决问题才是最高效率的方式。
归根结底,一个FPGA工程师的核心竞争力来源于深厚的技术功底,但是技术功底也并非通过一天练成的,最重要的是时间的积累,不断的钻研以及真正的兴趣。
欢迎加入至芯科技FPGA微信学习交流群,这里有一群优秀的FPGA工程师、学生、老师、这里FPGA技术交流学习氛围浓厚、相互分享、相互帮助、叫上小伙伴一起加入吧!
点个在看你最好看
原文标题:FPGA到底是什么?,FPGA工程师核心竞争力是什么?
文章出处:【微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。
全部0条评论
快来发表一下你的评论吧 !