寄存器模型操作,指的是通過寄存器模型對RTL中寄存器進行讀寫訪問,或者同步寄存器模型與RTL中寄存器的值。對寄存器模型的操作,可以通過調(diào)用模型提供的方法來實現(xiàn)。這些方法的調(diào)用,建立在已經(jīng)完成寄存器模型的構(gòu)建和集成到驗證環(huán)境的基礎(chǔ)上。
本文將展開介紹寄存器模型訪問上的一些內(nèi)容,包括寄存器域段的成員值、寄存器的前后門訪問以及具體各種訪問方法圖示。
01 寄存器域段
按照前文介紹UVM寄存器模型基礎(chǔ)時的描述,寄存器域段(uvm_reg_field)是構(gòu)造寄存器模型最小的功能單元。這也就意味著,寄存器的值,是由多個域段的值拼接起來的。那么,在介紹寄存器的訪問方法之前,有必要先看看寄存器的域段都是怎么存放值的。
從uvm_reg_field類型定義的源碼可以看到,跟域值相關(guān)的成員變量有這么幾個:value, m_mirrored, m_desired, m_reset[“HARD”]。它們的數(shù)據(jù)類型均為uvm_reg_data_t,其實也就是UVM對bit unsigned [`UVM_REG_DATA_WIDTH-1:0]的類型重命名。
盡管除value以外其他三個成員都是local可見的,但是知道這些local成員的存在和意義,對理解和使用后面要介紹的操作方法會有很大的幫助。
02 前后門訪問
寄存器的前門訪問(front door access),指的是Testbench所發(fā)出的寄存器操作,都會被轉(zhuǎn)換成總線事務(wù),并實際驅(qū)動到DUT的總線上,會占用總線和消耗總線周期。換句話說,這種寄存器訪問方式跟其他硬件組件訪問寄存器一樣,是從”明面“上對寄存器進行訪問。
寄存器的后門訪問(back door access),指的是用戶通過仿真器,對DUT中指定路徑的寄存器信號進行改寫或讀取。這種寄存器訪問方式不需要消耗仿真時間,畢竟”走后門“總是要比走前門要方便快捷很多。后門訪問的前提是,在建立寄存器模型的時候,指定了對應(yīng)寄存器在DUT中的路徑(HDL_path)。
后門訪問帶來的壞處是,這種直接改寫和讀取寄存器的操作不會被反映成總線行為,也就無法覆蓋到寄存器訪問涉及到的總線系統(tǒng),以及總線上其他相關(guān)的邏輯模塊。舉個栗子,后門訪問可以掩蓋掉總線系統(tǒng)上本來存在著的地址譯碼錯誤。總結(jié)起來:除一些特殊的測試場景,寄存器的訪問少走后門,多走前門。
下一小節(jié)介紹寄存器模型操作方法的同時,也會提到哪些是對寄存器的前門訪問,哪些是后門訪問。
03 寄存器模型方法
寄存器模型方法有很多,大致如下圖所示。由于方法較多,本文就不再列出這些方法的原型,有需要的讀者完全可以通過UVM提供的類型手冊找到非常詳細的函數(shù)原型和說明。
對寄存器的訪問方法,無非是對DUT中寄存器,或者是對寄存器模型中各個成員值的改寫或讀取。因此,可以整理出每種方法對這些值的影響(見下圖),然后總結(jié)出來常用場景下的操作組合。下圖中彩色漸變格式表示操作的開始。
在大多數(shù)的應(yīng)用場景,對寄存器的訪問完全可以通過write(value) & read()這樣的組合來完成,也可以選用set(value)先修改期望值,然后在通過update()函數(shù)去做同步。這樣的好處是,如果RTL寄存器的值已經(jīng)是我們的期望值,那么就不會也沒有必要再浪費總線資源去重新配置一遍。
審核編輯:劉清
-
寄存器
+關(guān)注
關(guān)注
31文章
5343瀏覽量
120385 -
RTL
+關(guān)注
關(guān)注
1文章
385瀏覽量
59797 -
UVM
+關(guān)注
關(guān)注
0文章
182瀏覽量
19171 -
HDL語言
+關(guān)注
關(guān)注
0文章
47瀏覽量
8916 -
DUT
+關(guān)注
關(guān)注
0文章
189瀏覽量
12386
原文標題:RAL寄存器模型操作圖鑒
文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論