[心得]從系統廠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