ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

UVM 虚拟序列 vsequence 与 vsequencer:SOC 验证的“调度艺术”

UVM 虚拟序列 vsequence 与 vsequencer:SOC 验证的“调度艺术” 从单个 Agent 到多 Agent 协同,需要一位“总指挥”在模块级验证中,一个uvm_sequence运行在对应 Agent 的sequencer上,产生激励,一切顺理成章。但到了 SOC 级验证,系统由 CPU、DMA、IO 等多个子模块组成,每个子模块都有自己的agent和sequencer。测试用例往往需要同时协调多个接口,比如让 CPU 先配置 DMA 寄存器,然后 DMA 启动搬移,同时 IO 持续产生中断。这种情况下,单个 sequencer 上的 sequence 无法控制其他 sequencer,我们急需一个“总指挥”来统一调度。UVM 提供的解决方案就是virtual sequence(虚拟序列)与virtual sequencer(虚拟序列器)的组合。上一节我们初步了解了 vsequencer 作为“调度席”的角色,本节将深入剖析 vsequence 如何利用p_sequencer访问多个 real sequencer,并通过fork/join实现多路激励的并行与协调。重点:vsequence + vsequencer 是 SOC 验证的核心调度机制,掌握它们,你才能从模块级验证顺利过渡到系统级验证。vsequence 与 vsequencer 的配合关系vsequencer:只持句柄,不生产数据uvm_sequencer的子类my_vseqr通常被扩展为 virtual sequencer,它内部包含多个 real sequencer 的句柄,例如m_cpu_sqr、m_dma_sqr、m_io_sqr。它不产生任何 item,也不直接与 driver 交互,它的作用仅仅是提供一个统一的“通讯录”,让 vsequence 能够找到所有需要调度的 real sequencer。class my_vseqr extends uvm_sequencer; cpu_sequencer m_cpu_sqr; dma_sequencer m_dma_sqr; io_sequencer m_io_sqr; `uvm_component_utils(my_vseqr) function new(string name, uvm_component parent); super.new(name, parent); endfunction endclass这些句柄通常由上层环境(env)在connect_phase或build_phase中赋值,指向真实的 sequencer 实例。vsequence:运行在 vsequencer 上的调度员my_vseq是一个普通的uvm_sequence,但它不是直接在某个 real s
返回列表