UVM之sequencer

1.UVM Sequencer含义

Sequencer 就是 sequence 和 driver 间的 "交通枢纽 "。

在 UVM 里:

  • Sequence:负责产生激励(发什么数据、怎么发)
  • Driver:负责把激励转成时序信号(驱动 DUT 接口)

2.作用

sequence与driver两者不能直接通信,必须通过 Sequencer 中转。Sequencer作用:

  1. 接收来自 Sequence 的 transaction;响应 Driver 请求,把 transaction 交给 Driver

//TLM 通信通道

//Driver 通过 seq_item_port

//Sequencer 提供 seq_item_export

//两者通过 connect() 连上:

driver.seq_item_port.connect(sequencer.seq_item_export);

  1. 缓存、排队、调度
  • 多个 sequence 同时发激励
  • Sequencer 负责:优先级、抢占、锁定、仲裁
  • 保证 Driver 一次只拿到一个 transaction
  1. 提供上下文环境
    Sequencer 里可以放:config 对象;寄存器模型;事件、旗语;virtual sequencer 里的其他子 sequencer:sequence 可通过 p_sequencer 访问。
  2. Virtual Sequencer(高级功能)
    当有多个总线(AXI、UART、I2C)时:每个总线有自己的 sequencer,顶层一个 virtual sequencer 把它们全部挂在一起,virtual sequence 统一调度

3.使用场景

//driver主动请求

seq_item_port.get_next_item(tr); // Driver 向 Sequencer 要 transaction
//sequence发送

start_item(tr);

finish_item(tr); // Sequence 通过 Sequencer 发给 Driver
//Sequencer定义,uvm_sequencer #(TR) → 内置了 TLM 端口、队列、调度机制

class my_sequencer extends uvm_sequencer #(my_transaction);

`uvm_component_utils(my_sequencer)

function new(string name, uvm_component parent);

super.new(name, parent);

endfunction

endclass

4.m_sequencer /p_sequencer 关系

m_sequencer:sequence 内部指向 sequencer 的基类句柄

p_sequencer:指向真实类型的子类句柄(uvm_declare_p_sequencer)

本质都是指向同一个 Sequencer 实例,只是类型不同。

  • uvm_declare_p_sequencer = 强转 sequencer 指针
  • p_sequencer = 你自己的 sequencer,能访问所有成员
  • 没有这个宏,你在 sequence 里拿不到 config/reg_model
相关推荐
xwz_new4 小时前
Verilog之常见时钟分频
ic验证
xwz_new1 天前
system verilog之$cast
ic验证
xwz_new6 天前
数字芯片验证技能树概述(一)
ic验证
不会武功的火柴4 个月前
UVM验证入门(18)-Callback机制
systemverilog·ic验证·uvm方法学
愤怒学习的白菜4 个月前
0 trivial:UVM的空壳平台
学习·uvm·ic验证
不会武功的火柴4 个月前
UVM验证入门(15)-uvm_agent代理
systemverilog·ic验证·uvm方法学
SuperGQB8 个月前
UVM验证(三)—UVM机制(1)
systemverilog·ic验证·uvm方法
-interface1 年前
25届数字IC验证秋招总结
秋招·uvm·ic验证
lj想拿50w1 年前
脚本学习(1)验证目录自动化生成脚本
python·脚本·ic验证