Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
6c17c3a
StoreUnit & template
TheNextSteveJobs Sep 19, 2025
5370934
StoreUnit docs update
TheNextSteveJobs Sep 19, 2025
e09ff6d
Merge branch 'main' into main
TheNextSteveJobs Sep 19, 2025
26ccc6e
StoreUnit update
TheNextSteveJobs Sep 19, 2025
b30da25
Merge branch 'main' into main
TheNextSteveJobs Sep 19, 2025
e0a5ef0
Update 01_storeunit.md
TheNextSteveJobs Sep 19, 2025
6699489
Merge branch 'main' of https://github.com/TheNextSteveJobs/UnityChipF…
TheNextSteveJobs Sep 19, 2025
f65348f
Merge branch 'XS-MLVP:main' into main
TheNextSteveJobs Sep 19, 2025
2b5fd26
Update 01_storeunit.md
TheNextSteveJobs Sep 19, 2025
9212ebb
Merge branch 'main' into main
TheNextSteveJobs Sep 19, 2025
bbf12e8
Update 01_storeunit.md
TheNextSteveJobs Sep 19, 2025
15c299a
Merge branch 'main' of https://github.com/TheNextSteveJobs/UnityChipF…
TheNextSteveJobs Sep 19, 2025
60e7036
Update 01_storeunit.md
TheNextSteveJobs Sep 19, 2025
05e105d
Update 01_storeunit.md
TheNextSteveJobs Sep 19, 2025
871d30e
Merge branch 'main' into main
TheNextSteveJobs Sep 19, 2025
c171fa7
Update 01_storeunit.md
TheNextSteveJobs Sep 19, 2025
93e3dbd
Merge branch 'main' of https://github.com/TheNextSteveJobs/UnityChipF…
TheNextSteveJobs Sep 19, 2025
3ec6886
Merge branch 'main' into main
TheNextSteveJobs Sep 19, 2025
4155221
Update 01_storeunit.md
TheNextSteveJobs Sep 19, 2025
a1c9289
Merge branch 'main' of https://github.com/TheNextSteveJobs/UnityChipF…
TheNextSteveJobs Sep 19, 2025
a56f4d8
Merge branch 'main' into main
TheNextSteveJobs Sep 19, 2025
edca2d6
sub title update
TheNextSteveJobs Sep 21, 2025
f100b72
Merge branch 'main' of https://github.com/TheNextSteveJobs/UnityChipF…
TheNextSteveJobs Sep 21, 2025
95e449c
Merge branch 'XS-MLVP:main' into main
TheNextSteveJobs Sep 21, 2025
73a7682
pics dir update
TheNextSteveJobs Sep 21, 2025
7f28fbc
Title update
TheNextSteveJobs Sep 22, 2025
d00a392
Update 01_storeunit.md
TheNextSteveJobs Sep 22, 2025
3cfac70
Merge branch 'main' into main
TheNextSteveJobs Sep 22, 2025
7bf6db8
Rename 01_storeunit.md to 01_StoreUnit.md
TheNextSteveJobs Sep 22, 2025
1adc09e
Function update
TheNextSteveJobs Sep 23, 2025
c87f151
Update functions
TheNextSteveJobs Sep 23, 2025
3d9654a
Merge branch 'main' of https://github.com/TheNextSteveJobs/UnityChipF…
TheNextSteveJobs Sep 23, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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)执行正确性。|

</mrs-functions>


Expand Down Expand Up @@ -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空间非对齐访问触发异常。|

</mrs-testpoints>

16 changes: 2 additions & 14 deletions ut_mem_block/lsu/storeunit/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)执行正确性。|

</mrs-functions>

Expand Down Expand Up @@ -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空间非对齐访问触发异常。|

</mrs-testpoints>

Expand Down
43 changes: 2 additions & 41 deletions ut_mem_block/lsu/storeunit/env/storeunit_wrapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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):
"""初始化所有功能覆盖率组"""
Expand All @@ -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

Expand Down Expand Up @@ -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)
23 changes: 0 additions & 23 deletions ut_mem_block/lsu/storeunit/test_storeunit.py
Original file line number Diff line number Diff line change
Expand Up @@ -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空间非对齐访问触发异常
Expand All @@ -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
"""