注意本文只是讲数字芯片设计公司,不涉及模拟芯片设计公司(模拟芯片设计公司软件工程师比较少)也不涉及芯片制造公司和提供芯片制造设备的公司。芯片设计公司一般的芯片岗位包括芯片系统架构师、前端设计工程师、验证工程师、可测试性设计工程师、后端设计工程师、模拟版图工程师,但大公司也会招聘大量软件岗位包括嵌入式软件工程师、应用程序工程师等。

芯片岗位里的工程师要写RTL代码但是这些跟软件工程师基本没关系。从SOC的角度看很多软件工程师好奇下面这个关系:数字电路、硬件寄存器、指令集、底层驱动、操作系统、应用程序的关系。这里有个关键角色就是验证工程师,这个岗位以上的点基本都要懂一点,当然他们仅仅是做单元验证代码。验证工程师在芯片岗位里非常重要,重要性甚至比芯片设计还大。这里说的都是芯片流片前的工作。

软件工程师主要发挥是在芯片流片后。比如当嵌入式软件工程师拿到一个流片出来的ARM SOC,接下来他们要做什么呢?首先是boot rom编写,这里会涉及到汇编语言和寄存器配置,当然汇编语言会涉及到编译器这些一般直接用开源的。到这里实际上芯片就可以拿出去卖了,其他程序就要下游客户自己根据芯片手册的寄存器说明慢慢移植,但是在小小的单片机都要给下游客户一个库函数包的年代这样卖芯片没人要。然后就是uboot和kernel移植,这部分工作就要直接下载uboot和Linux源码慢慢改慢慢调试。最后是各种应用库比如编解码库、ISP库等,这些也要一 一做好驱动并提供应用层接口。经过上述一系列工作后,终于可以发布SDK了。

早20年前的ARM SOC开发就是裸片开发的,芯片公司只做了boot rom能开机就不管了。剩下的uboot、Linux移植全靠嵌入式软件工程师自己移植。那时候做嵌入式软件的人真的是大牛。

现在很多芯片大厂自己也接终端方案做,一是为了推销芯片二就是赚钱。这些跟我们最常见的嵌入式软件工程师没什么差异,不同的是他们能直接跟自己的原厂人员沟通拿到最底层的寄存器配置和代码。

Logo

开源、云原生的融合云平台

更多推荐