Skip to content

Commit 75bc6e2

Browse files
Update (#183)
* 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
1 parent 061bd5c commit 75bc6e2

7 files changed

Lines changed: 27 additions & 12 deletions

File tree

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

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,9 @@ Store指令地址流水线分为S0/S1/S2/S3四级,如图所示:
169169
## StoreUnit功能说明
170170
StoreUnit是存储指令的逻辑,功能被解构并集成到了 ​Memory Dispatch Queue、STA、STD、Integer ALUs、StoreQueue、SBuffer、LoadQueueRAW/RAR以及 DTLB​ 等一系列子模块中。
171171

172-
### 1.内存指令派发
172+
173+
### 内存指令派发
174+
173175
Store指令存在复杂的控制机制(如顺序、转发、违例等),因此需要队列来保存Store指令的先进先出顺序以进行相关控制,该队列即StoreQueue。Store指令在完成译码、重命名等操作后,需要派发至ROB与LSQ,分配对应的robIdx、lqIdx与sqIdx,随后进入各自发射队列。在所有源操作数就绪后发射至MemBlock中的流水线。在MemBlock中的执行生命周期内,Store指令会携带lqIdx与sqIdx,用于内存违例检测与数据转发时的顺序维护。
174176

175177
对于标量内存访问指令,一条指令分配一个StoreQueue表项。
@@ -181,27 +183,32 @@ Store指令存在复杂的控制机制(如顺序、转发、违例等),因
181183
| 1.1 | SU_DISPATCH | SCALAR_DISPATCH | 验证标量Store指令派发时分配一个StoreQueue条目。|
182184
| 1.2 |SU_DISPATCH | VECTOR_DISPATCH | 验证向量Store指令的一个uop分配多个LSQ条目(根据元素数量)。|
183185

184-
### 2.地址流水线
186+
### 地址流水线
187+
185188

186189
| 序号 | 功能名称 | 测试点名称 | 描述 |
187190
| ----- |-----------------|---------------------|------------------------------------|
188191
| 2.1 | SU_STORE | S0_ADDRESS_CALC |验证s0阶段地址计算和仲裁。|
189192
| 2.2 | SU_STORE | S1_RAW_CHECK|验证s1阶段RAW冒险检测。|
190193
| 2.3 | SU_STORE | S2_SQ_MARK_READY |验证s2阶段StoreQueue地址就绪标记。|
191194

192-
### 3.向量内存指令执行
195+
196+
### 向量内存指令执行
197+
193198

194199
| 序号 | 功能名称 | 测试点名称 | 描述 |
195200
| ----- |-----------------|---------------------|------------------------------------|
196201
| 3.1 | SU_VECTOR | SPLIT |验证向量指令拆分正确性。|
197202
| 3.2 | SU_VECTOR | OFFSET |元素偏移计算|
198203

199204

200-
### 4.重执行​
205+
206+
### 重执行​
201207

202208
存储指令会被发射队列重新传输,在一个存储指令被发射队列发射后,队列不会立即清除该指令,直到StoreUnit返回信号。StoreUnit根据TLB是否命中发送相应反馈。如果TLB未命中,则由指令发射队列负责重新发送该指令。
203209

204-
### 5.RAW处理
210+
### RAW处理
211+
205212
RAW内存访问违例检测:LoadQueue中的LoadQueueRAW模块通过FreeList结构记录所有可能地址相同但尚未执行更早Store的Load指令。当Load指令在LoadUnit执行到s2阶段(此时地址转换与PMA/PMP检查已完成)时,会分配LoadQueueRAW表项。当StoreQueue中所有Store地址就绪后,LoadQueueRAW中的所有Load可释放;或当程序顺序早于它的所有Store地址就绪后,该Load可从LoadQueueRAW释放。若Store指令在查询LoadQueueRAW时发现存在地址相同的更晚Load,则发生RAW内存访问违例,需要回滚。
206213

207214
RAW内存访问违例恢复:检测到RAW违例时,由LoadQueueRAW发起回滚,从造成违例的Store指令的下一条指令开始清空流水线。
@@ -211,7 +218,9 @@ RAW内存访问违例恢复:检测到RAW违例时,由LoadQueueRAW发起回
211218
| 5.1 | SU_RAW | VIOLATION |验证RAW违例检测。|
212219
| 5.2 | SU_RAW | RECOVERY_MECH |验证检测到RAW违例后的恢复(流水线清空)。|
213220

214-
### 6.SBuffer优化
221+
222+
### SBuffer优化
223+
215224
根据RVWMO模型,在多核场景下(无FENCE等栅栏语义指令时),一个核的Store指令可以比地址不同的更晚Load指令更晚对其他核可见。该内存模型规则主要优化Store指令性能。RVWMO等弱一致性模型允许处理器核包含SBuffer,暂时保存已提交的Store写操作,合并这些写操作后再写入DCache,从而减少Store指令对DCache SRAM端口的争用,提高Load指令执行带宽。
216225

217226
SBuffer为16×512B的全相联结构。当多个Store地址落在同一缓存块时,SBuffer会合并这些Store。
@@ -231,7 +240,9 @@ SBuffer支持超时清空机制;超过2^20周期未被换出的数据块将被
231240
| 6.1 | SU_SBUFFER | WRITE_MERGE|验证同一缓存块的多个Store在SBuffer中合并。|
232241
| 6.2 | SU_SBUFFER | PLRU_REPLACE |验证SBuffer满时按PLRU策略替换。|
233242

234-
### 7.MMIO处理
243+
244+
### MMIO处理
245+
235246
香山核仅允许标量内存访问指令访问MMIO地址空间。MMIO访问与任何其他内存操作强顺序。因此,MMIO指令必须等待成为ROB头(即所有前序指令均完成)时才能执行。对于MMIO Store指令,需完成虚地址到实地址转换,通过实地址检查,且写数据就绪。随后LSQ将内存请求发送至Uncache模块,通过总线访问外设。结果返回LSQ后写回至ROB。
236247

237248
原子指令与向量指令不支持MMIO访问。若此类指令访问MMIO地址空间,将触发对应AccessFault异常。
@@ -240,7 +251,8 @@ SBuffer支持超时清空机制;超过2^20周期未被换出的数据块将被
240251
| 7.1 | SU_MMIO | ORDER |验证MMIO指令强顺序执行(成为ROB头)。|
241252
| 7.2 | SU_MMIO | EXCEPTION |验证原子/向量指令访问MMIO触发异常。|
242253

243-
### 8.Uncache指令执行
254+
### Uncache指令执行
255+
244256
香山核除支持访问非幂等、强顺序的MMIO地址空间外,还支持访问幂等、弱一致性(RVWMO)的Non-cacheable地址空间,简称NC。软件通过页表PBMT字段配置为NC以覆盖原有PMA属性。与MMIO访问不同,NC访问允许乱序内存操作。
245257

246258
在StoreUnit流水线中被识别为NC地址(PBMT = NC)的内存访问指令会在LSQ中标记。LSQ负责将NC访问发送至Uncache模块。Uncache支持同时处理多个NC请求,支持请求合并,并负责向正在LoadUnit执行的NC Load转发Stores。
@@ -250,15 +262,19 @@ SBuffer支持超时清空机制;超过2^20周期未被换出的数据块将被
250262
| 8.1 | SU_NC | EXEC |验证NC访问允许乱序执行。|
251263
| 8.2 | SU_NC | FORWARD |验证Uncache模块的Store到Load转发。|
252264

253-
### 9.非对齐内存访问
265+
266+
### 非对齐内存访问
267+
254268

255269
| 序号 | 功能名称 | 测试点名称 | 描述 |
256270
| ----- |-----------------|---------------------|------------------------------------|
257271
| 9.1 | SU_MISALIGN | SCALAR_SPLIT |验证标量非对齐访问跨越16B边界时拆分为两个对齐访问。|
258272
| 9.2 | SU_MISALIGN | SEG_HANDLE |验证向量Segment指令的非对齐处理(独立路径)。|
259273
| 9.3 | SU_MISALIGN | EXCEPTION |验证原子指令、MMIO、NC空间非对齐访问触发异常。|
260274

261-
### 10.原子指令执行
275+
276+
### 原子指令执行
277+
262278
香山核支持RVA与Zacas指令集。香山当前设计中,原子指令需先将访问的缓存块缓存至DCache,再进行原子操作。
263279

264280
内存访问单元监控Store发射队列发射的地址与数据,若为原子指令则进入AtomicsUnit。AtomicsUnit执行一系列操作,包括TLB地址转换、清空SBuffer、访问DCache等。

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
---
22
title: LSU
3-
linkTitle: 香山LSU模块
4-
3+
linkTitle: LSU
54
weight: 20
65
---
76

documents/static/docs/98_ut/03_memblock/03_storeunit/LSU-StoreUnit-Timing.svg renamed to documents/static/docs/98_ut/03_memblock/03_lsu/LSU-StoreUnit-Timing.svg

File renamed without changes.

documents/static/docs/98_ut/03_memblock/03_storeunit/StoreUnit.png renamed to documents/static/docs/98_ut/03_memblock/03_lsu/StoreUnit.png

File renamed without changes.

documents/static/docs/98_ut/03_memblock/03_storeunit/misalign.png renamed to documents/static/docs/98_ut/03_memblock/03_lsu/misalign.png

File renamed without changes.

documents/static/docs/98_ut/03_memblock/03_storeunit/scalar.png renamed to documents/static/docs/98_ut/03_memblock/03_lsu/scalar.png

File renamed without changes.

documents/static/docs/98_ut/03_memblock/03_storeunit/vector.png renamed to documents/static/docs/98_ut/03_memblock/03_lsu/vector.png

File renamed without changes.

0 commit comments

Comments
 (0)