访问寄存器/发送报文使用sequence的另一种方法

UVM验证环境中访问寄存器,通常通过ralf文件生成寄存器模型,然后通过调用write/read函数完成寄存器的读写操作.但是,寄存器比较多,不同模块的开发者编写的nmanager文档格式不统一时,不利于生成ralf文件.
但是,我们又想访问DUT中的寄存器时,一种方法是定义一个sequence,此sequence中包含了需要访问的寄存器地址和相应的变量,然后在body函数中通过调用uvm_do_*系列宏完成对寄存器的访问;那么随着寄存器的增多,body函数中需要添加的寄存器内容就越多,不利于以后的扩展使用。
查阅sequence的源代码可以知道,在使用start或者uvm_config_db设置default sequence时,都会调用body函数,调用函数的顺序如下:
在这里插入图片描述
但是,通过调用start_item/finish_item函数时,不会调用body函数,其调用函数顺序如下:
在这里插入图片描述
参考此函数调用关系,编写wr_reg/rd_reg的task,从而实现通过地址完成对寄存器的读写访问;读写时,首先借助uvm_create宏创建小action,然后在借助uvm_send宏将xaction发送出去;在读取寄存器时,需要注意的是返回的数据在xaction中返回.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在uvm_driver中的处理如下:
在这里插入图片描述
在这里插入图片描述
在经过上边的处理之后,使用时new reg_sequence,然后调用wr_reg和rd_reg便可以完成对应寄存器的访问.

发布了22 篇原创文章 · 获赞 3 · 访问量 762

猜你喜欢

转载自blog.csdn.net/weixin_39662684/article/details/104749051