| ||
因此,在顶层env中在对寄存器模型完成了build以后,我们还可以创建my_vreg_frontdoor_sequence,并且通过指定regmodel.bus.reg0.set_frontdoor(frontdoor)来指定在访问该sequence时,需采取专用的frontdoor sequence完成寄存器访问。
这种用户自定义的前门访问方式,作为传统的register model + adapter + bus sequencer方式的补充,使得面对更为复杂的寄存器访问时,我们依然可以灵活应对。
自定义后门访问序列
对于常用的后门访问,套路也已经为路粉们熟知了吧(不懂就去看红宝书喽),不过资深一点的verifier都知道,这种方法也主要是应对访问寄存器的,因为寄存器往往由reg类型(Verilog)来实现,容易做到HDL路径的映射。然而对于存储可不太一样,这是由于我们无法针对存储中的每一个地址都做到映射(会累死的吧)。不过考虑到大部分的存储模型都是一些reg数组,我们只需要做一些从访问地址到DUT存储模型数组索引的映射,再配合自定义后门访问序列就可以解决这个头疼的问题。
从下面的代码可以看到,通过自定义后门访问序列,结合UVM DPI函数uvm_hdl_deposit/uvm_hdl_read,实现了内存模型的批量读写(for loop提供)。
除了上面路桑谈到的这两个与大家接下来可能相关的寄存器模型使用方法以外,该论文还有一些其它的有趣应用,例如uvm_reg_callback用来对一些特殊的寄存器访问做读写前后的处理。如果这篇论文正说中了你现在面临的问题,你可以到路科验证的官网资源页中去下载,或者点击左下角阅读原文。
http://rockeric.com/resource/paper/