日常记录(48)回顾uvm_sequence的函数、seq中的randc、uvm_config_db
1
uvm_sequence的函数
uvm_sequence_item相当于一个pkt,seq用于随机化该pkt等。sqr用于发送。
另外uvm_do不仅可以发送item,也可以发送seq。seq支持嵌套。
start_phase
start_phase常常存在seq的task body中,它是在正确得到sqr后,指向sqr某一个phase。而seq不是comp,它没有phase。
一般在raise和drop对于seq时候,可以创建基类base_seq extends uvm_seq,然后在uvm_seq中设计pre_start、post_start。
后面的seq继承该base_seq后就不用写了。注意base_seq中不仅需要判断一下start_phase不为null,也需要判断get_parent_sequence()为null,否则中间的继承类也raise就重复了。
sqr与drv的通信流
seq创建req,
seq执行start_item-> sqr.wait_for_grant;sqr.begin_tr(req)
seq中的req执行randomize,
seq执行finish_item->sqr.send_request, sqr.wait_for_item_done, sqr.end_tr(req)
其中的sqr.send_request,执行到drv的forever语句,获取req,发送给dut,执行item_done,给sqr.wait_for_item_done
seq中的randc
因为每次实例化,所以不能用uvm_do了,需要手动实现。
首先创建req,然后在循环中,注意重新生成一个新的req_copy用于开辟新空间,然后发送。
函数
seq乱序端口
乱序drv
组件信息查询
查询层次关系
uvm_resource_db与uvm_config_db
都可操作全局资源池,但是前者用于全局配置后者用于对comp配置。
不看最后一行的read_by_type
dump所有的uvm_resource_db操作可以用uvm_resources.dump_get_records()函数
uvm_resources.find_unused_resources查询没有使用的资源。
执行simv时候,使用-l simv.log可以将log写入文件。
Le vent se lève! . . . il faut tenter de vivre!
Le vent se lève! . . . il faut tenter de vivre!