Skip to content

Commit fe37344

Browse files
Update func (#186)
* StoreUnit & template * StoreUnit docs update * StoreUnit update * Update 01_storeunit.md * Update 01_storeunit.md pics update * Update 01_storeunit.md * Update 01_storeunit.md * Update 01_storeunit.md * Update 01_storeunit.md * Update 01_storeunit.md * sub title update * pics dir update * Title update * Update 01_storeunit.md * Rename 01_storeunit.md to 01_StoreUnit.md * Function update * Update functions
1 parent 755f40d commit fe37344

4 files changed

Lines changed: 6 additions & 94 deletions

File tree

documents/content/zh-cn/docs/98_ut/03_memblock/03_lsu/01_StoreUnit.md

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -269,20 +269,9 @@ SBuffer支持超时清空机制;超过2^20周期未被换出的数据块将被
269269
| 序号 | 功能名称 | 测试点名称 | 描述 |
270270
| ----- |-----------------|---------------------|------------------------------------|
271271
| 9.1 | SU_MISALIGN | SCALAR_SPLIT |验证标量非对齐访问跨越16B边界时拆分为两个对齐访问。|
272-
| 9.2 | SU_MISALIGN | SEG_HANDLE |验证向量Segment指令的非对齐处理(独立路径)。|
273-
| 9.3 | SU_MISALIGN | EXCEPTION |验证原子指令、MMIO、NC空间非对齐访问触发异常。|
272+
| 9.2 | SU_MISALIGN | EXCEPTION |验证原子指令、MMIO、NC空间非对齐访问触发异常。|
274273

275274

276-
### 原子指令执行
277-
278-
香山核支持RVA与Zacas指令集。香山当前设计中,原子指令需先将访问的缓存块缓存至DCache,再进行原子操作。
279-
280-
内存访问单元监控Store发射队列发射的地址与数据,若为原子指令则进入AtomicsUnit。AtomicsUnit执行一系列操作,包括TLB地址转换、清空SBuffer、访问DCache等。
281-
| 序号 | 功能名称 | 测试点名称 | 描述 |
282-
| ----- |-----------------|---------------------|------------------------------------|
283-
| 10.1 | SU_ATOMIC | PRELOAD |验证原子指令先将缓存块读入DCache。|
284-
| 10.2 | SU_ATOMIC | OPS |验证原子操作(如AMO)执行正确性。|
285-
286275
</mrs-functions>
287276

288277

@@ -757,10 +746,7 @@ SBuffer支持超时清空机制;超过2^20周期未被换出的数据块将被
757746
| 8.1 | SU_NC | EXEC |验证NC访问允许乱序执行。|
758747
| 8.2 | SU_NC | FORWARD |验证Uncache模块的Store到Load转发。|
759748
| 9.1 | SU_MISALIGN | SCALAR_SPLIT |验证标量非对齐访问跨越16B边界时拆分为两个对齐访问。|
760-
| 9.2 | SU_MISALIGN | SEG_HANDLE |验证向量Segment指令的非对齐处理(独立路径)。|
761-
| 9.3 | SU_MISALIGN | EXCEPTION |验证原子指令、MMIO、NC空间非对齐访问触发异常。|
762-
| 10.1 | SU_ATOMIC | PRELOAD |验证原子指令先将缓存块读入DCache。|
763-
| 10.2 | SU_ATOMIC | OPS |验证原子操作(如AMO)执行正确性。|
749+
| 9.2 | SU_MISALIGN | EXCEPTION |验证原子指令、MMIO、NC空间非对齐访问触发异常。|
764750

765751
</mrs-testpoints>
766752

ut_mem_block/lsu/storeunit/README.md

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -227,17 +227,8 @@ SBuffer支持超时清空机制;超过2^20周期未被换出的数据块将被
227227
| 序号 | 功能名称 | 测试点名称 | 描述 |
228228
| ----- |-----------------|---------------------|------------------------------------|
229229
| 9.1 | SU_MISALIGN | SCALAR_SPLIT |验证标量非对齐访问跨越16B边界时拆分为两个对齐访问。|
230-
| 9.2 | SU_MISALIGN | SEG_HANDLE |验证向量Segment指令的非对齐处理(独立路径)。|
231-
| 9.3 | SU_MISALIGN | EXCEPTION |验证原子指令、MMIO、NC空间非对齐访问触发异常。|
230+
| 9.2 | SU_MISALIGN | EXCEPTION |验证原子指令、MMIO、NC空间非对齐访问触发异常。|
232231

233-
### 10. 原子指令执行
234-
香山核支持RVA与Zacas指令集。香山当前设计中,原子指令需先将访问的缓存块缓存至DCache,再进行原子操作。
235-
236-
内存访问单元监控Store发射队列发射的地址与数据,若为原子指令则进入AtomicsUnit。AtomicsUnit执行一系列操作,包括TLB地址转换、清空SBuffer、访问DCache等。
237-
| 序号 | 功能名称 | 测试点名称 | 描述 |
238-
| ----- |-----------------|---------------------|------------------------------------|
239-
| 10.1 | SU_ATOMIC | PRELOAD |验证原子指令先将缓存块读入DCache。|
240-
| 10.2 | SU_ATOMIC | OPS |验证原子操作(如AMO)执行正确性。|
241232

242233
</mrs-functions>
243234

@@ -706,10 +697,7 @@ SBuffer支持超时清空机制;超过2^20周期未被换出的数据块将被
706697
| 8.1 | SU_NC | EXEC |验证NC访问允许乱序执行。|
707698
| 8.2 | SU_NC | FORWARD |验证Uncache模块的Store到Load转发。|
708699
| 9.1 | SU_MISALIGN | SCALAR_SPLIT |验证标量非对齐访问跨越16B边界时拆分为两个对齐访问。|
709-
| 9.2 | SU_MISALIGN | SEG_HANDLE |验证向量Segment指令的非对齐处理(独立路径)。|
710-
| 9.3 | SU_MISALIGN | EXCEPTION |验证原子指令、MMIO、NC空间非对齐访问触发异常。|
711-
| 10.1 | SU_ATOMIC | PRELOAD |验证原子指令先将缓存块读入DCache。|
712-
| 10.2 | SU_ATOMIC | OPS |验证原子操作(如AMO)执行正确性。|
700+
| 9.2 | SU_MISALIGN | EXCEPTION |验证原子指令、MMIO、NC空间非对齐访问触发异常。|
713701

714702
</mrs-testpoints>
715703

ut_mem_block/lsu/storeunit/env/storeunit_wrapper.py

Lines changed: 2 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,11 @@
1717
mmio_cov = fc.CovGroup("SU_MMIO")
1818
nc_cov = fc.CovGroup("SU_NC")
1919
misalign_cov = fc.CovGroup("SU_MISALIGN")
20-
atomic_cov = fc.CovGroup("SU_ATOMIC")
2120

2221
# 所有覆盖组列表
2322
funcov_groups = [
2423
dispatch_cov, store_cov, vector_cov, replay_cov, raw_cov,
25-
sbuffer_cov, mmio_cov, nc_cov, misalign_cov, atomic_cov
24+
sbuffer_cov, mmio_cov, nc_cov, misalign_cov
2625
]
2726
coverage_initialized = False
2827

@@ -128,25 +127,13 @@ def init_misalign_coverage(g, dut):
128127
{
129128
# 标量拆分:发送到未对齐缓冲区且非向量
130129
"MISALIGN_SCALAR_SPLIT": lambda x: x.io_misalign_buf_valid.value and not x.io_misalign_buf_bits_isvec.value,
131-
# Segment处理:向量指令且alignedType=3
132-
"MISALIGN_SEG_HANDLE": lambda x: x.io_vecstin_valid.value and x.io_vecstin_bits_alignedType.value == 3,
133130
# 异常触发:未对齐异常
134131
"MISALIGN_EXCEPTION": lambda x: x.io_misalign_stout_valid.value and x.io_misalign_stout_bits_uop_exceptionVec_6.value,
135132
},
136133
name="FC-Misalign"
137134
)
138135

139-
def init_atomic_coverage(g, dut):
140-
"""10. 原子指令功能覆盖率"""
141-
g.add_watch_point(dut,
142-
{
143-
# 预加载:原子操作标记
144-
"ATOMIC_PRELOAD": lambda x: x.io_lsq_valid.value and x.io_lsq_replenish_atomic.value,
145-
# 操作执行:原子操作完成
146-
"ATOMIC_OPS": lambda x: x.io_stout_valid.value and x.io_lsq_replenish_atomic.value,
147-
},
148-
name="FC-Atomic"
149-
)
136+
150137

151138
def init_function_coverage(dut):
152139
"""初始化所有功能覆盖率组"""
@@ -164,7 +151,6 @@ def init_function_coverage(dut):
164151
init_mmio_coverage(mmio_cov, dut)
165152
init_nc_coverage(nc_cov, dut)
166153
init_misalign_coverage(misalign_cov, dut)
167-
init_atomic_coverage(atomic_cov, dut)
168154

169155
coverage_initialized = True
170156

@@ -477,28 +463,3 @@ def api_misaligned_access(dut, vaddr, size, is_vector=False):
477463

478464
dut.io_tlb_resp_valid.value = 0
479465
return bool(buffered), bool(exception)
480-
481-
# 10. 原子指令
482-
def api_atomic_operation(dut, vaddr, data, op_type):
483-
"""测试原子指令执行"""
484-
# 派发原子指令
485-
dut.io_stin_valid.value = 1
486-
dut.io_stin_bits_src_0.value = vaddr
487-
dut.io_stin_bits_uop_fuOpType.value = op_type | 0x10 # 设置原子操作标志
488-
489-
# 模拟TLB响应
490-
dut.io_tlb_resp_valid.value = 1
491-
dut.io_tlb_resp_bits_paddr_0.value = vaddr & 0xFFFFFFFFFFFF
492-
493-
# 检查原子操作识别
494-
dut.Step(1)
495-
is_atomic = dut.io_lsq_replenish_atomic.value
496-
497-
# 推进完成
498-
dut.Step(1)
499-
completed = dut.io_stout_valid.value and "AMO" in str(dut.io_stout_bits_uop_fuOpType.value)
500-
501-
# 清理
502-
dut.io_stin_valid.value = 0
503-
dut.io_tlb_resp_valid.value = 0
504-
return bool(is_atomic), bool(completed)

ut_mem_block/lsu/storeunit/test_storeunit.py

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -137,14 +137,6 @@ def test_scalar_split(dut):
137137
SU_MISALIGN.SCALAR_SPLIT
138138
"""
139139

140-
def test_seg_handle(dut):
141-
142-
""" 验证向量Segment指令的非对齐处理
143-
144-
测试点:
145-
SU_MISALIGN.SEG_HANDLE
146-
"""
147-
148140
def test_exception(dut):
149141

150142
""" 验证原子指令、MMIO、NC空间非对齐访问触发异常
@@ -153,18 +145,3 @@ def test_exception(dut):
153145
SU_MISALIGN.EXCEPTION
154146
"""
155147

156-
def test_preload(dut):
157-
158-
""" 验证原子指令、MMIO、NC空间非对齐访问触发异常
159-
160-
测试点:
161-
SU_ATOMIC.PRELOAD
162-
"""
163-
164-
def test_preload(dut):
165-
166-
""" 验证原子指令操作正确执行,包括数据读写和状态更新
167-
168-
测试点:
169-
SU_ATOMIC.OPS
170-
"""

0 commit comments

Comments
 (0)