uvm实战学习笔记Word格式.docx

上传人:b****2 文档编号:15286385 上传时间:2022-10-29 格式:DOCX 页数:16 大小:105.19KB
下载 相关 举报
uvm实战学习笔记Word格式.docx_第1页
第1页 / 共16页
uvm实战学习笔记Word格式.docx_第2页
第2页 / 共16页
uvm实战学习笔记Word格式.docx_第3页
第3页 / 共16页
uvm实战学习笔记Word格式.docx_第4页
第4页 / 共16页
uvm实战学习笔记Word格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

uvm实战学习笔记Word格式.docx

《uvm实战学习笔记Word格式.docx》由会员分享,可在线阅读,更多相关《uvm实战学习笔记Word格式.docx(16页珍藏版)》请在冰豆网上搜索。

uvm实战学习笔记Word格式.docx

uvm_sequencer也是代

码里必须有的,所以我加了uvm_sequencer

uvm_void是一个空的虚类。

在src/base/中定义:

红框的是我们搭testbench的时候用的比较多的基类。

常用的uvm_object派生类:

sequencer给driver的transaction要派生自uvm_sequence_item,不要派生自uvm_transaction

所有的sequenee要派生自uvm_sequenee或者uvm_sequenee的派生类,可以理解为sequenee是

sequence_item的组合(集合)。

driver向sequencer索要item,sequencer检查是否有sequenee要发送

item,当发现有item待发送时,就把这个item发给driver.

常用的uvm_component派生类:

所有的driver要派生自uvm_driver.driver用来把sequence_item中的信息驱动到DUT端口上,从transaction-level向signal-level的转换。

uvm_driver需要参数(REQRSP,比uvm_component增加了几个成员。

重要的是seq_item_port和口req/rsp.(src/comps/)

monitor/scoreboard派生自uvm_monitor和口uvm_scoreboard,但是uvm_monitor和口uvm_scoreboard并没有在uvm_component基础上做扩展。

src/comps/

virtual匚LLvm_monLtoreKtendelvm_cornponent

Functinntwu

//Andinitja]1?

^=?

flnin^tcfthisclasRrisingthenormal

//cornFtriKrtor召For<

iivm_conpcnftnt.>

*^ririme"

IsT.henampofthe

//inPbT.AnceTand~parFnt~IfthshandletoThehierapcTiicalparent.r1fany,

functlunn=ustririgtlame,uvm_i_xjiuponentparent

.iit^Ai'

(idine,pdrtnt;

eridfun匚tinri

匚onststaticstringtype_nsnie

virtJislline1.ionget_"

typ^_nia[ne

returntijpe^namc

eridP-inct-LQ^i

oncela

sequencer要派生自uvm_sequencer.sequencer做了很多扩展,但是如果我们自己写的sequencer

里没有增加成员的话,可以直接写如下代码:

typedefuvm_sequencer#(传递的sequence_item类名)sequencer类名;

因为Sequencer在agent中例化,所以一般写在^ent类文件里。

reference_model派生自uvm_component.

agent要派生自uvm_agent.uvm_agent里多了一个is_active的成员。

一般根据这个active来决定是

否实例化driver和sequencer.is_active变量的数值需要在env的build_phase里设置完成(可以直接设置,也可以用uvm_config_db#(int):

:

set)。

env要派生自uvm_env.uvm_env没有对uvm_component扩展。

所有的test都要派生自uvm_test或者它的派生类。

uvm_test也没扩展

uvm_object和口uvm_component的macro

macro非常重要,事关把这些类的对象注册到factory机制中去。

uvm_objectmacro

1)对于uvm_sequence_item就统一用(假设不用parameter):

2)对于uvm.'

uvm_objec可能还需要

'

uvm_object_utils_begin(item类名)

^eqidn淙,要加上…t_w_j_@tiis类)

uvm_declare_p_sequencer(sequencer类名)的声明

uvm_componentmacro

这些uvm_component派生类者0

对于drivermonitorreference_modelscoreboardsequencercaseagentenv

要加上:

uvm_component_utils(类名)

uvm_component里的成员也可以像uvm_object里成员一样,用field_automation机制。

field_automation机制:

对于uvm_object派生类来说,field_automation机制让对象自动有的copycompareprintpackunpack等函

数,简化了实现uvm_component派生类里一些function/task的工作量

对于uvm_component派生类来说,field_automation机制最重要的是可以在build_phase中自动获取

uvm_config_db#():

set()的数值(必须加(phase))----也就是不用写uvm_config_db#():

get()

注意:

field_automation的macro的类型要和uvm_config_db的参数类型一致:

如下示例代码,field_intvsuvm_config_db#(bit[47:

0])这个时候()是不起作用的。

想要起作用的话,需要用

clone=new+copy源代码中可以看到clone函数一上来会做一次create,然后调copy函数

src/base/

UVM的树形结构

parent指针。

component的parent是什parent参数设成null,那么

uvm_component的new/create要注意第一个参数是名字,第二个参数是

UVM真正的树根是“uvm_top”.根据上面这个树结构,可以看岀一个个么。

uvm_top的parent是null。

当一个component在实例化的时候,如果

parent参数会被仿真器自动设置成uvm_root的实例uvm_top.

在章节里也提到了,sequenee在uvm_config_db#():

get()的时候,第一个参数设成"

null

实际就是uvm_root:

get()章节也提到了这个

层次结构函数:

get_parent()get_child(stringname)这两个分别获取parent指针和指定名字的child指针

get_children(refuvm_componentchildren[$])获取所有的child指针

get_num_children()获取child个数

get_first_child(refstringname)get_next_child(refstringname)获取child的名字(反映至Ustringname上),返回值是0/1两种情况

应用参考代码如下(改动的例子中的):

上述代码是在connet_phase中实现的。

上述代码的打印结果如下:

Thisshouldbei_agt.my_agent'

snameisuvm_test

fieldautomation机制

注意数组类型的fieldmacro比一般的要少real和event的macro.—般的对于enum类型有3个参数,而数组的只有2个参数。

联合数组的macro比较多

常用函数需要注意packunpackpack_bytesunpack_bytespack_intsunpack_ints返回值都是bit个数。

field-automation标记位

17bit中bit0copybitlno_copybit2comparebit3no_comparebit4printbit5no_printbit6record

bit7no_recordbit8packbit9no_pack

UVM_ALL_ON是’

UVM_ALL_ON|UVM_NO_PACK这样就会忽略掉packbitfield-automation的macro可以和if结合起来,参考的代码

simv+UVM_MAX_QUIT_COUNT=10

我觉得应该用不大到,就不做笔记了

config_db机制

uvm_config_db#(类型):

set/get(component指针,”…;

"

变量名字”,para4)

都是4个参数:

第一个参数是一个component指针,如果是null的话,相当于uvm_root:

第二个参数是个路径字符串,第一和第二两个参数组和成一个完整的路径

第三个参数对于set、get要完全一致,是变量名字

set的para4是数值,get的para4是变量

component中的成员变量如果:

1)component用uvm_component_utils宏注册

2)变量用field-automation宏注册

3)component的build_phase函数里有(phase)

那么可以省略get语句

跨层次多重set的时候,看set的第一个参数,层级越高,优先级越高。

调用set的时候,第一个参数尽量使用this

同层次设置的时候是时间优先

非直线设置的时候注意第一和第二参数的使用,如果需要parent指针,则要用

config_db机制支持通配符,但是作者不推荐使用通配符。

但是在对sequenee的成员set的时候需要用

通配符(章节)。

使用如下函数调试eonfig_db

check_config_usage()print_config(1/O)这两个函数在connect_phase函数中调

simv+UVM_CONFIG_DB_T

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 职业技术培训

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1