1. 程式人生 > >從VHDL到UVM驗證平臺轉變的優點評估

從VHDL到UVM驗證平臺轉變的優點評估

本文轉自:http://www.eetop.cn/blog/html/28/1561828-437612.html

由於功能變得難以理解,通過肉眼檢查波形來驗證FPGA設計變得越來越困難。作為一個頂級油田服務公司,Baker Hughes主要設計小規模FPGA設計,通常少於10萬門。但是在尺寸大小和複雜程度上一直在增加。同時,這些FPGA設計是需要很長整合時間的更復雜系統的一部分。

 

由於上述原因,我們的FPGA設計和驗證需要找到不依賴於肉眼檢查,縮短整合測試時間,標準化驗證平臺,使我們功能驗證更穩健的新方法。

VHDL是我們RTL設計和驗證平臺的語言,但是驗證平臺沒有標準化或魯棒性,不能被重複使用。UVM提供驗證平臺標準化

,這就是我們研究採用基於UVM流程的原因。

 

為了驗證從VHDL到UVM 驗證平臺的轉變,我們做了一個評估來比較三種不同驗證平臺的優缺點,即簡單的VHDL驗證平臺,高階的VHDL 驗證平臺和UVM 驗證平臺。評價它們的標準是程式碼覆蓋率,驗證平臺元件重複使用率和產生不同激勵的難易度。

 

先前的設計和驗證流程

我們的大部分設計是在實驗室整合測試時除錯的。設計和驗證流程是開始於RTL設計和VHDL建立的驗證平臺。我們給DUT(design under test)提供簡單的激勵,然後通過模擬器肉眼觀察波形。當對肉眼觀察結果有足夠信心時,我們會進實驗室,下載程式碼到FPGA並整合到整個通常包含數個PCB的設計中。如果發現FPGA在整合過程中不能正常工作,我們會修改驗證平臺然後再次肉眼檢查波形。我們重複這一迴圈直到沒有新的bug發現,通常需要花費數週或數月時間。

 

我們的大部分設計都用於汽油或天然氣提取工具,需要在高溫、振動環境下使用。所以當我們挑選一個元件,比於FPGA,在工作環境下我們使它通過一系列合格檢驗程式。一旦FPGA通過檢驗,我們做板級的驗證,然後做系統級驗證直到最終的工具可以被使用。

 

特別需要注意的是FPGA的失敗都是在系統級測試中發現的。所以在檢驗FGPA的同時,會有特別多的元件需要被檢驗。整個系統級別的驗證需要一年到兩年時間。如果我們能大程度的減少驗證時間,增加FPGA除錯的徹底度,這會積極影響我們整體產品開發計劃

 

設計和驗證平臺的評估

對於這個評估,我們使用了小型的FPGA設計,有三個介面: GPIO,ADC和UART介面。 GPIO和ADC是DUT的輸入,UART是輸出。驗證平臺從GPIO和ADC口發激勵,從UART口讀取資料。

    圖1:設計模組的評估。

 

首先建立簡單的VHDL驗證平臺,然後過渡到高階的VHDL驗證平臺,最終過渡到UVM驗證平臺。

 

通過這一個過渡過程,三個驗證平臺在模型方面保持一致。儘管程式碼覆蓋率是評估指標之一,但是並沒有採用具體的改變來提高覆蓋率,因為這樣會影響三種驗證平臺比較的公正性。

 

簡單的VHDL驗證平臺使用RTL-style 過程。高階的VHDL驗證平臺GPIO,ADC,UART transcation採用record,激勵和檢查採用procedure。 UVM驗證平臺中agent 被用於GPIO,ADC和UART介面。我們搭建的UVM環境的一個關鍵方面是用於產生激勵的sequence是隔離獨立的。

 

驗證平臺1:簡單VHDL驗證平臺

在這個驗證平臺中,DUT, stimulus和check 是通過RTL-style 過程建模的。Check 通常是在實驗室除錯之後建模的。

 

我們建立一組簡單的測試然後肉眼檢查結果。在我們肉眼檢測結果之後會插入幾個斷言,但是一個完整的驗證平臺需要長時間的實驗室測試才能搭建起來。

對於驗證DUT來說這是一個高互動率的過程。每當在整合測試時發現問題,都需要修改驗證平臺,重現引起這個錯誤的bug,修復設計,然後重回實驗室測試它。

 

簡單VHDL驗證平臺的結構圖顯示了三個介面。每個介面都有很多個process : GPIO有4個process,ADC 有3個process,UART有2個process。Check分佈在各處。這反映了缺乏組織性。所有的process和check都是在每次整合測試發現bug之後新增的,使得甚至對於建立驗證平臺的人來說都很難知道將會遵循什麼。

    圖2:簡單VHDL驗證平臺結構圖。

 

 

從上述評估中我們認識到需要大量時間來建立簡單的VHDL驗證平臺,而且這一平臺嚴重缺乏組織性,極難維護。同時,我們的關注點在產生激勵,而不是checks。但我們需要的是對兩者都關注。

 

驗證平臺2:高階VHDL驗證平臺

我們不想忽略搭建高階VHDL驗證平臺直接從簡單的VHDL驗證平臺跳到UVM驗證平臺。 大家都知道UVM使用 transaction -level建模,所以我們試著使用record和procedure來建立高階VHDL驗證平臺。每個DUT介面都連線給record,類似於SystemVerilog的介面。然後增加激勵或記錄record的procedure。procedure被封裝在只調用這個procedure的process中。自檢驗部分(在UVM中叫做scoreboard)在不同的checker procedure中建模。有三個process來產生激勵,記錄匯流排活動,另一個process驗證結果。

    圖3: 高階VHDL驗證平臺結構圖。

 

因為只有四個process,高階VHDL驗證平臺比簡單VHDL驗證平臺的process少。每個stimulus process會把它所產生的送給check process。這將會檢查UART packet是否與GPIO或ADC process 激勵產生一致,並檢查是否與scoreboard一致。所有check 都在一個process中,使得這一驗證平臺更具有組織性。更具組織性的結構使得維護更簡單,且更容易理解和讀懂程式碼。

 

研究發現這一驗證平臺具有更好的程式碼組織性,但是對於不同的test sequences要改變激勵依然很困難,需要重寫procedure,並對driver做巨大改動procedure和record可以放在package中重複使用,但是沒有標準化方法來遵循。這個驗證平臺依然龐大

 

驗證平臺3:UVM

UVM驗證平臺使用sisytem verilog 語言和UVM庫搭建。DUT的介面被分為幾個不同的類,例如driver,monitor, agent。每個介面會建立agent,agent是激勵的容器,也是介面的驗證元件。因此,agent對於程式碼的重複使用很重要。

 

驗證平臺環境包含所有的agents和scoreboard。Scoreboard是用來自檢驗結果的。一個頂層的測試類包含測試環境和測試sequence(見圖7)。

    圖7:UVM驗證平臺

上圖所示,DUT在中心,有三個介面。不同的是,agent是連線在介面上。GPIO和ADC 每個agent 都有driver 和monitor。 UART agent只有一個monitor是因為DUT只在UART介面上傳輸。GPIO在驅動DUT的同時,也通過monitor觀察DUT。Monitor 捕捉併發送資訊給scoreboard.

 

在UVM驗證平臺中,介面的資訊在系統級別是通過transaction傳遞的。這些transaction由test sequence產生。 Test sequence 由ADC和GPIO的不同的測試激勵產生。Transaction產生並傳遞給agent,再傳遞給DUT。一組相同的transaction會傳遞給scoreboard. Scoreboard總會自動檢查UART packet是否 與ADC和GPIO的transaction一致。

 

更關鍵的是,test sequence是和agent與驗證平臺環境隔離的。這點非常重要因為當需要改變test sequence時,不需要改變agent driver。

 

與VHDL的驗證平臺比較,只有當你在實驗室發現bug時,才需要對drivers, procedures和process做大量改動。

 

這是UVM驗證平臺一個巨大的優勢。因為在UVM中,test sequence是隔離獨立的,可以很快的建立新的測試。在這種情況下,只通過改變測試sequence,程式碼覆蓋率就可以從79%提高到85%。在UVM環境下改變測試sequence,重跑程式碼覆蓋率花費時間少於一天。同比於VHDL驗證平臺需要花費數週來達到相同的改善。

 

我們可以從中學到,UVM中test sequence和驗證平臺是隔離獨立的,使得我們可以更好的控制激勵而不需要重新設計agent. 改變測試sequence可以簡單高效提高程式碼覆蓋率。UVM支援工業標準,這會促進驗證平臺標準化。對於VHDL來說沒有驗證平臺工業標準。此外,UVM通過OOP(面向物件程式設計)的特點(例如繼承)以及使用覆蓋元件提高了重複使用率。這些都是UVM的額外好處。

 

總結和結果

三種不同驗證平臺的比較可以總結為以下幾點:

  • VHDL不太支援約束隨機激勵, 而System Verilog則支援,因此在UVM驗證平臺中ADC和GPIO可以帶約束隨機。

  • 非常少的簡單VHDL驗證平臺可以被重用。通過建立package,高階VHDL驗證平臺可以被重用。但是因為沒有標準的方法,連線到一個新的驗證平臺並不直觀。Package是結構性的,它只組織程式碼。此外,資料定義和函式定義(package 主體)被分離開。OOP會將這兩者結合起來以便更好維護。UVM 驗證平臺因為OOP特點會更從容處理這些,使得驗證元件和結構具有很高重用率。

  • 兩個VHDL驗證平臺迫使工程師側重於建立激勵而不是check。但我們所需要的是對兩者都重視,這點在UVM中實現了

  • 簡單VHDL驗證平臺的程式碼覆蓋率是78%, 高階VHDL驗證平臺是74%。回想起從簡單到高階VHDL的轉變不是為了提高程式碼覆蓋率本身,其目的是使用先進的結構(即record和procedure)並更具組織性。當使用有次序的test sequence時,UVM的程式碼覆蓋率是79%,而當使用隨機化的test sequence時,程式碼覆蓋率提高到85%。程式碼覆蓋率的改善難易程度在這裡很重要。

  • UVM增加了功能驗證的魯棒性,允許建立靈活的,適應性強的,可擴充套件性的驗證平臺。它提供了量化的,可測量的進展,同時通過改變test sequence可以方便增加程式碼覆蓋率

  • UVM會降低工具整合時間,從而允許我們達到減少實驗室集成周期的終極目標。

  • 最後,UVM重點不是肉眼檢查波形,這點非常重要,因為FPGA變得越來越大,對於肉眼檢查越來越困難。