1.SystemVerilog对重载的支持
SystemVerilog是一种面向对象的语言。面向对象语言都有一大特征:重载。当在父类中定义一个函数/任务时,如果将其设置为virtual类型,那么就可以在子类中重载这个函数或任务。
重载的最大优势是使得一个子类的指针以父类的类型传递时,其表现的行为依然是子类的行为。
2.对约束的重载
在测试一个DUT时,当有多种异常情况需要测试。针对这些错误,在transaction中分别加入标志位,这些错误都是异常的情况,在大部分测试用例中,它们的值都应该为0,如果在每次产生transaction时进行约束会非常麻烦。
要解决上述问题,有两种解决方案:
1.是在定义transaction时,使用如下方式定义constraint:
class my_transcation extends uvm_sequence_item;
...
constranint crc_err_cons{
crc_err == 1'b0;
}
constraint sfd_err_cons{
sfd_err == 1'b0;
}
constaint pre_err_cons{
pre_err == 1'b0;
}
endclass
1.在正常的测试用例中,使用如下方式随机化
my_transaction tr;
`uvm_do(tr)
2.在异常的测试用例中,使用如下方式随机化的前期是m_trans已经实例化,如果不实例化会报空指针的错误
virtual task body();
m_trans = new();
`uvm_info("sequence", "turn off constraint", UVM_MEDIUM)
m_trans.crc_err_cons.constraint_mode(0); 关闭约束
`uvm_rand_send_with(m_trans, {
crc_err dist {
0
9715



&spm=1001.2101.3001.12003&articleId=124202499&d=1&t=3&u=1765bedb279747979dab94ae464f7239)

被折叠的 条评论
为什么被折叠?



