第一章、硬體描述語言與Verilog-A/AMS
硬體描述語言是用來描述硬體工作方式的程式語言。
硬體描述語言已經有了一段不小的歷史,早在1995年,當很多人還不知道電腦和程式是什麼東西的時候,Cadence Design System公司就已經提交併通過了IEEE1364標準。這就是VHDL描述語言。 VHDL語言和後來的Verilog語言主要用於描述數位電路的行為。它們描述的物件是離散、時間上不連續和邏輯的訊號。 大約同一時間,一個名為Analog Verilog International的組織成立了。它希望通過擴充套件Verilog語言來支援模擬和混合訊號模擬。在1996年,該組織公佈了它的第一個成果就是Verilog-A。Verilog-A的工作方式和Verilog或者VHDL等描述數位電路行為的語言不相同。它是一個描述連續訊號-也就是我們通常稱為模擬系統-的語言。它相容SPICE程式[1]的描述語言。 很快Cadence Design System 公司就在他們的spectre模擬器中支援了Verilog-A語言。
隨著實際應用中模擬系統規模的不斷擴大,支援Verilog-A的工具也越來越多,同時也為了支援混合訊號的模擬, 這個組織在2000年釋出了Verilog-AMS標準。Verilog-AMS混合了Verilog和Verilog-A的語法,並且增加了多個混合訊號結構,使得Verilog-AMS成為了一個支援模擬、數字和混合訊號描述和模擬的語言。 而後,Verilog-AMS還在繼續進化中。2003年1月釋出的Verilog-AMS的2.1版本標準加入了對Verilog的支援。同時他們也在努力將Verilog-AMS合併入System-Verilog。
[1] SPICE, 全稱Simulation Program with Integrated Circuit Emphasis, SPICE。是一種用於電路描述與模擬的語言與模擬器軟體,用於檢測電路的連線和功能的完整性,以及用於預測電路的行為。以下將使用SPICE模擬程式的程式碼均稱為SPICE模型或SPICE程式碼。
1.1 Verilog-AMS
Verilog-AMS是Verilog硬體描述語言的一個衍生物。類似Verilog和VHDL語言,Verilog-AMS被設計來建立系統模型,並進行模擬驗證。 和Verilog和VHDL不同的是,我們至今還沒有辦法直接從Verilog-AMS程式碼“綜合”出完整類比電路模組。也因為如此,Verilog-AMS並沒有從一開始就進入類比電路設計師的設計流程中。現在,隨著系統整合度的提高,模擬和驗證的難度的加大,Verilog-AMS才越來越多的被人們採用。 Verilog-AMS包含了模擬和混合訊號擴充套件模組。它擴充套件了Verilog、SystemVerilog等的事件驅動模擬器的迴路,通過使用一個連續時間模擬器,可以在模擬域上求解微分方程。在Verilog-AMS裡模擬事件可以觸發數字行為,反之亦可。Verilog-AMS可以象SPICE模型一樣描述非常細節的工作情況,但更多的時候它被用於描述高層的,更加抽象的功能,用於對大規模系統進行前期的,快速高效的模擬驗證。
1.2 Verilog-A
Verilog-A是Verilog-AMS的連續時間子集。當我們使用Verilog-AMS描述模擬領域的功能,我們可以說Verilog-A和Verilog-AMS是一樣的。
圖表 一-1Verilog-AMS的組成
1.2.1 Verilog-A能做什麼
使用類比電路的描述語言,我們可以: - 自頂向下的設計流程
傳統的類比電路設計方法,一切都要從電路開始。當單元電路沒有完成的時候,頂層的模擬驗證無從談起,也無法實現自頂向下的設計方法。 - 專案研究階段的可行性分析
專案開始階段,對一些關鍵模組和引數的要求,決定了專案是否能夠實現。使用模型進行驗證,確定需求,能避免大量時間和人力的浪費。 - 系統級模型搭建和模擬
快捷高效的驗證
提供IP模型
對於很多IP的廠商和開發者,提供一個簡單的模型,讓客戶在真正購買之前能夠試用你的IP,是一種非常好的事情。以往,需要搭建SPICE模型,其描述難度大大高於Verilog-AMS描述語言。同時對規模比較大的IP,也很難簡化描述複雜程度。 - 提供系統級別模型
從IP到晶片,到板級系統,再到整個系統,每一個層次都需要驗證。以往缺乏統一的描述方式,或者根本無法描述和驗證模擬子系統。現在每一個層次都可以用Verilog-AMS描述,每個供應商都可以提供自己的模型。
1.2.2 使用Verilog-AMS
Verilog-AMS與Verilog-A的差別很大程度上即是允許同一個模組既描述數字行為又描述模擬行為。我們要不要使用Verilog-AMS的數字描述功能?我們何時需要將模擬的描述內容和數字的描述內容放在一起? 數模混合模擬本身沒有問題,對大型設計,將數字和模擬分開建模和模擬已經是一個必然的流程。但是Verilog-AMS支援的在一個模組內部同時使用數字和模擬描述則會帶來一些困擾。我們什麼時候使用這種混合描述,使用了之後帶來的是好處還是壞處? EDA廠商們一直強調使用混合訊號模擬必定有其道理。相信隨著EDA技術的進步,有一天混合訊號描述甚至可以非常快捷的生成不包含模擬部分的系統電路原型。 讓我們看看我們現在面臨的問題。
第一種情況,我們要實現一個複雜的模擬系統,同時裡面包含了很少一些邏輯單元,總數不超過100個門。我們需要使用Verilog-A搭建模型來進行模擬部分的模擬。既然是一個只有不超過100個的數字門單元的系統,通常會讓類比電路工程師自己來做這些邏輯模組吧。既然這樣,最好不用類比電路工程師們不熟悉的Verilog數字語法,因為100個門的邏輯可以很容易的可以實現,而且不太會發生錯誤。
第二種情況,我們要實現一個複雜的混合訊號系統。裡面有複雜的模擬模組,也有複雜的數字模組,多於1000個的閘電路,甚至更多。我們有一個或多個專職的數字工程師。通常情況下,數字工程師繼續使用他熟悉的Verilog,模擬工程師使用Verilog-A,合併之後使用混合訊號模擬工具進行驗證。因為,數字工程師通常不熟悉Verilog-AMS的混合訊號書寫方法。而且很多數字的模擬器,綜合佈局佈線工具,都不支援Verilog-AMS。因此使用Verilog-AMS基本上對數字設計無用。
第三種情況,我們有一個比較複雜的模組需要建模,它既帶有數字訊號,又帶有模擬訊號。即使在這種情況下,我們也應該慎重考慮是否使用混合訊號模型。 建立模型的目的是加快模擬,但在後面的章節可以看到,數字和模擬混合描述並不是沒有代價的,在簡化了數字域模擬的情況下,也帶來了額外的數模轉換連線模組的模擬時間。因此,分開描述是否能夠簡化模型,加快模擬是一個問題。 其次,數模混合模擬簡化數字域模擬的同時,也丟失了數字域的模擬特性。數字域的延時、噪聲、擺率等等是否會對模組的效能有影響,是否能被忽略,也是需要考慮的一個問題。 再次,數模混合的書寫,模擬驗證平臺的搭建,都需要一個額外的學習時間,也都可能帶來一些錯誤和修正的時間。
Verilog-AMS混合訊號描述的問題是:
數字工程師熟悉Verilog,它高效而且有大量方便的工具進行各種數字的模擬驗證綜合佈局佈線。從數字模組的角度,使用Verilog-AMS沒有好處。
Verilog-AMS數模混合的書寫方式,模糊了數字和模擬部分的邊界,導致系統劃分不明確,設計容易出錯,而且過多的數模邊界元素會導致模擬速度大大下降。
同一個模組內部進行混合訊號的描述,並不是簡單的拷貝類比電路的描述程式碼和數位電路的描述程式碼。Verilog-AMS實際上要求數字工程師學習模擬的描述語言,又要求模擬工程師學習數字描述語言,增加學習週期。
1.3 SPICE模型
現在模擬設計中廣泛使用的是SPICE模型。SPICE模型其實就是SPICE模擬器原生可以識別的網表程式碼。由於SPICE模擬器在模擬設計中不可動搖的地位,SPICE模型也同樣是事實標準。絕大多數廠商都為自己的器件和模組提供SPICE模型以供使用者模擬。 SPICE模型的最大優點是精確。它可以用一個帶有多達400+個引數的模組來描述單個器件。SPICE模型詳細描述各個工藝引數下的各種行為變化,精確的保證模擬結果和實際物理產品高度一致。我們通常所說的對電路進行模擬,一般都是指使用帶有SPICE模型的器件搭建電路並進行模擬。
隨著高精度而來的是SPICE模型書寫複雜、模擬速度慢並且靈活性差。對於描述高層次的功能和行為,SPICE模型會比Verilog-A/AMS程式碼複雜得多。同時其靈活性差也使得一個SPICE模型的修改相當麻煩,非常不利於模型的複用。 所以,在搭建系統模型,或者提供使用者一個簡單的產品模型這些任務上,SPICE模型往往不是一個很好的選擇。這也是為什麼在這些地方,我們需要引入Veirlog-A/AMS語言。
1.4 WREAL
WREAL 是Verilog-AMS支援的一種新的數值模型。WREAL的特殊之處在於它使用有限的浮點數值的點來模擬一條電路工作曲線。而SPICE和Verilog-A的計算結果是一條理論上可以無限精度,包含無限點的的曲線。從某種程度上,WREAL的實現方式類似於Fast-Spice的查表點工作模式,其目的是進一步簡化模擬,從而支援更大規模的模擬系統模擬。 使用WREAL的最大好處是速度快。使用WREAL變數的模型在計算的時候無需使用SPICE迭代運算。它使用的是比較簡單的,直接推導的函式來模仿類比電路真正的工作情況。 相比SPICE和Verilog-A的模型必須使用SPICE模擬器的迭代運算,WREAL模擬器使用離散事件觸發,就像數字模擬器那樣。這給WREAL的計算上帶來極大的速度優勢。但同時,離散的計算模式使得WREA模型在含有反饋的電路中無法給出準確的結果。在普通電路中它也需要犧牲輸出的精度。所以,WREAL並不適用於需要精確度量的類比電路的模型中。 這是一張多個描述語言的模擬速度的對比。
圖表 一-2 描述語言的精度與模擬速度 (來源: Cadence Design Systems)
湯姆·貝克利 -- Cadence設計系統公司高階副總裁,在CDNLive EMEA2012的主題演講中說:如果你能夠將所有的SPICE模擬計算(包括Verilog-AMS)替代為事件驅動和REAL數值模擬,模擬速度能夠提高大約300倍。因此,WREAL擁有可觀的速度優勢。 WREAL的一個問題是,它需要對真正的類比電路的行為有一個非常好的預測。因為,WREAL的所有計算都是前向的,我們想要用這些前向計算來模擬SPICE模擬器迭代結算的結果,就需要對實際電路工作情況有個很好的瞭解。然而,模型通常在設計階段的前期實現,而此時通常不會有很好的對真實電路的預測。如果WREAL模型無法很好的體現SPICE模擬器對真實電路的模擬結果,那模型的意義就不大了。亦或需要在設計後期隨著真實電路的開發修改模型,這樣就會犧牲一些研發的時間。
有一些相關的研究正在進行中,比如利用簡單的電路生成WREAL模型,這樣可以作為未來新專案系統的起始WREAL模型。也有一些研究包括迭代WREAL和真實電路模擬,這樣可以自動修改WREAL模型等等。但不管怎麼,對於WREAL在大規模需要精度的驗證中的使用,還是需要一定考慮。 本文對WREAL不做詳細介紹。
1.5 模擬工具
目前主流的商用模擬器對Verilog-A的標準的支援都已經非常全面了。
Cadence Design System -- 作為世界上第一個支援Verilog-A標準的EDA廠商以及本身就是Verilog-AMS等標準組織重要成員,Cadence對Verilog-A/AMS語言的支援是全方位的。
參考連結: http://www.cadence.com/products/cic/Pages/default.aspx
Mentor Graphic -- ELDO 和新的ADMS 都能夠支援Verilog-A模擬。
參考連結: http://www.mentor.com/products/ic_nanometer_design/analog-mixed-signal-verification/
Synopsis -- 新思還在推進新的Hspice,當然它也支援多種模擬與混合訊號描述語言。
參考連結: http://www.synopsys.com/Tools/Verification/AMSVerification/Pages/default.aspx Hspice預設配置並不支援Verilog-A/AMS,你需要購買Hspice_va這個License。
Pspice -- 可能是DOS/Windows平臺上最流行的模擬軟體。
參考連結: http://www.orcad.com/products/orcad-ee-designer/overview
對於無法使用商用模擬的人來說,現在有很多開源的免費模擬器。它們同樣支援SPICE和Verilog-A模擬。
Ngspice -- 一個開源軟體,本身只是一個命令列軟體,但支援一些外掛的圖形介面以方便電路設計。
參考連結: http://ngspice.sourceforge.net/
Querc -- 另一個開源的免費的模擬器,它包含有各種外掛。包括支援圖形化的電路和程式碼輸入,也支援Verilog和VHDL的模擬。
參考連結: http://qucs.sourceforge.net/index.html
Ngspice和Querc支援Verilog-A/AMS都使用了一個ADMS的軟體包。ADMS可以將Verilog-A/AMS程式碼轉換成為C程式碼而給類SPICE模擬器使用。 有興趣研究ADMS可以到這裡下載:http://sourceforge.net/projects/mot-adms/
免費開源的軟體,很適合業餘學習和開發。Qurc正在成長為一個可以進行模型設計,電路實現,系統模擬,PCB設計等一整套流程的完整開發平臺。而Ngspice靈活的介面,被使用在很多線上模擬和計算上面。本文會在附錄裡對這兩種開源軟體如何支援Verilog-A/AMS的使用方式做一些介紹。 本文主要示例使用Cadence環境。不同的模擬器環境差異較大,程式碼不能保證直接在其他模擬器上100%相容執行。
相關文章
- Verilog-A/AMS在RF模擬中的應用
- 資料結構與演算法分析(java語言描述) 部分課後習題答案 第一章資料結構演算法Java
- 猜數遊戲--C語言描述遊戲C語言
- 取冪運算--C語言描述C語言
- 樹 【資料結構與演算法分析 c 語言描述】資料結構演算法
- 解析程式碼的利器 Spp 語法描述語言
- gRPC 的介面描述語言 ProtoBuffer(二)RPC
- 如何只靠語言描述整個遊戲?遊戲
- AVL 樹 【資料結構與演算法分析 c 語言描述】資料結構演算法
- 伸展樹 【資料結構與演算法分析 c 語言描述】資料結構演算法
- [C語言] 第一章|C語言入門第一課C語言
- 現代編譯原理C語言描述pdf編譯原理C語言
- 關於數位顛倒--C語言描述C語言
- 函數語言程式設計 – Lens(透鏡)原理與應用 [Swift描述]函數程式設計Swift
- 資料結構與演算法分析(c 語言描述)習題 1.2資料結構演算法
- 資料結構與演算法分析(c 語言描述)習題 1.3資料結構演算法
- 資料結構與演算法分析(c 語言描述)習題 1.1資料結構演算法
- 棧 ADT 【資料結構與演算法分析 c 語言描述】資料結構演算法
- 函數語言程式設計 - Lens(透鏡)原理與應用 [Swift描述]函數程式設計Swift
- 用一句話描述Go語言的命令Go
- 題解1196:去掉空格 (C語言描述)C語言
- Android-貪吃蛇小遊戲-分析與實現-Kotlin語言描述Android遊戲Kotlin
- 佇列 ADT 【資料結構與演算法分析 c 語言描述】佇列資料結構演算法
- 設計模式之責任鏈模式——Java語言描述設計模式Java
- Go 語言 := 的具體使用與區別Go
- 領域本體與DDD的UL語言
- C語言---“C語言 誰與爭鋒?”C語言
- 第一章 程式設計和C語言----案例程式設計C語言
- 第一章 C語言程式設計(Ivor Horton)C語言程式設計
- Kenneth A.Lambert著的資料結構(用python語言描述)的第一章課後程式設計答案資料結構Python程式設計
- 資料結構與演算法分析(c 語言描述)最大子序列和問題資料結構演算法
- 概念區別 【編譯型語言與解釋型語言、動態型別語言與靜態型別語言、強型別語言與弱型別語言】編譯型別
- 資料結構--排序--插入排序--python語言描述資料結構排序Python
- 題解1197:發工資咯 (C語言描述)C語言
- go語言與c語言的相互呼叫GoC語言
- 棧的應用之平衡符號 【資料結構與演算法分析 c 語言描述】符號資料結構演算法
- 資料結構與演算法分析(c 語言描述)基數排序 陣列實現資料結構演算法排序陣列
- 《Go 語言併發之道》讀後感 - 第一章Go