UVM interface clocking 用法

1:知识背景转载自[彩虹糖带你入门UVM] 第1节 验证组件之接口_信号 (sohu.com)icon-default.png?t=L892https://www.sohu.com/a/291199851_778637

2:问题描述:在现有testbeach的环境中,原有的a.if中定义了 名为cb的clocking,然后在monitor中,先wait到cb.en有效,再打4拍再去采集cb上的信号,方式为@(posedge vif.clk);采集来的cb.dbgquasel信号计算会得到BUS信号,因此,monitor会在repeat(1) @(vif.mon_mp.cb)打一拍之后,再去采集BUS信号用于scoreboard作比对;但是,错误原因是,第一次采集的cb.dbgquasel是和vif上一样的数据,repeat之后,数值仍不变,也就是说一直是先一拍的数据;测试规避了该问题点之后,在下一次采集数据过程中,cb.dbgquasel就可以早于vif.dbgquasel,也就是说没有问题;

3:测试过程中,尝试改变repeat(1) @(vif.mon_mp.cb)到repeat(1) @(vif.clk),没有成功;最终,由于始终是第一笔数据采样的问题,借用这张图

UVM interface clocking 用法_第1张图片

 猜想是进入采样时间不太对,将@(posedge vif.clk)方式打4拍改成了repeat(1) @(vif.mon_mp.cb),就解决了该问题;由此总结发现,理论上cb的时钟是晚于vif.clk的,经由vif.clk打了4拍,使得采样点提前进入了第五个clk,repeat(1)之后 ,仍旧是该数值;改成cb.clk之后,在第四个clk进入采样,repeat之后,数值发生变化

 

你可能感兴趣的:(基础知识,经验分享)