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
相关推荐
Ether IC Verifier15 小时前
SystemVerilog 数据类型详解
php·systemverilog·uvm·ic验证
Ether IC Verifier5 天前
IC 验证工程师新手入门指南
systemverilog·ic验证·dpu
暴风雨中的白杨8 天前
cocotb环境安装
ic验证·cocotb
不会武功的火柴10 天前
SystemVerilog语法(8)-有限状态机(FSM)
嵌入式硬件·fpga开发·自动化·ic验证·rtl·uvm方法学
不会武功的火柴11 天前
SystemVerilog语法(7)-接口(interface)
嵌入式硬件·fpga开发·仿真·ic验证·rtl
不会武功的火柴19 天前
ModelSim入门实战(三): 批处理一键仿真与波形调试
嵌入式硬件·fpga·仿真·modelsim·ic验证·rtl
xwz_new24 天前
浅谈NOC
ic验证
xwz_new24 天前
浅谈SOC
ic验证
xwz_new1 个月前
SystemVerilog之每日一问
ic验证
xwz_new1 个月前
数字芯片验证工具之Mac安装Icarus Verily+ GTKWave+VScode(免费)
macos·ic验证