当前位置: 简表范文网 > 专题范文 > 公文范文 >

uvm实战-学习笔记

| 来源:网友投稿

下面是小编为大家整理的uvm实战-学习笔记,供大家参考。

uvm实战-学习笔记

 

 ? ?UVM 实战〔卷 1 〕? ? 学习笔记

 看了第 1/2/3/4/5/6/8/9.1 这几个章节. 第一章是综述,第二章是一个具体的例子,学习笔记从第三章相关内容开始. 我个人觉得 UVM 重要的局部〔特点的局部〕:

 1〕 factory 机制〔override config_db〕 2〕TLM 传递 3)

 phase 机制 4)

 sequence-sequencer 以及 virtual seq/sqr 内容中的截图根本来自于 UVM 源代码、书自带的例子和?uvm1.1 应用指南及源代码分析? 这个 PDF 里的. 需要结合书〔?UVM 实战〔卷 1〕?第 1 版〕来看这个笔记. 第 第 3 章 章 UVM 根底 3.1 uvm_component 和 和

 uvm_object 常用的类名字:

 这个图是从作者张强的?uvm1.1 应用指南及源代码分析?里截得,不如书上 3.1.1 里的图好. uvm_sequencer 也是代码里必须有的,所以我加了 uvm_sequencer

  在 src/base/uvm_misc.svh 中定义: virtual c 1 ass uvnri_\/oid endclass 红框的是我们搭 testbench 的时候用的比拟多的基类. 的 常用的 uvm_object 派生类: : sequencer 给 driver 的 transaction 要 派生 自 uvm_sequence_item, 不 要派生 自 uvm_transaction 所有的 sequence 要派生自 uvm_sequence 或者 uvm_sequence 的派生类,可以理解为 sequence 是 sequence_item 的组合〔集合〕. driver 向 sequencer 索要 item,sequencer 检查 是否有 sequence 要发送 item,当发现有 item 待发送时,就把这个 item 发给 driver. 的 常用的 uvm_component 派生类:

 所有的 driver 要派生自 uvm_driver. driver 用来把 sequence_item 中的信息驱动到 DUT 端口上,从 transaction-level 向 signal-level 的转换.uvm_driver 需要参数(REQ RSP), 比 uvm_component 增加 了 几个成员.重要的是 seq_item_port 和 req/rsp. (src/comps/uvm_driver.svh) uvm_void 是一一个空的虚类.

 monitor/scoreboard 派生自 uvm_monitor 和 uvm_scoreboard, 但是 uvm_monitor 和 uvm_scoreboard 并没有在 uvm_component 根底上做扩展. src/comps/uvm_monitor.svh virtu.al class uvrn_mun L tor extends uyn_cornponent 〃

 Function* new Z/ Cr&atcs and 白门 instance G -F thio class using the normal 7/ conetructor arguments Por <uvjn_coinponent> :

 is the nainQ of the 7/ ins-tanc@, and ^parant^ is ths handle to the hierarchical parent, if any« Functian new .string name, uyn_camponent parent); eu.per . new (. name 3

 pa pent ।

 ; endPuinct L

 on izonut static string type_nani9 x/i 「二 UIN I -Puinction string get_type_name (J; ret j.rn t.yp&_name : endPuinct L

 on endclass sequencer 要派生自 uvm_sequencer. sequencer 做了很多扩展,但是如果我们自己写的 sequencer 里没有增加成员的话,可以直接写如下代码:

 typedef uvm_sequencer #〔传递的 sequence_item 类名 〕

 sequencer 类名 ; 由于 sequencer 在 agent 中例化,所以一般写在 agent 类文件里. 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 扩展. src/comps/uvm_env.svh vir tLial c la:=1:=1 u"i/rii_env extends uvm_Dorriponent; // Functi on :

 new 〃 // Creates and initializes an instance o-F this class using the rwrmal 7/ constructor arguments -Por <uviiii_coijipm«t.> :

 ^name~ Is the :

 name &F 工 he // instance f

 and ""p 白 rent" is the handle to the hiersrcfiical parent, i? any* T unct i □ n nci-.i 〔string na me- ,, u-"---"" 1

 u.vni_corii po ne nt parent-null ]; super.new name 3 parenti; endFLKCti on conEt static "= :

 t-ing type_name 1 「 tu.si 4"u.net L □ n stving get_ty pe_n.ariie 「 Et LT 广门 ty pe_nanie ; endFunction

 endclase 所有的 test 都要派生自 uvm_test 或者它的派生类.uvm_test 也没扩展 src/comps/uvm_test.svh ■/irtual clasc u.vrn_test extends ULVTII _ C □mponent // Function; new X/ // Creates and initializes an instance of this class using the normal // constructor argtiments For < uwiKii_compor>ent.> :

 is the name of the // instance, 白 rtd ""pareniU™ is the handle to th@ hi^rardnlcal parent, i-P any fu.net Lon new i "= :

 tring n.ame 】

 uvni_conponent parent〕; super .neujt name n

 parent j ; end-TunctiDri const static string type_name = 1

 virtual function string get_type_nsme 〔\ ; retLi.rn type_name ; end-Punct i on en du last :

 uvm_object 和

 uvm_component 的

 macro macro 非常重要,事关把这些类的对象注册到 factory 机制中去. uvm_object macro 1〕对于 uvm_sequence_item 就统一用〔假设不用 parameter〕:

 "uvm_object_utils_begin〔item 类名〕 ….field_automation... "uvm_object_utils_end 2〕对于 uvm_sequence,要加上 "uvm_object_utils〔sequence 类名 〕 可能还需要"uvm_declare_p_sequencer〔sequencer 类名〕的声明 uvm_component macro 对于 driver monitor reference_model scoreboard sequencer case agent env^^ uvm_component 派生类都要加上:

 "uvm_component_utils(类名 ) uvm_component 里的成员也可以像 uvm_object 里成员一样,用 field_automation 机制. "

 \ TVUL

 comp ,二七二二 m beci_r:,{my diivei} "JLvnL_f iel(pr r

 UVM_ALL_OM} " avnL_caiiLpoE.ent-_.;tiL3_end field_automation 机制:

 对于 uvm_object 派生类来说,field_automation 机制让对象自动有的 copy compare print pack unpack 等函数,简化了实现 uvm_component 派生类里一些 function/task 的工作量 对于 uvm_component 派生类来说,field_automation 机制最重要的是 可以在 build_phase 中

 自动获取 uvm_config_db#()::set()的数值( 必须加

 super.build_phase(phase)) ----也就是不用 写 uvm_config_db#()::get() 注意:

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

 如下例如代码,field_int vs uvm_config_db#(bit[47:0])这个时候 super.build_phase()是不起 作用的. class my_sequencer extends uvm-sequencer my_transaction bit -47:0] dmac; bit ; 47:0] smac //int dmac; //int smac; " uvm_component._LJiti ls_begin (my_sequencer ) " u , v , m_-Field_int (dmac , 、 uvm_-Field_int (smac , " uvm_component._uit i ls_end Q-i L

 .Lun iu my_c3eeC build_phast uvffl_phase phase ■=ur 」 ir, juilcLphaet ahase uvn_config_dbt jj i :

 set Ji 二 ■= :

 ni L :

 口 j :

 :

 emt :■=:> 一二一\ , 43 卜自 1 二上三 1 ; 想要起作用的话,需要用 Furct 1 on nid my_caseO build_phase u.vm.phasE- phase); ou.pn-r- bnild_phase phase); //uv™_conFig.cJb#(bit[47 :

 0] 1 :

 isetCthiSi "env.i-agt*3qr M

 3

 "dmac" B , 48"WF9765); /H LIVUI

 .conf ig_<Jbt(bit[47 :

 0] ) :

 ai env.i-agt*3qr w

 3

 fi, smac ,b , 4sh89F23); uvm.config_db#C int ।

 :

 sett this 3

 匚:口 nfiE_db#i ;

 int ।

 :

 三 5=1 三 t "三 n 闩厂 ."j 43 8

 - r r3) ; clone = new + copy 源代码中可以看到 clone 函数一上来会做一次 create,然后调 copy 函数 src/base/uvm_object.svh

 function uun_abjcct uvin_otij tc t uJcirw uvm_nb.jrct trip: tmp this .crwrt!? i-f" tnp null uyn-repcrrt-Marnins elw tffi 口 copy this reiiirn tnp sfidfLinctlan 〃

 -capij //

 Function void u"H"m.object c:opy uvn.ahject rtia „Fo 「 cycle -chwklng Bt-wtic int depth i-T- rhe null ^ uyn_Elob(sl_DDpu_nan ETt If (Thia nu.ll) bsgLn uvm„rfflpDTrt_idaT i n Lng mtiirn; and uvm_gLabaL_cnpy_iiHp.set rhs . this : depth: __m_uvnuFiolcL/WJitonwtion 小事 dcuGDpj rhs : deptn. if :deptJi te^ln UyiTi_g] Qb=il_C^y _jViap _C ] AT 广 and d-TuHOtlan 3.2 UVM 的树形结构

 uvm_component 的 new/create 要注意第一个参数是名字,第二个参数是 parent 指针. UVM 真正的树根是“uvm_top〞 .根据上面这个树结构,可以看出一个个 component 的parent 是什么.uvm_top 的 parent 是 null.当一个 component 在实例化的时候,如果 parent 参数设成 null,那么 parent 参数会被仿真器自动设置成 uvm_root 的实例 uvm_top. 在 6.6.1 章节里也提到了,sequence 在 uvm_config_db#〔〕:

 :

 get〔〕的时候,第一个参 数设成“null",实际就是 uvm_root::get〔〕3.5.1 章节也提到了这个 层次结构函数: : get_parent() get_child(string name)这两个分别获取 parent 指针和指定名字的 child 指针. rho null be-sin

 get_children(ref uvm_component children[$])获取所有的 child 指针 get_num_children()获取 child 个数 get_first_child(ref string name) get_next_child(ref string name)获取 child 的名字(反映至 U string name 上),返回值是 0/1 两种情况 应用参考代码如下(改动的 2.5.2 例子中的 my_agent.sv):

 function void ny_aEont connnc:t_phjEci uvn_phjEBi phasiD ijivm-component children 3 uum-component child string child_narie supsr . cnnnoE t_pha=c-1 ph, if (is.active . beein dru 5eq_itpm_port connect sqr 5&q_itpri-i_e^pc!r-t ; end ap = fton.ap :

 .thi E

 g.Qt_-Ru.ll_namc- thi-= . 301 .parent. this .ffet_num_ch i Idren()); thig get-chi 1dren 1

 chiIdren :

 ■Poreach 1

 children i begin ..rhle .ger_Fu 1 L_n 加 E

 1,1,ct _ i11 di^en" 1 ] get_ranre 1

 chiIdren [1] .g et_ -Fu l l_n.3ne(1); ond child this eet-child if chi10null. begin .this g_9t_fUlL_H3me end else b>?gin 0nd if thia-set.First_chiId 1 child_namebeEin - - Sj

 this get-PulLnarie .chilcLrar"5, uhile 1 this.get_ne^t_child"chiLd_name "begin j.rhls . eet_ru :

 Ll_nam&!) .chi Id-nane und ond i?13F beein this get^-full-namE ))] end end-Function 注意:上述代码是在 connet_phase 中实现的. 上述代码的打印结果如下:

 my_agent"s name is uvm_test_top.env.i_agt, parent"s full path is uvm_test_top.env, children num is3 uvm_test_top.env.i_agt0 child: drv --> full path:uvm_test_top.env.i_agt.drv uvm_test_top.env.i_agt1 child: mon --> full path:uvm_test_top.env.i_agt.mon uvm_test_top.env.i_agt2 child: sqr --> full path:uvm_test_top.env.i_agt.sqr This should be i_agt. my_agent"s name is uvm_test_top.env.i_agt uvm_test_top.env.i_agt first child name is drv uvm_test_top.env.i_agt next child name is mon uvm_test_top.env.i_agt next child name is sqr my_agent"s name is uvm_test_top.env.o_agt, parent"s full path is uvm_test_top.env, children num is1 uvm_test_top.env.o_agt0 child: mon --> full path:uvm_test_top.env.o_agt.mon UVM_WARNING /tools/synopsys/vcs/G-2021.09/etc/uvm/src/base/uvm_component.svh(1846) @ 0: uvm_test_top.env.o_agt [NOCHILD] Component with name "drv" is not a child of component "uvm_test_top.env.o_agt" This should be o_agt. my_agent"s name is uvm_test_top.env.o_agt uvm_test_top.env.o_agt first child name is mon 3.3 field automation 机制 注意数组类型的 field macro 比一般的要少 real 和 event 的 macro. 一般的对于 enum 类型有

 3 个参数,而数组的只有 2 个参数.联合数组的 macro 比拟多 常用函数需要注意 pack unpack pack_bytes unpack_bytes pack_ints unpack_ints 返回值都是 bit 个数. field-automation 标记位 17bit 中 bit0 3 copy bit1 3 no_copy bit2 3 compare bit3 3 no_compare bit4 — print bit5 3 no_print bit6 3 record bit7 3 no_record bit8 — pack bit9 3 no_pack UVM_ALL_ON 是 ‘b000000101010101 UVM_ALL_ON|UVM_NO_PACK 这样就会忽略掉 pack bit field-automation 的 macro 可以和 if 结合起来,参考 3.3.4 的代码 "uvm_object_utils_begin(my_transaction) "uvm_field_int(dmac, UVM_ALL_ON) "uvm_field_int(smac, UVM_ALL_ON) if(is_vlan)begin "uvm_field_int(vlan_info1, UVM_ALL_ON) "uvm_field_int(vlan_info2, UVM_ALL_ON) "uvm_field_int(vlan_info3, UVM_ALL_ON...

相关推荐

热门文章

2022年争先创优演讲稿最新10篇(完整文档)

《争先创优演讲稿最新10篇》是一篇好的范文,觉得有用就收藏了,这里给大家转摘到。演讲稿具有宣传、鼓动、教育和欣赏等作用,它可以把演讲者的观点、主张与思想感情传达给听众以及读者,使他们信服并在思想感情上产生共鸣。下面小编给大家带来关于争先创优演讲稿,希望会对大家的与有所帮助。争先创优演讲稿1

2022年新员工培训心得怎么写合集通用(全文)

最近发表了一篇名为《新员工培训心得怎么写通用》的范文,感觉很有用处,重新整理了一下发到这里。培训能够拓展员工的视野,提升员工的能力,让员工在培训之中成长。员工培训心得对经历过员工培训的人具有许多的影响,你知道它的写法?你是否在找正准备撰写“新

2022年爱细节作文600字初中范本

《2022爱的细节作文600字初中范文【】》是一篇好的范文,觉得应该跟大家分享,希望对网友有用。爱是冬日的一缕阳光,使饥寒交迫的人感到人间的温暖;爱是一场洒落在久旱的土地上的甘霖,使濒临绝境的人重新看到生活的希望;爱是一首飘落在夜空里的歌谣,使孤苦无依的人获得心灵的慰藉。下面小编为大家整理了20

共青团员自我总结400字

《2022共青团员自我总结400字》是一篇好的范文,好的范文应该跟大家分享,希望对网友有用。作为一个新时期的共青团员,思想****理论是不可或缺的,共青团员是中国共产党的后备力量,也是党的生命力的源泉,理论上的成熟是****上成熟的基础,****上的清醒来源于理论上的坚定。以下是小编整理的2022共

2022年教师年度考核个人总结例文

最近发表了一篇名为《教师年度考核个人总结例文》的范文,觉得有用就收藏了,重新编辑了一下发到。在日常生活或是工作中,我们经常会写总结,面对年末的时候,你们知道教师是怎么写的工作总结?来了解下吧!以下是小编为大家带来的2022教师年度考核个人总结例文,希望您能喜欢!教师年度考核个人总

2022年学生会竞选自我介绍演讲稿最新10篇

《学生会竞选自我介绍演讲稿最新10篇》是一篇好的范文,感觉写的不错,希望对您有帮助,重新编辑了一下发到。演讲稿不仅要充分体现演讲者独到、深刻的观点和见解,而且还要对声调的高低、语速的快慢、体态语的运用进行设计并加以注释,以达到最佳的传播效果。下面小编给大家带来关于自我介绍演讲稿,希望会对大

2022百年奋斗谋复兴勇毅前行兴伟业学习心得体会范本合集

《2022百年奋斗谋复兴勇毅前行兴伟业学习心得体会范文》是一篇好的范文,觉得有用就收藏了,希望对网友有用。2022百年奋斗谋复兴勇毅前行兴伟业学习心得体会范文了不起的红色精神,值得永远待播与发扬下去!相信祖国将会更加强大,更加繁荣富强。下面是小编为您推荐2022百年奋斗谋复兴勇毅前

关于珍爱生命作文800字高中【精选推荐】

范文参**网最近发表了一篇名为《2022关于珍爱生命的作文800字高中【】》的范文,感觉写的不错,希望对您有帮助,重新整理了一下发到这里。在平日的学习、工作和生活里,大家都不可避免地要接触到作文吧。下面小编为大家整理了2022关于的作文800字高中【5

2022清明网上祭英烈活动心得感悟经典范本10篇600字

本页是最新发布的《清明网上祭英烈活动心得感悟经典范文10篇600字》的详细范文参考文章,觉得有用就收藏了,希望大家能有所收获。清明祭心得感悟经典范文10篇600字说到清明节这个大家熟悉的节日,大家一定都是去祭拜祖先!但是可曾想过在清明节这天来祭奠我们的英烈们呢?下面是小编为您推荐

2022年度《公民节约用水行为规范》倡议书范本

最近发表了一篇名为《2022《公民节约用水行为规范》倡议书范文【五篇】》的范文,感觉很有用处,看完如果觉得有帮助请记得(CTRL+D)收藏本页。虽然人类已浪费了许多,但是人类们已经感觉到水的可贵而开始保护起来。在此大家一起杜绝浪费水之源,保护水资源吧。下面小编在这里为大家精心整理了几篇20

共青团员个人总结参考五篇(范文推荐)

《共青团员个人总结参考五篇》是一篇好的范文,觉得应该跟大家分享,希望大家能有所收获。一年来,在团组织和各位老师的热心支持和帮助下,认真做好本职,积极完成学校布置的各项任务。以下是小编整理的共青团员个人总结参考范文五篇,欢迎阅读分享。共青团员个人总结参考1一个学年以来,在团组织的正确领导和帮助下,我在

2022全国中小学生安全教育日心得体会三篇

最近发表了一篇名为《2022全国中小学生安全教育日心得体会三篇》的范文,感觉写的不错,希望对您有帮助,重新编辑了一下发到。2022全国中小学生日心得体会三篇为贯彻落实珍爱,安全第一为主题的中小学安全日教育活动,我校领导高度重视,紧紧围绕安全日安全教育这一主线,在师生中开展了丰富多