跳转至

输入查询内容

    本页内容

    get_access() 返回的访问权限字符串变化

    影响范围

    按 get_access 返回字符串选择自研访问/预测策略。

    具体差异

    RO 分支两版一致,不是新增折算。变化在 WO 分支:1.2 仅 RW/WO 返回 WO,其余返回 NOACCESS;2.0 的 WRC/WRS→WOW1SRC→W1SW0SRC→W0SW1CRS→W1CW0CRS→W0CWCRS→WCWSRC→WS,并保留 W1C 等其他写属性。interface_probe 对代表性模式逐项对跑确认。依赖旧 NOACCESS 结果跳过测试的自研 sequence 将覆盖更多字段,须检查预期。

    修改方案

    若自研 sequence 根据 get_access(map) 决定跳过或预测,按目标 WO map 的返回值更新分支:WRC/WRS→WO、W1SRC→W1S、W0SRC→W0S、W1CRS→W1C、W0CRS→W0C、WCRS→WC、WSRC→WS。按折算后的写副作用执行和预测,不能统一当普通 WO;RO 分支原有处理可保留。

    兼容措施与范围:兼容措施不恢复旧权限字符串映射;自研分支和预测须遵守折算后的访问副作用。

    迁移后验证

    对实际字段 access policy 与 map 权限组合读回返回值,并检查自研分支、允许访问及副作用。

    记录本条结果M07-007 · 状态与证据

    已有实测与复现

    补充查阅

    扫描定位与记录结果

    有扫描规则,覆盖部分可识别写法。脚本检查名称、参数和部分 FLAG 表达式,并对少数直接声明关联使用点;未做完整类型解析或预处理,行为结果仍需验证。

    • S33 · 启发式:按字段访问权限字符串选择策略。 排除已识别的 memory/vreg 权限查询;reg field 或未知类型的调用仍按实际 WO map 条件核对。
    uv run tools/uvm_migration_scan.py <SoC代码目录> --rules S33
    

    核对命中对象及生效分支后,在条目清单记录修改与验证证据;扫描规则记录用于整理命中位置。

    扫描器下载、输入范围与报告说明

    源码与标准依据

    核查方式:源码与实测核对。实测仅覆盖本条所列场景。

    VCS 内置 UVM-1.2uvm_reg_field.svh:918

    VCS 内置 uvm-ieee-2020-2.0uvm_reg_field.svh:545

    引用代码(高亮为引用行);上方行号链接可直接定位。

    src/vcs-uvm-1.2/reg/uvm_reg_field.svh
    // get_access
    
    function string uvm_reg_field::get_access(uvm_reg_map map = null);
       string field_access = m_access;
    
       if (map == uvm_reg_map::backdoor())
         return field_access;
    
       // Is the register restricted in this map?
       case (m_parent.get_rights(map))
         "RW":
           // No restrictions
           return field_access;
    
         "RO":
           case (field_access)
            "RW", "RO", "WC", "WS",
              "W1C", "W1S", "W1T", "W0C", "W0S", "W0T",
    

    完整源码 · SHA256:203f137cd6cc544089313f20cbc64046691beb899d7596db93e03b9d1968d3f2

    src/vcs-uvm-ieee-2020-2.0/reg/uvm_reg_field.svh
    // get_access
    
    function string uvm_reg_field::get_access(uvm_reg_map map = null);
       string field_access = m_access;
    
       if (map == uvm_reg_map::backdoor())
         return field_access;
    
       // Is the register restricted in this map?
       case (m_parent.get_rights(map))
         "RW":
           // No restrictions
           return field_access;
    
         "RO":
           case (field_access)
            "RW", "RO", "WC", "WS",
              "W1C", "W1S", "W1T", "W0C", "W0S", "W0T",
    

    完整源码 · SHA256:08e4cb573f5f6f23fb1c7ae019ed2b4f7f08c9631878d5f88df2464858fa5bbb

    术语解释 · 兼容配置

    返回RAL(寄存器模型) · 迁移清单

    版本适用范围