时间:2024-07-18 来源:网络搜集 关于我们 0
大同学吧岗位专栏
职位介绍之FPGA工程师
今天推荐的是FPGA工程师下篇,主要讲解FPGA的岗位技能、薪资和发展、AI时代对FPGA工程师的新要求以及地域分布。
岗位技能
以下是在知乎上看到的FPGA工程师的技能树,挺有意思的,看看你爬到哪儿了呢?
FPGA工程师需要掌握的技能:
1,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取代一部分ASIC的市场将不是问题,所以说未来该行业的发展将会成为市场中最重要的高新科技之一,那么作为想要在这个行业中崭露头角的人们而言,国内FPGA是一片“未开垦”的宝地,我们必须努力的学习和抓住机遇。
中国每年对于FPGA设计人才的需求缺口巨大,FPGA设计人才的薪水也是行业内最高的。目前,美国已有FPGA人才40多万,中国台湾地区也有7万多,而中国内地仅有1万左右,可见中国渴望有更多的FPGA人才涌现出来。
可见fpga工程师在中国的需求还是很大的,发展前景也是可观。以下近年FPGA招聘市场的学历、工作经验要求以及工资水平,仅供参考。
招聘对象
电子、计算机、自动化、通信等相关专业,一般要求熟悉Vivado/Quartus等fpga相关软件,熟练使用VCS/Modelsim等验证工具,熟悉C、verilog、 VHDL语言,具有一定的脚本语言(shell、TCL等)开发能力。
AI时代对FPGA工程师的新要求
1.理解新任务:传统FPGA工程师面对的是硬件的设计问题,但AI等应用与应用系统关系密切,不单纯是FPGA片上逻辑设计的问题。工程师往往需要了解上层软件如何与FPGA片上系统的集成与优化问题。
2.掌握新工具:FPGA主流厂商很早就开始布局新兴市场的应用,一个主要工作就是提升FPGA设计开发抽象层次,OpenCL/HLS语言就是典型代表,一般情况下可以提升数倍开发效率。所以FPGA工程师需要充分掌握这类新的工具,以保障自己能有足够的效率面对行业需求。
3.抓住新机遇:新兴应用领域不仅仅是FPGA市场的简单扩充,它也为FPGA应用带来新的商业模式,以FaaS为代表的应用形式,为FPGA开发人员带来众多新的商业机遇。
FPGA本身作为一种可编程的逻辑器件,其最突出的特性在于可编程的逻辑部分,这与传统CPU的顺序执行方式有着本质区别,与ASIC相比又有着较好的灵活性,在AI产业兴起之前,就一直是ASIC设计的前期验证手段。但现在FPGA器件的发展已经跨越了可编程这个特性,现在的FPGA器件往往拥有远比通用芯片更高的I/O带宽和内存带宽例如高达40Gbps的serdes接口,以及HBM2等超高速内存接口,这些接口使得FPGA在通信领域有着非常广泛的应用。
现如今,由于很多AI产品对内存带宽和互联互通性有着相当高的要求,在较轻运算量的情况下,FPGA的可应用场景有了非常大的突破,所以很多小批量、快迭代的产品,其最佳开发方式反而变成了FPGA,而非ASIC或者GPU等等,因此FPGA开发人员,只要多熟悉AI技术、熟悉AI应用需求,仍然可以在AI行业游刃有余,不断打造新的传奇。
地域分布
以下是fpga工程师需求地及薪资待遇排名前十的地方,可以选择去面试,仅供参考。
本文部分内容整理自知乎的秦冕和嵌入式资讯精选,侵删
今天是FPGA工程师介绍
了解前端开发工程师
等更多岗位信息,请持续关注岗位介绍专栏
敬请期待……