[心得]从系统厂BSP RD到猪屎屋Firmware engineer

楼主: agmoagmo (小铭)   2020-10-16 08:58:35
网志好读版:
https://reurl.cc/k0oyxb
(with自制解说图XD)
整理目前从系统厂担任BSP RD转职到IC design house担任Firmware engineer
一年半以来的心得...
希望透过由浅入深的介绍,说明我们这个行业是在做什么...
更希望给有心想要转职到firmware engineer的朋友或是新人们,
给予一个很基本的概念分享~
以下正文开始:
会想写这篇文章是因为最近有人问我担任系统厂的BSP RD,
后来能不能到Design house担任firmware engineer的这个问题...XD
目前我从系统厂换到design house已经超过1年半...
想说也可以整理一下这期间我自己的心得为何
也想说顺便介绍一下IC设计的大概流程,
以及到底之前在系统厂担任BSP学习到的什么能力,
可以应用在design house的firmware engineer
首先最一开始,先了解一下IC到底在我们的日常生活中,会在什么地方出现
从下图可知道,其实目前想像得到的电子产品,基本上都会有IC的存在...
"IC is everywhere..."
因此,我认为就工作机会的角度看来,从事IC设计的行业是一个不错的选择
好的,接下来就进入正题了~
IC有非常多种,而现在目前市面上的主流,就是所谓的SoC (system on chip) IC
意思是说,一颗IC可以被看作是一个拥有多种功能的系统
如下图举例,这颗SoC IC可能同时支援有display,audio,bluetooth等等的能力,
甚至是这几年很红的AI,也可以被嵌入在一个SoC里面
这边特别提到一下到底软件工程师在SoC IC的开发之中,到底扮演着什么样的角色?
由下图当作一个范例,假设SoC中有支援speaker(喇叭)跟recorder(录音)这两个硬件元件
那么这两个硬件元件如何才能够起作用呢?
答案就是需要SW firmware engineer根据HW designer的设计
透过软件的方式,产生相对应的程式码,去达到能够启动speaker跟recorder的目的
这样的程式码,我们称之为driver(驱动)。
上述所提到的程式码,最后会被build成一个档案,也就是我们俗称的firmware(韧体)
而这个韧体最后会在SoC中被执行。
有了HW component跟SW driver的存在,这样我们就可以开发一些我们熟知的软件应用
举例来说,音乐播放器中可以透过speaker driver去使用speaker
而录音机可以透过recorder driver去使用recorder
接下来就我目前所知的,来描述一下一颗IC从无到有的流程...如下图所示
(可能会有不完善的地方.. 请多包涵.. 小弟目前在design house资历尚浅XD)
(1) 订定spec
通常要做一颗IC,或著说要做IC中的某一个元件,或著功能(又称作IP)
第一件事情就是需要了解到底要做什么,以及如何去做
这样的过程,我们可以称之为叫做spec的定义
Designer必须要在这个过程把spec规格开出来,
并且详细地写成一份文件让相关人员review
(2) RTL coding
接着,就是进入到所谓RTL coding的阶段
也就是digital designer撰写程式的阶段
(3) FPGA verification
当RTL写到一个程度,通常就会透过FPGA (Field Programmable Gate Array)这样的平台,进行相关的验证
来验证自己写的RTL code是否正确
通常在实际的FPGA上面跑RTL code之前,会经过一个叫做跑simulation(模拟)的动作
来验证function上面是否work
举例来说,硬件预期2乘以3要等于6
那么在simulation stage上,就必须要得到6才行
(4) FPGA validation
FPGA verification基本上是以验证功能性为主
但是它毕竟是一个模拟的环境,而且速度很慢
执行同样的程式码,在IC执行1秒钟,有可能在simulation会跑好几个小时
实际在FPGA平台上面run code,基本上就是在做FPGA validation
这时候验证的流程会越来越偏向软件,因此firmware engineer从这个stage开始
参与开发的比重也会越来越高
基本上就是写一些测试的程式码,尽可能地压力测试硬件的功能
以上(2)~(4),我觉得应该是数位设计主要的范畴
(5) Placement layout
当数位设计的部分已经被验的差不多了
在请晶圆代工厂帮忙生产IC前
接下来会针对physical design的部分,进行一些优化的动作
这时候通常会请APR部门帮忙
因为像是IC的timing, performance等等的调整,都可以在这个stage做调整
(6) Tapeout
这个阶段就是真正请晶圆代工公司 (ex: UMC/TSMC)
根据我们开出来的制程(28奈米, 14奈米, 7奈米...)去真正将IC给生产出来
这样的IC,通常称之为ASIC (Application Specific Integrated Circuit)
每一次的tapeout,动辄都是花几千万,甚至上亿
而且如果IC生产之后才发现有硬件上的bug,也回不去了...
因此,在tapeout之前,每家IC设计公司都会尽可能的做很详尽的验证
(7) Packing & testing
生产完IC后,接下来通常会经过封装测试相关的公司
来帮忙验证说这颗生产出来的IC是否有什么问题,以及将它给封装好
最后再回到原厂,或是客户手上
介绍完生产一颗IC的流程之后,接下来针对firmware engineer的部分
自问自答三个问题,当作这篇的收尾:
1. Firmware engineer在IC design house要做的事情是什么?
2. Firmware engineer会学习到的东西是什么?
3. 踏入IC design house前的软件工程师(or新人)可以做什么准备?
1. Firmware engineer在IC design house要做的事情是什么?
如果要一言以敝之...我认为是...
"能够协助一颗IC开发所有可能的软件行为"
应该就是firmware engineer要做的事情
这可能包含:
a. 协助硬件在订定spec过程中的一些evaluation
假设有3种方法可以做,但是透过软件像是写Python, C++等程式语言帮忙分析
会比较迅速, 这时候软件工程师可以帮忙跟designer co-work来帮忙做评估
b. 写driver来驱动硬件
这部分当然算是firmware工程师的主菜
Driver我认为又可以分作是:
*without OS的driver
*with OS的driver
这边的OS,近年来最为人所知的,就是Linux kernel
一旦涉略到OS,通常需要follow这个OS的rule
像是driver init的方式,memory management的方式,interrupt的注册...等等
c. 整合软件的环境
在开发过程中,可能会有tool A, tool B, tool C
会有机会为了方便,需要将ABC三种tool整合成一个tool
因此,system integration的需求也是很有可能的
2. Firmware engineer会学习到的东西是什么?
这部分我认为每个人因应不同的职责,而会有所不同
因此可能会就我目前所学所看到的,比较主观的叙述这个part
*Knowledge of boot sequence
对我而言,一直以来是比较偏向负责系统整合的部分
所以我看到的范围,会相对比较广一些
用下图举例来说,我会看到芯片开机过程的行为
上电Power on之后,被烧死在芯片里面的某一块内存上面的开机程式
(称之为boot rom),就会开始运行了
接着它可能会带起第二个bootloader,进而把OS带起来,
最后变成我们熟知的user使用环境
用Android手机来举例的话,就是:
按电源键
作者: ianwind (流风夜月)   2020-10-16 09:00:00
作者: robert0934   2020-10-16 09:05:00
作者: jason61206 (小涵涵)   2020-10-16 09:05:00
推 我问的我自首
作者: z22622003 (BWF_GODLIKE)   2020-10-16 09:15:00
推一个
楼主: agmoagmo (小铭)   2020-10-16 09:18:00
三楼XD
作者: specialrain (云淡风轻~~)   2020-10-16 09:20:00
作者: freedls (阿嬤覺得你冷)   2020-10-16 09:21:00
分享推
作者: ToshiieMaeda (Natalie)   2020-10-16 09:22:00
推 谢谢分享!
作者: q3331333131   2020-10-16 09:24:00
推 谢谢分享~
作者: aassdd55 (aassdd)   2020-10-16 09:28:00
作者: caeserhaha (凯萨沙拉)   2020-10-16 09:29:00
推推
作者: BingLing (坏人请别再靠近我)   2020-10-16 09:31:00
作者: boss0405 (boss)   2020-10-16 09:33:00
推 不过个人认为,底层FW作久了可以往上层的Host Driver走,ㄧ来可以更了解整个大系统架构,二来不愿帮HW背锅XD
作者: transforman   2020-10-16 09:37:00
只能推惹
作者: ggBird (ggBird)   2020-10-16 09:46:00
作者: bloodrain ( Black Parade)   2020-10-16 09:49:00
好文, 认真分享推
作者: ShofTequil4 (哼嗨呦)   2020-10-16 09:55:00
作者: sxbear (aLaShI)   2020-10-16 09:58:00
作者: cml0123 (Mike)   2020-10-16 10:06:00
详细推 感谢分享
作者: hongwl030 (迷途小黑羊)   2020-10-16 10:07:00
推好心又详细
作者: s5517821 (买不起苹果)   2020-10-16 10:08:00
满详细的
作者: jackcomtw (黄色狮子头)   2020-10-16 10:13:00
推心得
作者: heerodream (我想当坏人)   2020-10-16 10:15:00
推如果还在系统厂深蹲 并且常接触IC vendor的 请记得所有问题都要挖到root cause 不要得过且过 对以后跳IC design是很有帮助的
楼主: agmoagmo (小铭)   2020-10-16 10:18:00
推楼上 确实多trace code是有帮助的~
作者: julie4377 (踢踢猫)   2020-10-16 10:19:00
感谢分享~
作者: WJHinbbs   2020-10-16 10:19:00
写的详尽清楚
作者: alibodawahah (ali)   2020-10-16 10:21:00
推推
作者: edwardlu0325 (lus)   2020-10-16 10:33:00
作者: pig5212tw110   2020-10-16 10:44:00
作者: Riiku   2020-10-16 10:50:00
作者: nelso (黄小白)   2020-10-16 10:52:00
给推 IC设计原厂真的要学很多
作者: gank9527   2020-10-16 10:53:00
作者: BaaaSwin (codown)   2020-10-16 10:57:00
好久没看到分享文了
作者: kevin925   2020-10-16 11:02:00
推推
作者: misomochi (松皓)   2020-10-16 11:04:00
好文推
作者: agod10823 (Tu )   2020-10-16 11:12:00
作者: L7N (try~)   2020-10-16 11:17:00
推推推
作者: dslite (呼呼)   2020-10-16 11:18:00
台湾走asic, fw都填一填register就会动了
作者: yslj8255   2020-10-16 11:25:00
作者: massrelay (奇怪的大叔)   2020-10-16 11:26:00
作者: j02850 (Blues)   2020-10-16 11:33:00
推好闻
作者: cory1221 (corylll)   2020-10-16 11:33:00
作者: guo1111 (gg)   2020-10-16 11:34:00
作者: st903202xp (YoYoYo)   2020-10-16 11:45:00
作者: kk6401allen (LYY)   2020-10-16 11:51:00
作者: tpegioe (oeo)   2020-10-16 11:54:00
推,详细的人体入门介绍更正:推,详细的韧体入门介绍
作者: iamala (it depends)   2020-10-16 11:56:00
推分享
作者: bena5mail13 (浪费人生)   2020-10-16 11:59:00
真的用心 推推
作者: boomga78940 (哈哈豪)   2020-10-16 12:04:00
推 好文分享
作者: krizarlid (Let's Go Cubs !)   2020-10-16 12:09:00
IC厂韧体真的很充实。。。。
作者: mdmmd (mdmmd)   2020-10-16 12:12:00
作者: smartQ   2020-10-16 12:12:00
作者: ttuys (红苹果)   2020-10-16 12:16:00
作者: violetalan (紫砂很闲)   2020-10-16 12:29:00
给100个赞
作者: bb159372468 (bbAndy)   2020-10-16 12:35:00
太感谢前辈了,对我这个新鲜人来说真的太有帮助了,自己在面试过程中以及自己爬文找到的资料都是很大概念的flow,这个详细太多了,万分感谢!
作者: cajole145 (丹丹)   2020-10-16 12:35:00
推。这篇可以M
作者: change5278   2020-10-16 12:37:00
作者: labbat (labbat)   2020-10-16 12:41:00
测试的方式好寒酸 操作的流程好缓慢原来不能改fpga 难怪
作者: licg4210 (咩羊洋)   2020-10-16 12:43:00
推详细
作者: weilun911 (阿偷)   2020-10-16 12:44:00
作者: cscjp6   2020-10-16 12:44:00
作者: sc1 (sc1)   2020-10-16 12:46:00
board support package BSP蛤
作者: HHH555JJJ (皕R实验)   2020-10-16 12:48:00
作者: kjay (影)   2020-10-16 12:49:00
谢谢前辈
作者: yaote   2020-10-16 12:54:00
好文推
作者: fatcall (肥宅抠)   2020-10-16 12:55:00
作者: gosh717   2020-10-16 12:56:00
作者: leo850319 (不要说话)   2020-10-16 12:57:00
感谢分享
作者: uj2003 (Suzumiya)   2020-10-16 12:57:00
同意boss FW要帮HW擦屎 有功是HW的 有锅FW要背
作者: confucamus   2020-10-16 12:59:00
作者: Jacal (小茅屋)   2020-10-16 12:59:00
清流好文,推一个!
作者: yuffieAK47 (柚子)   2020-10-16 13:03:00
作者: javy0521   2020-10-16 13:03:00
作者: bluemkevin (WHO WHO)   2020-10-16 13:04:00
大型SOC等级的FPGA 要达到 IC 的操作频率是不可能的
作者: cocochris   2020-10-16 13:07:00
推推
作者: kfrog7040 (stitch0301)   2020-10-16 13:08:00
作者: james732 (好人超)   2020-10-16 13:23:00
推认真文,不过之后客户买产品后出问题应该也要支援?
作者: dajike   2020-10-16 13:24:00
作者: Eric0605 (我还有点饿)   2020-10-16 13:29:00
作者: Fiesta5566 (fiesta)   2020-10-16 13:53:00
FPGA不能说它是个模拟的环境, 它跟ASIC的运作是一样的只是FPGA是给你一堆既有的基本元素 你把它们接起来位置跟走线规划都远差于ASIC 这是同制程还是慢的原因
作者: as891339 (Yang_Kai)   2020-10-16 14:09:00
作者: kentin (小卑鄙)   2020-10-16 14:12:00
好文m起来
作者: Jiraya   2020-10-16 14:16:00
推 整理的很好
作者: furbyyeh (萤火虫的夜晚)   2020-10-16 14:23:00
作者: h0910299349 (小诺)   2020-10-16 14:40:00
写的很详细
作者: jerboaa (jerboaa)   2020-10-16 14:57:00
推 笔记
作者: charliebitme (查理咬我)   2020-10-16 15:04:00
TL;DR
作者: edwardhsu (年纪小不懂事)   2020-10-16 15:08:00
我还是继续在系统厂开issue就好 我就烂o_o b
作者: bluemkevin (WHO WHO)   2020-10-16 15:13:00
FPGA 一般来说叫 Emulation 除了FPGA 板,还有其他 Emulator
作者: rancilio (科学怪人)   2020-10-16 15:20:00
感谢分享,虽然跟我不同行,但是多了解上游也是不错
作者: testUI (毫无反应,就是条鱿鱼)   2020-10-16 15:27:00
好文
作者: KCer (烤鸡)   2020-10-16 15:54:00
推推
作者: Consun   2020-10-16 16:13:00
作者: Byzantin (拜占庭)   2020-10-16 16:26:00
Victor哥又帅又强
作者: gofunfull (沉潜)   2020-10-16 16:32:00
作者: clforever (clforever)   2020-10-16 16:36:00
作者: benedict76 (ben)   2020-10-16 16:42:00
firmware缺点就是google 查不到什么资料,知识都要靠问的才有办法学到。
作者: yi24 (喔伊喔)   2020-10-16 16:48:00
请问 without OS 的 driver 是指直接将适当的值填入 IC 的 register 就能带起相关的硬件功能吗?
作者: iamwolf (一次七夜狼)   2020-10-16 16:51:00
借问 理工科系怎样能当系统厂rd
作者: Fiesta5566 (fiesta)   2020-10-16 16:57:00
直接去GG就好
作者: abc127845 (monkeyGOD)   2020-10-16 17:07:00
作者: Brioni   2020-10-16 17:14:00
作者: benedict76 (ben)   2020-10-16 17:15:00
会c,物件导向,java,design pattern系统厂随便你选,然后记得要有国立硕士。
作者: beatmaniadj   2020-10-16 17:51:00
认真文,推
作者: bcew (bcew)   2020-10-16 18:07:00
回楼上,没OS就是了解CPU上电后怎么开始跑startup.s,然后跳到main()后可以用c code,对chip各IP填register做初始化让它们动起来,再来就根据各IP的规格,处理各IP的事件。
作者: ymcee (hamster)   2020-10-16 18:08:00
推 谢谢前辈指引
作者: s9001055 (牧欲汝)   2020-10-16 18:12:00
作者: mlbay (mlbay)   2020-10-16 18:17:00
作者: lingerptt (苍林亚鸟)   2020-10-16 18:36:00
谢谢详细介绍分享
作者: jdchbo (阿当)   2020-10-16 18:40:00
感谢超棒的分享
作者: jomaysong05 (small-talk)   2020-10-16 18:57:00
详细推
作者: yi24 (喔伊喔)   2020-10-16 19:02:00
谢谢 119 楼 b 大解说
作者: seal46825 (Vanish)   2020-10-16 19:02:00
NAND Controller fw就没os但是很多算法要学也不容易
作者: questioner (問題兒童)   2020-10-16 19:16:00
推ㄒㄧㄤˊㄒㄧˋ
作者: yeihow (yeihow)   2020-10-16 19:26:00
楼主: agmoagmo (小铭)   2020-10-16 19:38:00
感谢119楼b大补充~
作者: superex   2020-10-16 19:40:00
作者: hpeng (Alain)   2020-10-16 20:49:00
作者: ricebb (爱吃饭所以)   2020-10-16 20:49:00
感谢您的高抬贵手
作者: Lukas8b90G (Lukas)   2020-10-16 21:03:00
作者: homer00 (肥宅乡民)   2020-10-16 21:05:00
推分享
作者: joshualiu (眼哥)   2020-10-16 21:10:00
优文
作者: E33258 (E33258)   2020-10-16 21:17:00
推 好详细!!
作者: stud20806 (阿猴)   2020-10-16 21:21:00
作者: mixcookie (mixcookie)   2020-10-16 21:25:00
推推!
作者: CarlOrz (凯尔)   2020-10-16 21:27:00
好文推推
作者: appie1161695 (苹派)   2020-10-16 21:44:00
好优
作者: Satansblessi (chaotic warrior)   2020-10-16 22:07:00
U质文推
作者: bartester (Ajstyles)   2020-10-16 22:16:00
推 难得的优文
作者: jack7923love (黄小p)   2020-10-16 22:26:00
推, 重点在于肯不肯去了解原理。
作者: cocoyoyo (装快乐真快乐)   2020-10-16 22:50:00
作者: jnyaotn (pjtaony)   2020-10-16 22:56:00
作者: ktu5223   2020-10-16 22:58:00
作者: Qoo20811 (我没有暱称)   2020-10-16 23:09:00
希望各大designer不要偷Rule 不然每次帮忙DRC和JDV都很痛苦QQ
作者: lpoijk (↗ 老 爷 ↙)   2020-10-17 00:15:00
阅 不管在哪里 自学能力都很重要
作者: josh0114 (small)   2020-10-17 02:05:00
作者: asdg62558 (吐司皮克)   2020-10-17 03:11:00
作者: yolo2380 (yo)   2020-10-17 08:48:00
推~写的很清楚
作者: ohbravo (月饼人)   2020-10-17 09:45:00
推~
作者: brightest (fff)   2020-10-17 10:00:00
看IC配的CPU CPU越强FW能做的事越多
作者: stonez   2020-10-17 10:04:00
推 详细
作者: tannie1005   2020-10-17 11:08:00
作者: wynton   2020-10-17 11:55:00
作者: dapu (roger)   2020-10-17 12:06:00
对于不懂ic设计产业的人 这是篇好文
作者: bnd0327 (阿噗噗)   2020-10-17 12:40:00
推详细
作者: brian6607 (yukifuri)   2020-10-17 12:42:00
作者: leon1757tw (leon1757o)   2020-10-17 13:02:00
作者: sixty60 (希丝媞)   2020-10-17 13:18:00
很用心仔细的介绍 受教了
作者: sadfasdf (Java)   2020-10-17 14:14:00
推推
作者: cates (键盘万事通)   2020-10-17 15:24:00
还少了验AIC 焊接 支援客户 跑闳康(照EMMI FIB nFIB) ,示波器 电表 电源供应器真的算基本工具..
作者: gelegelego (gelegelego)   2020-10-17 17:26:00
作者: applejuice64 (凝时)   2020-10-17 21:33:00
作者: Jeniberg (与世界接轨)   2020-10-18 01:14:00
作者: newest (C'est la vie~)   2020-10-18 03:03:00
作者: loveFigo (对酒当歌 人生几何让人受)   2020-10-18 07:11:00
推,超详实的好文
作者: JerrySue0086   2020-10-18 08:29:00
晶晶体真的只能嘘
作者: willy0206 (不成才小领队)   2020-10-18 11:21:00
我在小系统厂 vendor不甩都得自干...
作者: jimmy983 (Jimmy)   2020-10-18 13:45:00
推详细好文
作者: becalm (小宅工程师)   2020-10-18 14:09:00
好文推
作者: lookat (atleastonce)   2020-10-18 14:11:00
作者: Polestar (极)   2020-10-18 14:40:00
推推我在系统厂觉得底层的东西 看完这篇才知道有够上层XD
作者: derekQQ (小哈哈)   2020-10-18 16:09:00
已笔记
作者: Litfal (Litfal)   2020-10-18 18:07:00
写fw其实很少有完整的物件导向能用其实还少提一堆类比段的东西,那些也很可怕凡事靠自己(x) 出问题要有能力抓对人(o)
作者: Narce (纳尔斯)   2020-10-18 19:32:00
推!
作者: lonely1002 (你哈哈)   2020-10-18 21:24:00
好文分享给推
作者: gr2es60410 (kuei)   2020-10-18 22:15:00
推详细
作者: bobsonlin (billy)   2020-10-19 01:49:00
作者: anakindon (god)   2020-10-19 10:42:00
推推 好详尽的介绍!
作者: gugeegee (咕鸡鸡)   2020-10-19 10:54:00
系统厂BSP跳IC设计有相同感受,不过研究所本来就做IC设计所以多多少少有认识
作者: crazytia (大琪)   2020-10-19 11:23:00
作者: skevin (NG)   2020-10-22 12:45:00
精准 这也是为啥系统厂bsp engineer 抄公板 改一改会动以为自己就屌上天了 没想到后面的事这摸多是靠你这种人准备好的

Links booklink

Contact Us: admin [ a t ] ucptt.com