寄存器模型保持著DUT內(nèi)部寄存器值的鏡像(mirror)。
鏡像值不能保證是正確的,因?yàn)榧拇嫫髂P椭荒芨兄綄?duì)這些寄存器的外部讀寫操作。
如果DUT內(nèi)部修改了寄存器中的字段,鏡像值就會(huì)過時(shí)(outdated)。
寄存器模型可以通過使用uvm_reg_field::mirror(), uvm_reg::mirror(), 或uvm_reg_block::mirror()方法將一個(gè)寄存器的鏡像值更新為存儲(chǔ)在DUT中的值。
更新寄存器中某個(gè)字段的鏡像也會(huì)同時(shí)更新同一寄存器中所有其他字段的鏡像。更新一個(gè)block的鏡像會(huì)更新它包含的所有寄存器和字段的鏡像。
如果使用前門訪問,更新一個(gè)大block的鏡像可能需要大量的仿真時(shí)間;而使用后門訪問更新不需要消耗仿真時(shí)間。
可以通過使用uvm_reg_field::set()或uvm_reg::set()方法在不消耗仿真時(shí)間向寄存器模型中的寫入鏡像值,這個(gè)鏡像值不會(huì)反應(yīng)到DUT中相應(yīng)字段或寄存器。
可以通過使用uvm_reg::update()或uvm_reg_block::update()方法更新DUT的寄存器以匹配鏡像值。如果新的鏡像值與舊的鏡像值相匹配,寄存器就不會(huì)被更新,從而節(jié)省不必要的總線訪問。
要想不消耗仿真時(shí)間訪問一個(gè)field或register的當(dāng)前鏡像值,可以使用 uvm_reg_field::get() 或uvm_reg::get()方法。
Memories是沒有鏡像的
Memories比較大,所以通常使用稀疏陣列的方法來建模。只有被寫入的位置才會(huì)被存儲(chǔ)起來,然后再讀回來。任何未使用的內(nèi)存位置都不會(huì)被建模。
與寄存器不同,memory的行為非常簡單,memory鏡像將是一個(gè)ROM或RAM內(nèi)存模型,所以可以通過提供對(duì)內(nèi)存模型的后門訪問來取代。因此,使用uvm_mem::peek()或uvm_mem::poke()方法提供與memory鏡像完全相同的功能。此外,與基于觀察到的讀寫操作的寄存器鏡像不同,使用后門訪問的memory鏡像總是返回或設(shè)置DUT中一個(gè)內(nèi)存位置的實(shí)際值。
-
寄存器
+關(guān)注
關(guān)注
31文章
5421瀏覽量
123328 -
鏡像
+關(guān)注
關(guān)注
0文章
178瀏覽量
11119 -
DUT
+關(guān)注
關(guān)注
0文章
190瀏覽量
12844
原文標(biāo)題:寄存器模型中的Mirroring
文章出處:【微信號(hào):芯片驗(yàn)證工程師,微信公眾號(hào):芯片驗(yàn)證工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評(píng)論請先 登錄
LMX2492工作一段時(shí)間后微波失鎖,并且內(nèi)部寄存器恢復(fù)成上電值,為什么?
AMC7836低溫-40C實(shí)驗(yàn),內(nèi)部寄存器可以正常讀寫,數(shù)據(jù)ADC無法采樣怎么解決?
請問關(guān)于ADS5407內(nèi)部寄存器有沒有相關(guān)的中文介紹的?
Labview通過VXI總線直接訪問測量儀器內(nèi)部寄存器
請問AD9129內(nèi)部寄存器的reserved值和spi讀取的值不一樣會(huì)有什么影響?
如何訪問內(nèi)部寄存器空間或PCIe?
DMA內(nèi)部寄存器的讀寫方式和應(yīng)用場合
SPI內(nèi)部寄存器的相關(guān)資料分享
AD9129芯片內(nèi)部寄存器的reserved值,spi讀取的值和它不一樣會(huì)有什么影響?
Cortex-M3 內(nèi)部寄存器

簡化UVM寄存器模型的使用

驗(yàn)證環(huán)境獲取DUT內(nèi)部信號(hào)的方法

評(píng)論