请教一个uvm_do_with的问题
时间:10-02
整理:3721RD
点击:
在一个sequence中,用config_db的方式得到了一个参数,暂且叫cmd_type,现在想把这个参数用于uvm_do_with,于是这样写
`uvm_do_with(trans, {trans.cmd_type == cmd_type;}),结果发现发出的trans中cmd_type的值并不是传递进来的值嘛。
请教各位大神,这是什么原因呢?如果这样写不行的话,应该怎么做呢
不甚感谢!
`uvm_do_with(trans, {trans.cmd_type == cmd_type;}),结果发现发出的trans中cmd_type的值并不是传递进来的值嘛。
请教各位大神,这是什么原因呢?如果这样写不行的话,应该怎么做呢
不甚感谢!
sv上下文问题。
习惯不好,cmd_type换个名字,trans.a == b;不要trans.a == a;这样的形式
路过 不能够同名
学习了!谢谢
这个问题的根本原因是,在uvm_do_with(trans,{trans.cmd_type == cmd_type})中,uvm优先搜索的域是在trans中搜索cmd_type, 所以换句话说,这个约束是一个无效约束,这句话等同于uvm_do_with(trans,{trans.cmd_type == trans.cmd_type}),这是一个恒成立的问题,所以压根就没有对cmd_type做出约束。因此,如果要有效约束,应该将cmd_type的名字换成另外一个,譬如这样写uvm_do_with(trans,{trans.cmd_type == cmd_type_val}),然后在tran的域中搜不到cmd_type_val这个变量值,然后在从外边得到这个变量值,从而实现有效约束
之前也犯过类似的错误。
写成这样就好了:`uvm_do_with(trans, {trans.cmd_type == local::cmd_type;})