Verilog-A/AMS在RF模擬中的應用
Verilog-A/AMS在RF模擬中的應用
作者:吳順珉, Maxim Integrated IC設計工程師
準確的模擬模型可能是模擬設計最必不可少的部分。模擬模型的準確度決定了最終產品的效能可靠度。傳統的模擬設計使用固定的模擬模型(BSIM、IBIS、PSP)。每當工藝和應用中的新物理現象的出現,這些模型不斷的增加模型計算引數。這種漸進模式對於新工藝、新的應用(比如越來越高頻率的RF設計)和高度依賴物理設計的情況並不理想。下文將探討一下在RF設計中使用硬體描述語言Verilog-A/AMS的優缺點以及一些實際問題。
Verilog-A/AMS語言
Verilog-A/AMS是一種用於描述電路行為的硬體描述語言。Verilog-A用於描述類比電路的工作行為。Verilog-AMS則用於描述混合訊號電路。Verilog-A/AMS可以直接使用簡單的數學公式對電路或器件進行描述,因此可以獲得模擬速度和精度的良好平衡。
RF設計中使用Verilog-A
為什麼我們在RF設計中使用硬體描述語言而非傳統的模型?主要原因有以下幾個。
- RF設計並不需要傳統模型中所有的計算引數
RF設計關心的往往是高頻的工作狀態。電路本身往往不涉及直流偏置點的大範圍變化、DC工作的準確性等等。因此,很多傳統模型中複雜的計算對RF設計來說沒有必要。
RF應用快速變化 2. 我們正處在一個移動互聯的時間,移動的標準和應用的更新速度可謂日新月異。從2G到3G標準花了25-30年,而3G到4G標準只花了4-6年時間。同時我們身邊還有wifi、blue tooth、無線充電等等各種和RF相關的應用。隨著RF應用的快速發展,以往的那種“不斷修改標準模型-->釋出-->工藝線支援”的模式難以適應發展的需求,同時也阻礙了對新工藝的預測。
RF設計依賴於物理設計 3. RF設計有很大一部分是物理設計,特別是非常規形狀和尺寸的器件設計。比如在RF設計中可能會使用非常規形狀的電阻用以作為阻帶線,也可能定製Bipolar器件用以不同領域。而傳統的模型往往基於固定形狀的器件單元,對特殊物理形狀和尺寸的器件難以做到準確。
Verilog-A/AMS簡單而高效 4. RF設計很多的引數都是頻域引數,而模擬模擬器大多基於時域模擬。為了驗證,我們往往需要進行時域模擬,再進行DFT計算得到頻域的結果。由於RF的調製特性,我們需要在高頻下進行比較長時間的模擬才能得到低頻調製訊號的一些引數,而這種模擬會消耗很長的時間。使用Verilog-A/AMS這樣的描述語言,可以在模擬速度和精度中靈活地做折衷,加快模擬驗證。
Verilog-A/AMS語言本身具有以下特性也使得它很適合書寫RF模型。
- 容易書寫,也容易在模擬中除錯
Verilog-A/AMS是基於行為和數學公式的描述語言。其模型書寫比SPICE等傳統模型簡單直觀。同時,提供的Verilog-A程式碼也更加接近與“解釋型”語言,比起傳統的需要提供C語言程式碼的模擬模型來說也大大降低了難度。
設計人員可以直接瞭解計算過程 2. 由於Verilog-A/AMS都是行為描述式的程式碼,設計人員使用的時候如果有疑問很容易分析語句本身,或者稍加修改輸出中間計算結果也很方便。
設計人員可以書寫非物理特性的模型 3. 很多時候,一些模組在設計初期並不瞭解其實際實現方法,也有一些測試模組具有聯想特性而很難用實際電路實現。這種情況下,利用Verilog-A可以描述那些不基於物理實現的、或者物理上具有理想特性的電路,幫助進行設計和驗證。
可以針對頻域模擬書寫模型程式碼 4. 前面也提到,RF設計中大多數的引數指標都是和頻域相關的。SPICE模型主要基於時間模擬,不容易針對RF的模擬型別(Harmonic,Shooting,Envelope等)設定引數。而在Verilog-A中可以針對模擬型別設定不同的行為描述和計算語句,適合針對RF模擬型別的建模。
靈活的噪聲特性,並且容易實現相關的噪聲源 5. 在RF設計中噪聲是一個很重要的引數。Verilog-A中支援所有基本的噪聲分佈型別,也可以使用查表方式實現自定義的噪聲分佈。同時由於Verilog-A程式碼的書寫基於計算公式,可以很容易的實現相關、半相關的噪聲。這在標準化結構的傳統模型中是不容易實現的。
可以進行鍼對電荷的描述而非電容,適合解決NQS問題 6. NQS問題,Non-Quasi-Static,是指在傳統模型中,器件的溝道被模擬為一個電容,也就是當Gate電壓變化時,溝道電荷隨之立即變化。但在高頻應用中並非如此,電荷的變化實際上滯後於Gate電壓變化。如下圖中,A點和D點的狀態被模型包含,而B和C點的狀態並不在傳統的模型計算內。因此,在RF電路中高速開關的溝道所產生的效應沒有被準確的預測。
圖 1
傳統模型中解決這個問題的方法是將溝道建模為一個帶有額外延遲的電容。這種方式一來並不完全準確,二來耗費模擬時間。 而在Verilog-A中,我們沒有描述物件的限制,因此完全可以計算溝道電荷的遷移速度,再得到溝道電勢的建立,從而很好的描述NQS問題。
- 數字控制在RF領域十分常見。使用Verilog-AMS進行混合模擬適合這些設計。 7. 數字控制在RF領域被廣泛應用,例如在PLL中的分頻器,以及AGC(自動增益控制)中的數字計算部分。這些模組規模中等,使用模擬方式模擬顯然消耗模擬時間。同時它們又和模擬部分的電路緊密結合,也可能在後期需要模擬域模擬驗證,單獨使用數字描述(Verilog,VHDL)也不合適。這種情況下,使用AMS混合描述可以大大便於設計和驗證。
除此之外,RF設計的測試平臺本身很多時候也是數模混合的,也可以採用AMS模型進行描述。
廠商支援
目前,現在主流的器件供應商、模型和模擬軟體都支援Verilog-A。並且多種模型標準已經將Verilog-A作為新的模型規範公開提供給使用者,包括:
VBIC = 高階雙極型電晶體(BJT)和異質結雙極型電晶體(HBT)模型,相容SPG模型(Spice Gummel Poon),被BJT和HBT廠商廣泛使用。
HICUM = 高速雙極型電晶體BJT模型,由德國魯爾大學開發,側重於高電流密度的工作區域。
PSP = PSP模型由NXP公司和亞利桑那州立大學開發,主要應用於模擬和射頻領域的緊湊型MOSFET。
Mextram = 同樣由NXP公司開發,適用於SiGe和HV工藝中的垂直雙極型半導體,其特點是具有自熱計算功能。
EKV = 由瑞士洛桑理工大學開發,適用於低功耗領域MOSFET模型,其特點是準確度和計算效率都比較好。
HISIM = 由廣島大學和STARC研究中心合作開發,適合通用的MOSFET和LDMOS,其特點是引數少而且互相依賴性小。
BSIMSOI = 基於BSIM模型開發的模型,適用於SOI工藝的MOSFET。
Verilog-A/AMS書寫RF模型存在的問題
- 不同的模擬器對Verilog-A/AMS的支援不一
不同模擬器對Verilog-A語言的語句和函式的支援不一樣。這點顯然不如各種模擬器對SPICE模型長達幾十年標準化的支援來的好。這導致模型程式碼設計的時候要考慮到使用語句的通用性以及適合的模擬器。 但是,這個問題隨著Verilog-A模型的越來越流行正在被解決。同時Cadence平臺在模擬設計上優秀的效率和多樣的功能使得它成為大多數開發者的選擇,而Cadence平臺提供了非常全面的Verilog-A支援。因此在商業開發中,這個問題並不嚴重。
- RF模擬器要求特殊的Verilog-A書寫技巧
RF模擬大多數基於PSS模擬(Periodic Steady State)。PSS模擬的計算對模型有以下要求:
- 不允許使用Z變換
Z變化本質上是離散的變換因此不適用於連續時間的週期小訊號模擬。
不允許使用absdelay函式 週期小訊號模擬中對每個時間週期做平均化處理,而absdelay函式無法被平均化。
不允許使用absdelta函式 absdelta函式需要使用到數字域的語句,不能使用。
不建議使用analysis和random系列函式 analysis一般來說在RF模擬中都返回0,因此使用意義不大。而random函式容易導致週期性計算的收斂性問題,也不建議使用。
不允許存在Hidden state
Hidden State指的是,如果模組內部使用了一個變數,這個變數的值是來源於以前的時間點,這就導致平均化在這個時間點上難以完成,因為當前時間點的狀態依賴於內部儲存的某個別的時間點的狀態。這就產生了Hidden State問題,也就是隱藏的狀態。注意,Hidden State問題並不是指電路本身的狀態不能取決於以前的時間點(或起始狀態),其實質在於電路本身的狀態是由SPICE模擬器計算得到的,而程式碼內部的變數並不屬於SPICE模擬器計算的部分。
比如,下面這個程式碼就會有Hidden State問題:
analog begin
PWMvol = PWMref>V(VCC, GND)?V(VCC, GND):PWMref;
@(timer(0, cycle)) begin
slope = PWMvol/(cycle-falltime);
wstart = $abstime;
polar = 1;
end
@(timer(cycle-falltime, cycle)) begin
slope = -PWMvol/falltime;
wstart = $abstime;
polar = -1;
end
V(VPWM) <+ (1+polar)*0.5*slope*($abstime- wstart)+(1-polar)*0.5*(2.5 + slope*($abstime- wstart));
end
程式碼的目的是儲存每個週期的起始時間點,通過計算上升和下降斜率產生斜坡訊號。但是由於儲存每個週期的起始時間,就會導致Hidden State錯誤。
Hidden State問題往往帶來很多困擾,它會導致開發者不能用簡單的直觀的方式書寫程式碼。解決Hidden State問題的方法無外乎三種:一,不儲存內部狀態;二,使用物理實現;三,換一種實現方法。
第一種方法只適合程式碼保留了無必要的狀態的情況。大多數時候,我們保留狀態是有原因的,因此我們只能尋求第二種或者第三種方法。採用物理實現就是利用電路中的反饋、帶有延遲的實際單元來保留狀態,這種實現方式其複雜度接近實際電路,在追求簡化和模擬速度的時候,我們更願意選擇第三種方法。
我們換個思路來考慮上面的程式碼。既然不允許儲存每個週期的起始時間點,則意味著我們要在每個時間點上計算得到其所屬的週期開始時間。我們可以通過使用取餘數計算符%來進行這個計算。
因此我們可以這樣實現上面的功能:
analog begin
PWMvol = PWMref>V(VCC, GND)?V(VCC, GND):PWMref;//the high level of PWM singal
wstart = $abstime-($abstime%cycle); //cycle start
wtime = $abstime%cycle; //remain time
polar = (wtime<(cycle-falltime))?1:-1; // rising or falling part
slope = (polar>0)?(PWMvol/(cycle-falltime)):(-PWMvol/falltime); // slope
V(VPWM) <+ (1+polar)*0.5*slope*($abstime- wstart)+(1-polar)*0.5*(PWMvol + slope*($abstime- wstart - cycle + falltime));
end
我們通過計算,可以得到當前時間點所在的週期的起始時間,從而計算當前時間點應該具有的電位。由於每個時間點中變數都是當前計算得到的,就解決了Hidden State的問題。上面的程式碼可以在RF模擬器內模擬。
總結
在RF設計中使用Verilog-A/AMS描述語言能夠給我們帶來很多的便利和優勢。因此也有越來越多的器件廠商、設計師開始使用Verilog-A/AMS。同時我們也看到在RF模擬中使用Verilog-A有獨特的限制,需要我們採用與以往不同的方法來規避這些限制。
參考文獻
Boris Troyanovsky, Patrick O’Halloran, and Marek Mierzwinski, “Analog RF Model Development with Verilog-A”
Ken kundert, “Hidden State in Spectre RF”
Xiaodong Jin, Kanyu Cao, Jia-Jiunn Ou, Weidong Liu, Yuhua Cheng,Mishel Matloubian and Chenming Hu, “An Accurate Non-Quasistatic MOSFET Model for Simulation of RF and High Speed Circuits”
Marek Mierzwinski, Patrick O'Halloran, Boris Troyanovsky, and David Sharrit,”Verilog-A/MS for RF Simulation”
相關文章
- 車輛動力學模型在模擬測試中的應用實踐模型
- 第一章、硬體描述語言與Verilog-A/AMS
- 在MongoDB中模擬Auto IncrementTXMongoDBREM
- ASP.NET的模擬應用程式ASP.NET
- 圖撲 Web 視覺化引擎在模擬分析領域的應用Web視覺化
- 模擬軟體應用案例輯
- 虛擬主播技術在智慧問答中的應用
- 【模擬設計】模擬技術在智慧製造中的作用;智慧製造難點在模型,焦點在模擬;汽車行業CAE研究模型行業
- Scala在Databricks的大規模應用
- 模擬量輸出的常用應用場合
- .NET應用程式管理服務AMS設計
- 在Linux中執行"rm -rf /"的結果Linux
- 在Linux中應用screen建立虛擬終端Linux
- BERT在多模態領域中的應用
- Saber電源模擬之——基礎應用
- 在Linux中,如何進行虛擬化技術的應用?Linux
- 元宇宙技術對於虛擬模擬應用的影響元宇宙
- 在Ubuntu上用Qemu模擬ARM版本的Fedora39Ubuntu
- Refs 在React中的應用React
- MQTT 在 Elixir 中的應用MQQT
- HMM在NLP中的應用HMM
- SSD在SQLServer中的應用SQLServer
- HugePage在mysql中的應用MySql
- HugePage在oracle中的應用Oracle
- sar 在unix中的應用
- 基於CANoe在電控懸架系統中PSI5感測器模擬及應用
- 3DCAT實時渲染雲在虛擬展會中的應用3D
- 計算電磁學及其在複雜電磁環境數值模擬中的應用和發展趨勢
- 談談模擬足球遊戲中人工智慧的應用(轉)遊戲人工智慧
- mumu模擬器 指定應用當前執行的 ABI 版本
- redis在nodejs中的應用RedisNodeJS
- redis在python中的應用RedisPython
- 堆在java中的應用--PriorityQueueJava
- Service Worker 在 PWA 中的應用
- 6、Zookeeper在kafka中的應用Kafka
- apr在tomcat中的應用Tomcat
- 索引在ORACLE中的應用分析索引Oracle
- CBO,RBO在ORACLE中的應用Oracle