[SV]等待32个instance的某一个信号的pulse,该怎么写?
等待32个instance的某一个信号的pulse,该怎么写?
再要:在 UVM (Universal Verification Methodology) 验证环境中,如果需要等待位于 32 个不同层次 (hierarchy) 的 某个pulse 信号,且这些层次路径有规律(通过 index 区分),同时 pulse 产生的顺序是随机的,可以通过 SystemVerilog 的动态特性(如字符串拼接和 fork-join
并行进程)以及 UVM 的任务调度机制来实现。以下详细解释实现思路,并提供完整的代码示例。
1. 实现思路
1.1 问题分析
- 32 个不同层次的 pulse 信号:假设 pulse 信号位于 DUT 的不同层次路径中,路径有规律,例如
tb_top.dut.module_inst[0].pulse
到tb_top.dut.module_inst[31].pulse
,可以通过 index 动态生成路径。 - pulse 顺序随机:32 个 pulse 信号的触发顺序不确定,需要并行等待所有 pulse 信号,确保无论哪个 pulse 先触发都能被捕获。
- UVM 环境:需要在 UVM 组件(如 Monitor)中实现等待逻辑,并将捕获的 pulse 事件通知到其他组件(如 Scoreboard)进行后续检查。