為什么引入寄存器模型
新需求:為帶寄存器的DUT搭建UVM仿真環(huán)境
為了讀寫DUT中的寄存器:UVM提供了 配置寄存器的總線 (bus_agent=sqr+drv+mon)——前門訪問(wèn)DUT中的寄存器值
為了方便參考模型查看DUT中寄存器的值:UVM提供了 寄存器模型 ,作用如下
- 讓前門訪問(wèn)操作更方便:將對(duì)DUT中寄存器的總線操作進(jìn)行封裝,通過(guò)寄存器模型這一暴露的接口可以方便實(shí)現(xiàn)對(duì)DUT的讀寫操作
- 新加入后門訪問(wèn)操作:通過(guò)層次化引用來(lái)讀寫DUT中寄存器的值(不消耗仿真時(shí)間),同樣使用寄存器模型作為暴露的接口。
為DUT中的寄存器設(shè)定一個(gè)參考模型:引入U(xiǎn)VM_PREDICT_DIRECT的predict操作,具體實(shí)現(xiàn)如下
- 在my_model中, 每得到一個(gè)新的transaction, 就先從寄存器模型中得到counter的期望值( 此時(shí)與鏡像值一致) ,
- 之后將新的transaction的長(zhǎng)度加到counter中,
- 最后使用predict函數(shù)將新的counter值更新到寄存器模型中。predict操作會(huì)更新鏡像值和期望值。
- 在測(cè)試用例中, 仿真完成后可以檢查DUT中counter的值是否與寄存器模型中的counter值一致
寄存器模型中的基本概念
- uvm_reg_field:寄存器的域,是一個(gè)uvm_reg中的一個(gè)字段/域
- uvm_reg:寄存器,至少包含一個(gè)uvm_reg_field
- uvm_mem:存儲(chǔ)器,
- uvm_reg_file:引入后,uvm_reg配置時(shí),其路徑就不再需要uvm_reg_block的名字
- uvm_reg_block:包含uvm_reg或者其他uvm_reg_block(可設(shè)計(jì)層次化的寄存器模型)。一個(gè)寄存器模型中至少包含一個(gè)uvm_reg_block
- uvm_reg_map:存儲(chǔ)所有寄存器的地址。每個(gè)reg_block內(nèi)部, 至少有一個(gè)( 通常也只有一個(gè)) uvm_reg_map。
寄存器模型前門訪問(wèn)的實(shí)現(xiàn)
參考模型>寄存器模型>轉(zhuǎn)換器>bus_sequencer>driver>dut>driver---
寄存器模型后門訪問(wèn)的實(shí)現(xiàn)
- 在reg_block中調(diào)用uvm_reg的configure函數(shù)時(shí), 設(shè)置好寄存器的第三個(gè)路徑參數(shù)(即后門訪問(wèn)路徑:DUT內(nèi)寄存器相對(duì)DUT頂層的路徑,如:counter[31:16]表示dut中名為counter的寄存器的[31:16]位)
- 在將寄存器模型集成到驗(yàn)證平臺(tái)時(shí), 設(shè)置好DUT的根路徑hdl_root(這樣才能定位DUT在哪里)
- 在sequence中, 使用peek和poke任務(wù) 或者 UVM_BACKDOOR形式的read和write
寄存器模型中的期望值與鏡像值
- 期望值:希望向此寄存器中寫入的值——可作為DUT中寄存器的參考模型
- 鏡像值:最大可能地與DUT保持同步
常用操作對(duì)期望值和鏡像值的影響
- 針對(duì)DUT寄存器的read&write操作:用操作后DUT中寄存器的值更新 期望值和鏡像值(會(huì)分前門/后門訪問(wèn))
- 針對(duì)DUT寄存器的peek&poke操作:用操作后DUT中寄存器的值更新 期望值和鏡像值 (只有后門)
- 針對(duì)期望值的get&set操作:更新期望值, 不更新DUT中寄存器,不更新鏡像值
- update操作:用期望值 更新DUT中寄存器 和 鏡像值
- mirror操作:用DUT中寄存器的值 更新 期望值和鏡像值
- randomize操作:隨機(jī)化 期望值,不隨機(jī)化鏡像值
- predict操作:
- 參數(shù)為UVM_PREDICT_READ和UVM_PREDICT_WRITE時(shí):用操作后DUT中寄存器的值更新 期望值和鏡像值——在read/peek和write/poke操作對(duì)DUT寄存器完成讀寫后自動(dòng)調(diào)用
- 參數(shù)為UVM_PREDICT_DIRECT時(shí):人為更新期望值和鏡像值,不更新DUT中寄存器
引入reg_predictor
引入reg_predictor的原因:配置寄存器的總線存在多個(gè)master時(shí),可能存在 不通過(guò)寄存器模型 訪問(wèn)總線來(lái)配置DUT中寄存器的情況,這時(shí) 寄存器模型 就不能檢查到 DUT中寄存器的變化 ,所以需要引入reg_predictor, 通過(guò)monitor檢測(cè)總線,將采集到的tr發(fā)送給uvm_reg_perdictor 。如下圖,
- 虛線為通過(guò)自動(dòng)預(yù)測(cè)途徑更新寄存器模型的路徑。
- 實(shí)現(xiàn)為經(jīng)由predictor更新寄存器模型的路徑。
-
轉(zhuǎn)換器
+關(guān)注
關(guān)注
27文章
8749瀏覽量
148186 -
寄存器
+關(guān)注
關(guān)注
31文章
5372瀏覽量
121304 -
UVM
+關(guān)注
關(guān)注
0文章
182瀏覽量
19236 -
DUT
+關(guān)注
關(guān)注
0文章
189瀏覽量
12513
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
IC驗(yàn)證"為什么要學(xué)習(xí)UVM呢"
從設(shè)計(jì)的角度一塊兒來(lái)看下這些UVM寄存器模型
介紹UVM寄存器模型訪問(wèn)上的一些內(nèi)容
如何構(gòu)建UVM寄存器模型并將寄存器模型集成到驗(yàn)證環(huán)境中
集成級(jí)的UVM寄存器模型
![集成級(jí)的<b class='flag-5'>UVM</b><b class='flag-5'>寄存器</b><b class='flag-5'>模型</b>](https://file.elecfans.com/web2/M00/49/C2/pYYBAGKhvFqAQPpiAAAQ_wrxuIM627.jpg)
五個(gè)廣泛使用的特殊寄存器
![五個(gè)廣泛使用的特殊<b class='flag-5'>寄存器</b>](https://file.elecfans.com/web2/M00/47/FE/poYBAGKgAZeAQhOUAABxdS1S8uM424.png)
簡(jiǎn)化UVM寄存器模型的使用教程
![簡(jiǎn)化<b class='flag-5'>UVM</b><b class='flag-5'>寄存器</b><b class='flag-5'>模型</b>的使用教程](https://file.elecfans.com/web2/M00/8B/91/poYBAGPXcFCAY5bxAAJ8hnSp27I657.jpg)
簡(jiǎn)述RAL寄存器模型基礎(chǔ)
![簡(jiǎn)述RAL<b class='flag-5'>寄存器</b><b class='flag-5'>模型</b>基礎(chǔ)](https://file.elecfans.com/web2/M00/90/B3/poYBAGPrR22AUrkqAAGMANm30iE910.jpg)
簡(jiǎn)化UVM寄存器模型的使用
![簡(jiǎn)化<b class='flag-5'>UVM</b><b class='flag-5'>寄存器</b><b class='flag-5'>模型</b>的使用](https://file.elecfans.com/web2/M00/A8/23/poYBAGR0CpeAN3jJAAGpVeG25uo771.png)
基于DUT內(nèi)部寄存器值的鏡像
寄存器模型Register Model學(xué)習(xí)筆記
![<b class='flag-5'>寄存器</b><b class='flag-5'>模型</b>Register Model學(xué)習(xí)筆記](https://file1.elecfans.com/web2/M00/8C/6F/wKgaomSsrtmAYb_EAAAvjuQRxDE694.png)
評(píng)論