一般業界數位IC設計開發流程


Posted by bcewang on 2020-02-10


因為看了Huli大的CoderBridge介紹,加上自己試架的wordpress網站老是丟著一陣子不管就被入侵,然後被主機商封鎖,所以換個簡單的平台來試試。

帳號開通的第一篇,先貼個我自己在ptt的文章試試看。
下面是以一個SSD digital ASIC工程師的觀點來簡述開發流程:

(1) 規劃階段

這主要是主管、PM、和資深工程師的事,先決定有哪些規格,例如NVMe要支援到哪個版本、有甚麼Optional能力、Flash要支援那些種類、Performance要達到多少,再來看看現有的IP夠不夠用,不足的部分看是要自己做,還是買新IP。

這階段需要的技能,就是各domain的深度和廣度,靠持續的學習沒捷徑。

(2) 前端階段

就是撰寫RTL code把整個IC實現,建立開發環境,整合各個IP,驗證各項功能,這階段是主要工作,需要的技能如下:

1. RTL coding

Verilog語法特性是基本常識(其他RTL像VHDL也一樣),請不要把寫verilog當成寫軟體,最好知道自己寫的每一行,會合成出甚麼電路,進一步要懂跨clock domain怎麼sync。

2. verificaiton by simulation

用NCverilog或VCS之類的跑模擬,建test bench來驗證功能,如果會用SystemVerilog,或甚至UVM來加強/加速驗證也不錯。

3. verification by FPGA

把RTL燒進FPGA做功能性和大量驗證,因為速度上不了ASIC的速度,所以只有功能性,要上去得要超貴的emulator,大量資料是因為simulation跑個1ms,就要半小時一小時,用FPGA burn in跑個三天三夜都可以。
要燒進FPGA,使用的tool要看FPGA品牌,我公司用的是Xilinx,使用的就是它家的Vivado,原本可以從頭到尾都靠Vivado,但為了更好的Synthsis結果,我們有換Synplify。

4.簡單C語言能力

如果有和FW合作,自己負責的IP有時總是要和FW debug,所以要基本的看得懂他們在做什麼事,如果可以,能看懂assembly code更好,因為那才是CPU真正做的事,有時候因為筆誤,還是preprocesser directives,會和C code要做的不一樣。

(3) 後端階段

RTL開發到一定程度,就會開始走design flow(各公司有自己的名字),先決定好SRAM的大小、數量、和形狀,然後進行LEC、synthesis、P&R、STA...,如果公司夠大這些有另外的人負責,數位IC工程師要做的,就是當design flow的人在說timing不行,像是進出SRAM的timing太差,或是DFF a到DFF b的距離太長,就要想辦法加DFF,或改設計讓timing能過。

再來走到更後面,當netlist的timing資訊抽出來了,就要進行post-simulation,和verificaiton by simulation差不多,只是要在verilog描述掛sdf檔,這時候會遭遇通常不是行為錯,而是SRAM output或沒reset的DFF,所產生的unknown會傳遞到整個電路,要從一片紅的波形逐個往前追到源頭。

(4) ASIC階段

後端人員解完所有timing,前端人員跑完各製程corner的post sim,就可以送到晶圓廠投片,大家開心放假了,等wafer出來,要先做CP測試,封裝後還有FT測試,這個都是前端階段由比較資深的人加進去的基本測試電路,可以刷掉因為製程或封裝造成的損傷。

等Chip回到公司那天,第一步先讓chip能正常動,板子上錯件、接錯線、各種人類可以造成的錯誤都有可能,再來就是FPGA跑過的各種unit test、burn in test都接著跑,最後還有各種相容性測試,各平台的的問題,都是見招拆招,和FW一起debug(通常FW會先自己弄,他們比較辛苦),等在自己公司的平台能穩定工作,剩下的就是從各客戶回報的疑難雜症了。


第一篇文章先這樣子應付一下^^


#ic設計






Comment