微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > uvm sequence 发生错误的crc的包,怎么搭建

uvm sequence 发生错误的crc的包,怎么搭建

时间:10-02 整理:3721RD 点击:
class tran extends uvm_sequence_item;
rand [7:0] data[];
rand [31:0] crc;
extern function void calc();//计算data的crc
endclass

class sequence0 extends uvm_sequence;
task body();
trans tr;
tr=new();
start_item(tr);
tr.randomize();
tr.calc;
finish_item(tr);
endtask
endclass
class test0 extends base_test;
sequence0 seq0;
.......

endcalss
如果我想发送一个crc错误的包,有哪些方法?在test0里可以直接赋一个错误的crc吗?比如seq0.tr.crc=32'hffffffff;

?

1. 你可以在你的packet里用constraint给crc赋错误值,然后把tr.calc这句删了
2.`uvm_do_with(req, req.crc=32'hffffffff)
3. 在你现有代码改,把tr.calc删掉,直接tr.crc=32'hffffffff4. 写一个错误的packet,然后用set_type_override_by_type 把正常的pakcet override成错误的packet

你的意思是在新建一个sequence吗,一个发正确,一个发错误?新手,不太明白。
你说的set_type_override应该放在什么地方,能详细一点吗,谢谢!

新建一个packet,在顶层testcase里用override

你的意思是这样吗?
class tes_case0 extends base_test;
task build_phase(uvm_phase)
trans tr_err;
tr_errr.randomize with(crc=32'hffffffff);
set_type_overdide.....
endtask
endclass

1. 你想发错误的crc包,你只要在randomize侯手动给crc赋值就可以,tr_err.crc = 32'hffffffff; 不用override2. override的意思是 你新建一个trans_err的类,extends trans,里面加上constraint crc_err {crc == 32'hffffffff}; 然后,在顶层testcase里set_inst_override_by_type("env.i_agent*.seqr.*", trans::get_type(), trans_err::get_type())

感谢你的回答。
你说的第二条我明白了。第一条还是不太清楚:
按照我的代码,tr是在sequence里生成的,也在sequence里randomize, 那我可以在testcase顶层再对这个tr的crc赋值吗?比如说
在test0的main_phase里,seq0.tr.crc=32'hffffffff;那这个crc是计算生成的还是在case里赋的那个错误的呢

或者你可以用uvm_config_db配; 用uvm_do_with也可以吧;我说的那个就是随机化之后,有了一个正确的crc,强行赋值不就override了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top