完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本节详细介绍该类中存在的各个method以及对应的一些member的功能。首先,reg field类是基于uvm_object继承而来,因此它包含了uvm_object的所有特性。
|
|
相关推荐
1个回答
|
|
1.1.1. 类成员介绍
value, uvm_reg_data_t类型的带rand属性,表示可以随机。uvm_reg_data_t是一个typedef的bit流,其位宽有一个UVM_REG_DATA_WIDTH的宏决定,默认情况下该宏为64,即默认一个value的长度为64位。 m_mirrored,uvm_reg_data_t类型,且带local属性,该变量用于定义寄存器模型中的镜像值,一般仅在predict时被修改,然后用于mirror时与读出的值做check(如果check被打开的话)。 m_desired,uvm_reg_data_t类型,也带local属性,用于定义寄存器模型中的期望值,除了predict之外,还能够通过set来直接修改其值,且会在read时作为check的期望值与实际读出来的值进行比较(如果check打开的话)。当然,除了用作比较,m_desired还能够通过get函数直接获取其当前值。 m_access,string类型,用于表示当前field的访问类型。 m_parent,uvm_reg类型,表示其所属的寄存器的句柄。 m_l***,m_size,这两个都是无符号int类型,两者合起来定义了该field在一个reg中的位置,m_l***表示field的最低位在reg中的索引,m_size则表示本field总bit长度。 m_volatile,易失性标志位,在field中,当该位为1,表示每次调用needs_update时都会返回1,即每次在用户check该寄存器是否需要update时,该field的返回都是需要update。 m_reset,string为索引的uvm_reg_data_t数组,索引用来记录复位类型,数组元素则表示了复位值。例如如果需要设置“HARD”类型的复位值为0,则表示为m_reset["HARD"] = 0,不同的用户定义复位类型和复位值都将通过一个set_reset实现,具体在后续章节描述该函数。 m_written,bit标识位,用来表示field是否已经被写过一次,该标志位主要是针对UVM自定义的“W1”,和“WO1”类型的寄存器,即该种寄存器在HARD reset之前只能够被修改一次值,m_written目前主要作用在set函数中,对于W1/WO1类型寄存器,在HARD reset之前仅可修改一次m_desired值。 m_read_in_progress,m_write_in_progress,两个标志位,表示当前field正处于读/写状态。 m_fname,m_lineno,string 类型的m_fname和int类型的m_lineno,基本上在各个函数中都作为参数开放给用户,一般可用于调试,获取调用信息,即函数在哪个文件的哪一行被调用。 m_cover_on,int类型,coverage的指示位(TBD) m_individually_accessible,bit类型标志位,用于指示field是否可以被单独access,如果不行,则每次对field进行类似write的操作,都将调用整个reg的write进行,否则将直接在field中执行reg中write相似的操作。 m_check,uvm_check_e枚举类型,包含UVM_NO_CHECK和UVM_CHECK,如果是UVM_CHECK则表示该field在read操作时会做check,否则跳过,另外这里还要注意,如果m_volatile是1,则m_check将在初始化时默认设置位no check模式。 m_max_size,这是一个static的int类型,表示对所有的uvm_reg_field类有效,该变量会在configure中起作用,用于记录所有有效的uvm_reg_field类中,最大的那个m_size。 m_policy_names,static类型,以string为索引的数组,用于记录合法的access类型,UVM会自定义许多寄存器类型,包括一些常用的“RW”,“RO”,“WC”等等。所以虽然UVM开放了可自定义新的access类型,但通常我们都不需要去额外做这些。 1.1.2. new 构造函数,除了调用super.new之外没有执行额外动作。 1.1.3. configure 最常用的一个函数,通常在该field所在的reg中被调用,包含了field需要的一系列操作,具体参数请参阅官方文档或者源代码,这里介绍一下其执行过程。 · 首先配置m_parent,在类成员介绍中提过,m_parent表示包含它的寄存器句柄,所以在函数的参数中会有一个parent参数,在此赋值给m_parent; · 配置m_size,即field大小,以bit为单位,根据size参数进行设置,在赋值给m_size之前会先对size做一个检查,如果size为0,则打印一个warning,并将size设置为1,然后在赋值给m_size,即m_size最小需要设置为1 · m_volatile,从volatile参数赋值 · m_access,从access参数赋值,这里会将access转换为大写赋值给m_access,即在调用configure时,access可以用小写字符串 · m_l***,从l***_pos参数获取 · m_cover_on,默认设置为UVM_NO_COVERAGE · m_written,初始为0 · m_check,这里会根据m_volatile配置默认值,如果volatile为1,则NO_CHECK,否则CHECK · m_individually_access,从individually_access参数获取 · 如果has_reset为1,给HARD类型配置复位值,即m_reset["HARD"] = reset,这里的reset就是函数的另一个参数, 否则通过UVM的resource_db机制设置一个NO_REG_HW_RESET_TEST,用于在UVM自带的reset测试中忽略该reg field。 · 调用m_parent的add_reg,用于将该reg field和包含它的reg关联起来。 · 检查m_access,如果不在已定义的m_policy_names中,则报错,并且将m_access设置为“RW”类型。 · 设置m_max_size,前面提到过,m_max_size就是表示所有reg field中最大的m_size,这段代码就是用于比较并且记录最大的m_size。 · 根据m_access类型,如果access为RO,RC,RS,WC,WS,W1C,W1S,W1T,W0C,W0S,W0T,W1CRS,W1SRC,W0CRS,W0SRC,WSRC,WCRS,WOC,WOS时,value的random功能将被关闭 · 除了上述的情况,如果is_rand参数在调用时给0,那么value的random属性也将被关闭 |
|
|
|
只有小组成员才能发言,加入小组>>
692 浏览 0 评论
1106 浏览 1 评论
2473 浏览 5 评论
2808 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2646 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
653浏览 9评论
649浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
781浏览 6评论
628浏览 5评论
668浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 03:38 , Processed in 0.931803 second(s), Total 78, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号