數位設計工程師

一言以蔽之:數位設計工程師負責數位電路的開發設計到硬體實現。

數位設計的流程,簡單來說可以分成三個階段:

  • Functional design
  • RTL design
  • Physical design

這就是一位數位設計工程師(Digital Designer、簡稱DD,或也叫Digital design Engineer、簡稱DE)所要做的事。

Functional design

首先要研讀spec和datasheet,把需要解決的問題或要設計的IP,畫出block diagram和flow chart,後續的設計才會流暢。

有時候架構很複雜,這時會先利用MATALB或一些高階語言想出演算法,定義出系統層級的架構,所以也被稱為system-level design。有些規模較大的公司還有獨立的部門專門在開發演算法,這是因為一旦系統級的架構弄不好,電路技巧再怎麼優異、製程工藝再怎麼先進,都救不回系統層級的損失。舉例來說,相較於對手,我做的電路很棒,在運轉時可以有20%的power reduction,結果對手的架構可以50%的時間進入休眠、直接耗電一半,我當然打不贏對手。

RTL design

接著DD就要撰寫硬體描述語言(hardware description language、HDL)了,最常見的硬體描述語言是VHDL和Verilog,VHDL發展比較早,語法也比較嚴謹,學校上課的教材多半是VHDL;Verilog的語法類似C語言,在美國和臺灣的業界大部分還是使用Verilog。

撰寫RTL(register-transfer level)code也被稱為front-end design,之所以叫前端是因為還沒有真正合成出電路,而只有logic synthesis。要驗證這些logic,DD會設計一些pattern,跑模擬來做pre-layout simulation(pre-sim),利用到的軟體有VCS、NC-verilog等,看模擬跑出來的電路波形是否符合預期。nLint也是常用的工具,用來早期檢查RTL code的功能正確性。

Physical design

如果RTL code沒有問題,就可以進入APR(auto placement & route,也稱為P&R),得到gate-level netlist,也產生真正的layout。同樣的RTL可以任意合成出來各種layout結果,有些結果area小、有些結果power低、有些結果速度快,各有各的好處,那tool怎麼知道要往哪個方向合成呢?就取決於DD給定的條件(Synopsys Design Constraint、SDC)。

這部分也被稱為back-end design,之所以叫後端是因為已經真正合成出電路。合成後的layout,要經過extraction把電路中各級的delay等timing資訊抓出來,DD就利用這些SDF(Standard Delay Format),可以報出STA timing(Static Timing Analysis)有沒有pass,也可以做post-layout simulation(post-sim)檢查。

後續

如果順利的話,chip tape-out出去、sample回來後,系統應用都沒有問題,那就是最好的。倘若不順利,就會遇到一些bug,DD要負責debug,並想出解法。

就算自己的數位電路設計完全沒有問題,但半導體廠在製造chip過程的良率並不是100%,會發生fail IC,DD也要編寫test pattern,把fail sample在testing時刷掉。