這是IC君第1篇原創文章 (微信公眾號 icstudy)

之前在知乎,有人問了一個問題:

想了解混合信號集成電路設計工程師具體的職責?

想了解混合信號集成電路設計工程師具體的職責,全定製單元設計?ADC和DAC和Pll設計?求大神講解崗位認知和工作內容

當時我的回答如下:

zhihu.com/question/3724

儘管回答還是比較清晰的,但可能對數模混合設計電路工程師的具體工作還是不太了解。好吧,就把我這個IC狗一天的工作大概記錄下來。

早上進了公司,先打開電腦,看一下昨晚下班的時候丟在finesim/hspice 隊列中的testbench。先解釋下什麼是隊列,因為公司買的EDA軟體license是有限的,所以當很多人run 東西的時候就形成了隊列,除非項目優先順序比較高,所以就是根據提交的時間排隊run。因為晚上隊列比較空,可以把一些run的時間比較長的testbench晚上丟進去,第二天看看結果。OK,利用perl腳本收集下log文件文件裡面的錯誤信息,沒有錯誤,那就去泡杯茶去。

泡完茶之後,就開始在座位上看一下自己最近的未完成事項。突然發現,有個testbench沒有加,於是copy 了一個示例testbench,打開gvim開始修改。我們的工作環境是linux,gvim也是編輯文本的神器,各種操作yy,i,cw,. 等,很快就改完一個testbench,然後丟到finesim/hspice隊列裡面去,查看了一下run的狀態,一切正常,等結果。然後打開波形查看工具,開始看昨天run的波形,雖然看了一下hspice meas語句得到的結果是預期之內的,但是還是要用nwave看下波形是否合理。

不知不覺,10點半到了,今天剛好有周會時間到了。周會主要是跟著項目組的同事報告一下上周的工作進展,以及發現的一些bug,如果有什麼特別的問題需要大家一起討論也可以提出來。等所有人彙報完狀態,差不多

吃完飯差不多十二點多,中午還是要趴一會,要不然下午困得要死。午休完之後,看看上午run的東西跑完沒,已經跑完了,然後finsim run 的log文件報了一個dffp 的d 已經不滿足設定的setup 時間,然後追了一下這條path,發現有某個DFF的D端的path經過了十幾級的組合邏輯,延時超過10n(請原諒我們還在用如此落後的工藝)

Finsim 檢查timing的方法和靜態時序分析不一樣,必須要在testbench中加入如下語句:

.chktiming type=setup name=n1 ref=clk time=1n vlth=0.2 + vhth=2.0 refvlth=0.2 refvhth=2.0

這句話就是check 節點n1 到節點 clk的時間如果少於1n,就會在log文件中報出來,n1和clk的測量的低電壓都是0.2v,高電壓是2v。一般會把vlth,vhth,refvlth,refvhth定義成vdd的函數,如0.5*vdd,這樣在不同的vdd下面都可以直接用。後面會有後續文章詳細講解Finesim的各種用法?。

由於這條path是同事負責的,所以就到他座位旁討論如何解決。最後決定先優化sizing,看看優化後的結果能不能正確;如果setup timing還不能通過的話,那隻能稍微大改一下,做一些邏輯改動。我們的原則是,如沒有大的理由,則不要改動電路,畢竟大部分的電路都是以前的tapeout的項目驗證過的。

搞完這個問題後,感覺有點興奮,好不容易發現一個bug,你懂的。繼續看波形,刷bug。突然電話響了,接了電話知道layout 成員已經把我需要用的電路模塊block都畫完了。看來今天是要做一下post sim了,利用calibre的工具抽取寄生參數的網表,並替換到原有的網表中。沒辦法,不是數字設計流程的標準flow,所有的東西都要手動參與,不過這樣也能了解更多東西和原理。寄生後的網表通常更接近真實的矽片結果,但run起來會慢很多。所以有時候,如果太多的block提取寄生參數後,有可能需要run好幾天。

忙完這一切後,差不多快下班了,趕緊把post layout的testbench全run起來,明天早上過來就可以check結果了,哈哈!現在項目還不算特別緊,所以可以不用加班。一般項目快tapeout的時候,都是最忙的時候,天天加班也不為過。

總結一下我這個數模混合電路設計工程師的工作就是:

寫testbench ,run ,看波形刷bug,改電路,再run,再看波形刷bug,如此往複;

用到的工具: hspice/finesim/gvim/nwave/laker/calibre等


推薦閱讀:
相关文章