跳转至

输入查询内容

    本页内容

    RAL(寄存器模型)

    常规寄存器访问入口通过 uvm_door_e/uvm_path_e 别名保持兼容,访问实现已有变化。优先核对大端窄总线、字段 byte-enable、失败预测和 backdoor codec;访问 status 成功仍可能伴随错误数据。另检查 caller 参数、基类构造和内建 sequence。

    建议阅读顺序

    先验收实际总线或硬件数据,再核对镜像。普通类型别名可保留;大端窄总线、byte enablecodec 和失败访问按拓扑逐项核销。

    M07-020M07-021M07-023M07-024M07-022M07-001

    逻辑值与访问意图map / adapter 或 backdoor实际硬件值与返回状态

    镜像由配置的预测路径更新,应另行对照完整访问结果。读写 status、硬件值和镜像是三个检查面;codec、端序或失败聚合的差异可能只出现在其中一个面。

    用户接口与行为

    条目 修改方案
    M07-001 寄存器 path 类型更名,旧别名仍可使用
    新增/接口调整uvm_path_e / UVM_DEFAULT_PATH 等旧名称在主库保留,可继续使用。采用新命名时将类型改为 uvm_door_e、默认值改为 UVM_DEFAULT_DOOR;无需仅为改名重写所有 read/write/mirror 调用,访问语义仍按具体 RAL 风险验证。
    M07-002 get_local_map/get_default_map 移除 caller 调试形参(含 Xcheck_accessX)
    编译断点删除调用点的 caller 实参,并同步派生类的方法原型。
    M07-003 uvm_reg_backdoor 变为抽象类;wait_for_change 由 local 变 public
    编译断点 其他行为变化基类句柄可保留,new 的对象改为具体派生 backdoor。派生类实现 write(uvm_reg_item rw) 以及 read_func(rw) 或 read(rw),执行真实硬件访问并设置 status;不能只声明空子类绕过抽象类错误,基类默认 write/read_func 会报 fatal。将实例通过 rg.set_backdoor(bd) 挂到寄存器,使用 factory 时注册具体类型并检查 override 后的实际对象。需要 codec/callback 的访问按 M07-023 保留回调链。
    M07-004 内置复位测试按 has_reset() 跳过字段
    高风险 · 静默/数据自研复位测试用 field.has_reset() 判断是否存在 reset 值;镜像比较前保存原 get_compare(),对无 reset 字段临时 set_compare(UVM_NO_CHECK),比较后恢复原值。保留用户明确登记的 block/reg 排除,字段级排除单独核对实际名称。递归遍历采用每层本地寄存器加直接子块递归,避免叶寄存器重复 mirror
    M07-005 后门访问告警:not contained within map 'Backdoor'
    日志/调试变化 其他行为变化字段调用不要求改成手工位操作。需要寄存器访问语义时保留 field.read/write,确认实际数据与副作用;若已定位为本库问题且必须消除告警,使用该最小实验核对工具修复。仅需直接取值或赋值时可选 peek/poke。reg 读写显式传伪 map 的情况按下方改为 null。
    M07-006 内置 reg/mem sequence 的随机数据序列变化
    其他行为变化保留内置 sequence 调用;回归允许因 uvm_reg_randval 随机源变化而出现同 seed 的数据序列变化,使用访问约束、合法地址及 scoreboard 判定结果。外部 golden 若要求固定激励,应显式提供并保存激励数据,不能只凭同 seed 假定两库逐拍相同。
    M07-007 get_access() 返回的访问权限字符串变化
    其他行为变化若自研 sequence 根据 get_access(map) 决定跳过或预测,按目标 WO map 的返回值更新分支:WRC/WRS→WO、W1SRC→W1S、W0SRC→W0S、W1CRS→W1C、W0CRS→W0C、WCRS→WC、WSRC→WS。按折算后的写副作用执行和预测,不能统一当普通 WO;RO 分支原有处理可保留。
    M07-011 uvm_mem::get_addresses 增加越界检查
    其他行为变化正常范围内的 get_addresses 调用可保留;调用前检查 offset < mem.get_size(),超出模型范围时在用户逻辑中报告并停止该访问。删除依赖越界地址返回值的后续总线操作,分别验证最后一个合法 offset 与第一个越界 offset。
    M07-012 uvm_reg_predictor:type_name 由静态变量改为静态函数;新增 flush()
    编译断点新代码显式调用 type_name() ;移除对原可写 type_name 字段的赋值。
    M07-013 类抽象性调整(uvm_reg/uvm_reg_block/uvm_reg_file/uvm_reg_cbs 去 virtual;uvm_vreg_cbs/uvm_vreg_field_cbs 加 virtual)
    编译断点 其他行为变化将直接构造的 uvm_vreg_cbs / uvm_vreg_field_cbs 换成自己的具体派生类:构造函数接收 string name 并调用 super.new(name),原回调方法体迁入对应 override。uvm_callbacks 注册的对象仍指向原 vreg/field,传入新派生实例;原本已经使用具体回调类的代码可保留。uvm_reg/uvm_reg_block/uvm_reg_file/uvm_reg_cbs 的抽象限制放宽不要求反向修改已有派生类。
    M07-014 静态按名查找函数去 m_ 前缀(m_get_reg_by_full_name / m_get_field_by_full_name)
    编译断点uvm_reg::m_get_reg_by_full_name(name) 改为 uvm_reg::get_reg_by_full_name(name);uvm_reg_field::m_get_field_by_full_name(name) 改为 uvm_reg_field::get_field_by_full_name(name)。保留原完整层级名,并在解引用查询结果前检查 null。
    M07-018 uvm_reg_array / uvm_reg_array_md 文件删除(UVM_SPARSE_ARRAY 扩展终止)
    编译断点若环境定义了 UVM_SPARSE_ARRAY ,需移除该 define 并改用普通 uvm_reg 数组建模。
    M07-019 uvm_reg_address_config 与 get_registers_filtered_by_address 移除(UVM_REG_ENABLE_ADDRESS_EXCLUSION 扩展终止)
    编译断点 高风险 · 静默/数据若定义了 UVM_REG_ENABLE_ADDRESS_EXCLUSION ,改用 resource 排除机制。
    M07-020 大端 map 的整宽反转可能破坏数据,单拍也受影响(S13)
    高风险 · 静默/数据大端环境迁移前必须检查 adapter 两侧数据和总线 beat。示例 +BE_ADAPTER_COMPENSATION 在目标版本的 adapter 写入口反转回原数据,读出口预反转,以抵消目标库操作;它仅为本机固定宽度、地址映射和 response 契约验证过的处理方案,不能直接套用到任意桥接/层级 map。部署前与总线端序契约、有效位宽一并验证,也可采用经过验证的用户 frontdoor。
    M07-021 支持 byte enable 的相邻字段访问仍可能退化为整寄存器访问(S14)
    高风险 · 静默/数据 日志/调试变化有 W1C、RC 或硬件自主更新字段的寄存器必须核对真实访问粒度。可使用显式 bus sequence 或经过验证的用户 frontdoor 实现 byte strobe,访问成功后只预测目标字段; +DIRECT_FIELD_WRITE 演示该固定映射场景。禁止仅屏蔽 warning 后将整寄存器访问视为等价。
    M07-022 失败访问不再更新寄存器镜像,新增 PREDICT_NOK 提示
    日志/调试变化 其他行为变化失败处理和 scoreboard 必须检查 status;不要继续依赖 1.2 失败后被更新的镜像。该提示不是要求无条件重新 predict,恢复值应由成功重试或可靠观测确定。
    M07-023 后门编解码可能失效:同时检查硬件值与读回值
    高风险 · 静默/数据codec、受控回调链可在 pre_write/post_read 直接更新 rw.value,停用旧 encode/decode;相同探针两版均恢复硬件 54、读值 1。多 codec 的 decode 原为逆序调用,post_read 为正序,不能机械迁移,需在自定义 backdoor 中显式维持编码顺序、逆序解码与写回,并另行验证。
    M07-024 predictor 仅继承首拍 status,后续拍失败仍可能更新镜像(S24)
    高风险 · 静默/数据monitor/scoreboard 必须聚合完整事务的失败状态。示例在两拍全部成功时才通过公开 predict 更新镜像,两版均在任一拍失败时保留原值;该例限定普通 RW、串行、小端、全字节访问,复杂副作用字段、乱序、多 master 需按总线协议建模,不能把它视作完整 predictor 的通用替换。
    M07-025 私有 reg-bank 覆盖率改为构造时声明
    编译断点 其他行为变化对初始化时可确定的能力,把原构造能力与各次 add_coverage 参数合并为位掩码,通过 new(name, parent, has_coverage) 第三参传入;再用 set_coverage 选择当前启用项。不能用 set_coverage 冒充扩充能力。若运行中才增加能力,需调整模型生命周期或维护自己的模型实现;没有给存量对象追加能力的已验证通用替代。只使用其他保留接口时无需因此整体替换 reg-bank。
    新增功能 · 5 项

    目标库新增的 API 和可选替代接口;已有用法的迁移要求列在用户接口与行为中。

    条目 修改方案
    M07-008 uvm_reg_item 新增全套 set/get 访问器(34 个方法)
    新增/接口调整无强制;建议新代码用访问器。
    M07-009 uvm_reg_block 新增 unlock_model/wait_for_lock/set_lock/unregister/get_block_by_full_name,lock_model 行为增强
    其他行为变化无(纯新增)。
    M07-010 uvm_reg_err_service:寄存器检查错误处理钩子
    日志/调试变化无强制;有定制错误消息需求时可改用该钩子。
    M07-015 uvm_reg_map 新增 API 组(uvm_reg_seq_base / get_physical_addresses_to_map / perform_accesses / do_bus_access / unregister / clone_and_update)
    新增/接口调整无。
    M07-017 uvm_reg_field 新增 set_rand_mode/get_rand_mode
    新增/接口调整无。

    全部新增功能

    内部实现 · 1 项

    文件组织、内部数据结构与实现钩子的变化。直接依赖内部接口时查阅,普通 API 的使用不需要重审这些源码。

    条目 修改方案
    M07-016 uvm_mem_mam:地址类型 bit [63:0] 统一为 uvm_reg_addr_t
    无行为变化无。

    全部内部实现

    VCS 定制说明

    VCS 定制说明

    以下对照用于区分 VCS 定制与 Accellera 参照;需要迁移的事项以关联条目的条件、改法和验证为准。

    定制项 两版状态 工程影响与入口
    snps_uvm_reg_bank 与 create_snps_bank_map 两版 VCS 均有;Accellera 无 group 覆盖率接口、predictor 与 path 变化见 M07-025;扫描 D6 指向该条。
    UVM_VCS_EXT_PREDICT_SYNC 目标保留,默认关闭 为 uvm_reg 增加全局 predict_done 事件;启用时需按集成验证同步点。
    UVM_VCS_INDEX_BY_ID / UVM_VCS_FOREACH_OPT 目标保留,默认关闭 reg_map 的范围与 id 索引优化;实际性能和访问结果需按启用配置验证。
    UVM_FUNC_GET_MASK 目标保留,默认关闭 uvm_reg::GET_MASK 虚函数钩子;直接依赖时核对目标签名。
    UVM_SPARSE_ARRAY、地址排除 旧文件/接口删除,目标仍有部分悬空 ifdef 钩子 编译条件、改法见 M07-018M07-019。不能仅因钩子仍在就启用宏。
    VCS 与 Accellera 的目标 reg 文件差异 reg/block/map/model/backdoor 及 access/bit_bash sequence 有差异 全文件清单见文件差异附录;两侧 virtual class 声明不是 Synopsys 私有定制。

    版本适用范围