【UVM学习】sequence篇

sequence

启动

  • 通过uvm_config_db:set default_sequence 来指定启动sequence的sequencer。
  • 通过sequence.start(sequencer)来启动

仲裁机制

多个sequcence指向同一个sequencer 且并行时,sequencer的仲裁算法来确定,通过seqr.set_arbitration(XXX)来设置,有如下集中参数定义:

  • SEQ_ARB_FIFO
  • SEQ_ARB_WEIGHTED
  • SEQ_ARB_RANDOM
  • SEQ_ARB_STRICT_FIFO
  • SEQ_ARB_STRICT_RANDOM
  • SEQ_ARB_USER

锁(支持动态设置)

  • lock:占用
  • grab:优先占用
  • is_relevant:设置失效

系列宏

  • ·uvm_do
  • ·uvm_do_with
  • ·uvm_。。。

sequence 成员变量

sequencer的内置成员变量m_sequencer ,即sequence绑定的sequencer,但是此m_sequencer的类型是uvm_sequencer_base,如果要在sequence中使用其绑定sequencer的属性则需要定义p_sequencer:
`uvm_declare_p_sequencer(my_sequencer)

嵌套sequence

通过·uvm_do_* 可以item,也可以是sequence
可以在sequence中 do多个sequence ,串行或并行控制。

虚拟sequence

只实现sequence-sequencer控制,本身不与driver有关联。
实现多个sequencer之间的控制。

定义v_sequencer,并将实际的sqr在v_sqr中进行例化连接;
定义v_seq,在body函数中·uvm_do_on squence,多个sequence之间的顺序控制,eg:

fork
    ·uvm_do_on(seq0,p_sequencer.p_sqr0

sequence通过uvm_config_db设置或获取配置参数

一般在build_phase中设置和获取参数,先set 后get。

  • 一般在build_phase中set和get:由于UVM的build_phase是按照层次结构从上到下执行的(即父组件先于子组件),因此,在父组件中设置的配置信息可以在子组件的build_phase中被检索。只要保证在子组件尝试检索配置信息之前,父组件或更高层次的组件已经设置了这些信息,就可以确保get方法在set方法之后执行。
  • 如果在task中设置参数,怎样保证先set 后get呢,uvm_config_db提供了wait_modified任务,wait生效后再执行get 即可。

response

  • sequence 中的get_response,driver中 put_response
  • rsp和req的类型可以不同,参见p208

sequence library

将多个sequence注册到一个sequence_library中,seq_lib 相当于一个seq
通过selecion_mode 来控制选择算法,来控制seq_lib中sequcne的选择机制:
UVM_SEQ_LIB_RAND
UVM_SEQ_LIB_RANDC
UVM_SEQ_LIB_ITEM
UVM_SEQ_LIB_USER

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值