如果把FPGA的学习比喻乾坤大挪移的话,有七层的修炼境界
1:第一层:会写代码,能仿真。
会写veriog代码,会写testbench。
会用modelsim或者其他仿真工具,检查代码的bug及问题。
能够写模块级别的代码,仿真没有问题,算是精通第一层。
2:第二层:熟悉FPGA的架构,能够写约束,
对于FPGA内部资源如数家珍,能够有效利用FPGA内部资源,例如各种类型的RAM,LUT,BUG,serdes等等。可以进行FPGA选型。
可以对设计进行约束:
例如IO的约束
时序的约束;
位置的约束。
精通此层的人,可以称得上算是会FPGA了。
3:第三层:熟悉接口,熟悉通信协议
会用xilinx等FPGA的IP。
例如PCIE的IP,XDMA, SATA,SERDES等等。
可以把xilinx的用例跑通,可以在用例的基础上,通过添加及修改实现需求及功能
精通此层的人,可以很快接手并开展一个项目,成为项目负责人。
4:第四层:可以准确定位问题并解决问题。
可以通过调试解决问题,熟悉使用各种硬件,软件,FPGA内部逻辑分析仪等调试手段。
解决包括且不限于硬件问题,软件问题,FPGA问题。
一句话:解决别人解决不了的问题。
大家有FPGA解决不了的问题就找他解决。
精通此层的人,通常在公司被称为大牛。
5:第五层:懂算法,协议;
例如可以将某个协议,创造性实现在FPGA上。
例如AI的inference,
例如TCP的offload。
一个系统kernel级别的C程序,或者AI的python程序,别人不知道如何下手。
此层的人可以在FPGA上干净利索的实现。
核心指标是在FPGA上能够完成别人搞不定的算法,或者别人达不到的性能。(这个复杂度是AI的性能和TCP卸载来衡量的,不是一般的算法实现)
精通此层的人,经常被称为架构师。
6:第六层:精通体系结构
精通体系结构,实现软硬件划分。
例如kernel,虚拟化,容器,VF等
了解如何这些需求和FPGA的配合,
精通此层的人,可以实现例如虚拟化OVS卸载,P4协议实现,裸金属云管理及应用等等
可以通过FPGA实现类似DPU的卸载,目前很多公司做FPGA来实现这个东西。
精通此层的人,可以去技术创业,通常被称作CTO。
7:第七层:
乾坤大挪移的第七层,张无忌也没有练成过,不过可以类比一下。
电影《苏乞儿》中,周星驰扮演的主人公苏乞儿最后一掌“亢龙有悔”解决掉大boss,悟到了第十八掌是前十七掌的组合。苏乞儿通过这些基本招式的组合成额外的一招,提升了掌法的威力,
那么,FPGA的第七层,那就是能够融汇贯通前面6层的能力,实现的从顶层到底层全栈能力。
精通此层人,通常被称之为“大神”。
另外:
FPGA工程师和IC设计工程师差别不小,虽然都是要熟悉verilog代码,但是IC设计工程师是专注,例如作为IP owner,IC工程师的设计,不会跨度很大,大部分参与都是IP级别,系统级涉及较少。且SOC设计有章可循。
而FPGA工程师却是要十八般武艺样样精通,因为FPGA系统级,但是代码质量和研究深度与IC工程师有差距。
简单来说,一个是专,一个是博。
当然,这个也分人。
如果是做芯片部门的FPGA验证工程师,这个就是原汁原味的移植原有的设计,主要考虑的是对FPGA资源的熟悉,考虑的是时钟,复位,memory,serdes等如何替换等工作。这个和上述的两种都不是一个工种。