摘要
隨著混合信號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論文合集,還有更多資料等你來哦!
掃描上圖二維碼可直達課程頁面,馬上試聽