MEMU Block Specification¶
| Field | Value |
|---|---|
| Spec ID | SEED-BLK-MEM |
| Status | Implemented / Unverified |
| Revision | 0.1 |
| RTL | src/main/scala/pipeline/MEMU.scala |
1. Purpose¶
把 EX/MEM 中的 memory item 转为一个 64-bit、带 byte mask 的请求;等待响应;从返回 beat 中提取并扩展 load value。
2. Interface¶
| Port | Direction | Meaning |
|---|---|---|
in |
in | ExMem transaction state |
dmem.req |
out | {addr,wdata,mask,isWrite} |
dmem.resp |
in | {rdata,resp} |
advance |
out | EX/MEM 可捕获下一项 |
out |
out | MemWb |
3. Request formation¶
- 地址为
in.aluResult。 - store data 左移
addr[2:0] * 8。 - byte mask:
1 << addr[2:0];half/word 分别按addr[2:1]/addr[2]对齐;doubleword 为0xff。 isWrite等于memWrite。- 请求只在
in.valid && (memRead || memWrite) && !memIssued时有效。
4. Requirements¶
REQ-MEM-001: memory request fire 后,advanceSHALL 保持 0,直到对应 response fire。REQ-MEM-002: 一个 EX/MEM memory item SHALL 最多产生一次请求 fire。REQ-MEM-003: load byte/half/word/doubleword SHALL 从 64-bit response 中按地址低位选择,并根据loadUnsigned扩展。REQ-MEM-004: 非 memory item SHALL 立即advance=1,并将 ALU result 送至 WB。REQ-MEM-005: 当前实现 SHALL 保持 responseresp字段,但不把 error response 变成处理器异常;该限制必须在系统验证环境中显式假设。
5. Completion behavior¶
advance = !hasMem || in.memDone。PipelineCore 在请求 fire 时设置 memIssued,在 response fire 时设置 memDone 和 loadData。store 的 response data 被忽略,但 B response 仍必须完成事务。
6. Limitations¶
未对未对齐访问作 fault 或跨 beat 拆分;地址和 mask 组合逻辑假定平台接受该访问形式。