当前位置:首页 > 新闻资讯 > FPGA之家动态 >

FPGA工程师发展建议

时间:2024-07-17      来源:网络搜集 关于我们 0

写在前面

从业多年,经常可以在论坛或者日常工作中接触到很多电子类工程师(包括硬件、嵌入式和FPGA工程师等),对目前的工作或者以后的职业规划比较迷茫,主要有以下困惑:

第一,技术方向不确定。比如,不太清楚硬件工程师,嵌入式工程师或者FPGA工程师的长期发展路线,无法很好地判断自己的兴趣专长更适合哪个技术方向。

第二,虽然确定了技术路线,但无从下手,不知该如何提高专业技能。这一点常见于初入职场的应届生以及工作两三年后初次遇到职业发展瓶颈的工程师。

第三,在某一个方向从事5~10年以上,对最终的职业生涯目标(专家路线或管理路线)难以抉择的中高级工程师。

此外,一定还有其他各种问题,比如有人想从技术转销售不知是否可行;有人对35或40岁后的职业生涯非常焦虑;还有人想创业,有很多创意甚至有些产品雏形,却无从下手等等。

作为一个普通电子工程师,笔者和大部分工程师一样,也遇到或者体验过上面的种种情况。经历过的事情,无论做对或是做错,总还是有一些感悟和所谓的经验,我很愿意与大家分享和交流,如果能对别人有点帮助或者看了以后能让人少走些弯路,那就更好了。文章标题叫FPGA工程师,其实电子类相关的工程师也可以看看,比如搞嵌入式的和硬件板卡设计的,基本都是相关的。技术都是相同的,大道归一,做到后面可能会发现,不同技术方向只是实现形成不同,曲径通幽,从原理上都是差不多的。

谋定而后动,首先解决了心理问题和方向问题,下一步才能踏踏实实逐步提高技术能力。后面我也会陆续输出一些相关的专业知识和项目经验总结,与各位工程师分享和交流。水平不高,能力有限,只适合普通工程师参考,大神级别的就无需浪费时间了:)

无偿分享大家一个资料包,里面学习内容、面经、项目都比较新也比较全!某鱼上买估计都要好几十。


不同方向的发展

电子类相关专业,包括电子(信息)工程、通信、微电子甚至计算机专业,专业课都学过数电模电、微机原理与接口、C语言,单片机(ARM)、FPGA和verilog(VHDL)等实践性较强的课程很多专业也都开设。常见的几个招聘方向要求如下:

硬件工程师:通常是设计板卡,包括原理图和PCB设计,要求熟悉电路硬件设计,元器件相关知识,具备不同类型板卡设计经验。EDA工具要求熟悉Protel DXP、PADS、Candence等主流软件。

嵌入式工程师:要求熟悉C代码编程,熟悉单片机及ARM架构,熟悉主流器件(如stm32等),具有相关项目设计经验。还有的要求有Linux或VXWorks操作系统项目经验。

FPGA工程师:要求熟悉verilog(system verilog)、VHDL语法,熟悉Xilinx、altera、lattice等国外厂商FPGA器件结构及开发流程(国内一般是紫光同创、安路科技和复旦微电子),熟悉ISE、Vivado、quartus、diamond、synplify、modelsim等EDA工具。具备RTL设计、仿真、上板调试等技能。具有ddr2/3/4、serdes、PCIE等项目经验者优先。

以上3个方向在入职的初始阶段差异还挺大的。

硬件工程师的主要工作基本上就是画原理图、PCB,之后就是调试板卡。熟悉一些之后,可能会从事复杂度更高的板卡设计,比如从4层板做到8层甚至10层以上,板卡架构从嵌入式板卡到CPU的核心板过渡,比如做X86架构的多层CPU板,要求具备更多信号完整性方面的知识和PCB板卡的布线技能。沿着这个方向发展,容易成长为硬件设计专家,对于高速板卡的设计、信号完整性分析及设计有深刻理解和掌握,达到这个程度高薪自然也不是问题。

嵌入式工程师入职后很可能从单片机和ARM的项目做起,器件包括stc、stm32、GD、灵动、Risc V等等,板卡架构以单MCU或MCU+FPGA为核心器件,再结合一些AD、DA、FLASH或者传感器之类的外设。性能更高一些的板卡会采用TI或者三星的高端ARM器件,可以运行LINUX操作系统,需要进行操作系统应用程序开发或者驱动程序开发。沿该路线发展,可以向嵌入式架构师方向发展,做软件架构设计,之后做软件项目负责人或者部门经理等等。

FPGA工程师可以从事FPGA开发设计,或者也有同学做IC行业的前端设计和验证。在前期区别不大,都是做RTL编码仿真,但后面的发展路线区别较大。IC设计前端的岗位属于IC行业,作为IC设计链中的一环,需要熟悉IC设计和验证的EDA工具和流程(DC、PT、Formality等),以及设计规则与要求。此外,IC大部分为专用集成电路,具有行业背景的区别,比如图像处理、数据传输、处理器等,需要熟悉相关业务知识和项目。

FPGA工程师虽然也会选择某个行业相关的领域,但相对比较灵活,涉及到的项目也更宽泛。初级FPGA工程师最常见的工作是做一些接口逻辑,与板上不同的外设进行通信。之后会涉及到时序约束和时序分析,设计优化等工作。在业务方面,会涉及到不同IP核的应用,常用的包括ddr2/3/4、serdes、PCIE、rapid IO以及SOPC设计等。以上是通用的技术,熟悉之后还是要和某一行业背景相结合,理解并加深某个行业的理论及应用。比如数字信号处理、图像处理、工业控制、雷达以及通讯领域等,每个行业都有自己深入的理论,其原理和算法值得深入研究。真正有价值的是解决问题的方法和创新点,会写代码只是重复性劳动。

FPGA工程师如何起步

首先,最好是爱好这个方向的。兴趣是最好的老师,不喜欢的事很难持久做好。确认自己愿意投入这个方向后,就可以付诸努力了。具体包括以下几个方面:

1. 回顾理论。数字电路、微机原理与接口等理论知识最好再巩固一下,FPGA看似在写

代码,实则是做硬件设计。写出的verilog代码在脑子里一定要与硬件电路能对应上;

2. 编码及仿真。熟悉verilog/VHDL语法并进行模块级RTL编码,在modelsim仿真验证

功能正确性;

3. 熟悉器件及EDA工具。国外器件选择xilinx、altera进行熟悉,了解lattice。国内熟 悉紫光同创、安路科技,军工是复旦微电子。第三方EDA工具首选synplify。EDA工 具建议精通一家(Vivado),熟悉其他家(其实都大同小异)。RTL视图工具、时序

分析及约束工具、Chipscope等debug工具也需要熟练掌握,以后调试经常会用;

4. 器件相关知识。不论国内外器件,需要对其datasheet尽量深入阅读,推荐看xilinx

的datasheet,详细描述了器件架构及底层电路的原理及用法。其实很多书籍都是将

该手册进行了翻译,强烈建议仔细通读英文原版,会对FPGA的理解带来很大提高;

5. 时序分析及约束。尽量透彻理解时序分析的原理,熟悉常用的约束方法并加以实践。

这些手段在后面处理高低温下时序不满足的案例时会很常用;

6. 工程实践。可以从一些协议不太复杂但比较常用的模块开始设计。总线类的如:UART、

IIC、SPI、AMBA等;外设接口如:AD/DA、串口、开关量、EMIF接口等。之后可以

做做图像显示等小项目,用摄像头+SDRAM/DDR+VGA做个视频采集和显示demo,还

可以加上边缘检测、滤波、灰度处理等简单算法。有图像输出的项目往往更容易让人 产生成就感。

如何进一步提高

有了以上基础,可以说已经具备初级FPGA工程师设计能力,可以应对日常工作中初步的任务,如模块级设计,外设接口设计以及FPGA与硬件板卡调试等。入职1~2年的FPGA工程师通常都能胜任。此时他们的困惑在于如何进一步提高。

具备一定基础知识和基本技能后,需要在系统架构和设计复杂度上有质的提高,这不能再靠搞模块级的小设计实现了,而要通过承担较大的系统级设计完成。比如成为项目组主力甚至项目负责人,负责系统方案和框图设计。

如何成为项目负责人?这就需要前期工作的努力来证明,当你把基础的工作保质保量按时完成,甚至游刃有余的时候,这样的重任自然会落到你的肩上。而你要做的就是欣然接受并且当仁不让,因为这正是提高的好机会。

做方案对工程师要求挺高的,如果是整个大系统方案,包括方案可行性评估、指标确定、系统结构、硬件设计、逻辑设计、软件设计等各个层面的经验,对刚承担设计工作的FPGA工程师并不适合。不过我们可以承担FPGA部分的方案设计,即便如此也是有一定挑战的。麻雀虽小,五脏俱全,FPGA小系统的方案也一样需要评估和指标确认,之后才是器件选型、框图设计、模块划分、代码编写、仿真、上板验证调试、系统联调等环节。

在方案评估和指标确认时需要严谨,尽量考虑到后面技术实现的可操作性,技术指标需要再三确认后签字,否则到了交付环节按照技术指标逐一验收时就是给自己挖坑。器件选型时对资源和时序均要考虑余量,既可以防止意外情况也便于功能扩展和升级。评审没有问题后进入正式设计环节。

如何做方案设计

FPGA的方案设计在不同项目上大同小异,方法是类似的,建议认真对待自己负责的第一个项目,对以后大有裨益。

方案设计是自顶向下的过程。为了便于理解,我们以设计PCI IP核为例来说明。

首先,需要通读PCI原版协议内容,充分掌握各个功能和指标的要求,以及PCI协议各个功能的实现原理和机制,对其各模式的时序要求深入理解。之后可以熟悉主流PCI芯片手册,如果项目要求必须与某款芯片兼容,更需要深入学习该芯片资料。我们以PLX9054芯片为对标设计器件,熟读其器件手册,并与协议内容进行对应。

当两个手册都深入理解后,你在心中就会融会贯通,明白9054的器件是如何将PCI协议在其具体模块中实现的。到了这一步就可以开始框图设计了,框图设计同样是自顶向下。首先是一级框图,这一步可能你的整个设计只有5~6个一级模块来表示。模块个数的多少不重要,重要的是模块划分一定要合理,尤其是一级模块,在划分的同时需要明确写下每个模块实现的功能以及与其他模块的接口定义。这一步一定要慢,慢点不要紧,做不对返工才耽误时间。如果一级模块划分不合理,整个架构会出现较大问题,后面的二级、三级模块会非常混乱,到了那一步又要推翻重来。所以,在开始时务必慎重,做到尽量合理,后面才会越来越顺。

一级模块划分完成,各个模块间接口定义尽量细致。这一步做完后,可以进行一级模块内部的二级模块划分,如果第一步做的比较合理,这一步会顺利很多。接着如果有必要,可以进行三级模块划分和定义。直到所有模块划分完,接口定义也全部定义完成后,需要从整体上将所有模块的功能和接口整个梳理检查一遍,做一些细节的调整和修改,直到整个项目安排妥当,规划完成。到了这一步,已然成竹在胸。

如果可以按照如上步骤将框图设计做到位,那么下一步的编码过程你将会体验到什么是行云流水。能这样说也确实是因为亲身体验过,当设计环节真正做到考虑周到后,编码环节就是搬砖罢了。很多模块编码效率之高会令自己都惊讶,甚至有些模块编完后没有修改,仿真和调试都是一把过。单独的模块仿真正常后,将各个模块逐步联调。同样的,如果框图设计合理,联调也会比较顺利。直至所有模块都完成编码和联调。

体验了上述过程,会对什么是方案设计有深入的体会。体现设计思想和创造性的是理解协议,设计框图的过程,这一步叫设计。你的设计思想体现在各个模块如何设计、安排和协调,才能更好的实现项目需求,而不是写rtl代码。写代码就是体力劳动,写多少都不会有本质的提高。

设计下板调试可能会遇到时序问题,尤其是有高低温试验要求的项目,容易出现高温下时序余量不足的情况。此时需要根据时序分析结果对代码进行优化设计,流水线、乒乓操作、并行逻辑加速等大尺度的手段应该在设计初期就用上,到了这个阶段已经不太好大规模调整了。可以做的是局部优化和微调,另外就是依靠时序约束和编译策略等手段起到锦上添花的作用。

当整个项目在大系统中联调基本通过后,最好对FPGA在整个系统中起到的作用和功能进行复盘和加深理解,同时从FPGA出发,对整个系统的功能通盘了解。FPGA通常在一个系统中起着承上启下的作用,介于软硬件之间,比较容易了解上下游的电路和系统。所以FPGA工程师有很大机会成长为系统工程师或者项目负责人。

随着站位角度的提高,接触项目的增加,再多学习和熟悉一些软硬件的知识和技能(比如硬件板卡设计和嵌入式设计),FPGA工程师会逐步成长为项目负责人和项目经理的角色。

不同的发展路线

当然,FPGA不仅这么一条路线。另一条发展路线也挺好,就是沿着专家路线发展。这个方向也比较好理解。以做图像处理方向为例,开始时用FPGA做一些简单的中值滤波、灰度处理的工程,算法都是成熟的,稍微理解一下就可以编码设计了。有一些基础后可以深入学习算法相关知识和原理,搞一些复杂算法和有创新性的算法研究。通常有了理论之后,会用Matlab验证,之后可能再用C代码实现,最终直接用FPGA实现。可以说从理论到实现一条龙。能真正做到这一点的也是凤毛麟角,当然职业生涯和待遇也不是问题。

总体来说,搞技术基本就是两条线,横向发展和纵向发展。横向发展就是要知识面宽,各个方面的经验和技能都比较熟,项目经验非常丰富。这类岗位是从项目负责人、项目经理一步步做上去,最终成为项目总监甚至总设计师的角色。纵向发展就是沿着某一领域的技术做深入钻研,具备深入的理论知识和创新性思维,解决行业较前沿和痛点问题,最终成为某一领域的技术专家。

以上两种是比较常见的发展路线,当然还有技术做到一定程度,有了一定机缘转做市场或者直接创业的,相对来说少了很多。毕竟隔行如隔山,搞技术的思维和销售的思维,甚至创业的思维相差甚远,所以成功的少之又少,要看个人能力和造化了。

关于发展前途

经常有FPGA工程师比较迷茫,又想搞FPGA设计又想搞IC前端设计和验证。特别是近两年IC行业比较火,很多初学者都选择了IC前端和验证岗位。

通常的FPGA工程师和IC前端设计或者验证岗位还是有区别的,特别是做的时间长了以后差别会更大。IC设计和验证是整个IC设计中的一个环节,有比较严格的设计方法学,设计工具和流程要求。熟悉之后通常会沿着IC设计这条主线往下发展,而且搞IC的通常都是大公司,在职业发展上需要考虑所在城市IC类公司的体量和发展。

FPGA工程师相对比较灵活,应用的行业也不一而足。大公司、小公司、研究所等都在用。入职后发展也是参差不齐,要看个人能力、努力程度和一定的机遇。后面的发展和项目经验有很大关系。

很难说那种前途会更好,这就好像很难预测什么行业未来一定很好一样困难。宏观上来看,搞技术都差不了太多,水平高了就好一些,水平低了就差一些,哪个行业基本都是这样。哪个行业都会有盛有衰,难道每次都要踩着点赶热度吗?最终有可能这山望着那山高。

临渊羡鱼,不如退而结网。如果真的喜欢搞技术,最好还是真正静下心来,踏踏实实积累和提高,功不唐捐,最终都会有所回报。

写在后面

洋洋洒洒写了很多,很多都是自己的亲身感悟或者周围朋友的经历,想法也很简单,就是想把自己经历过的总结出来,给正在经历或者还未经历的朋友们提供一些参考,如果真的能起到一点点帮助的作用,那我真的会倍感欣慰。

后面应该还会陆续写一些文章,包括职业规划、项目开展或者具体技术细节的,如果看过文章的朋友在个人工作和职业生涯中有什么问题,欢迎私信交流讨论。希望大家都能工作顺利,前途似锦。


注明:本内容来源网络,不用于商业使用,禁止转载,如有侵权,请来信到邮箱:429562386ⓐqq.com 或联系本站客服处理,感谢配合!

用户登陆

    未注册用户登录后会自动为您创建账号

提交留言