連接UVM與混合信號設計之Verilog-AMS模型

2021-03-02 路科驗證

摘要

隨著混合信號SoC設計數量的增加以及相應的混合信號驗證的需求,UVM作為一種解決方案被提出,即採用用於複雜數字SoC的UVM驗證方法。目前存在很多混合信號的UVM驗證方法,但是,都沒有將UVM環境與混合信號設計連接的標準化方法。由於這些原因,有效的混合信號設計驗證正變得充滿挑戰,並為創新性的驗證方案打開了空間。本文將展示使用Verilog-AMS模型將UVM環境與混合信號設計連接的不同方法

一. 引言

混合信號驗證還很初級,但是隨著設備變得越來越複雜,對混合信號驗證的需求也在迅速增加。當前有很多方法,都有其各自的優點和缺點,並且它們都有一個共同的問題:如何對模擬模塊進行建模?共有三種主要的方法:

1)非常高級的抽象模型(VHDL, Verilog);

2)實數建模將更多內容帶入「模擬」,但在離散時域中,僅使用數字模擬裝置引擎;

3)嘗試幾乎完全模擬的AMS建模。

在第一種情況下,由於沒有添加任何新規則,我們可以將UVM環境直接連接到DUT。當使用WREAL模型時,因為WREAL規則允許將實數定義為模塊的埠,我們可以直接將UVM環境與DUT連接。而最後一種情況,當使用電埠時,我們不能使用AMS模型直接將UVM環境與DUT連接,我們需要一些組件來使用AMS模型。

本文將堅持把Verilog-AMS作為在混合信號驗證中最具挑戰性的方法。


二. 環境搭建

通常,混合信號DUT有一個很大的數字模塊和很多的模擬模塊,供內部(如偏置或基準)和外部(如功率調節器、感測等)使用。

當使用數字方法時,我們用VHDL或者Verilog語言來編寫模型,這些模型嚴格遵循高級抽象模型的行為規範。在這種情況下,由於只使用了數位訊號,我們可以直接將UVM環境與DUT連接。這種方法很簡單,而且仿真非常快速。然而它有一個很大的缺點,即在使用這種模型時,很可能會錯過實際的功能錯誤。此方法對連接檢查很有用,並且不需要模型創建者對模擬模塊有充分的了解,他只需要了解模型的基本功能即可。模型簡單明了,易於理解。如果我們想將某些模塊作為TL(電晶體級)原理圖,則此方法效果不佳。許多自動轉換器將被實例化,調試它們會成為一項非常耗時的任務。主要問題是雙向埠、電流埠以及不同的電壓等會導致自動轉換器出現故障。在混合模式仿真的情況下,為VHDL模型編寫的大多數測試用例都無法重用,因此需要創建新的測試用例例如,對於LDO(Low Drop Out,低壓降),我們在禁用時將輸出設置為0V,在啟用時將輸出設置為5V,在發生某些錯誤(例如電源錯誤或控制信號組合錯誤)時將輸出可設置為其他任何值(0.01V等)。清單1顯示了VHDL的LDO模型示例。隨後,我們將創建與該模型對齊的檢查器。當我們將此LDO包括在內作為TL(電晶體級)原理圖時,我們的檢查器註定會失敗!因此,我們需要創建不同的測試用例和檢查器。

清單1:以VHDL建模的LDO模型輸出電壓示例

我們可以通過使用WREAL模型來改善這一點。與VHDL模型相比,WREAL模型的一個優勢是其允許我們使用實數作為埠。因此,我們可以創建模塊的類似行為。現在,我們可以模擬模塊的確切行為,在離散時域中進行可以實現快速仿真並獲得準確的結果。但是,它也有一個很大的缺點,這是由於WREAL模型無法同時對同一埠上的電壓和電流進行建模,因此我們需要確定哪個更重要。例如,如果我們有一個帶反向電流限制器的LDO輸出引腳,那麼我們就無法在同一引腳上同時模擬電壓輸出和電流輸入。通常在這種情況下,我們在LDO輸出端對電壓功能進行建模。另外,我們還創建了另一種機制來驅動模型中表示反向電流的變量,並且通過這種機制,我們可以驗證反向電流是否受到限制器塊的限制,這種正確的標誌也會報告給專用狀態寄存器。此外,在某些情況下,無法執行解決方法。例如,如果有幾個模塊處於某個電流路徑上,則我們不能僅使用WREAL模型來正確驗證連接性。在這種情況下,我們必須使用TL原理圖。尤其是當電流埠在路徑中時,WREAL模型也容易出現無意識的轉化器錯誤。圖1中可能發生此類問題的常規配置示例。使用此配置,將在這兩個模塊之間創建E2R轉換器。該轉換器的輸入阻抗通常為幾百歐姆,這種低阻抗將導致錯誤的電流洩露。所有這些轉換器都可以手動修復,但是如果我們考慮手動修復每個自動轉換器,那麼擁有它們的意義何在?調試工程師需要花費大量時間來調試所有可能的轉換器和問題,更不用說在每個新項目中,如果我們重複使用相同的模型,則不會跳過調試和配置環境的過程,但是我們需要重新做一遍。

             

通過使用AMS模型,我們能夠非常精確地對模擬行為進行建模。因為電子學科所使用的模擬引腳可以直接連接到TL原理圖埠,所以我們可以非常輕鬆地在模型與TL原理圖之間切換。當電子埠連接到TL原理圖時,我們不需要轉換元件。但是,在這種情況下,我們無法直接連接到UVM,我們需要某種連接模塊才能實現這一點。例如,Cadence提供了可用於實現此目的的自動連接模塊(L2E,E2L等)。如果僅使用這種類型的連接,則需要具有非常複雜的UVM監視器,可以處理來自DUT的數據。即使對於非常簡單的任務,例如檢查LDO輸出引腳上的有效電壓,此類監視器也需要時鐘和複雜的離散處理過程。當提到驅動模擬引腳時,我們需要在考慮上升時間和下降時間時注意這些連接模塊。為了模擬這一點,我們需要構造一個UVM驅動器,以考慮步長,上升時間和下降時間,以及所有其他模擬參數來逐步驅動電壓。這種方法使驗證工程師的工作更加困難。

不是所有這些,我們可以創建Verilog-AMS適配器來為我們完成大部分工作,避免使用自動轉換器,從而使頂級驗證工程師在UVM方面比在模擬方面花費的時間更多。

UVM環境的一個示例如圖2所示,它具有所有常見的UVM組件,並為每個專用於模擬模塊的UVC添加了Verilog-AMS適配器。在這種特殊情況下,LDO和SMPS(開關模式電源)作為電源管理設備的一部分。在這種情況下,我們區分了設備的模擬引腳和數字引腳,這意味著我們將所有的數字引腳直接連接到UVM虛擬接口,並通過Verilog-AMS適配器連接模擬引腳。該圖並未顯示所有組件(例如uVC的電源組件),而僅顯示了主要組件。

驗證過程分為兩個階段:

1)數字驗證,我們將數字部分實例化為測試平臺內部的DUT,並將其當作頂級進行驗證。最大的挑戰是檢查器,因為我們不得不以一種允許在頂級驗證中重用它們的方式來編寫它們。該階段與建模並行完成。

2)頂層驗證,我們整合了所有模型,並從第一階段開始就儘可能的重複使用。在完成模型驗證之後,我們在混合模式仿真中運行了所有測試,其中關鍵信號路徑用作TL原理圖。

三. Verilog-AMS適配器

Verilog-AMS適配器是UVM環境和AMS DUT之間的自定義連接模塊。每個適配器要包含的任何模塊都需要包含幾個基本元素。適配器的一個重要方面是它們是可重用的,並且可以視為創建適配器的uVC的一部分,因此需要以結構化的方式對其進行編碼。任何Verilog-AMS適配器的主要元素是靜態配置、動態配置、驅動器、監視器和線束。即使在將埠建模為邏輯的情況下,這也是使用適配器作為接口的最佳方法。這樣,如果我們包括TL原理圖而不是具有邏輯埠的模型,則可以在適配器內實例化所需的驅動器和監視器,以避免使用自動轉換器。連接和框圖如圖3所示。

靜態配置用於在仿真開始時配置適配器的所有參數,線束中外部組件的所有初始值,監視比較器的閾值的所有初始值,以及所有動態配置。靜態配置僅在仿真開始時使用。

動態配置用於動態更改適配器參數。使用動態配置,我們可以更改電阻器的值以模擬負載變化,我們可以更新監控器的閾值以使其與硬體內部的寄存器的值對齊。

在清單2的示例中,我們可以看到簡單的動態配置,該配置反映了從規範中獲取的寄存器的過壓閾值。在此示例中,UVM序列會將所需閾值寫入DUT內部的配置寄存器。同時,它將向example_adapter發送相同的值,以便適配器本身可以設置相同的配置。現在,我們只需等待過壓事件即可。

清單2:過壓閾值動態配置示例

驅動器通常是電壓或電流源,具體取決於引腳的性質。通常的驅動器參數是要驅動到引腳的電壓/電流值、上升和下降時間、延遲、輸出阻抗等。在某些情況下,驅動器可能會更複雜,即當需要從電壓切換到電流驅動時。驅動器也可以用來模擬引腳上的故障。這種驅動器的一個例子是,如果我們有一個能夠檢測過壓情況的引腳,在這種情況下,我們可以創建這樣的優化,該優化將允許我們使用驅動器來驅動過壓條件。通過虛擬接口從UVM的驅動器發送要驅動到DUT的值。這種外部電路優化即使使用無需做任何更改的TL原理圖,也能使我們測試DUT外部埠上的實際過壓事件。

清單3給出了簡單驅動器的一個示例,該驅動器僅僅是具有可配置電壓和過渡時間的電壓源。通過將v_set值發送到Verilog-AMS適配器,UVC現在可以輕鬆更改電壓值。根據驗證需求,Verilog-AMS適配器的驅動器可能要複雜得多。

清單3:Verilog-AMS適配器中的驅動器代碼示例

監視器通常是具有可配置閾值的簡單比較器。比較器用於將錯誤標誌返回到UVM環境,以便能夠輕鬆檢查信號是否達到了所需的電平或發生了一些錯誤。如前所述,我們可以在連接監視器的同一引腳上驅動過壓事件,並將比較器閾值配置為與DUT中寄存器的值對齊。監視器將捕獲是否發生了過壓,並將信息發送到uVC。uVC將捕獲該信息並進行必要檢查。

清單4顯示了監視器塊的示例代碼,其中顯示了簡單的過壓檢測。OV_THR變量與清單2中的變量相同,其中顯示了動態配置塊的工作方式。在此示例中,我們將該配置用於比較器。當VOUT超過OV_THR時,比較器的輸出將被置為有效,並且該標誌將由我們的uVC監視器收集。檢測到的過壓情況如圖4所示。

清單4:監視器塊代碼示例和比較器簡圖

線束是一個模塊,其包含模擬模塊工作所需的所有外部組件,即電阻器、電容器、電感器、外部電晶體等。線束優化無法動態更改,因此需要具有提供錯誤注入方式(例如過壓、過流等)的機制。這個錯誤注入是創建線束最具挑戰性的部分。在某些情況下,這也許根本不可能,但是將需要其他類型的錯誤注入。例如,如果由於功能的性質和複雜性而無法從線束中注入錯誤,則可以通過在DUT中強制使用內部值來完成。

按照這種結構,我們現在能夠觸發引腳上的故障,而且由於適配器將僅返回錯誤標誌,它允許我們創建非常簡單易用的uVC和監視器,使其與數字方法幾乎相同。這意味著uVC將捕獲錯誤標誌並檢查是否是預期的。另外,適配器為我們提供了輕鬆驅動信號的方法,而無需進行複雜的uVC驅動器編碼。如果需要,適配器則能夠將電壓或電流值返回給uVC,例如清單5所示,顯示了我們想列印的帶有電壓信息的錯誤消息。如果不期望發生(測試序列所期望的)OV事件,則將通過一條包含Vout電壓值的消息來報告UVM_ERROR。

清單5:uVC監視器斷言示例

採樣方法將從專用的Verilog-AMS適配器讀取當前的電壓值,這意味著適配器需要具有凍結幀機制。在這種情況下,適配器需要在發生過壓錯誤時對電壓進行採樣,並將其存儲在如清單6所示的變量中。當uVC監視器調用sample()函數方法時,它實際上將從適配器凍結幀中收集值。適配器的基本功能不需要凍結幀,但是它們對於消息報告和簡化調試很有用。

清單6:凍結幀示例


             

 

四. 優點和缺點

像任何其他方法一樣,將Verilog-AMS適配器用作接口既有優勢也有劣勢。值得一提的是,從我們的經驗來看,其被證明是適用於各種類型的DUT(包括電源管理、傳感器應用等)的最佳方法

這種方法之所以好,主要是因為UVM驗證工程師將有更多時間花在實際的驗證任務上,而不是對複雜的驅動器和監視器進行編碼。無需編寫可以在某個飛行時鐘上工作並且需要採樣電壓值並將其存儲到陣列中的監視器,然後對該陣列進行一些處理,以便您可以簡單地檢測某個引腳上的錯誤事件,使用這種方法,只需要編寫一個簡單的檢查器,該檢查器由適配器的返回標誌觸發。而缺點是編寫Verilog-AMS模型的模擬工程師將需要編寫適配器。儘管適配器通常非常簡單,但是根據要涵蓋的所需功能,此任務可能相當耗時。

另一個好處是,使用這種方法,我們在運行混合模式仿真時無需更改任何內容。選擇TL原理圖而不是AMS模型時,將使用完全相同的測試平臺設置。因為自動連接規則具有默認參數,其有時會導致錯誤的結果。使用它們時,尤其是在使用雙向埠時,我們需要非常小心。而使用Verilog-AMS適配器時,我們不再需要照顧它們,因為適配器本身實際上就是一個連接模塊。

如果我們需要使用WREAL模型,則只需進行一些小改動即可完成此工作。

最大的陷阱在於如正弦波等信號。像適配器一樣,以簡單的方式監視和檢查此類信號非常困難。這樣做的主要原因是很難編寫能夠跟蹤正弦波的監視器。通過使用零交叉和最大值函數,可以很容易地監視幅度和頻率,但是這裡的問題是我們不能輕易知道該信號是否是實際的正弦波。圖5顯示了兩種不同的波,一種是正弦波,另一種是鋸波。適配器可以監視信號是否在適當範圍內或著是否過壓,可以監視頻率是否正確,但是無法區分這兩個信號。如果我們運行具有相同幅度、相同頻率的正弦波和鋸波,則適配器將無法分辨出它們是什麼波。這是需要使用FFT(檢測最高諧波)或者類似技術在UVC監視器內部實現的功能。這可能會為方法學的最大改進創造空間。

另一個很大的缺點是,要想在頂層運行第一個仿真,可能需要花費大量的時間。這是因為我們需要一起模擬模塊和適配器。默認情況下,此任務非常耗時,並且其對於驗證至關重要。如果正確完成了模型和適配器,則頂層驗證任務將非常容易,從而為所有設備功能的詳盡驗證留出了空間。

五. 總結

這種方法還不夠成熟,還有很大的改進空間。如第四部分所示,存在許多缺點,所有這些缺點都需要付出額外的努力才能解決。儘管付出了額外的努力,但事實證明,這是查找錯誤的好方法,不僅可以查找設備的數字部分的錯誤,還可以查找設備的模擬部分的錯誤。眾所周知,使用數字方法,我們能夠很大程度上地驗證模擬和數字部分之間的連通性。這種方法使我們可以對設備的所有功能進行建模,包括模擬循環和反饋。當我們需要在模擬模塊集成到頂層時驗證其行為的時候,該方法被證明是最佳的。我們還能夠找到很多很難在實驗室的矽片上找到的錯誤,例如模擬模塊中的洩漏、阻抗不兼容等類似的這些錯誤。發現這種錯誤非常重要,因為它可以顯著改善實驗結果,並且當然會增加對同一晶片重新流片的次數減少的機會

 

原文來自:DVCon2017_USA, 點擊閱讀原文去路科官網下載DVCon2017論文合集,還有更多資料等你來哦!

掃描上圖二維碼可直達課程頁面,馬上試聽

相關焦點

  • UVM實戰[二]
    最後一組接口用於檢測寄存器的內容,當前版本沒有使用寄存器模型,所以這個接口是必要的。uvm_driver和uvm_monitor是距離DUT最近的兩個組件,可以直接與DUT的接口進行互動。uvm_monitor通過檢測接口上的信號,轉化為數據包,如實地發送給checker,只實現這一單純的功能,而對於驅動DUT這一功能則交給uvm_driver。
  • 細談FPGA之Verilog HDL語法(一)
    VerilogHDL是一種用於數字系統設計的語言,既是一種行為描述的語言也是一種結構描述的語言。這也就是說,無論描述電路功能行為的模塊或描述元器件或較大部件互連的模塊都可以用Verilog語言來建立電路模型。如果按照一定的規矩編寫,功能行為模塊可以通過工具自動地轉換為門級互連模塊。Verilog模型可以是實際電路的不同級別的抽象。
  • 淺談可攜式激勵(PSS)和UVM
    由此可見,PSS模型本身不是可執行的。相反,它需要一個工具來分析抽象模型並從中生成實現(測試)。為UVM環境生成的測試只是可以從模型生成的實現之一。正如UVM測試臺被分成可執行元素(例如uvm_sequences)一樣,它們在由uvm_components組成的測試臺中執行(例如環境和代理),我們可以使用PSS模型來生成UVM測試臺的可執行部分。那些生成的片段仍然需要在其中運行的其餘UVM環境。
  • Verilog代碼轉VHDL代碼經驗總結
    由於在verilog語法中,位寬不同的兩個信號也可以相互賦值,但是在vhdl中對此有嚴格要求位寬相同,而xhdl軟體在轉換的時候不會檢測這些,所以經常會出現位寬不匹配的情況,尤其是在並置運算時,所以要嚴格檢查並置後的位寬與所賦值信號是否相同。
  • 關於學習verilog
    在這一級方案中,要保證在今後的設計中時序要收斂到一級模塊(最後是在二級模塊中)。什麼意思呢?我們在做詳細設計的時候,對於一些信號的時序肯定會做一些調整的,但是這種時序的調整最多只能波及到本一級模塊,而不能影響到整個設計。記得以前在學校做設計的時候,由於不懂得設計時序,經常因為有一處信號的時序不滿足,結果不得不將其它模塊信號的時序也改一下,搞得人很鬱悶。
  • ST/TI/ams/Melexis,TOF技術哪家強?
    原理是通過向目標發射連續的特定波長的紅外光線脈衝,通過特定傳感器接收待測物體傳回的光信號,計算光線往返的飛行時間或相位差得到待測物體的3D深度信息,ToF相機的亮度圖像可以通過模型迅速連接起來。  艾邁斯半導體(ams)  ams的專注程度堪稱「死磕」傳感器,艾邁斯半導體的執行長Alexander Everke曾表示,「我們專注於高性能傳感器解決方案。業務範圍包括傳感器解決方案、傳感器IC、接口和相關軟體。」TOF技術作為行業熱點必然也是ams的重中之重。
  • 多功能UVM記分板
    UVM沒有提出一個記分板(scoreboard)的架構,但留下了實現從空uvm_scoreboard基類擴展到定製的scoreboard的方法。現有用戶提出了一些UVM記分板架構,但有局限性。首先,只有一個模型可被檢查,即DUT;其次,它很難對許多平行結構的DUT建模,會導致結構不清晰不乾淨,通用性不好;最後,SystemC/ TLM的虛擬原型是很難用在這樣的記分板架構中的。
  • UVM序列篇之三:sequence和item(下)
    在上面例碼中沒有給出例如`uvm_do/`uvm_do_with/`uvm_create等宏是為了讓讀者首先認清sequence與item之間的關係。因此上面的例子也只給出了在flat_seq::body()任務中創建和隨機item,而省略了發送item。關於完整的過程,我們將在稍後的《sequencer與sequence》中具體闡述常見的方法和宏。
  • Verilog 最全經驗總結(建議收藏)
    ,這要求在晶片總體設計時就定義好頂層子模塊間連線的名字,埠和連接埠的信號儘可能採用相同的名字;  (6) 對於低電平有效的信號,應該以一個下劃線跟一個小寫字母b 或n 表示。規則 #1: 建立時序邏輯模型時,採用非阻塞賦值語句。規則 #2: 建立latch模型時,採用非阻塞賦值語句。規則 #3: 在always塊中建立組合邏輯模型時,採用阻塞賦值語句。規則 #4: 在一個always塊中同時有組合和時序邏輯時時,採用非阻塞賦值語句。規則 #5: 不要在一個always塊中同時採用阻塞和非阻塞賦值語句。
  • ​verilog相關基礎知識
    對於verilog基礎知識,這裡做簡單的介紹,對於已經熟悉verilog語言的讀者可以省略不看此部分。
  • VerilogHDL概述與數字IC設計流程
    一門語言,總有那麼一些特殊之處,不然人家就不認,HDL主要有下面一些特徵:①HDL語言既包括一些高級程序設計語言的結構形式,同時也兼顧描述硬體線路連接的具體結構。②通過使用結構級描述,可以在不同的抽象層次描述設計。HDL語言採用自頂向下的數字電路設計方法。
  • FPGA程式語言——verilog語法
    用Verilog HDL描述的電路設計就是該電路的Verilog HDL模型也稱為模塊。Verilog HDL既是一種行為描述的語言也是一種結構描述的語言。這也就是說,無論描述電路功能行為的模塊或描述元器件或較大部件互連的模塊都可以用Verilog語言來建立電路模型。如果按照一定的規矩編寫,功能行為模塊可以通過工具自動地轉換為門級互連模塊。Verilog模型可以是實際電路的不同級別的抽象。
  • Verilog 裡面,always,assign和always@(*)區別
    敏感事件 上升沿 posedge,下降沿 negedge,或電平敏感事件列表中可以包含多個敏感事件,但不可以同時包括電平敏感事件和邊沿敏感事件,也不可以同時包括同一個信號的上升沿和下降沿,這兩個事件可以合併為一個電平敏感事件。在新的verilog2001中「,」和「or」都可以用來分割敏感事件了,可以用「*」代表所有輸入信號,這可以防止遺漏。
  • 用GreenPAK可配置混合信號IC設計非接觸式旋轉編碼器
    打開APP 用GreenPAK可配置混合信號IC設計非接觸式旋轉編碼器 Jozef Froniewski 發表於 2019-02-18 15:39:56
  • Verilog HDL基礎教程之:程序基本結構
    也就是說,既可以用電路的功能描述,也可以用元器件和它們之間的連接來建立所設計電路的Verilog HDL模型。Verilog模型可以是實際電路的不同級別的抽象。這些抽象的級別和它們對應的模型類型共有以下5種。
  • SV與UVM接口應用篇之七:將Matlab算法模型嵌入UVM環境
    rockeric.com在 SV及UVM接口應用篇之四:Matlab及Simulink模型與UVM
  • 混合信號嵌入式設計實驗指南
    《混合信號嵌入式設計實驗指南》是基於CVpress公司的可編程片上系統PSoC的設計指導書。本書將唯一一個設計目標一一帶溫度補償的風扇控制器,分成12節內容進行詳細說明。前6節主要介紹了模擬電路的設計,內容包括:CPU和通用I/O、中斷、脈衝寬度調製、三線風扇、轉速計、全局輸入、集成溫度控制器、I2C串行接口。後6節介紹了數字電路的設計,內容包括:模擬地和DAC、比較器、調製、用熱敏電阻測量溫度、濾波器和系統集成。
  • 通過點燈的邏輯體驗FPGA的編程流程以及Verilog語法基礎
    作為「寒假在家一起練」的第二次直播講座,我們今天就基於1個LED做了1個多小時的分享,從創建第一個FPGA項目、寫下第一句Verilog代碼,到調用FPGA的IP Cores,體驗了FPGA的設計流程以及Verilog的基本語法規範。