IC君的第40篇原創文章 (歡迎關注公眾號 icstudy)

一年一度的五一勞動節又到了,常常加班不止996的ICer又可以好好休息一下了,首先IC君祝大家勞動節快樂!

大家都知道對於一顆有點複雜度的晶元而言(比如SOC),通常都會包含數字電路和模擬電路。在設計的初期,也許數字模塊和模擬模塊是分開設計和模擬的。隨著項目的推進,需要將這些模塊都集成到一起,形成最終tapeout的晶元。

以前也寫過一篇文章IC君:新入職IC工程師必備技能——數模混合篇

SOC的很多模塊是數模混合信號

如何保證數字電路和模擬電路之間的連接性和協同工作的表現呢?

做模擬唄~

廢話,當然要做模擬,要做什麼模擬呢?

包含數字電路和模擬電路的數模混合模擬。

數模混合模擬顧名思義包括數字電路模擬和模擬電路模擬。那數字電路模擬和模擬電路模擬又是如何定義的呢?

數字電路的模擬建模:verilog、system verilog、VHDL等等;

模擬電路的模擬建模:spice、verilog-A/AMS、VHDL-AMS、Real/Wreal、行為模型等等.

不同建模類型和spice模擬相比模型精確度與性能的關係

數字電路的模擬是以verilog為代表的,模擬電路的模擬有多種選擇,最終數模混合有多種方式。這篇文章重點討論verilog和spice的數模混合模擬方法。

常用的支持verilog的模擬器:VCS (synopsys), NC verilog/irun (cadence) , modesim(mentor)等等;

常用的支持spice的模擬器 :hspice (synopsys), Xa (synopsys), hsim(synopsys), finesim(synopsys), spectre(cadence)等等;

hspice針對的是模塊級的模擬,通常用於規模很小的電路,精度很高但速度非常慢。

Xa,hsim,finesim可以作為快速spice的模擬工具,速度上比hspice快很多,損失一點點精度。數模混合設計電路通常是中小規模的,一般都是選擇快速spice模擬工具,hspice根本模擬不動啊。

所以最常見的數模混合模擬選擇是VCS與Xa、hsim、finesim三者之一。下面IC君就以VCS+Xa為例,討論數模混合模擬的過程。

既然數模混合模擬包含數字電路和模擬電路兩種模擬,最頂層整合所有模塊的模擬屬於哪一種呢?數字還是模擬呢?

答案是兩者都可以。

以數字verilog為頂層的數模混合模擬環境
以模擬SPICE作為頂層的數模混合模擬環境

具體使用哪種環境要看實際的項目,以數字verilog為頂層的好處是,模擬模擬的結果都轉換為數字,後續的驗證就變得比較簡單,畢竟數字的驗證方法學比模擬先進很多。

有時候數字模塊僅僅是一個很專用的模塊,很複雜而且規模很大,其它都是以模擬模塊為主,這時候也可以用模擬SPICE作為頂層來做數模混合模擬。

本來IC君自己辛辛苦苦準備了一個實例,後來發現在在Xa的安裝目錄$Xa_install_dir/doc/tutorials/mixed_signal/XA-VCS

下面有準備好的實例。這個實例是以數字verilog模擬作為頂層,唯一的缺點是有些配置太簡單了,IC君在它的基礎上再加了一些複雜的配置。

這個實例的目的是驗證一個4位加法器,這個加法器是用手工搭出來電路(模擬電路的實現方式)。

在這個實例裡面我們需要準備如下文件:

adder.v Verilog 4位加法器的定義,其實只需要module名和埠定義;

testbench.v模擬環境的頂層文件,用Verilog描述;

addr4.spi4位加法器的SPICE網表文件,作為模擬模塊;

cmos35.mod工藝庫文件,spice模擬時需要的;

vcsAD.init:數模混合信號的控制文件;

cfgxa(CustomSim)的配置文件;

run_xa_vcs混合模擬編譯和模擬的腳本

在shell命令窗口,輸入run_xa_vcs 回車即可看到整個模擬過程和結果。

打開run_xa_vcs,裡面的內容如下:

/bin/rm -rf csrc simv* *.vcd *.fsdb*

vcs -full64 -ad=vcsAD.init testbench.v adder.v -l comp.log -debug_pp -o simv

simv +COMPARE -l sim.log

第一行內容是刪除一些臨時文件,第三行是執行編譯結果,最重要的是第二行。

第二行是VCS 編譯的命令,裡面加入了數模混合信號的控制文件vcsAD.init,頂層的testbench.v和adder.v。

testbench.v的內容如下:

注意這兒的timescale的精度定義要小心,要比模擬模塊的時間精度要小。舉個例子假如你在這邊設置一個 1ns/1ns, 模擬模塊的門延遲只有幾十ps,這樣信號在數字和模擬介面之間處理的時候,相位就會發生錯亂。

adder.v的內容如下:

文件裡面的注釋拿掉也沒問題,這個模塊只是用來定義埠的,實際模擬的時候會調用後面的模擬模塊。

vcsAD.init的具體內容如下:

第1行的意思是調用xa作為模擬電路的模擬器,模擬電路的網表文件為addr4.spi,調用xa的配置文件cfg。

第2行的意思把addr4這個模塊用spice來模擬。

第3-5行定義了信號從數字到模擬介面的定義:

信號從數字模塊傳到模擬模塊,上升和下降時間都為100ps,延遲300ps,邏輯0轉換為高電壓3.3,邏輯1轉換為低電壓0,對應介面信號的名稱。

d2a的詳細語法如下:

第6-7行定義了信號從模擬到數字介面的定義:

信號從模擬模塊傳到數字模塊,電壓低於0.6v的時候轉換為邏輯0,電壓高於2.7v的時候轉換為邏輯1,對應介面信號的名稱。

a2d的詳細語法如下:

第8行不重要,告訴工具在spice網表裡面哪些是匯流排埠,比如a_3 a_2 a_1 a_0作為匯流排a[3:0],在對應的verilog模擬文件裡面就可以用a作為匯流排埠。

在這個文件裡面,我們還可以加一些其它的配置,比如信號的驅動強度等等。

addr4.spi這個文件跟我們通常的spice模擬文件很類似,裡面會調用網表(可以用virtuoso生成)和工藝庫,還有一些測量meas語句:

再來看一下xa(CustomSim)的配置文件cfg:

第一行是用於設置xa的模擬精度,3是最低的,7是最高的(接近hspice的精度了)。

第二行是設置輸出波形的格式,我這邊模擬用的是2015的版本,最新的版本可以把模擬部分輸出的fsdb 跟數字部分生成的fsdb 合併到一個fsdb裡面,這個版本還不行,輸出的結果是2個fsdb。

最後給出輸出波形和屏幕顯示結果:

通過模擬結果可以知道,以模擬方式手工搭出來的4位加法器,在邏輯上沒有問題,當然它的覆蓋率沒有達到100%啊,有過數字驗證經驗的可以輕鬆修改這個testbench。從這個例子我們就可以看到以數字作為頂層的數模混合環境的優勢,驗證變得非常高效。

推薦閱讀:

相关文章