日常记录(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写入文件。

 

posted @ 2022-01-25 20:06  大浪淘沙、  阅读(321)  评论(0)    收藏  举报