基于DUT内部寄存器值的镜像

描述

寄存器模型保持着DUT内部寄存器值的镜像(mirror)

镜像值不能保证是正确的,因为寄存器模型只能感知到对这些寄存器的外部读写操作。

如果DUT内部修改了寄存器中的字段,镜像值就会过时(outdated)

寄存器模型可以通过使用uvm_reg_field::mirror(), uvm_reg::mirror(), 或uvm_reg_block::mirror()方法将一个寄存器的镜像值更新为存储在DUT中的值。

更新寄存器中某个字段的镜像也会同时更新同一寄存器中所有其他字段的镜像。更新一个block的镜像会更新它包含的所有寄存器和字段的镜像。

如果使用前门访问,更新一个大block的镜像可能需要大量的仿真时间;而使用后门访问更新不需要消耗仿真时间。

可以通过使用uvm_reg_field::set()uvm_reg::set()方法在不消耗仿真时间向寄存器模型中的写入镜像值,这个镜像值不会反应到DUT中相应字段或寄存器

可以通过使用uvm_reg::update()uvm_reg_block::update()方法更新DUT的寄存器以匹配镜像值。如果新的镜像值与旧的镜像值相匹配,寄存器就不会被更新,从而节省不必要的总线访问。

要想不消耗仿真时间访问一个field或register的当前镜像值,可以使用 uvm_reg_field::get()uvm_reg::get()方法。

Memories是没有镜像的 

Memories比较大,所以通常使用稀疏阵列的方法来建模。只有被写入的位置才会被存储起来,然后再读回来。任何未使用的内存位置都不会被建模。

与寄存器不同,memory的行为非常简单,memory镜像将是一个ROMRAM内存模型,所以可以通过提供对内存模型的后门访问来取代。因此,使用uvm_mem::peek()uvm_mem::poke()方法提供与memory镜像完全相同的功能。此外,与基于观察到的读写操作的寄存器镜像不同,使用后门访问的memory镜像总是返回或设置DUT中一个内存位置的实际值

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分