2014-10-30 2 views
3

Я работаю с пакетом vr_ad для e. Я определил регистр my_reg в vr_ad_reg_file my_reg_file:Specman UVM: В чем разница между доступом к регистру напрямую и использованием read_reg_val()?

reg_def MY_REG MY_REG_FILE 20'h00018 { 
    reg_fld my_reg_field  : uint (bits : 32) : RW : 0x0; 
}; 

Я хотел бы получить доступ к значению регистра. Какая разница (если таковая имеется) между доступа к регистру непосредственно:

some_var = my_reg_file.my_reg.my_reg_field; 

и доступа к регистру, используя read_reg_val():

some_var = my_reg_file.my_reg.read_reg_val(); 

Спасибо за вашу помощь.

ответ

2

В вашем случае, поскольку ваш регистр имеет только одно поле, его нет. Но чтобы понять немного глубже, давайте рассмотрим случай, когда ваш реестр были определены следующим образом:

reg_def MY_REG MY_REG_FILE 20'h00018 { 
    reg_fld my_reg_field  : uint (bits : 32) : W : 0x0; 
}; 

Обратите внимание, я сделал поле только для записи. Скажем, ваше поле обновляется со значением 0x1010_1010.

Вызов my_reg.my_reg_field вернет эту стоимость, 0x1010_1010.

Метод read_reg_val() возвращает значение, которое вы получите при чтении доступа к этому регистру. В этом случае, поскольку поле не читается, вы получите 0x0000_0000 (это значение настраивается, но по умолчанию это значение сброса).

Существует также метод read_reg_rawval(), который возвращает значение, которое хранится в регистре (т. Е. Игнорирует политики доступа полей). В нашем случае он вернет значение, сохраненное в поле, 0x1010_1010.

read_reg_val() и read_reg_rawval() полезны, если у вас есть несколько полей, объявленных в регистре, потому что эти методы будут упаковывать значения всех из них и возвращать скалярное значение (типа vr_ad_data_t).

Смежные вопросы