1. 程式人生 > >uvm_config_db在UVM驗證環境中的應用

uvm_config_db在UVM驗證環境中的應用

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

如何在有效的使用uvm_config_db來搭建我們的uvm驗證環境對於許多驗證團隊來說仍然是一個挑戰,一些驗證團隊完全避免使用它,這樣就不能夠有效利用它帶來的好處,另一些驗證團隊卻過多的使用它,這讓他們的驗證環境變得不穩定,本篇論文,我們討論如何簡單有效平衡的在我們的驗證環境中使用uvm_config_db,讓它為我們的驗證環境貢獻最多的力量,卻又不會成為我們驗證環境的累贅

接下來我們通過三部分來進行闡述:

  1. uvm_config_db的使用方法

  2. uvm_config_db的作用物件

  3. uvm_config_db的具體應用

 

第一部分:uvm_config_db的使用方法

uvm_config_db作用是把驗證環境的一些資源配置為類似全域性變數一樣,使得它對於整個驗證環境來說是可見的,最常見的是我們在驗證環境頂層通過它對一些元件進行配置,元件可以在建立的階段讀取這些配置實現元件不同工作模式的切換,下面是使用uvm_config_db的語法


在以上兩個函式set和get是我們使用它時要呼叫的函式,set表示把我們要處理的資源放進全域性可見的資料庫,get表示從全域性可見的資料庫輸出我們需要的資源,使用set和get函式時有五個引數需要我們指定,第一個是uvm_config_db類的引數#(T),T表示我們要set或get的資源的型別,它可以是虛擬介面,sequencer等等,第二個cntxt和第三個引數inst_name一起定義了uvm_config_db中set或get函式的作用範圍,第四個引數決定了是對作用範圍中的那個物件或變數進行操作,第五個引數value會儲存當前操作物件的控制代碼或著操作變數的值,需要注意的是當我們指定的第二個引數是一個uvm元件時,uvm會用它的全域性名字去替換它,而全域性名字會通過uvm的get_full_name去獲得。

 

第二部分:uvm_config_db的作用物件

在uvm驗證環境中並不是所有的資源我們都會用uvm_config_db去配置,這樣會讓我們的驗證環境變得不可維護,下面是一些典型的在驗證環境中使用uvm_config_db去配置的資源:

  • 虛擬介面,虛擬介面提供了一個訪問真實虛介面的入口,我們會把虛擬介面的控制代碼放到我們全域性的資料庫中,uvm中的這些元件會通過get函式拿到虛擬介面的控制代碼對介面資料進行操作

  • 配置資料,負責配置環境的類中包含許多可以控制驗證環境的變數,它會改變這些變數,並且通過set函式把它放到我們全域性的資料庫中,其他的元件通過get函式來取到這些變數的值,再根據這些值去改變工作模式

  • sequencers,在uvm中sequencers負責把我們寫的sequence進行排隊送到driver上去,所以sequence需要有對sequencer的訪問入口,我們同樣通過uvm_config_db的方式來把sequencer的控制代碼傳給sequence

 

第三部分:uvm_config_db的具體應用

上圖是我們一個設計例項,下面我們來介紹針對上圖的例項我們怎麼來應用uvm_config_db,首先我們把上圖中可以配置的資源用一張更清晰的表列出來,如下:

在上面的表中,一種有四列,分別列出了五個介面的描述,型別,傳送的資料型別以及它們自己唯一性的名字,下面我們把它對應到uvm_config_db的呼叫函式set和get中,對於第二列type型別,我們會把它放入uvm_config_db的第一個引數#(T)的位置,表示我們處理的資料型別是axi_if,如下圖:

而對於第三列,transaction是在配置srquencer時要指定的傳送型別,然後再把sequencer放到全域性資料庫中去,如下圖:

對於identifier這一列會被放在前面語法解析部分中的inst_name部分,這一列的名字要求是唯一的,但是如果介面或者sequencer的型別不同,則允許重複,例如如果都是axi_if型別,那麼要求名字必須具有唯一性,因為它們處於同一個資料庫(axi_if資料庫)中,而如果一個型別是ahb_if,另一個是axi_if,則不要求唯一性,因為它們處於不同資料庫的區域中。


上面為了能夠更清楚的展示細節,所有的identifier都是用字串,但在實際專案中為了以後的複用,我們會考慮定義一個package檔案,把所有的identifier都用一個全域性變數代替,這樣方便以後維護,具體如下圖:

配置interface到全域性資料庫

配置sequencer為預設sequencer


配置傳送資料波形可見

總結

本篇論文詳細介紹了uvm_config_db在uvm驗證環境中的應用(interface,config,sequencer),它的使用可以極大的方便我們對一些需要全域性可見的變數或類的處理,讓我們能夠更容易的去管理驗證環境中的一些元件,也在一定程度上方便了構建測試激勵的驗證人員,他們無須關注驗證環境的細節便可以構建測試場景對設計行為進行驗證