UVM重点归纳:config机制和消息机制调用

嵌入式技术

1368人已加入

描述

config机制    

在SV的世界里,只有当所有的环境后才准备好,如果想要在顶层环境对底层环境做配置时,需要通过句柄进行一层一层的传递,这要很不利于软件的封装复用,而且极容易出错;

在uvm中,config机制的出现,彻底改善了以上的弊端,通过uvm_cinfig_db #(T)::set()和uvm_cinfig_db #(T)::get()的配对使用,可以在环境构建前从顶层直接对任意底层进行配置,传递的对象可以是virtual interface,单一变量,对象。

范式:

uvm_config_db #(T)::set(uvm_component cntxt,string inst_name,string field_name,T value);
uvm_config_db #(T)::get(uvm_component cntxt,string inst_name,string field_name,T value)

实例:

uvm_config_db#(virtual intf)::get(),"uvm_test_top.c1","vif",intf);

get方法中的前两个参数构成了从顶层到配置层的路径,第三个参数是类中的变量,最后一个参数是传递的数值

uvm_config_db #(virtual intf)::get(this," ","vif",vif);

set方法中的前两个参数一般都是以上形式,因为是当前层,第三个,第四个参数分别表示变量和值;

环境结构层次如下:

config

使用config机制特别需要注意:

1.set/get的路径一定要一致;

2.传递的参数一定要一致;

3.一定是先set后get; 

关于set/get方法的一些后台操作理解:

1.set的路径和数据实际上被放置到uvm_pkt唯一的全局变量uvm_pkt::resources中;

uvm_resources是uvm_resource_pool的唯一实例,在该实例中有两个resource数组来存放配置子信息,一个由层次索引,一个由类型索引;

2.get方法被调用后回自动到uvm_resources中按照路径寻找值,如果可以找到,则返回1,找不到返回0。

 消息机制    

一个好的验证环境的搭建离不开信息报告的打印,在UVM中由专门的一套信息机制,提供了一系列丰富的类和方法来生成和过滤消息;

范式:

方法调用:

function void uvm_report_info(string id,string message,int verbosity= UVM_LOW,string filename="",int line=0);

宏调用:

uvm_info(ID,MESSAGE,VERBOSITY)

string id:消息ID

string message:消息内容;

int verbosity:冗余度,有UVM_NONE/LOW/MEDIUM/HIGH/FULL/DEBUG

string filename:文件名(不做定义,系统自己打印)

int line: 行号(不做定义,系统自己打印)

消息管理是由uvm_report_handler类来实现的,而每一个uvm_report_object类中都有一个 uvm_report_handler实例,不管是上边的方法调用还是宏调用,都是针对uvm_report_ handler做出的配置。

编辑:黄飞

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分