|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
最近一直在研究RAL模型的各种使用方法。只是想说,UVM里提供的各种寄存器读写的方法实在是太多太多了,无法一一描述,总结了几个最常用的给大家分享一下
read & write(status, value, UVM_FRONTDOOR):
这个是针对于DUT的寄存器进行读写操作,采用的是前门访问,读写完毕以后,会对register model的desired value & mirrored value进行更新
peek & poke(status, value):
这个也是针对于DUT的寄存器进行读写操作,不同的是,peek & poke有点类似于强盗模式,也就是对DUT的寄存器进行强行读写操作,而不管该寄存器是否能够被读写,而且寄存器不会因为这种强盗模式的读写操作进行相关属性的处理。举个栗子~譬如一个WCRS的寄存器,如果是read & write操作以后,会分别对应其寄存器属性进行set & clear操作;但是,如果是peek & poke读写操作以后,其寄存器会被读取当前值 & 写入某一值,但是,不会触发其属性动作,也就是set & clear操作;
update(status, UVM_FRONTDOOR):
这个是针对DUT寄存器的操作。首先是对寄存器模型的desired value & mirrored value进行比较,如果不一致,将把desired value写入mirrored value中,并且,以UVM_FRONTDOOR的模式写入DUT的寄存器中;
mirror(status, UVM_NO_CHECK, UVM_FRONTDOOR):
这个是针对寄存器模型的操作。首先是对DUT的寄存器值 & mirrored value 进行比较,如果不一致,也不会进行error提示,以为设置了UVM_NO_CHECK;然后,把DUT寄存器的值以UVM_FRONTDORR的模式写入寄存器模型中的desired value & mirrored value。
才疏学浅,有错的话希望指出,谢谢~ |
|