新入職IC工程師必備技能——數模混合篇
這是IC君的第10篇原創文章 (同步於微信公眾號 icstudy)
之前有人問到新入職的IC(集成電路)設計工程師要掌握哪些技能,這篇文章就以數模混合(Mix signal)IC設計工程師來舉例說明。後續文章會再以數字前端IC設計工程師舉例說明,提前劇透。至於其它領域,如數字後端、數字驗證、模擬領域等,小夥伴們可以積極投稿哦,我們有精美禮品相送!
有人會說進了公司之後,會有新人培訓,到時候再了解也不遲。IC君認為有些知識可以提前了解,你了解的越多,工作後進入狀態就會越快,表現就會越好,升職加薪就會越快!
首先,由於IC設計過程中用到的EDA軟體(電子設計自動化Electronics Design Automation)絕大部分是運行在linux系統上的,所以我們要能夠熟練的使用Linux/Unix系統。比如常見的Linux命令cp/rm/mv/sed/sort/tar/tkdiff等;如何配置linux的cshell、alias、path等打造一個高效的工作環境;這裡強調一下用到的文本編輯工具vim/gvim, 我們通常要用它來寫Verilog代碼、Tcl/Perl/Python腳本、testbench、查看log文件等,所以vim/gvim要用得非常熟練,一旦你用習慣之後,你就會覺得windows 下面的文本編輯工具都是渣渣,只有vim/gvim才是神器。上面說的這些東西,網上搜一下linux基礎教程就有一大堆。
當一個晶元的數字和模擬電路都具有較大的規模,如果模擬或數字部分都選擇IP,成本將會大大增加,這個時候就需要數模混合設計,常見的混合設計應用如下圖所示:
具體的如SOC(片上系統)設計、RF(射頻)設計、NAND/NOR 存儲器等。
我們從數模混合設計的項目執行流程來看文章開頭提出的問題,具體流程圖如下所示:
第1步:架構設計。通常是項目老大和比較資深的前輩參與的,主要是通過spec來確定整個電路的架構和模塊劃分。這一步新手工程師要能夠熟悉spec,仔細閱讀spec能夠使我們的設計少走彎路。具體定架構其實跟我們剛入職的菜鳥關係不大,如果有機會參與討論的話,我們也可以聽聽想想,多問問為什麼。
第2步:小模塊設計(前模擬)。通常是項目老大分配一些模塊給各個負責人。如果是純數字的而且電路規模比較大的模塊,那就是寫RTL code按照標準數字設計流程來走,具體的細節下一篇文章再講; 那對於電路規模比較小的數字模塊或者一些模擬電路模塊,有時候就需要手動搭電路,搭電路的過程就是人工綜合的過程,所有你要具備一定的數字邏輯或者模擬電路基礎(具體看你是偏數字,還是偏模擬。那剛入職的偏數字的同事可能會分到一些簡單的模塊如計數器、加法器、串並轉換器、SRAM、IO buffer等;那剛入職的偏模擬的可能分到的是一些運放、電壓檢測、分壓器、延時單元等。新手就是從這些小的電路模塊開始,逐步提高自己的設計能力。
設計電路要用到創建電路的工具,像Cadence的composer,viewlogic的viewdraw等。顯然這些工具你要用得比較熟練。等做好電路後,就要對電路進行模擬確定它們是不是滿足我們的設計需求。模擬首先要寫符合spice語法的testbench,然後用hspice/finsim/nanosim等模擬工具進行模擬。所以我們要掌握基於spice的語法,以及閱讀這些工具跑出來的log文件。hspice/finsim/nanosim工具的manual可以大概看一下,後面需要找到某些用法時可以快速找到。
這裡提一個小技巧,我會把一些常用語句例子放在一個文本文件hspice_sytnax裡面,如pwl/pulse/meas等,然後設置一個命令如helphs 來實現gerp xx hspice_sytnax,如在shell下面輸入 helphs meas 就可以輸出使用meas的語句例子;
有時候模擬結果跟我們預期的結果不一致,我們還要通過輸出波形來找到電路的問題,這就需要用到Verdi/nwave來看波形進行debug,所以debug能力和Verdi/nwave的一些應用技巧也要掌握。
第3步:整個晶元模擬。一般新人只是輕度參與這個過程,主要是為了熟悉整個晶元。數模混合設計的晶元級的模擬通常是用hsim,finesim,nanosim,Verilog/VerilogA等。前三種工具都是兼容spice語法的,他們的特點是提供很多擴展性的功能,可以調節計算精度,能夠在可以容忍的時間內模擬大規模的電路。與第2步類似,你需要閱讀manual了解這些工具的具體用法,也許某個選項的設置就能為你節省大量的模擬時間。而Verilog/VerilogA的晶元級模擬就必須要把所有模塊(包括模擬電路)寫成行為模型或者門級網表,這種做的目的是為了快速驗證功能,尋找電路中的邏輯bug。Spice的模擬可以看到數字和模擬電路所有工作過程,但模擬時間會大大增加。
第4步:寄生參數提取(後模擬)。這一步用到的工具是calibre。因為晶元的實際工作條件是基於layout(版圖),而前模擬沒有考慮版圖上的寄生信息,其實模擬的結果是不準確的。由於我們的layout不是基於標準單元庫的,需要專門的layout工程師去手動畫出來,所以這一步通常落後於第3步。不過這一步做完,模擬結果通常變得更差,所以要再回到第2步修改電路,反覆迭代這一過程,直到電路的寄生模擬沒有問題為止。一般公司都有固定的流程去實現寄生參數的提取。新人通常要做的是看懂這些流程,學會calibre一些命令設置。
在這第2,3,4步,我們可能要生成大量的testbench(不同的工藝和操作條件),處理大量的模擬結果log文件(快速篩選出我們想要的結果),處理具有寄生參數的網表(提取出的寄生網表需要處理之後才能用),所以我們要用到腳本來自動化處理,大大提高我們的工作效率。
如何選擇腳本語言可以參考我之前在知乎的回答
https://www.zhihu.com/question/58089537/answer/165907888
具體使用哪種腳本其實要看公司的工作平台,如果大家都用perl,那你也用perl溝通起來就沒什麼障礙,學習前輩們寫的腳本也比較方便;如果你開發的東西只是為了自己處理某些東西,那Tcl ,Perl,Python,都可以,看個人喜好。
Tcl 語法簡單,容易理解,文本處理能力也不錯;
Perl 語法晦澀難懂,但是用習慣了也還好。文本處理能力可能更強一點;
Python 語法優美,擴展方便,主要用於科學計算,計算性能比較牛逼。
建議主要學精通一種,其它能看懂,簡單使用也會。
除了上面說的項目過程,我們平時很多時候還要做一些工作報告給同組的成員review。所以我們還必須掌握ppt,excel這些工具,能夠把我們的工作結果用豐富多彩的形式表現出來,給老大們留下好的印象。
總結一下,從IC君的工作經驗來看,新手數模混合IC設計工程師必須掌握的技能有:
Linux/Gvim/腳本/Spec/數字邏輯或者模擬電路基礎/電路圖輸入工具/spice語法及模擬工具/波形工具verdi/debug能力/calibre功能/PPT/EXCEL等。
大家如果有其他想法或問題,歡迎留言討論,不要忘記關注微信公眾號 icstudy 哦!
小夥伴們也可以積極投稿icstudy@163.com哦,我們有精美禮品相送!
推薦閱讀:
※善用CSV - 顯示於網頁Table
※【E知】時鐘電路,約束設計與CTS基礎
※關於IC設計國內前景怎麼樣啊?未來發展好嗎?