随机类内部随机类成员不能randomize的问题
时间:10-02
整理:3721RD
点击:
legacy 的code, 遇到问题,不知道该如何解决,恳请各位大牛看看,谢谢!
class B extends uvm_object;
rand int ...
rand bit ...
endclass
class C extends uvm_object;
rand int ...
rand bit ...
endclass
class A extends uvm_object;
rand B m_b;
rand C m_c;
rand int ....
.....
endclass
testcase
rand A m_a;
现在的问题是,当我在testcase里面assert m_a.randomize() with {} 的时候,m_b不能被randomize,而m_c可以。但是在m_a.post_randomize()里面却可以单独assert m_b.randomze()....这是为什么呢?VCS没有报告任何constratin()的冲突。就是m_b.xxx都是0.没有随机值。
class B extends uvm_object;
rand int ...
rand bit ...
endclass
class C extends uvm_object;
rand int ...
rand bit ...
endclass
class A extends uvm_object;
rand B m_b;
rand C m_c;
rand int ....
.....
endclass
testcase
rand A m_a;
现在的问题是,当我在testcase里面assert m_a.randomize() with {} 的时候,m_b不能被randomize,而m_c可以。但是在m_a.post_randomize()里面却可以单独assert m_b.randomze()....这是为什么呢?VCS没有报告任何constratin()的冲突。就是m_b.xxx都是0.没有随机值。
自己做实验不就知道了。
这样的代码恐怕别人很难重现你的现象
代码信息量太小,至少看不错为什么m_b不能而m_c能随机。
难发现原因,就是因为code太多,无法贴出来,要好几屏。也很难debug。有什么方法可以追踪内嵌randomize函数里面的行为?
这种用法在做cfg的类很常见。想确认一下有没有在new函数或者pre_randomize函数中对m_b和m_c进行create或new。
在 A 的 new()里面,create的m_b和m_c。
你自己说过constraint里可以加$display的吧
那就有点奇怪了,可以试试gui的方式进行debug,直接加入watch列表试试,看来是不是都是可以随机的。
谢谢回复。主要 非in line randomize,无法设置断点啊。一闪而过。
是的,因为有一个constraint里面有条display语句,被执行了,在那个可以被randomize的类成员里面。因为项目催的紧。不得不采用外面inline randomize()的方式,先work round过去了。以后有时间再看看能否debug吧。关键问题还是无法直接debug randomize()这个内嵌函数。
单步调试不行的,我之前说过。你先把inline删掉看能不能正常工作。