RAL(Register Abstract Layer,寄存器抽象層),通常也叫寄存器模型,顧名思義就是對寄存器這個(gè)部件的建模。本文要介紹的內(nèi)容,包括對UVM寄存器模型的概述,如何構(gòu)建寄存器模型,以及如何將寄存器模型集成到驗(yàn)證環(huán)境中。篇幅原因,將在下一篇文章再給出寄存器模型的操作圖鑒(前后門訪問API),以及寄存器覆蓋率的收集。
01 寄存器模型概述
為什么要對寄存器建模,可能是初學(xué)者問得較多的問題。簡單地說,寄存器建模要做的事情,就是在軟件的世界里面,復(fù)刻RTL中的寄存器。既然是面向軟件世界做的事情,自然就是為軟件所用,要么方便軟件觀測,要么方便軟件使用。
這里的軟件,指的是整個(gè)驗(yàn)證環(huán)境所構(gòu)造出來的面向?qū)ο蟮氖澜?。有了寄存器模型,軟件世界中的參考模型(reference model)可以很方便的獲取到當(dāng)前RTL的功能配置和狀態(tài),我們也可以很方便的收集到對寄存器各個(gè)域段甚至位的測試覆蓋情況等等。
要達(dá)成這一目標(biāo),就需要考慮兩個(gè)基本的問題:如何對寄存器進(jìn)行建模,以及建立怎樣的機(jī)制才可以讓寄存器模型是“實(shí)時(shí)”復(fù)刻RTL寄存器的(上圖中的虛線箭頭)。這也是本文后面兩個(gè)小節(jié)要介紹的內(nèi)容。
02 構(gòu)造寄存器模型
寄存器模型的框架實(shí)際上跟RTL中的寄存器組沒有什么兩樣。寄存器組中有的,寄存器模型也應(yīng)該要有,頂多是多了一些抽象。基于這個(gè)想法,構(gòu)造寄存器模型的工作,便可以從硬件寄存器組的設(shè)計(jì),一一映射為對應(yīng)的數(shù)據(jù)結(jié)構(gòu)。
寄存器最小的功能單元是域段(field)。一個(gè)寄存器要切分成多少個(gè)域段、每個(gè)域段的位寬、默認(rèn)值、讀寫屬性以及分別用于什么功能的控制或狀態(tài)的指示,是根據(jù)功能規(guī)范來定義的。對域段的建模,UVM類庫提供的類型叫uvm_reg_field。
寄存器是可作為單個(gè)實(shí)體被訪問的多個(gè)域段的集合,它可以被映射到一個(gè)或者多個(gè)地址上(memory-mapped)被訪問。對寄存器的建模,UVM提供的類型叫uvm_reg。為了提供后門訪問(backdoor access),uvm_reg還增加了成員來表示其對應(yīng)的硬件寄存器在RTL中的層次路徑。
寄存器訪問譯碼表,或者叫memory map,是寄存器接口從訪問地址到使能對應(yīng)寄存器所需要的查找表。這張表中指定了每個(gè)寄存器的偏移地址(offset)、訪問屬性、大小端、對應(yīng)的總線等配置。對memory map的建模,UVM提供的類型叫uvm_reg_map。
多個(gè)寄存器及其訪問譯碼表最終構(gòu)成寄存器組。在同個(gè)數(shù)字系統(tǒng)的不同總線視角下,寄存器組可以映射到不同的基地址(base)。因此,一個(gè)寄存器組除了可以包含多個(gè)寄存器,還可以有多個(gè)譯碼表。UVM針對寄存器組的建模提供的類型叫uvm_reg_block。為了便于集中管理,uvm_reg_block還可以包含其他子uvm_reg_block。
在同一類族中,UVM還提供了uvm_mem類,用于對連續(xù)地址存儲(chǔ)空間的建模。uvm_mem對象也可以被集成到uvm_reg_block中,并通過uvm_reg_map做地址映射,
此外,UVM還提供了uvm_reg_file類。這個(gè)類更像是一個(gè)對象容器,可以用來裝載多個(gè)寄存器(uvm_reg)和其他uvm_reg_file,以便對相同規(guī)格的寄存器進(jìn)行多次例化。
03 集成到驗(yàn)證環(huán)境
如果只是簡單把寄存器模型集成到驗(yàn)證環(huán)境,那么只要例化寄存器模型就可以了?,F(xiàn)在主要的問題是,建立怎樣的機(jī)制才可以讓寄存器模型“實(shí)時(shí)”復(fù)刻RTL寄存器的值。為了解決這個(gè)問題,UVM引入Prediction機(jī)制,用到了兩個(gè)新的組件:Adapter和Predictor。
Adapter,可以翻譯為適配器,它的作用是寄存器訪問事務(wù)和總線事務(wù)的相互轉(zhuǎn)換。寄存器訪問事務(wù)對數(shù)據(jù)的封裝格式相對固定,一般包含讀寫類型、地址、數(shù)據(jù)和字節(jié)掩碼。而總線事務(wù)則根據(jù)不同的總線協(xié)議會(huì)有所不同。因此,Adapter扮演了中間做事務(wù)轉(zhuǎn)換的角色,其主要實(shí)現(xiàn)的函數(shù)為reg2bus和bus2reg。
Predictor,是保持寄存器模型“實(shí)時(shí)”復(fù)刻RTL寄存器值的關(guān)鍵組件。Predictor翻譯過來叫預(yù)測器,可能反而不是很好理解,對其功能比較好的描述我覺得應(yīng)該是“monitor and update the RAL Model”。根據(jù)是否使用外部predictor,有兩種應(yīng)用方式:Implicit Prediction和Explicit Prediction。
隱式預(yù)測(Implicit Prediction):用戶使用寄存器模型中memory map默認(rèn)的predictor,當(dāng)開啟其預(yù)測功能之后,如果用戶在測試用例中通過寄存器模型的API(下篇文章會(huì)介紹都有哪些API)去發(fā)起硬件寄存器訪問操作,該操作會(huì)自動(dòng)被predictor捕捉,并在該操作完成之后自動(dòng)同步到寄存器模型的寄存器中。下圖為了方便展示,將原本同屬于寄存器模型中的memory map、registers和adapter分開畫了。
顯式預(yù)測(Explicit Prediction):用戶基于UVM提供的基類uvm_reg_predictor實(shí)現(xiàn)preditor,并將monitor的總線事務(wù)傳遞給該predictor,同時(shí)將其關(guān)聯(lián)到寄存器模型的memory map和對應(yīng)總線事務(wù)的adapter適配器。工作邏輯是這樣的:該predictor相當(dāng)于可以根據(jù)memory map監(jiān)測總線上的寄存器訪問行為,并將該行為通過adapter轉(zhuǎn)換成寄存器事務(wù),最終用于更新寄存器模型。
Explicit Prediction相對于Implicit Prediction,除了監(jiān)視通過寄存器模型API對寄存器的訪問操作,還可以覆蓋到其他測試序列(sequence)通過總線對寄存器的直接訪問,這一點(diǎn)會(huì)使它更加通用。
相應(yīng)的代碼示例,也將在下一篇UVM系列文章中提供,歡迎關(guān)注。
[1] Accellera Systems Initiative. "Universal Verification Methodology (UVM) 1.2 Class Reference" (2014).
-
寄存器
+關(guān)注
關(guān)注
31文章
5343瀏覽量
120383 -
API
+關(guān)注
關(guān)注
2文章
1501瀏覽量
62033 -
UVM
+關(guān)注
關(guān)注
0文章
182瀏覽量
19171
發(fā)布評論請先 登錄
相關(guān)推薦
評論