1. 程式人生 > >高度可配置引數化UVM IP驗證環境(上)

高度可配置引數化UVM IP驗證環境(上)

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

摘要:

      引數化的IP是可配置的,這意味著在不同的SOC中IP設計可以有不同的設計引數,設計引數可以對應到協議、埠號、埠名稱、以及內部邏輯。大量的IP設計引數非常影響驗證環境的構建,比如testbench的連線、驅動器、監視器、模擬序列以及功能覆蓋率的建立。

本文呈現出了一種使用UVM驗證方法學構建基於高可配置性的高階微處理器匯流排架構(AMBA)的IP驗證環境,其中會使用到Synopsys公司的AMBA VIP和Ruby指令碼。該驗證環境可以支援通過使用AMBA設計引數進行自動化的驗證環境更新,包括IP preprocess、IP  testbench以及IP MODULE UVC。

  同時本文也會介紹如何去做testbench繫結連線的垂直複用和水平復用,驗證IP(VIP)、序列(sequence)的複用、UVM環境配置、記分板(socreboard)複用以及覆蓋率(coverage)。

  通過專案最終結果表明,當引數化的IP改變它的設計引數並且整合到不同的SoC中時,使用該方法可以減少30%的額外資源需求。

 關鍵字:可配置化,水平復用,垂直複用,引數化IP,通用驗證方法學(UVM)

 

1.   簡介

引數化的IP設計是加速行業的趨勢。同樣地,在不同的引數配置、不同的SoC專案中使用使用IP設計也是一個加速的趨勢。這些趨勢雖然提高了RTL的開發效率,但是也帶來了許多新的驗證要求。

Janick Bergeron曾寫道”在數百萬門asic和fpga的時代,可重用IP、系統級晶片(SoC)設計,驗證花費約佔70%專案週期[1]”。驗證通常來說是直接處在專案進度的關鍵路徑上的,對於理解如何讓一個驗證環境自動地適應不同的IP設計引數,以及當IP設計引數變化後驗證人員只需花費最少的努力是至關重要的。

      為了減少驗證的時間消耗,驗證環境必須做成高度可配置型以及易複用型,本文詳細描述瞭如何開發可配置和可複用型的驗證平臺元件,以及如何通過設計引數自動化地配置它們。在本文中該方法被稱為是一種自適應的IP驗證環境。

 

2.   引數化IP驗證的挑戰

當設計需要在多引數配置的環境中驗證時,共享引數就成為一個挑戰[2]。手動在驗證環境中更新新的設計引數是一件很複雜的工作。其中包括了修改驗平臺的連線關係;新增或者減少驅動器(driver)、監視器(monitor)、記分板(scoreboard)的數量;以及調整功能覆蓋率(function coverage)和斷言(assertion)等等。

通常使用的方法是使用紅(`ifdef)去區分不同的設計引數。典型地,一個設計擁有一組巨集,但是當專案規模不斷的增長時,這種方法對於驗證平臺的除錯以及後續的維護就變得非常複雜。

在下一部分我們將會介紹一個自使用的IP驗證環境專門去應對這個挑戰。

 

3.   自適應引數化IP驗證環境架構

本文中,引數化的IP設計是一種高階的微處理器匯流排,它連線了一組AXI,AHB,APB   的masters和slaves。埠的位寬和埠的協議、埠號、內部暫存器基址以及計數器初始值都可以被設計引數引數化控制。

如圖1所示,這個自適應的IP驗證環境包括了第三方IP的預處理、IP驗證平臺以及相對應IP模組的通用驗證元件(UVC)。

3.1        IP預處理(IP_PREPROCESS)

IP預處理機制需要將所有的IP設計引數都放入一個引數組中,之後這個組將會被預處理,為設計生成一個引數檔案去使用,同時一個全域性的ruby陣列@@FEATURES也會被生成去給驗證使用。本文主要關注的是驗證這一部分:

 這個全域性的Ruby陣列@@FEATURES儲存著所有的IP設計引數,無論什麼時候IP設計引數被改變,這個全域性的Ruby陣列在VCS模擬執行之前會自動地更新。

 

3.2 IP 驗證平臺(IP_TESTBENCH)

IP 驗證平臺是由一個IP模組UVM元件(UVC)、一個Ruby主程式、一個繫結結合了模組的Ruby程式以及一個斷言Ruby程式,其中這三個Ruby程式均是在VCS模擬之前執行的,並且自動地撲獲IP設計引數。

(A)這個IP模組通用驗證元件(UVC)的主要功能是通過生成帶約束的隨機事物去模擬一些行為場景,監視DUT的響應,確保DUT的功能工作正常,檢查協議活動的有效性,並且收集覆蓋率資料。這些內容將會在在第五部分詳細描述。

(B)這個Ruby主程式遍歷了上面所講的那個全域性的Ruby陣列@@FEATURES,並且將裡面所有的IP設計引數都轉換成一個SystemVerilog 類裡面的屬性---本文中ip元件的特性是例項化ip的特性,所有SV類中的屬性儲存著所有IP設計引數。程式碼如下所示,該UVC通過ip設計特性進行配置操作。

(C)繫結Ruby程式的模組繫結其作用是連線DUT模組和驗證平臺(testbench)。下面的程式碼部分描述了Synopsys SVT AXI slave介面例項的數目是被IP設計引數”axi slave”所控制的,AXI slave介面訊號wdata和awaddr的連線使它能夠過IP設計引數控制的:

本文使用了uvm_resource_db在一個頂層模組中進行介面例項的繫結:

之後UVM驗證環境在動態的驅動器(driver)、監視器(monitor)類中通過使用虛介面(virtual interfaces)去訪問靜態介面[3],然後驗證環境通過讀取uvm_resource_db去檢測取回繫結的介面例項:

這種介面繫結能夠被直接複用到晶片級(chip level),因為IP設計模組名稱在IP級驗證環境和SoC整個晶片級驗證環境中是保持一致的。

(D)斷言Ruby程式把IP設計引數傳遞給一種型別與設計模組功能相關的斷言。這些斷言通過IP設計說明書被建立,並且斷言的屬性在時許表示式中使用本地變數(local variables),因此它是自適應的。這些斷言被放置在一個介面中,然後繫結到DUT模組。對於DUT模組可以被複用到SoC級和不同的專案,因此它們在垂直複用和水平復用都可以適用:

4. 自適應引數化IP模組通用驗證元件(UVC)結構

IP_MODULE_UVC是從uvm_env擴充套件而來,其中包含了AMBA SVT VIPs,預測器(predictors)、計分板(scoreboards)、監視器(monitors)、IP模組通用驗證元件配置物件(IP module UVC configuration object)、基本的事物序列(basic sequence)以及全域性的虛的事物序列發生器(global virtual sequencer)。圖3闡述了IP_MODULE_UVC。

圖3-IP模組UVC結構

這個SystemVerilog特性的類-ip_component_features在4.2部分將會被被生成,並且它是被初始化在名為ip_features的IP模組UVC配置物件中。其中IP_MODULE_UVC中的每一個元件都可以通過IP設計引數進行配置和控制。

 

4.1 AMBA SVT VIPs

Synopsys AMBA SVT VIP 是一個通用驗證元件其中包含了主代理(master agents) 和從代理(slave agents)、驅動器(drivers)、生成器(sequencers)、監視器(monitors)、配置物件(configuration objects)、協議檢查器(protocol checker)、功能覆蓋組(functional covergroups)、約束隨機序列(constrained random sequences)以及事務包(transaction packets)。

(A)        例項化AXI、AHB以及APB SVT UVC

正如圖2描述的那樣,為了讓環境中的agents自動地得到IP設計引數,本文中在IP_MODULE_UVC所建立的AXI、AHB以及APB SVT UVC動態陣列如下:

(B)        配置AXI、AHB以及APB SVT UVC

AMBA SVT UVC配置類[4]在模組UVC配置物件中例項化並且被連線到同樣的位置去捕獲IP設計引數,在UVM配置機制中[5],AXI SVT UVC 以及APB SVT UVC 是通過IP設計引數在UVM build phase階段被配置的。

4.2        自適應預測器以及計分板(self-adapting predictor and scoreboard)

預測器從AMBA UVC TLM 埠接受了一個真實的事務包,經過處理之後在通過TML 埠將被預測的事物傳送給計分板,讓計分板去檢查事物的正確性。

正如圖3所示,每一個slave都有一個計分板,預測器TML埠編號和計分板編號對於IP設計引數--ip_feature來說是自適應的,它們都是動態陣列資料結構。當slave的數目減少時,計分板數目以及TML埠數目會自動減少;當slaves數目增加時,計分板數目以及TMl埠數目會自動地增加。

4.3        自適應基本事物序列(self-adapting basic sequence)

這些基本事物序列會提供激勵源,本文中所提及的解決方案使用IP設計引數去控制事物序列的產生以及啟動。

例如,當設計引數改變了一個AXI slave中的基址(base address)時,AXI地址激勵會自動更新的。

4.4        自適應功能覆蓋率(self-adapting functional coverage)

Synopsys 公司的AMBA SVT VIP 提供內部的AXI、AHB以及APB功能覆蓋率;對於使用者來說僅僅需要在VIP 卑職類中對它們做使能處理即可。

Synopsys 公司的AMBA SVT VIP對於IP設計自身的覆蓋率也提供覆蓋率回撥操作。為了使用IP設計引數去控制功能覆蓋率,本文延伸擴充套件了Synopsys公司的覆蓋率回撥類,在Synopsys覆蓋率回撥類中例項化ip_component_features,並且使用IP設計特性去配置覆蓋點(cover point),因此覆蓋點的自適應如下:

但是要在功能覆蓋率中小心使用ip_feature,因為功能覆蓋率應當一直來自於設計說明書(design spec),而不是直接來自於IP設計引數程式碼。