ryanhunter的个人空间 https://blog.eetop.cn/1765812 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

uvm_reg_field

已有 2448 次阅读| 2020-11-4 22:52 |个人分类:验证|系统分类:芯片设计| UVM

本节详细介绍该类中存在的各个method以及对应的一些member的功能。首先,reg field类是基于uvm_object继承而来,因此它包含了uvm_object的所有特性。

1.1.1.     类成员介绍

            value uvm_reg_data_t类型的带rand属性,表示可以随机。uvm_reg_data_t是一个typedefbit流,其位宽有一个UVM_REG_DATA_WIDTH的宏决定,默认情况下该宏为64,即默认一个value的长度为64位。

            m_mirroreduvm_reg_data_t类型,且带local属性,该变量用于定义寄存器模型中的镜像值,一般仅在predict时被修改,然后用于mirror时与读出的值做check(如果check被打开的话)。

            m_desireduvm_reg_data_t类型,也带local属性,用于定义寄存器模型中的期望值,除了predict之外,还能够通过set来直接修改其值,且会在read时作为check的期望值与实际读出来的值进行比较(如果check打开的话)。当然,除了用作比较,m_desired还能够通过get函数直接获取其当前值。

            m_accessstring类型,用于表示当前field的访问类型。

            m_parentuvm_reg类型,表示其所属的寄存器的句柄。

            m_lsbm_size,这两个都是无符号int类型,两者合起来定义了该field在一个reg中的位置,m_lsb表示field的最低位在reg中的索引,m_size则表示本fieldbit长度。

            m_volatile,易失性标志位,在field中,当该位为1,表示每次调用needs_update时都会返回1,即每次在用户check该寄存器是否需要update时,该field的返回都是需要update

            m_resetstring为索引的uvm_reg_data_t数组,索引用来记录复位类型,数组元素则表示了复位值。例如如果需要设置“HARD”类型的复位值为0,则表示为m_reset["HARD"] = 0,不同的用户定义复位类型和复位值都将通过一个set_reset实现,具体在后续章节描述该函数。

            m_writtenbit标识位,用来表示field是否已经被写过一次,该标志位主要是针对UVM自定义的“W1”,和“WO1”类型的寄存器,即该种寄存器在HARD reset之前只能够被修改一次值,m_written目前主要作用在set函数中,对于W1/WO1类型寄存器,在HARD reset之前仅可修改一次m_desired值。

            m_read_in_progressm_write_in_progress,两个标志位,表示当前field正处于读/写状态。

            m_fnamem_linenostring 类型的m_fnameint类型的m_lineno,基本上在各个函数中都作为参数开放给用户,一般可用于调试,获取调用信息,即函数在哪个文件的哪一行被调用。

            m_cover_onint类型,coverage的指示位(TBD

            m_individually_accessiblebit类型标志位,用于指示field是否可以被单独access,如果不行,则每次对field进行类似write的操作,都将调用整个regwrite进行,否则将直接在field中执行regwrite相似的操作。

            m_checkuvm_check_e枚举类型,包含UVM_NO_CHECKUVM_CHECK,如果是UVM_CHECK则表示该fieldread操作时会做check,否则跳过,另外这里还要注意,如果m_volatile1,则m_check将在初始化时默认设置位no check模式。

            m_max_size,这是一个staticint类型,表示对所有的uvm_reg_field类有效,该变量会在configure中起作用,用于记录所有有效的uvm_reg_field类中,最大的那个m_size

            m_policy_namesstatic类型,以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做一个检查,如果size0,则打印一个warning,并将size设置为1,然后在赋值给m_size,即m_size最小需要设置为1

·      m_volatile,从volatile参数赋值

·      m_access,从access参数赋值,这里会将access转换为大写赋值给m_access,即在调用configure时,access可以用小写字符串

·      m_lsb,从lsb_pos参数获取

·      m_cover_on,默认设置为UVM_NO_COVERAGE

·      m_written,初始为0

·      m_check,这里会根据m_volatile配置默认值,如果volatile1,则NO_CHECK,否则CHECK

·      m_individually_access,从individually_access参数获取

·      如果has_reset1,给HARD类型配置复位值,即m_reset["HARD"] = reset,这里的reset就是函数的另一个参数, 否则通过UVMresource_db机制设置一个NO_REG_HW_RESET_TEST,用于在UVM自带的reset测试中忽略该reg field

·      调用m_parentadd_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类型,如果accessRORCRSWCWSW1CW1SW1TW0CW0SW0TW1CRSW1SRCW0CRSW0SRCWSRCWCRSWOCWOS时,valuerandom功能将被关闭

·      除了上述的情况,如果is_rand参数在调用时给0,那么valuerandom属性也将被关闭

TBD


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 0

    获赞
  • 0

    评论
  • 90

    访问数
关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-19 00:30 , Processed in 0.022811 second(s), 15 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部