这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 电源与模拟 » 寄存器模型中的Mirroring

共1条 1/1 1 跳转至

寄存器模型中的Mirroring

高工
2023-08-23 09:19:12     打赏

寄存器模型保持着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镜像将是一个ROM或RAM内存模型,所以可以通过提供对内存模型的后门访问来取代。因此,使用uvm_mem::peek()或uvm_mem::poke()方法提供与memory镜像完全相同的功能。此外,与基于观察到的读写操作的寄存器镜像不同,使用后门访问的memory镜像总是返回或设置DUT中一个内存位置的实际值。





关键词: 寄存器     Mirroring     模型    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]