FPGA 开发工程师
目录
一、FPGA 开发工程师的薪资待遇
二、FPGA 开发工程师的工作内容
1. 负责嵌入式 FPGA 方案设计,包括仿真、软件编写和调试等工作。
2. 使用工具软件建立 FPGA 综合工程,编写综合策略和时序约束。
3. 进行 FPGA 设计的优化与程序维护,以及板级调试和验证。
4. 撰写设计规范及文档,完成领导交付的其他工作任务。
三、FPGA 开发工程师的职业发展前景
四、FPGA 开发工程师的必备技能
1. 需求核对阶段
2. 总体设计阶段
3. 设计及编码阶段
4. 仿真验证阶段
5. 后端物理约束阶段
6. 调试阶段
五、FPGA 开发工程师的面试经验
一、FPGA 开发工程师的薪资待遇
FPGA 开发工程师的薪资水平较高,市场需求也在不断增长。从职友集的数据来看,FPGA 开发工程师招聘工资收入一般 63.2% 岗位拿¥20 - 50K / 月,年薪¥24 - 60W,2023 年较 2022 年增长了 2%。对比全国平均工资¥9.6K,高 175.5%,数据可信度高。
不同学历和经验的工程师薪资有所差异。硕士学历的 FPGA 开发工程师,69.8% 的岗位拿¥20 - 50K;博士学历的工程师,71.5% 的岗位拿¥20 - 50K。从数据统计来看,薪资一般与学历正相关,一般学历越高,工资越高。例如,大专学历的 FPGA 开发工程师工资为¥21.2K,而本科学历占比最多,达 82.1%。
经验也是影响工资水平的重要因素,一般经验越丰富工资越高。应届生工资¥32.5K,1 - 3 年经验的上海 FPGA 开发工程师平均工资¥28.0K,2023 年较 2022 年增长了 6%。3 - 5 年经验的工程师在招聘中需求较多。
然而,行业内存在一些准备转行的情况。职友集的职业信心调查显示,2 名网友参与投票,0 票表示对该行业有信心,2 票反馈不想做 FPGA 开发工程师了,准备转行,可能与工作压力等因素有关。
二、FPGA 开发工程师的工作内容
1. 负责嵌入式 FPGA 方案设计,包括仿真、软件编写和调试等工作。
FPGA 开发工程师需要承担嵌入式 FPGA 方案设计的重任。在这个过程中,他们要进行全面的仿真工作,确保设计在各种情况下的正确性和稳定性。同时,软件编写也是关键环节,开发工程师们需熟练掌握 Verilog 或 VHDL 等开发语言,为实现 FPGA 逻辑功能提供坚实的代码基础。调试工作同样不可或缺,通过不断地排查问题、优化代码,使 FPGA 系统能够高效、稳定地运行。例如,中船重工(武汉)凌久电子有限责任公司的 FPGA 开发工程师,就负责硬件系统 FPGA 的接口和算法逻辑开发,包括逻辑方案设计、器件选型、代码编写、仿真验证、系统联调等工作。
2. 使用工具软件建立 FPGA 综合工程,编写综合策略和时序约束。
对于 FPGA 开发工程师来说,熟练使用工具软件是必备技能。他们利用诸如 ISE、VIVADO、QUATUS 等开发工具建立 FPGA 综合工程。在这个过程中,编写综合策略和时序约束至关重要。综合策略决定了如何将设计的逻辑转化为实际的硬件电路,而时序约束则确保电路在特定的时钟频率下能够正确运行。比如,在建立 FPGA linux synplify 综合工程时,需要新建 filelist.v 文件将所有 RTL 代码 include 进去,新建 fdc 约束文件对管脚、时钟、复位信号进行约束,还需新建.tcl 脚本实现建立完整的 synplify 工程,并通过 makefile 文件进行工程管理和执行。
3. 进行 FPGA 设计的优化与程序维护,以及板级调试和验证。
FPGA 设计的优化是提高系统性能的关键。开发工程师们通过减少逻辑单元、优化布线、合理分配资源等方式,提升 FPGA 的时钟频率、降低延迟、提高吞吐量。同时,程序维护也是日常工作的重要部分,及时修复漏洞、更新功能,确保系统的稳定运行。在板级调试和验证阶段,工程师们深入了解 FPGA 器件资源及使用方法,包括 PLL、RAM 等各种 IP 核的使用,熟悉 DDRSDRAM、SPI、SerDe、I2C、A/D、D/A、UART 等接口的设计、调试。例如,山东慧视达智能科技有限公司的 FPGA 开发工程师,主要负责开发基于 FPGA 的视频处理应用,在这个过程中就需要进行 FPGA 与 ARM 处理器及周边器件的通信协作,这就涉及到板级调试和验证。
4. 撰写设计规范及文档,完成领导交付的其他工作任务。
良好的设计规范和文档对于 FPGA 项目的成功至关重要。开发工程师们需要按照规范进行设计,确保代码的可读性、可维护性和可移植性。文档内容包括设计思路、调试记录、器件选型等,方便项目组成员之间的交流和协作,也为后续的维护和升级提供了依据。比如,在团队项目开发中,为了使开发高效、一致、正确,应遵循清晰的文档命名、设计文档化、良好的编码风格、规范的代码、详细的注释规则和合理的模块规则等设计规范。
三、FPGA 开发工程师的职业发展前景
- 职业发展路径广阔,可以从初级工程师晋升为中级、高级工程师,甚至技术经理、项目经理等职位。
FPGA 工程师的职业发展路径较为广阔,可从初级 FPGA 工程师起步,逐步晋升为中级工程师、高级工程师。随着经验和能力的不断提升,还可以担任技术经理、项目经理等管理职位。在开发能力方面,需要掌握 FPGA 基础知识,包括数电基础知识如逻辑门、锁存器、触发器、进制、码制、状态机、竞争与冒险以及 verilog 语法等;了解 FPGA 片上资源如可配置逻辑块、嵌入式块 RAM、时钟管理资源等;熟悉 FPGA 开发流程,从需求分析到上板调试各个环节。
- 在不同领域如通信、数据中心、工业物联网、医疗电子、汽车电子、航空航天等都有广泛的就业方向。
FPGA 在多个领域都有广泛的应用和就业方向。在通信行业,可担任通信系统工程师、信号处理工程师、5G 系统设计师等职位,负责设计和实现通信协议,处理信号调制解调,实现高速数据传输和处理,例如在 5G 基站中,FPGA 可以用于实现复杂的信号处理算法,提高通信系统的性能和效率,在卫星通信系统中,FPGA 可以实现高速数据传输和信号处理,确保通信的可靠性和稳定性。FPGA 工程师在通信行业需要具备深厚的通信理论知识和数字电路设计能力,熟悉通信协议如 LTE、5G 等,掌握信号处理算法如滤波、调制解调等,同时要具备良好的团队合作能力和沟通能力。
在数据中心,FPGA 工程师可做高性能计算工程师、加速器设计师和机器学习硬件工程师等。工作内容是优化数据处理流程,实现算法加速,如深度学习、大数据分析的加速处理,以及实现低延迟网络交换。由于数据中心的计算任务是灵活多变的,而 ASIC 研发成本高、周期长,FPGA 的灵活性可以保护投资,只需要几百毫秒就可以更新逻辑功能,保持数据中心的同构性。FPGA 工程师在数据中心需要具备扎实的数字电路设计和算法优化能力,熟悉深度学习、大数据分析等领域的算法,能够将其映射到 FPGA 上进行加速,同时要具备良好的系统架构设计能力。
在工业物联网领域,可成为嵌入式系统工程师、自动化控制工程师,开发智能传感器和执行器的控制逻辑,实现设备间的实时通信,如在智能制造、智能电网、环境监测系统中的应用。FPGA 的可编程性和灵活性,使 FPGA 产品在工业物联网发展运作中发挥着关键作用,其应用领域聚焦在工业网络通信、机器视觉、工业机器人、边缘计算、工业云五个方面。
在医疗电子领域,可担任生物医学工程师等职位,设计医疗影像处理系统,实现医疗设备的控制逻辑,如超声波、CT 扫描仪的数据处理和分析。
在汽车电子领域,可做汽车电子系统工程师、自动驾驶系统设计师等职位,实现车载系统的实时处理,如雷达信号处理、摄像头视频流分析,以及车辆动力系统控制和安全系统。
在航空航天领域,可担任航空电子工程师、航天器控制系统工程师等职位,设计高可靠性、低功耗的飞行控制和通信系统,以及遥感数据处理系统。
此外,FPGA 工程师在接口协议、算法开发、全栈 FPGA 开发、人工智能与机器学习等方向也有广阔的就业前景。
- 随着技术的发展,FPGA 工程师需要不断提升自己的技能,包括技术能力、人际沟通能力、项目管理能力和自我提升学习能力。
技术能力方面,FPGA 工程师要对 FPGA 的资源如 IO、时钟结构、mem、slice、GTP 等有深入掌握,熟悉 FPGA 工程的每个步骤,包括 ucf、partition、timing constrain 以及各种 parameter 和 report warning 等。同时,要对具体项目的背景有深入了解,如高速通信接口的协议、测试方法和调试手段等。不仅要具备 RTL 能力和上板子动手的能力,还能熟练使用逻分、示波器、协议分析仪、万用表、信号源等常用仪器设备。
人际沟通能力也至关重要。作为技术经理或在项目中,需要与不同部门的人员进行有效的沟通协调。要能够清晰地表达技术方案和需求,倾听团队成员的意见和建议,解决团队内部的技术分歧和矛盾。同时,要具备良好的团队管理能力,能够合理分配任务,激发团队成员的工作积极性和创造力。
项目管理能力也是晋升的关键。技术经理需要学习项目管理知识体系,如了解 PMP 认证所定义的体系,掌握项目的规划、执行、监控和收尾等各个阶段的管理方法。能够以生活中的项目作为练习,观察软件项目,推演项目管理的过程,主动打杂熟悉某些项目管理过程,逐步独立带小项目,最后带大项目。在项目管理中,要注重时间管理、成本管理、质量管理和风险管理,确保项目按时、按质、在预算范围内完成。
自我提升和学习能力同样不可忽视。FPGA 技术不断发展,技术经理要紧跟技术前沿,持续学习新的技术和知识。关注行业动态,了解 FPGA 在不同领域的应用和发展趋势,将新的技术和理念引入到团队的项目中。同时,要注重培养自己的领导能力和决策能力,在面对复杂问题和挑战时,能够迅速做出正确的决策。
四、FPGA 开发工程师的必备技能
FPGA 开发是一项复杂而富有挑战性的工作,需要工程师具备多方面的技能。以下是对 FPGA 开发工程师必备技能的详细阐述。
1. 需求核对阶段
- 良好的沟通技能:在需求核对阶段,FPGA 开发工程师需要与需求方进行深入的沟通,核对所需的功能及性能。良好的沟通态度至关重要,谦逊专业的沟通态度能够确保对需求的理解无偏差。如果理解错误,可能会引起构架的修改,而对外团队协作能力很大一部分也体现在这里。
- 行业背景知识:工程师需要将需求翻译成 FPGA 的功能点以及逻辑上的处理流程。用硬件的大白话来说,就是明确大的 pipeline 流水线功能以及每个功能对应的表项及数据结构。
2. 总体设计阶段
- 功耗评估:Xilinx 和 Altera 两家厂商都会提供功耗评估 excel,工程师可以填入使用的 IP、逻辑使用量、频率、IO 类型、时钟等信息,从而评估总的功耗大小,以及每一路电源的电流大小预估。这对于确保板子的稳定性非常重要。
- IO 设计:这一阶段涉及电路连接设计,特别是对外设计的接口,如牵涉到存储器、transceiver 相关的接口、IO 电平标准、时钟分布等都要例化出来,然后编译通过。软件会输出 csv 文件,里面包含了 IO 的电平标准及外围连接,这一步能极大提升做板一次成功率。由于每一代 FPGA 以及每个系列器件的结构有所不同,特别是共享 PLL、transceiver、存储器的共享模块设计都会有差异,因此安全的做法是把要使用的除 LUT 和 RAM 以外的资源例化,然后编译通过,以保证外围连接不出错。
- 软硬件接口设计:制定软件要访问 FPGA 的方式、以及软硬件如何配合、FPGA 如何初始化功能。不同的应用场合需要设计不同机制,大体可以分为寄存器访问(直接或间接)、功能表项的配置数据、命令、状态的互传等。高性能应用一般要设计 DMA,不同应用对 DMA 的要求也不同。
- 逻辑部分的总体规划:包括时钟域规划、复位规划、模块划分及模块功能规划、FIFO/RAM 使用大小及类型规划、模块间传递接口规划(最好标准化,类似软件 API,以后可复用)、编码规则制定。
3. 设计及编码阶段
- 良好的 coding 规则:主要是命名规范,命名至少要区分同步寄存器、跨时钟域寄存器、连线等信号,最好在信号命名前缀进行区分,这样在后期下约束时可以用通配符找信号。
- 查找及看懂硬核的使用手册:能够熟练查找并理解硬核的使用手册,对于高效利用 FPGA 的资源至关重要。
- 领域内常见算法的实现:比如在网络领域,要掌握共享缓存设计、各种 HASH 算法实现、LPM 查表算法、各种匹配算法实现等。在加解密领域,需要具备把串行算法翻译成硬件并行算法的能力。针对目前流行的神经网络,要知道针对各种网络如何设计高效的数据流入方式,以及如何进行特征的预处理。
4. 仿真验证阶段
- 仿真平台搭建:根据设计大小及是否将来重用的情况来选择搭建仿真平台的方法。如果设计大且重用多,可以考虑 UVM 这些设计方法及平台搭建。简单的设计可以利用 Verilog,通过 task 任务的设计及调用来设计仿真平台。这一过程需要掌握 testbench 设计、仿真工具使用及 debug。
- 测试规划及项目抽取:这是目前大部分 FPGA 工程师容易忽略的地方。设计要稳定,需要系统地进行项目抽取,最好是另一拨人根据自己对规格的理解来系统抽取测试项目,这样完整验证后能保证功能大体稳定。而性能测试一般要在实机测试中进行。
5. 后端物理约束阶段
- 可以从 IO 分配的工程中导入后端物理约束。包括时序约束 IP 的约束导入以及其他软件相关的特殊信号的约束(一般通过在代码中用属性表示)。掌握看后端的原理图、器件映射图,在出问题时可以在后端把一些网络剪短或连接(ISE 之前提供此功能,vivado 不确定是否还有这种工具)。
6. 调试阶段
- 掌握调试工具:一般厂商都会提供 transceiver 调试工具测试回环、无码率等。内部逻辑分析仪使用、存储器调试、各种物理层参数的配置及调试、各种下载方式掌握。软硬件联调时各种调试命令的设计也需要熟练掌握。
五、FPGA 开发工程师的面试经验
- 面试流程包括简历筛选、网络测试、多轮专业面试等。
FPGA 开发工程师的面试流程通常较为严格和规范。首先是简历筛选环节,招聘方会根据求职者的学历、项目经验、专业技能等方面进行初步筛选。通过简历筛选后,可能会进行网络测试,测试内容一般包括专业知识、逻辑思维等方面。接下来是多轮专业面试,面试形式多样,可能包括一对一面试、小组面试等。
- 面试官常提问专业知识点、简历项目中的问题、琐碎细节等。
在面试过程中,面试官常常会提问一系列专业知识点,例如 FPGA 的内部结构、逻辑综合的过程、时序约束的方法等。同时,面试官也会针对求职者简历中的项目进行深入提问,包括项目的背景、目标、实现过程、遇到的问题及解决方案等。此外,面试官还可能会关注一些琐碎细节,比如在项目中使用的芯片型号、占用的资源、代码的保存方式等。
- 面试难度因公司和个人情况而异,应聘途径有校园招聘和社会招聘等。
FPGA 开发工程师的面试难度因公司规模、行业地位、岗位要求以及求职者个人的专业水平和经验等因素而异。一般来说,大型企业和知名公司的面试难度相对较高,对求职者的要求也更为严格。而对于一些初创企业或小型公司,面试难度可能会相对较低。
应聘途径主要有校园招聘和社会招聘两种。校园招聘通常面向应届毕业生,招聘流程相对规范,包括宣讲会、笔试、面试等环节。社会招聘则面向有一定工作经验的求职者,招聘方式更加灵活,可能通过网上申请、内部推荐等途径进行。
例如,从职朋职业圈分享的诺瓦 FPGA 工程师面试经验来看,面试过程中先是自我介绍,然后选一个自己擅长的项目讲一下,围绕这个项目会问很多基础问题,还会问 FPGA 的基础知识,如底层结构、异步时钟问题等。北京雷久科技有限责任公司的面试则开始让自我介绍,问是否考研、在校成绩,然后问几个基础的专业知识。海康威视的校园招聘面试有网络测试和三轮面试,一轮问专业知识点,二轮问简历项目中的点,三轮问琐碎的问题细节。中航光电科技股份有限公司的社会招聘面试,3 月下旬部门主管打电话初试,4 月进行腾讯会议面试,每人平均不到 5 分钟,提问包括换工作原因、说服录用、期望薪资等问题。安徽耀峰雷达的校园招聘面试在校园招聘会上投简历后问项目问题、成绩单和课程情况等。