用api的方式来构建sequence的框架思路梳理

1. 从spec中提取要包成transaction的信息。举例来讲对于i2c协议是addr,data,length等等参数。

2.这些信息整合后包成transaction,这便是sequence与driver连接的中介,transaction。因为sequence需要给driver提供多种多样的transaction并且需要不同的sequencer来转发。所以会有第二层结构,针对sequence需要发送的不同transaction,整合成一个个待发的不同的item。

这个层次可称为seuqence的base sequence。

所有的sequence都通过调用此sequence来实现自己想要的item。它的内部主要部分有:

      1.不同的所有sequence需要用到的功能可以包成公共的task。如,读,写等操作。记得加上virtual关键字作为基类函数。

      2.不同的cmd也可以包成共用的task。同样为了方便继承以及扩展可以加virtual关键字

       3.此层在body中实现每种item的准备工作,用start_item(tr); tr.randomize(); finish_item(tr); 的模式来准备item。

       4. sequence中参数的传递举例。 

               class abc extends uvm_sequence_base;

                    rand bit        a;

                    rand bit[2:0]  b;

                    rand bit[1:0]  c;

                    

                  virtual function send_tr( bit a);

                      this.a=a;

                 endfunction 

                  

                  task body();

                       transaction tr;

                       tr=transaction::type_id::create("tr");

                        tr.a=this.a;

                  endtask         

              endclass

                 

               

3.item选定sequencer再发送给driver的过程通过每个sequence来实现。每个sequence中在item发送前都会选择sequencer用。用item.start(sequencer)的方式来启动每个item.每个sequence中对自己需要的参数进行constraint,互不影响。公共的constraint放在basic sequence里面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值