reg model使用篇-register seq(包含uvm内建register sequences)
资料来源:
(1) 《uvm cookbook》
1. register seq
1.1 register check seq
(1) reset test:根据get_reset方法获取reset值,并调用register.read方法获取read value,比较reset值和read value;
(2) write/read test: 随机write data,并调用register.write进行register写操作; 然后打乱register句柄队列,使用get方法获取register的镜像值,接着调用register.read,对比读操作返回值与镜像值;
(3) peek/poke test:与write/read test类似,不过使用的是backdoor access;
1.2 register seq using mirror
(1) mirror操作会引起读访问,会对register model中的镜像值进行更新,但不会返回read data;
(2) mirror操作可以用于register model与硬件状态的再同步;
(3) mirror操作可以和predict操作一起执行,用于检测register的读返回值与期望值是否匹配;只需在调用mirror操作时,将check field设置为UVM_CHECK; 如果check_field是默认值,mirror操作仅仅发起bus read cycle,并且导致external predictor更新mirror值,而不会进行检测;
1.3 built-in register seq
(1) 可以通过resource_db机制进行设置,当执行built-in register seq时,跳过对某个register的测试;
注1:由于uvm_reg_block和uvm_reg均是uvm_object类,而不是uvm_component类,所以可以使用uvm_resource_db来进行设置;
2. 寄存器测试seq示例
2.1 register check seq示例
(1) spi_bus_base_seq中的get_full_name属于uvm_object内的get_full_name,uvm_sequence_item中进行了get_full_name的override;
2.2 register seq using mirror示例
2.3 built-in register seq示例