UVM实战 在sequence中使用config_db

sequence本身·是一个·uvm_object,它无法出现在uvm树中,很难对其进行设置第二个函数,其使用config_db::get函数得到参数最大的障碍就是路径问题

使用get_full_name()可以得到一个component的完整路径,可以在sequence的body中调用此函数,会出现:uvm_test_top.env.i_agt.sqr.case0_sequence   sequencer的路径+实例化sequence传递的名字

如果实例化时名字不固定,那么使用通配符*

在get原型函数中,第一个参数必须是component,sequence不是component,所以这里不能使用this指针,只能用nuluvm_root::get()

uvm_config_db#(int)::get(null,get_full_name(),count,count)—可以完整得到sequence的路径

cmp_en 参数决定是否对transaction进行检查

scoreboard是在build_phase中调用get函数,调用的前提时参数已经被设置过了

wait_modified的参数与config_db::get的前三个参数完全一样,当它检查到第三个参数的值被更新过后,它就返回,否则一直等待在那里,其与main_phase中的其他进程在同一时刻被fork起来,当检查到参数值被设置过后,立刻调用config_db::get得到新的参数

sequence→sequencer→driver

sed_id_info函数是将req的id等信息复制到rsp中,可能存在多个sequence在同一个sequencer上启动的情况,只有设置了rsp的id信息,sequencer才能知道将responce返回给哪个sequence

通常一个transaction对应一个response,但是事实是uvm也支持一个transaction对应多个response,但是需要多次调用get_response和put_response,此时由于一个transaction只有一个item_done,因此使用多次item_done(rsp)是会出错的

sequencer中有一个队列,其大小为8,driver将rsp推送给sequencer,当队列中有8个response时,driver在向其中推送新的response,uvm给出错误提示

在sequence中启动get_sequence进程会阻塞在那里,直到response_quence中被放入新的记录,如果driver能够马上将response通过put_response的方式传回response,那么sequence被阻塞的进程会得到释放,但如果driver需要延时一段时间才能将tranction传回,同时sequence能够继续传transaction到driver,由于sequence被阻塞了,根本不可能发出新的transaction。其原因由于sequence发送transaction与get_response在同一个进程中执行的,使用response_handler将二者分离开来,在不同的进程运行得到不同的结果。

response与req的类型基本相同,但uvm也支持它们不同

'uvm_add_to_seq_lib(seq0,simple_seq_library)第一个是此sequence的名字,第二个是要加入的sequence library的名字,一个sequence可以加入多个不同的sequence library

sequence library在定义后如果没有其他sequence注册其中,是没有任何意义的

可以将sequence libraray作为sequencer的default sequence ,uvm会随机选择几个,并启动它们

UVM_SEQ_LIB_RAND是完全的随机,UVM_SEQ_LIB_RANDC是将加入的sequence随机排一个顺序,按此顺序执行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值