RAL 端序、访问粒度、响应与失败预测矩阵
环境:VCS W-2024.09-SP2-8。1.2 使用 uvm-1.2,2.0 使用 uvm-ieee-2020-2.0。
实验检查观察值是否符合预期;成功复现问题不代表问题已修复。
- 寄存器 path 类型更名,旧别名仍可使用
- uvm_reg_map 新增 API 组(uvm_reg_seq_base / get_physical_addresses_to_map / perform_accesses / do_bus_access / unregister / clone_and_update)
- 大端 map 的整宽反转可能破坏数据,单拍也受影响(S13)
- 支持 byte enable 的相邻字段访问仍可能退化为整寄存器访问(S14)
- 失败访问不再更新寄存器镜像,新增 PREDICT_NOK 提示
结果对比
小端,直接返回请求结果
| 观察内容 | UVM 1.2 | UVM 2.0 |
|---|---|---|
| 写状态(0=成功,1=失败) write_status | 0 |
0 |
| 字段访问状态(0=成功,1=失败) field_status | 0 |
0 |
| 一次字段访问产生的总线传输数 field_transfers | 1 |
2 |
| 读状态(0=成功,1=失败) read_status | 0 |
0 |
| 字段操作后的完整寄存器数据(十六进制) field_preserved_data | 0123456789abcd55 |
0123456789abcd55 |
| 寄存器镜像值(十六进制) mirror | 0123456789abcd55 |
0123456789abcd55 |
| 字段写入后相邻硬件数据(十六进制) adjacent_hardware_data | deadbeef89abcd66 |
0123456789abcd66 |
| 突发写状态(0=UVM_IS_OK,1=UVM_NOT_OK) burst_write_status | 0 |
0 |
| 突发读状态(0=UVM_IS_OK,1=UVM_NOT_OK) burst_read_status | 0 |
0 |
| 突发传输第一个数据(十六进制) burst0 | 0000000076543210 |
0000000076543210 |
| 突发传输第二个数据(十六进制) burst1 | 0000000044556677 |
0000000044556677 |
| 两次并发访问的状态(0=成功) concurrent_status | 0:0 |
0:0 |
| 并发访问的第一项数据(十六进制) concurrent_first | 1111222233334444 |
1111222233334444 |
| 并发访问的第二项数据(十六进制) concurrent_second | aaaabbbbccccdddd |
aaaabbbbccccdddd |
| 失败写入的状态(1=UVM_NOT_OK) failed_write_status | 1 |
1 |
| 失败写入后的寄存器镜像(十六进制) failed_write_mirror | ffffffffffffffff |
1111222233334444 |
小端,独立响应
本组配置:+RESPONSES
| 观察内容 | UVM 1.2 | UVM 2.0 |
|---|---|---|
| 写状态(0=成功,1=失败) write_status | 0 |
0 |
| 字段访问状态(0=成功,1=失败) field_status | 0 |
0 |
| 一次字段访问产生的总线传输数 field_transfers | 1 |
2 |
| 读状态(0=成功,1=失败) read_status | 0 |
0 |
| 字段操作后的完整寄存器数据(十六进制) field_preserved_data | 0123456789abcd55 |
0123456789abcd55 |
| 寄存器镜像值(十六进制) mirror | 0123456789abcd55 |
0123456789abcd55 |
| 字段写入后相邻硬件数据(十六进制) adjacent_hardware_data | deadbeef89abcd66 |
0123456789abcd66 |
| 突发写状态(0=UVM_IS_OK,1=UVM_NOT_OK) burst_write_status | 0 |
0 |
| 突发读状态(0=UVM_IS_OK,1=UVM_NOT_OK) burst_read_status | 0 |
0 |
| 突发传输第一个数据(十六进制) burst0 | 0000000076543210 |
0000000076543210 |
| 突发传输第二个数据(十六进制) burst1 | 0000000044556677 |
0000000044556677 |
| 两次并发访问的状态(0=成功) concurrent_status | 0:0 |
0:0 |
| 并发访问的第一项数据(十六进制) concurrent_first | 1111222233334444 |
1111222233334444 |
| 并发访问的第二项数据(十六进制) concurrent_second | aaaabbbbccccdddd |
aaaabbbbccccdddd |
| 失败写入的状态(1=UVM_NOT_OK) failed_write_status | 1 |
1 |
| 失败写入后的寄存器镜像(十六进制) failed_write_mirror | ffffffffffffffff |
1111222233334444 |
大端,直接返回请求结果
本组配置:+BIG_ENDIAN
| 观察内容 | UVM 1.2 | UVM 2.0 |
|---|---|---|
| 写状态(0=成功,1=失败) write_status | 0 |
0 |
| 字段访问状态(0=成功,1=失败) field_status | 0 |
0 |
| 一次字段访问产生的总线传输数 field_transfers | 1 |
2 |
| 读状态(0=成功,1=失败) read_status | 0 |
0 |
| 字段操作后的完整寄存器数据(十六进制) field_preserved_data | 0123456789abcd55 |
0000000000000000 |
| 寄存器镜像值(十六进制) mirror | 0123456789abcd55 |
0000000000000000 |
| 字段写入后相邻硬件数据(十六进制) adjacent_hardware_data | deadbeef89abcd66 |
0000000000000000 |
| 突发写状态(0=UVM_IS_OK,1=UVM_NOT_OK) burst_write_status | 0 |
0 |
| 突发读状态(0=UVM_IS_OK,1=UVM_NOT_OK) burst_read_status | 0 |
0 |
| 突发传输第一个数据(十六进制) burst0 | 0000000076543210 |
0000000000000000 |
| 突发传输第二个数据(十六进制) burst1 | 0000000044556677 |
0000000000000000 |
| 两次并发访问的状态(0=成功) concurrent_status | 0:0 |
0:0 |
| 并发访问的第一项数据(十六进制) concurrent_first | 1111222233334444 |
0000000000000000 |
| 并发访问的第二项数据(十六进制) concurrent_second | aaaabbbbccccdddd |
0000000000000000 |
| 失败写入的状态(1=UVM_NOT_OK) failed_write_status | 1 |
1 |
| 失败写入后的寄存器镜像(十六进制) failed_write_mirror | ffffffffffffffff |
0000000000000000 |
大端,独立响应
本组配置:+BIG_ENDIAN · +RESPONSES
| 观察内容 | UVM 1.2 | UVM 2.0 |
|---|---|---|
| 写状态(0=成功,1=失败) write_status | 0 |
0 |
| 字段访问状态(0=成功,1=失败) field_status | 0 |
0 |
| 一次字段访问产生的总线传输数 field_transfers | 1 |
2 |
| 读状态(0=成功,1=失败) read_status | 0 |
0 |
| 字段操作后的完整寄存器数据(十六进制) field_preserved_data | 0123456789abcd55 |
0000000000000000 |
| 寄存器镜像值(十六进制) mirror | 0123456789abcd55 |
0000000000000000 |
| 字段写入后相邻硬件数据(十六进制) adjacent_hardware_data | deadbeef89abcd66 |
0000000000000000 |
| 突发写状态(0=UVM_IS_OK,1=UVM_NOT_OK) burst_write_status | 0 |
0 |
| 突发读状态(0=UVM_IS_OK,1=UVM_NOT_OK) burst_read_status | 0 |
0 |
| 突发传输第一个数据(十六进制) burst0 | 0000000076543210 |
0000000000000000 |
| 突发传输第二个数据(十六进制) burst1 | 0000000044556677 |
0000000000000000 |
| 两次并发访问的状态(0=成功) concurrent_status | 0:0 |
0:0 |
| 并发访问的第一项数据(十六进制) concurrent_first | 1111222233334444 |
0000000000000000 |
| 并发访问的第二项数据(十六进制) concurrent_second | aaaabbbbccccdddd |
0000000000000000 |
| 失败写入的状态(1=UVM_NOT_OK) failed_write_status | 1 |
1 |
| 失败写入后的寄存器镜像(十六进制) failed_write_mirror | ffffffffffffffff |
0000000000000000 |
大端,独立响应,adapter 字节补偿
本组配置:+BIG_ENDIAN · +RESPONSES · +BE_ADAPTER_COMPENSATION
| 观察内容 | UVM 1.2 | UVM 2.0 |
|---|---|---|
| 写状态(0=成功,1=失败) write_status | 0 |
0 |
| 字段访问状态(0=成功,1=失败) field_status | 0 |
0 |
| 一次字段访问产生的总线传输数 field_transfers | 1 |
2 |
| 读状态(0=成功,1=失败) read_status | 0 |
0 |
| 字段操作后的完整寄存器数据(十六进制) field_preserved_data | 0123456789abcd55 |
0123456789abcd55 |
| 寄存器镜像值(十六进制) mirror | 0123456789abcd55 |
0123456789abcd55 |
| 字段写入后相邻硬件数据(十六进制) adjacent_hardware_data | deadbeef89abcd66 |
0123456789abcd66 |
| 突发写状态(0=UVM_IS_OK,1=UVM_NOT_OK) burst_write_status | 0 |
0 |
| 突发读状态(0=UVM_IS_OK,1=UVM_NOT_OK) burst_read_status | 0 |
0 |
| 突发传输第一个数据(十六进制) burst0 | 0000000076543210 |
0000000076543210 |
| 突发传输第二个数据(十六进制) burst1 | 0000000044556677 |
0000000044556677 |
| 两次并发访问的状态(0=成功) concurrent_status | 0:0 |
0:0 |
| 并发访问的第一项数据(十六进制) concurrent_first | 1111222233334444 |
1111222233334444 |
| 并发访问的第二项数据(十六进制) concurrent_second | aaaabbbbccccdddd |
aaaabbbbccccdddd |
| 失败写入的状态(1=UVM_NOT_OK) failed_write_status | 1 |
1 |
| 失败写入后的寄存器镜像(十六进制) failed_write_mirror | ffffffffffffffff |
1111222233334444 |
大端,字节补偿,直接字段写入
本组配置:+BIG_ENDIAN · +RESPONSES · +BE_ADAPTER_COMPENSATION · +DIRECT_FIELD_WRITE
| 观察内容 | UVM 1.2 | UVM 2.0 |
|---|---|---|
| 写状态(0=成功,1=失败) write_status | 0 |
0 |
| 字段访问状态(0=成功,1=失败) field_status | 0 |
0 |
| 一次字段访问产生的总线传输数 field_transfers | 1 |
2 |
| 读状态(0=成功,1=失败) read_status | 0 |
0 |
| 字段操作后的完整寄存器数据(十六进制) field_preserved_data | 0123456789abcd55 |
0123456789abcd55 |
| 寄存器镜像值(十六进制) mirror | 0123456789abcd55 |
0123456789abcd55 |
| 字段写入后相邻硬件数据(十六进制) adjacent_hardware_data | deadbeef89abcd66 |
deadbeef89abcd66 |
| 突发写状态(0=UVM_IS_OK,1=UVM_NOT_OK) burst_write_status | 0 |
0 |
| 突发读状态(0=UVM_IS_OK,1=UVM_NOT_OK) burst_read_status | 0 |
0 |
| 突发传输第一个数据(十六进制) burst0 | 0000000076543210 |
0000000076543210 |
| 突发传输第二个数据(十六进制) burst1 | 0000000044556677 |
0000000044556677 |
| 两次并发访问的状态(0=成功) concurrent_status | 0:0 |
0:0 |
| 并发访问的第一项数据(十六进制) concurrent_first | 1111222233334444 |
1111222233334444 |
| 并发访问的第二项数据(十六进制) concurrent_second | aaaabbbbccccdddd |
aaaabbbbccccdddd |
| 失败写入的状态(1=UVM_NOT_OK) failed_write_status | 1 |
1 |
| 失败写入后的寄存器镜像(十六进制) failed_write_mirror | ffffffffffffffff |
1111222233334444 |
运行命令
目录与环境准备;从解包根目录执行:
最小源码
reg_access_probe.sv
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 | |