1. 程式人生 > >UVM_暫存器模型

UVM_暫存器模型

1.為什麼要用reg model?

依據白書,暫存器模型是為了方便環境中元件、如refence model 或 scoreboard 等對暫存器的操控而設定的元件。

例如從ref model中向DUT讀值的時候,就必須採取前門訪問,必須考慮兩個問題

1,如何操縱參考模型來控制傳送啟動sequence,以讀取reg的值?

A:設定全域性事件,在refmodel 中觸發這一事件,在virtual sequence 中等待這一事件

2,如何將sequence讀取的值返回給 參考模型?

B : 通過config db來傳遞

以上,說明很麻煩。為了是驗證人員更好的組織配置暫存器、讀寫暫存器。  

前門訪問:模擬CPU來讀寫暫存器,在總線上發出指令,進行讀寫。模擬時間是向前走的,有波形可依。

後門訪問:通過層次化的引用,採用對變數的操控來讀寫暫存器。只能通過資訊列印來來檢視資訊。

2.RAL的基本結構  

RAL Model封裝了spec中所有關於驗證暫存器的詳細資訊和對暫存器進行的一些讀寫操作,其實也就是對DUT內的暫存器進行事務級操作的一個對映。而這種操作需要經過Transactor傳遞至BFM,以完成對DUT的匯流排功能介面的實際驅動操作。RAL Access是RAL的內建類,作用就是連線RAL Model和Transactor進行讀寫transaction的傳遞的。BFM內封裝了對DUT的匯流排讀寫模型,在這裡從RAL Model中傳遞來的transaction轉化成實際的邏輯電平完成對DUT的驅動操作。

RAL方案的思想:

在於將對暫存器的驗證操作封裝在一個模型之內,通過對映完成對暫存器的驗證工作,這樣對暫存器的一切維護修改工作只需要通過修改該模型即可。  

工作機制總結如下:

根據spec中關於暫存器屬性的描述編寫出相對應的ralf檔案,利用指令碼命令根據ralf檔案生成RAL Model,這樣暫存器的屬性和對暫存器驗證的行為就被封裝在了該模型裡面。換句話說就是對DUT中暫存器的驗證操作被對映到了RAL Model中。經過RAL access的連線和封裝這些對映操作就被轉化成了transaction,然後傳到了Transactor。在Transactor內,這些事務被翻譯成命令層BFM能夠識別的transaction,隨後傳遞至BFM。在BFM內transaction按照匯流排的協議和讀寫時序轉化成邏輯電平直接驅動DUT的介面訊號,完成對DUT的實際驅動操作。根據操作的的實際結果,完成對RAL Model的資料資訊維護,達到驗證目的

3.暫存器模型的意義

暫存器模型,字面理解,跟參考模型類似。就是為工程裡的暫存器提供一個參考模型。  這個模型裡,包括各個暫存器欄位描述、暫存器、暫存器組、暫存器地址對映等資訊。

有如下好處:

  1. 暫存器模型建立的目的,初始目的,是為了驗證暫存器配置過程的。
  2. uvm裡提供內建sequence,可以實現後門訪問的路徑檢查、暫存器初始值的檢查、暫存器讀寫屬性的檢查等。
  3. 暫存器模型裡,有一套標準的訪問介面,暫且叫做reg介面;可以通過uvm_adapter實現apb到reg的介面轉換,以及reg到apb的介面轉換。ps:其中apb是apb協議的事務介面,而非apb協議的訊號介面。
  4. 增加了後門訪問機制。帶來的好處是,不消耗模擬時間;提供直接訪問hdl path的方式,而非DUT apb介面訊號方式,所以能夠做的事情更多,比如強制改變某暫存器的初始值等。
  5. 暫存器模型,可以跟暫存器描述文件對應。所以,可以根據暫存器模型,更新暫存器描述文件;又或者根據暫存器描述文件,更新暫存器模型。最終實現,暫存器描述文件與設計程式碼的準確對應。
  6. 有了暫存器模型,任意uvm_component都可以很方便的獲取暫存器的狀態值。比如reference model元件。  

1,首先在暫存器模型自帶的各種訪問函式,能讓驗證開發人員在UVM環境內更方便的獲得DUT內各暫存器的值或改寫暫存器;2,不需要在UVM環境內顯式的使用絕對路徑的方式來訪問暫存器,使得驗證環境的可移值性更強;3,方便了DUT配置sequence的編寫,只需要呼叫暫存器的write()函式就行,另外暫存器模型自帶的一些check sequence也能減少驗證開發人員的一些工作;4,暫存器的mirror()函式能check暫存器預期值和實際值是否一致,所以還帶有一定的check功能。