SEQUENCE启动问题

sequence启动则会运行其内的pre_body、body和post_body任务
1.可以用uvm_do宏启动事务,实现对事务实例的创建,随机化,并且送给sequencer。属于高度自动化。

2.使用start_item和finish_item的方式产生事务。比较自主可控

3.seq句柄通过start方法指定seqr启动。seq.start(env.agt.seqr,parent,number)

4.config_db的default_sequence的方法。等于是调用start

5.uvm_do_with宏,可指定约束来启动。

6.uvm_do_pri宏,指定启动优先级。uvm_do_on宏指定启动在哪个seqr上

7.设置优先级,env.agt.seqr.set_arbitration(x)
x=SEQ_ARB_FIFO/WEIGHTED/RANDOM/STRICT_FIFO/STRICT_FIFO/USER

8.start和uvm_do的不同在于前者使用对象是sequence,后者对transaction。

9.lock();和unlock()函数可以把seqr锁住只让两函数中间的seq运行。

10.grab()是立刻拿到权限,lock()是当前完成才拿到权限

11.重载is_relevant函数使某个seq失效,放弃权限。与grab和lock的抢权限的行为相反。

12.is_relevant和wait_for_relevant成对出现。前者让seq失效,后者让seq有效。

13.uvm_do可以改成uvm_create+约束+uvm_send或者实例化+uvm_send/uvm_rand_send

14.实例化tr+start_item(tr) finish_item(tr)

15.pre_do -> start_item
mid_do+post_do -> finish_item
start_item + finish_item = uvm_do

### 启动 Sequence 的方法 在 UVM 中,`sequence` 是用于生成 `transaction` 对象并将其发送给 `driver` 进行执行的关键组件。启动 `sequence` 可以通过多种方式进行。 #### 使用 `start()` 方法启动 Sequence 可以直接调用 `sequence` 类中的 `start()` 函数来启动序列。此函数接受两个参数:一个是目标 `sequencer` 的句柄,另一个是可选的任务优先级和其他配置选项[^3]。 ```cpp my_seq.start(my_sequencer); ``` 这段代码展示了如何在一个特定的 `sequencer` 上启动名为 `my_seq` 的序列实例。 #### 利用宏 uvm_do 自动化 Sequence 启动 对于更简洁的方式,在测试平台中可以利用预定义好的宏 `uvm_do` 来简化操作。该宏会自动处理创建、随机化以及启动指定类型的序列对象的过程,并默认关联当前环境下的 `sequencer` 实例。 ```cpp task main_phase(uvm_phase phase); super.main_phase(phase); // ... uvm_do(new my_sequence_type()); endtask : main_phase ``` 上述例子是在某个组件的 `main_phase` 阶段内使用 `uvm_do` 宏来启动一个新的 `my_sequence_type` 序列实例。 #### 设置 Default Sequence 另一种常见的做法是指定一个缺省(default)序列作为当没有任何其他显式启动指令时使用的备用方案。这通常发生在初始化阶段设置好之后,在后续运行过程中如果没有特别指明要启动哪个具体序列,则会采用这个预先设定好的默认值[^1]。 ```cpp class env extends uvm_env; function void build_phase(uvm_phase phase); super.build_phase(phase); set_default_sequence(m_sequencer.get_full_name(), "default_seq"); endfunction : build_phase //... endclass : env ``` 这里展示的是怎样在一个继承自 `uvm_env` 的环境中为某 sequencer (`m_sequencer`) 设立其默认序列名称 ("default_seq")。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值