diff --git a/documents/content/zh-cn/docs/98_ut/03_memblock/03_lsu/01_StoreUnit.md b/documents/content/zh-cn/docs/98_ut/03_memblock/03_lsu/01_StoreUnit.md index f4fd7eb4..31cb71f0 100644 --- a/documents/content/zh-cn/docs/98_ut/03_memblock/03_lsu/01_StoreUnit.md +++ b/documents/content/zh-cn/docs/98_ut/03_memblock/03_lsu/01_StoreUnit.md @@ -269,20 +269,9 @@ SBuffer支持超时清空机制;超过2^20周期未被换出的数据块将被 | 序号 | 功能名称 | 测试点名称 | 描述 | | ----- |-----------------|---------------------|------------------------------------| | 9.1 | SU_MISALIGN | SCALAR_SPLIT |验证标量非对齐访问跨越16B边界时拆分为两个对齐访问。| -| 9.2 | SU_MISALIGN | SEG_HANDLE |验证向量Segment指令的非对齐处理(独立路径)。| -| 9.3 | SU_MISALIGN | EXCEPTION |验证原子指令、MMIO、NC空间非对齐访问触发异常。| +| 9.2 | SU_MISALIGN | EXCEPTION |验证原子指令、MMIO、NC空间非对齐访问触发异常。| -### 原子指令执行 - -香山核支持RVA与Zacas指令集。香山当前设计中,原子指令需先将访问的缓存块缓存至DCache,再进行原子操作。 - -内存访问单元监控Store发射队列发射的地址与数据,若为原子指令则进入AtomicsUnit。AtomicsUnit执行一系列操作,包括TLB地址转换、清空SBuffer、访问DCache等。 -| 序号 | 功能名称 | 测试点名称 | 描述 | -| ----- |-----------------|---------------------|------------------------------------| -| 10.1 | SU_ATOMIC | PRELOAD |验证原子指令先将缓存块读入DCache。| -| 10.2 | SU_ATOMIC | OPS |验证原子操作(如AMO)执行正确性。| - @@ -757,10 +746,7 @@ SBuffer支持超时清空机制;超过2^20周期未被换出的数据块将被 | 8.1 | SU_NC | EXEC |验证NC访问允许乱序执行。| | 8.2 | SU_NC | FORWARD |验证Uncache模块的Store到Load转发。| | 9.1 | SU_MISALIGN | SCALAR_SPLIT |验证标量非对齐访问跨越16B边界时拆分为两个对齐访问。| -| 9.2 | SU_MISALIGN | SEG_HANDLE |验证向量Segment指令的非对齐处理(独立路径)。| -| 9.3 | SU_MISALIGN | EXCEPTION |验证原子指令、MMIO、NC空间非对齐访问触发异常。| -| 10.1 | SU_ATOMIC | PRELOAD |验证原子指令先将缓存块读入DCache。| -| 10.2 | SU_ATOMIC | OPS |验证原子操作(如AMO)执行正确性。| +| 9.2 | SU_MISALIGN | EXCEPTION |验证原子指令、MMIO、NC空间非对齐访问触发异常。| diff --git a/ut_mem_block/lsu/storeunit/README.md b/ut_mem_block/lsu/storeunit/README.md index f27baca4..dcc096e2 100644 --- a/ut_mem_block/lsu/storeunit/README.md +++ b/ut_mem_block/lsu/storeunit/README.md @@ -227,17 +227,8 @@ SBuffer支持超时清空机制;超过2^20周期未被换出的数据块将被 | 序号 | 功能名称 | 测试点名称 | 描述 | | ----- |-----------------|---------------------|------------------------------------| | 9.1 | SU_MISALIGN | SCALAR_SPLIT |验证标量非对齐访问跨越16B边界时拆分为两个对齐访问。| -| 9.2 | SU_MISALIGN | SEG_HANDLE |验证向量Segment指令的非对齐处理(独立路径)。| -| 9.3 | SU_MISALIGN | EXCEPTION |验证原子指令、MMIO、NC空间非对齐访问触发异常。| +| 9.2 | SU_MISALIGN | EXCEPTION |验证原子指令、MMIO、NC空间非对齐访问触发异常。| -### 10. 原子指令执行 -香山核支持RVA与Zacas指令集。香山当前设计中,原子指令需先将访问的缓存块缓存至DCache,再进行原子操作。 - -内存访问单元监控Store发射队列发射的地址与数据,若为原子指令则进入AtomicsUnit。AtomicsUnit执行一系列操作,包括TLB地址转换、清空SBuffer、访问DCache等。 -| 序号 | 功能名称 | 测试点名称 | 描述 | -| ----- |-----------------|---------------------|------------------------------------| -| 10.1 | SU_ATOMIC | PRELOAD |验证原子指令先将缓存块读入DCache。| -| 10.2 | SU_ATOMIC | OPS |验证原子操作(如AMO)执行正确性。| @@ -706,10 +697,7 @@ SBuffer支持超时清空机制;超过2^20周期未被换出的数据块将被 | 8.1 | SU_NC | EXEC |验证NC访问允许乱序执行。| | 8.2 | SU_NC | FORWARD |验证Uncache模块的Store到Load转发。| | 9.1 | SU_MISALIGN | SCALAR_SPLIT |验证标量非对齐访问跨越16B边界时拆分为两个对齐访问。| -| 9.2 | SU_MISALIGN | SEG_HANDLE |验证向量Segment指令的非对齐处理(独立路径)。| -| 9.3 | SU_MISALIGN | EXCEPTION |验证原子指令、MMIO、NC空间非对齐访问触发异常。| -| 10.1 | SU_ATOMIC | PRELOAD |验证原子指令先将缓存块读入DCache。| -| 10.2 | SU_ATOMIC | OPS |验证原子操作(如AMO)执行正确性。| +| 9.2 | SU_MISALIGN | EXCEPTION |验证原子指令、MMIO、NC空间非对齐访问触发异常。| diff --git a/ut_mem_block/lsu/storeunit/env/storeunit_wrapper.py b/ut_mem_block/lsu/storeunit/env/storeunit_wrapper.py index 170d69f5..7d32385f 100644 --- a/ut_mem_block/lsu/storeunit/env/storeunit_wrapper.py +++ b/ut_mem_block/lsu/storeunit/env/storeunit_wrapper.py @@ -17,12 +17,11 @@ mmio_cov = fc.CovGroup("SU_MMIO") nc_cov = fc.CovGroup("SU_NC") misalign_cov = fc.CovGroup("SU_MISALIGN") -atomic_cov = fc.CovGroup("SU_ATOMIC") # 所有覆盖组列表 funcov_groups = [ dispatch_cov, store_cov, vector_cov, replay_cov, raw_cov, - sbuffer_cov, mmio_cov, nc_cov, misalign_cov, atomic_cov + sbuffer_cov, mmio_cov, nc_cov, misalign_cov ] coverage_initialized = False @@ -128,25 +127,13 @@ def init_misalign_coverage(g, dut): { # 标量拆分:发送到未对齐缓冲区且非向量 "MISALIGN_SCALAR_SPLIT": lambda x: x.io_misalign_buf_valid.value and not x.io_misalign_buf_bits_isvec.value, - # Segment处理:向量指令且alignedType=3 - "MISALIGN_SEG_HANDLE": lambda x: x.io_vecstin_valid.value and x.io_vecstin_bits_alignedType.value == 3, # 异常触发:未对齐异常 "MISALIGN_EXCEPTION": lambda x: x.io_misalign_stout_valid.value and x.io_misalign_stout_bits_uop_exceptionVec_6.value, }, name="FC-Misalign" ) -def init_atomic_coverage(g, dut): - """10. 原子指令功能覆盖率""" - g.add_watch_point(dut, - { - # 预加载:原子操作标记 - "ATOMIC_PRELOAD": lambda x: x.io_lsq_valid.value and x.io_lsq_replenish_atomic.value, - # 操作执行:原子操作完成 - "ATOMIC_OPS": lambda x: x.io_stout_valid.value and x.io_lsq_replenish_atomic.value, - }, - name="FC-Atomic" - ) + def init_function_coverage(dut): """初始化所有功能覆盖率组""" @@ -164,7 +151,6 @@ def init_function_coverage(dut): init_mmio_coverage(mmio_cov, dut) init_nc_coverage(nc_cov, dut) init_misalign_coverage(misalign_cov, dut) - init_atomic_coverage(atomic_cov, dut) coverage_initialized = True @@ -477,28 +463,3 @@ def api_misaligned_access(dut, vaddr, size, is_vector=False): dut.io_tlb_resp_valid.value = 0 return bool(buffered), bool(exception) - -# 10. 原子指令 -def api_atomic_operation(dut, vaddr, data, op_type): - """测试原子指令执行""" - # 派发原子指令 - dut.io_stin_valid.value = 1 - dut.io_stin_bits_src_0.value = vaddr - dut.io_stin_bits_uop_fuOpType.value = op_type | 0x10 # 设置原子操作标志 - - # 模拟TLB响应 - dut.io_tlb_resp_valid.value = 1 - dut.io_tlb_resp_bits_paddr_0.value = vaddr & 0xFFFFFFFFFFFF - - # 检查原子操作识别 - dut.Step(1) - is_atomic = dut.io_lsq_replenish_atomic.value - - # 推进完成 - dut.Step(1) - completed = dut.io_stout_valid.value and "AMO" in str(dut.io_stout_bits_uop_fuOpType.value) - - # 清理 - dut.io_stin_valid.value = 0 - dut.io_tlb_resp_valid.value = 0 - return bool(is_atomic), bool(completed) diff --git a/ut_mem_block/lsu/storeunit/test_storeunit.py b/ut_mem_block/lsu/storeunit/test_storeunit.py index fad03fb9..7ea708c9 100644 --- a/ut_mem_block/lsu/storeunit/test_storeunit.py +++ b/ut_mem_block/lsu/storeunit/test_storeunit.py @@ -137,14 +137,6 @@ def test_scalar_split(dut): SU_MISALIGN.SCALAR_SPLIT """ -def test_seg_handle(dut): - - """ 验证向量Segment指令的非对齐处理 - - 测试点: - SU_MISALIGN.SEG_HANDLE - """ - def test_exception(dut): """ 验证原子指令、MMIO、NC空间非对齐访问触发异常 @@ -153,18 +145,3 @@ def test_exception(dut): SU_MISALIGN.EXCEPTION """ -def test_preload(dut): - - """ 验证原子指令、MMIO、NC空间非对齐访问触发异常 - - 测试点: - SU_ATOMIC.PRELOAD - """ - -def test_preload(dut): - - """ 验证原子指令操作正确执行,包括数据读写和状态更新 - - 测试点: - SU_ATOMIC.OPS - """