uvm通信-seq与uvc的交互/通信

参考资料

(1) 公众号-杰瑞IC验证;

1. 以sequencer/p_sequencer作为seq与其他uvc沟通的桥梁;

注:p_sequencer也是seq内调用agent中函数的桥梁,通过p_sequencer机制+get_parent()“两步跳跃法”,先获取到seq对应的sequencer,然后通过sequencer.get_parent函数得到UVM树中当前实例的parent,即agent;

2. 直接在seq内获取要交互的uvc的hierarchy

(1) 需要在seq的pkg内include uvc的相关pkg;

(2) 采用uvm_root的find方法以及components例化名,获取uvc的handle.

补充:uvm_root.find/find_all的介绍

find/find_all的源码如下:

3.借助config_db机制

3.1 在sequence中获取参数

(1) 能够调用config_db::get的前提是已经进行了设置;

(2) sequence本身是uvm_object,不能像uvm_component那样出现在UVM树中,在进行config_db::set时很难确定其第二个路径参数;

注1:使用default_sequence启动的sequence的名字是未知的;

 

注1:也可使用get_sequencer()函数代替get_full_name(),即uvm_config_db#(int)::get(get_sequencer(), "", "count", count);

(3)其实也可以换个角度,依然是采用sequencer作为桥梁,set时将要传递给sequence的参数传递给sequencer(注意get_sequencer的使用);

3.2 在sequence中设置参数

(1) sequence除了向component中传递参数,也可以向sequence传递参数;

注1:上图中sequence向自己传递了一个参数-first_start;

注2:如果该sequence在virtual sequence中被启动,其get_full_name的结果应该是uvm_test_top.v_sqr.*,而不是uvm_test_top.env0.i_agt.sqr.*;

3.3 sequence或uvc内get参数注意事项

(1) get参数的前提是参数已经被设置过,而当设置一个参数的时候,其时间往往是不固定的; 这种情况下,需要借助wait_modified task;

(2) wait_modfied task有三个参数,与config_db::get的前三个参数完全一样,当它检测到第三个参数的值被更新过后,它就返回,否则一直等在那里;

(3) 可以在component和sequence中调用wait_modified任务;

 

 

 

 

 

 

 

 

posted on   知北游。。  阅读(1087)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示