今天在添加環(huán)境的結(jié)束檢查時(shí)候,突然發(fā)現(xiàn)ral_model的mirror()無(wú)論如何也不進(jìn)行數(shù)據(jù)比對(duì):
ral_model.xxx.predict(xxxx);
ral_model.mirror(status, UVM_CHECK);
我自己非常的確定語(yǔ)法肯定時(shí)沒(méi)有問(wèn)題的,但是無(wú)論往寄存器里predict什么奇怪的值進(jìn)去,mirror時(shí)候都不會(huì)報(bào)錯(cuò)。這就非常令人費(fèi)解了,于是只能去源碼里找。
mirror的最底層邏輯在uvm_reg.svh:
if (check == UVM_CHECK)
exp = get_mirrored_value();
...
if (check == UVM_CHECK) void'(do_check(exp, v, map));
鑒于UVM_CHECK我已經(jīng)傳入了,get_mirrore_value()我也執(zhí)行過(guò)確實(shí)predict進(jìn)去了奇怪的值,那么問(wèn)題只能出現(xiàn)在do_check這里(這個(gè)想了好久)。在do_check里我找到了一個(gè)核心的操作:
if (!(m_fields[i].get_compare() == UVM_NO_CHECK ||
acc == "WO")) begin
...
field本身不是UVM_NO_CHECK屬性的話才會(huì)進(jìn)行比對(duì),那么問(wèn)題是不是可能出現(xiàn)在field屬性身上呢?轉(zhuǎn)到uvm_reg_field.svh文件,找get_compare()方法:
function uvm_check_e uvm_reg_field::get_compare();
return m_check;
endfunction
進(jìn)一步的看下m_check屬性是怎么定義的:
function void uvm_reg_field::configure(uvm_reg parent,
int unsigned size,
int unsigned lsb_pos,
string access,
bit volatile,
uvm_reg_data_t reset,
bit has_reset,
bit is_rand,
bit individually_accessible);
...
m_check = volatile ? UVM_NO_CHECK : UVM_CHECK;
...
問(wèn)題大概明確了,應(yīng)該是field在進(jìn)行configure是volatile賦值為1,查了一下確實(shí)如此:
this.xxxx.configure(this, 20, 0, "RW", 1, 20'h0000, 1, 1, 1);
那么問(wèn)題就大概清晰了,溯源來(lái)看ral_model是通過(guò)ralf生成的,ralf是通過(guò)xml生成的,那么只能是xml中寫(xiě)錯(cuò)了:
< spirit:volatile >true< /spirit:volatile >
我這才理解了xml中這個(gè)“易失性”。之前就一直不明白,為啥一個(gè)仿真模型要關(guān)心volatile呢,原來(lái)如果易失性=true的話,環(huán)境認(rèn)為你這個(gè)寄存器存不住值也就不會(huì)進(jìn)行compare操作。于是將其修改為(或者直接刪除,我就不應(yīng)該多這一筆):
< spirit:volatile >false< /spirit:volatile >
重新生成ral_model后mirror(status, UVM_CHECK)生效報(bào)錯(cuò)。
-
寄存器
+關(guān)注
關(guān)注
31文章
5423瀏覽量
123418 -
UVM
+關(guān)注
關(guān)注
0文章
182瀏覽量
19433
發(fā)布評(píng)論請(qǐng)先 登錄
AD9783無(wú)論如何更改SET及HLD的值,SEEK值一直為1是為什么?
dede的水印圖片文字顏色,無(wú)論如何設(shè)置都是黑色?
根據(jù)條件進(jìn)行數(shù)據(jù)的問(wèn)題
做了個(gè)寫(xiě)入數(shù)據(jù)庫(kù)程序,運(yùn)行數(shù)據(jù)寫(xiě)不進(jìn)去,求大神幫忙看下,謝謝。
proteus仿真 8086 8255,控制字無(wú)法寫(xiě)入
ADF4002無(wú)論如何無(wú)法鎖定
使用Backhaul LDPC IP內(nèi)核無(wú)論如何設(shè)置輸入信號(hào)都不會(huì)變高是為什么?
DMA進(jìn)行數(shù)據(jù)傳輸和CPU進(jìn)行數(shù)據(jù)傳輸?shù)囊蓡?wèn)
visionfive2用sd卡刷debian,無(wú)論如何都無(wú)法啟動(dòng)怎么解決?
使用bmpaddle轉(zhuǎn)換模型時(shí)應(yīng)該如何參數(shù)填寫(xiě)方式
如何更好地進(jìn)行數(shù)據(jù)采集

評(píng)論