在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4304|回复: 9

[求助] uvm sequence 发生错误的crc的包,怎么搭建

[复制链接]
发表于 2016-10-23 13:56:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
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;
 楼主| 发表于 2016-10-23 20:46:38 | 显示全部楼层
????????????
发表于 2016-10-23 22:00:14 | 显示全部楼层
本帖最后由 秦一1994 于 2016-10-23 22:06 编辑

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
 楼主| 发表于 2016-10-23 23:17:31 | 显示全部楼层
回复 3# 秦一1994


   你的意思是在新建一个sequence吗,一个发正确,一个发错误?新手,不太明白。
你说的set_type_override应该放在什么地方,能详细一点吗,谢谢!
发表于 2016-10-24 10:03:25 | 显示全部楼层
回复 4# dyytx


   新建一个packet,在顶层testcase里用override
 楼主| 发表于 2016-10-24 13:44:30 | 显示全部楼层




    你的意思是这样吗?
   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
发表于 2016-10-24 14:47:59 | 显示全部楼层
回复 6# dyytx

   1. 你想发错误的crc包,你只要在randomize侯手动给crc赋值就可以,tr_err.crc = 32'hffffffff; 不用override   2. 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())
 楼主| 发表于 2016-10-24 15:41:50 | 显示全部楼层


回复  dyytx

   1. 你想发错误的crc包,你只要在randomize侯手动给crc赋值就可以,tr_err.crc = 32'hff ...
秦一1994 发表于 2016-10-24 14:47




    感谢你的回答。
   你说的第二条我明白了。第一条还是不太清楚:
  按照我的代码,tr是在sequence里生成的,也在sequence里randomize, 那我可以在testcase顶层再对这个tr的crc赋值吗?比如说
  在test0的main_phase里,seq0.tr.crc=32'hffffffff;那这个crc是计算生成的还是在case里赋的那个错误的呢
发表于 2016-10-24 20:41:26 | 显示全部楼层
回复 8# dyytx

        或者你可以用uvm_config_db配; 用uvm_do_with也可以吧;我说的那个就是随机化之后,有了一个正确的crc,强行赋值不就override了
发表于 2020-11-9 15:50:40 | 显示全部楼层
把uvm_seq_item中的constraint直接设成soft类型的,你写test的时候可以直接写约束外的address或别的,不会报冲突。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-22 09:17 , Processed in 0.026803 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表