5.4vseq&vsqr-vsqr的实现与特点

1.vsqr的实现与示例

(1) virtual sequencer派生于uvm_sequencer. 通常情况下, virtual sequencer包含子sequencer的指针;

(2) virtual sequencer不和任何driver联系,并且本身不处理data item;

2.vsqr的特点

(1) virtual sequencer与其他普通sequencer的区别在于virtual sequencer没有指定具体的transaction类型. 因为virtual sequencer会执行多种类型的transaction,这里派生时未指定参数,意味着virtual sequencer会使用uvm_sequence_item的默认参数值.

(2) virtual sequencer只是一个容器,存放指向sub-sequencer的句柄以及一些其他的配置参数.其中,sub-sequencer会在end_of_elaboration_phase()这一阶段被赋值,也可能在其他phase处理.

注: virtual sequence假定virtual sequencer在run_phase阶段之前被合理配置过,它们可以通过p_sequencer句柄访问配置参数.

推荐这些文章:

5.2vseq&vsqr-vseq&vsqr的作用

 注:api_seq,work seq的详细解释可以查看uvm cookbook;
1. 什么情况下使用virtual sequencer?

(1) 只有一个驱动agent,不存在激励协调的需求,不需要virtual sequencer;
(2) 存在多个驱动agent,但多个激励之间没有协调关系, 不需要virtual sequencer;
(3) 存在多个驱动agent,而且多个激励之间存在协调关系,需要virtual sequencer.
 
2. virtual sequencer与virtual sequen...

seq&&seqr&&driver源码分析

在UVM的框架中,我们经常看到sequence的body()函数中,经常有`uvm_do这个宏,其实这个宏里面就包含了跟driver的交互所有细节,本章节就从uvm_do说起。

`uvm_do相关的宏

本质上就是uvm_do_on_pri_with()

uvm_do(args): args可以为sequence也可以为uvm_sequence_item,当args时sequence的时候,也就是https://www.cnblogs.com/xuqing125/p/15909359.html所讲的第三种方式。本章重点来看args是uvm_sequence_item的时候。

cre...

6.6seqr&driver-p_sequencer

1.为什么需要p_sequencer?
(1) 假设启动sequence(类型为my_sequence)所对应sequencer的类型为my_sequencer. 如果在sequence内想要得到my_sequencer中某些变量的值,不能直接使用m_sequencer.
因为m_sequencer是uvm_sequencer_base类型的(uvm_sequencer_base派生于uvm_component),而不是启动sequence所用的sequencer的类型;
(2) my_sequencer(派生于uvm_sequencer)的继承关系图
  &n...

[CU]6.5seqr&driver-m_sequencer

1.m_sequencer
(1) 所有的sequence都有一个m_sequencer句柄.

1 virtual class uvm_sequence #(type REQ=uvm_sequence_item, type RSP=REQ) extends uvm_sequence_base;
2
3 class uvm_sequence_base extends uvm_sequence_item;
4
5 class uvm_sequence_item extends uvm_transaction;
6 ...
7 protected uvm_s...

5.3vseq&vsqr-vseq的构建与启动

1.vseq的构建

1.1 vseq_base
(1) 由于所有的virtual sequence都需要访问定义于virtual sequencer中的sub-sequencer句柄. 所以virtual sequence需要使用`uvm_declare_p_sequencer宏.
(2) 由于每一个virtual sequence都需要执行这些步骤,所以推荐将这部分代码放到virtual sequence base class内.
(3) vseq_base示例

1.2 基于vseq_base创建vseq

 

1.3 vseq示例...

4.1使用rsp-seq & response & response相关部分uvm源码

1.seq对response的使用
(1)sequence机制中不仅提供了sequence->sequencer->driver的数据传输,还可以根据driver对transaction的反应来决定接下来要发送的transaction.
(2) response机制的原理是driver将rsp推送到sequencer,而sequencer内部维持一个队列,当有新的response进入时,就推入此队列. 队列的大小有效,如果driver中处理完每个transaction后,都发送一个response,而sequence中又没能及时get_response, sequenc...

6.7seqr&driver-sqr.stop_sequences() & seq.kill();

补充:下图源于uvm cookbook;

1.sqr.stop_sequences的影响
注:调用sequencer.stop_sequences后,由该sqr启动的sequence的body task虽然没有执行完,但依然会退出该sequence的body task???
确实会这样!!!
2.sqr.stop_sequences源码

 
 
 
 

原文链接:https://www.cnblogs.com/csjt/p/15417106.html...

6.1sqr&driver-sqr简介及其基类

1.sqr简介

 
 

2.sqr基类
2.1 uvm_sequencer_base

(1) start_phase_sequence

 
 
 
 
 
(2) wait_for_item_done

(3) stop_sequences

2.2 uvm_sequencer_param_base #(REQ,RSP)

2.3 uvm_sequencer #(REQ,RSP)
 
 

原文链接:https://www.cnblogs.com/csjt...

6.4seqr&driver-seqr的lock与grab操作

注:该部分内容可参考uvm cookbook进行补充;
1.seqr的lock与grab操作
(1) lock: sequence向sequencer发送一个请求,这个请求与其他sequence发送transaction的请求一同被放入sequencer的仲裁队列中.当前面的所有请求处理完毕, sequencer就开始响应这个lock请求,此后sequencer会一直连续发送此sequence的transaction,直到unlock操作被调用.
注1:从效果上看,调用lock操作后,sequencer的所有权并没有被所有的sequence共享,而是被申请lock操作的sequence独占了...

6.3seqr&driver-seqr的仲裁

1.seqr的仲裁
(1) 当有多个sequence同时在一个sequencer上启动时,所有的sequence都参与仲裁,根据算法决定哪个sequence发送transaction.仲裁算法由sequencer决定.
(2) sequencer在仲裁时,会查看sequence的is_relevant函数的结果.如果为1,则sequence有效,参与仲裁;如果为0,则sequence无效,表示sequence主动放弃sequencer的使用权(可以通过重载is_relevant函数使sequence失效,使sequence主动放弃控制权).
(3) 如果seq...

文章标题:5.4vseq&vsqr-vsqr的实现与特点
文章链接:https://www.dianjilingqu.com/51551.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>