1. 程式人生 > >淺談數字後端工程師的工作

淺談數字後端工程師的工作

  • 前端設計(也稱邏輯設計)和後端設計(也稱物理設計)並沒有統一嚴格的界限,涉及到與工藝有關的設計就是後端設計。
  • 個人理解是:
  • 數字前端以設計架構為起點,以生成可以佈局佈線的網表為終點;是用設計的電路實現想法;
  • 主要包括:基本的RTL程式設計和模擬,前端設計還可以包括IC系統設計、驗證(verification)、綜合、STA、邏輯等值驗證 (equivalence check)。其中IC系統設計最難掌握,它需要多年的IC設計經驗和熟悉那個應用領域,就像軟體行業的系統架構設計一樣,而RTL程式設計和軟體程式設計相當。
  • 數字後端以佈局佈線為起點,以生成可以可以送交foundry進行流片的GDS2檔案為終點;是將設計的電路製造出來,在工藝上實現想法。
  • 主要包括:後端設計簡單說是P&R,但是包括的東西不少,像晶片封裝和管腳設計,floorplan,電源佈線和功率驗證,線間干擾的預防和修 正,時序收斂,STA,DRC,LVS等,要求掌握和熟悉多種EDA工具以及IC生產廠家的具體要求。

  • 術語:tape-out—提交最終GDS2檔案做加工;Foundry—晶片代工廠,如中芯國際。。。

    數字前端設計的一般流程:

      1.    規格制定

  •       晶片規格,也就像功能列表一樣,是客戶向晶片設計公司(稱為Fabless,無晶圓設計公司)提出的設計要求,包括晶片需要達到的具體功能和效能方面的要求。
          2.    詳細設計

    Fabless根據客戶提出的規格要求,拿出設計解決方案和具體實現架構,劃分模組功能。目前架構的驗證一般基於SystemC語言,對構架模型的模擬可以使用SystemC的模擬工具。其中典型的例子是Synopsys公司的CoCentric和Summit公司的Visual Elite等。

          3.    HDL編碼

    使用硬體描述語言(VHDL,Verilog HDL,業界公司一般都是使用後者)將模組功能以程式碼來描述實現,也就是將實際的硬體電路功能通過HDL語言描述出來,形成RTL(暫存器傳輸級)程式碼。

    設計輸入工具:具有強大的文字編輯功能,多種輸入方法(VHDL,Verilog,狀態轉移圖,模組圖等),語法模板,語法檢查,自動生產程式碼和文件等功能。如Active-HDL,VisualVHDL/Verilog等。

    RTL分析檢查工具:Synopsys LEDA

          4.    模擬驗證

          模擬驗證就是檢驗編碼設計的正確性,檢驗的標準就是第一步制定的規格。看設計是否精確地滿足了規格中的所有要求。規格是設計正確與否的黃金標準,一切違反,不符合規格要求的,就需要重新修改設計和編碼。

    設計和模擬驗證是反覆迭代的過程,直到驗證結果顯示完全符合規格標準。

    模擬驗證工具Synopsys的VCS,Mentor ModelSim,Cadence Verilog-XL,Cadence NC-Verilog。
          5.    邏輯綜合――Design Compiler

          模擬驗證通過,進行邏輯綜合。邏輯綜合的結果就是把設計實現的HDL程式碼翻譯成門級網表netlist。綜合需要設定約束條件,就是你希望綜合出來的電路在面積,時序等目標引數上達到的標準。邏輯綜合需要基於特定的綜合庫,不同的庫中,閘電路基本標準單元(standard  cell)的面積,時序引數是不一樣的。所以,選用的綜合庫不一樣,綜合出來的電路在時序,面積上是有差異的。

    一般來說,綜合完成後需要再次做模擬驗證(這個也稱為後模擬,之前的稱為前模擬)

    邏輯綜合工具Synopsys的Design Compiler(DC),Cadence的 PKS,Synplicity的Synplify等。另外,和綜合工具配合使用的還有很多其他工具,如靜態時間分析工具,等效性檢查工具等等。Synopsys公司和Cadence公司都提供完整的工具包。
          5.1.    STA

    Static Timing  Analysis(STA),靜態時序分析,這也屬於驗證範疇,它主要是在時序上對電路進行驗證,檢查電路是否存在建立時間(setup  time)和保持時間(hold time)的違例(violation)。這個是數位電路基礎知識,一個暫存器出現這兩個時序違例時,是沒有辦法正確取樣資料和輸出資料的,所以以暫存器為基礎的數字晶片功能肯定會出現問題。STA工具有Synopsys的Prime Time。
          5.2.    形式驗證

          這也是驗證範疇,它是從功能上(STA是時序上)對綜合後的網表進行驗證。常用的就是等價性檢查(Equivalence Check)方法,以功能驗證後的HDL設計為參考,對比綜合後的網表功能,他們是否在功能上存在等價性。這樣做是為了保證在邏輯綜合過程中沒有改變原先HDL描述的電路功能。形式驗證工具有Synopsys的Formality。前端設計的流程暫時寫到這裡。從設計程度上來講,前端設計的結果就是得到了晶片的門級網表電路。

  • 數字前端後端區別

IC前端主要是數字前端設計、軟體硬體驗證、FPGA驗證等,前端的入門門檻相對後端較低(但其實還相對其他行業是比較高的)。在北京,就我知道,前端的工程師起薪是7.5k。現在全國合格的前端工程師還是非常少的,數量缺口達到3萬。

後端主要是模擬部分以及layout,這方面需要及其豐富的經驗,相對應收入會比前端高一點,人才也是奇缺的。人才缺口相對前端就更大了。 同時還有一些IC流程工程師,也是非常吃香的。 前端需要學習的週期相對後端短,後端尤其是模擬部分,完全是靠經驗熬出來的,所以如果有毅力,在模擬的路上多走幾年,前途(錢途)也是不可限量的。我有一個同學,學模擬的,在公司屬於奇缺人才,裁員和他是絕緣體。當然本身實力也很強的, 所以樓主主要看自己吧,喜好哪個方面。IC有時候很有挑戰,有時候很枯燥。像我,debug波形多了,會噁心

數字前端主要包括兩個方面:設計和驗證。設計前期是寫verilog程式碼,到後來就是做些架構層面的東西,設計和驗證都是針對邏輯功能而言的,不太關心時序問題
數字後端做實現、流程,主要是學會使用工具軟體後端經驗比較重要。相對而言,前端的門檻較低,後端門檻較高。

我們來看一下獵頭招聘就明白這兩個概念了。呵呵。。


高階數位電路工程師 
工作地點:成都       
職位描述:
1.  完成公司ASIC數字前端的設計和驗證
2.  配合數字後端部門完成ASIC的後端設計;
3.  配合測試部門完成ASIC的測試;
4.  完成相關文件的整理與編寫。
任職要求:
1.    相關專業本科以上學歷;
2.    4-5年相關工作經驗,具有獨立設計模組、晶片能力;
3.    熟練掌握Verilog,熟悉晶片的模擬驗證方法,熟悉 NC-Sim CS, Quartus等EDA工具;熟悉ASIC設計流程;瞭解系統匯流排架構和常用軟硬體介面協議。
4.    良好的溝通協調能力及團隊合作精神。

  • 數字後端設計工程師

職位描述:
負責數位電路的綜合、自動佈局佈線、時鐘分析、時序修正、電源分析、訊號完整性分析、物理驗證、代工廠tapeout等數字後端工作,協助前端工程師完成設計、驗證和時序分析,完成對代工廠資料交接和對客戶技術支援。
任職資格:
1. 微電子相關專業,本科以上學歷。
2. 熟悉SOC從RTL到GDS的完整設計流程;                                                                                                          
3. 能夠熟練使用Astro/Encounter、DC/PC、PT、Formality、MentorDFT、StarRC、Calibre等相關設計工具的某一套或幾種;
4. 較好的英文閱讀能力;                                                                                                          
5.高效的學習能力和團對合作精神。

  • 數字前端和後端設計工程師需要具備什麼能力

<前端>

  1. 精通verilog(包括2001)的程式設計,模擬,測試
  2. 充分掌握邏輯綜合和時序分析
  3. 理解前端經常使用的各種庫的格式和內容,比如.v, .lib
  4. 瞭解某個應用領域的知識
  5. 學會使用FPGA測試程式碼
  6. 具備DFT的基本概念

<後端>

  1. 熟悉後端流程,(IO plan, floorplan, power flan, place, CTS, route)
  2. 熟練掌握一種後端工具的使用
  3. 學會如何使用工具分析功耗及其對設計的影響,(static/dynamic IR-drop, EM等)
  4. 學會使用工具分析和解決cross talk問題
  5. 精通時序分析
  6. 理解後端常用庫和檔案的格式,內容,生成和轉換,比如: .lib, spice, lef, def
  7. 精通一種unix script語言,現在大多用perl,也可以用awk。(TCL不是unix script語言,但是也一定要會)
  8. 十分了解circuit design及其工具 (為DRC/LVS準備的)
  9. 具備DFT的基本概念
  10. 瞭解package design的種類和過程

一個優秀的後端工程師要能夠在複雜的結果中,識別出問題的真假,比如時序上的違反,找出解決問題或者防止問題發生的方法,然後靈活有效地使用工具來達到你的要求。
 
作者:china_soc   時間:2007-12-20 17:26

也來說兩句前端工程師:
前端工程師還可以考慮掌握:

  1. 掌握系統的劃分:功能定義,資源分析,結構劃分等體系結構上的知識.
  2. 掌握關於低功耗,高速度,低面積相關的設計理念
  3. 熟悉或掌握系統模擬平臺的搭建:前模擬,後模擬和atpg模擬等模擬平臺的擴充性和相容性的知識,模擬一定是一大塊了.
  4. 熟悉或掌握積體電路前後端設計流程:前端和後端設計介面及影響和前後端工具的介面及影響
  5. 除.lib,.v外還應掌握,SDF/SPEF/DSPF/RSPF等資料結構
  6. 熟悉或掌握你所有用的廠家工藝的工藝特性.
  7. 掌握形式驗證工具.
  8. 掌握靜態時序分析工具的使用:比如如何保證你利用靜態時序分析分析通過的設計,流片回來時序一定正確.
  9. 掌握perl語言,shell,makefile語言

1)  前端主要負責邏輯實現,通常是使用verilog/VHDL之類語言,進行行為級的描述。而後端,主要負責將前端的設計變成真正的 schematic&layout,流片,量產。打個比喻來說,前端就像是做藍圖的,可以功能性,結構性的東西。而後端則是將藍圖變成真正的高樓。

2)  前端設計主要是進行功能設計,程式碼的編寫,要會使用硬體描述語言,也就是上面有提到的verilog/VHDL等,當然,也會要使用一些模擬軟體。後端設計需要的則會更加多一些了,包括綜合,到P&R,以及最後的STA,這些工具裡candence和synopsys都有一整套系統的。有關心的可以去他們的網站看看。

其實前端和後端對於程式設計沒有特別的要求。前端的設計會需要使用硬體描述語言來寫程式碼,但是,需要注意的是,這裡指的是"描述",而不像是C或者 java之類的強調程式設計技巧啊什麼的。所以,這個選擇就看你自己了,而與程式設計沒有什麼特別的關係了。