这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

LSU

本文档参考香山LSQ设计文档写成

请注意,本文档撰写的测试点仅供参考,如能补充更多测试点,最终获得的奖励可能更高!

1 - StoreUnit

本文档参考香山StoreUnit设计文档写成

请注意,本文档撰写的测试点仅供参考,如能补充更多测试点,最终获得的奖励可能更高!

StoreUnit说明文档

文档概述

本文档描述了StoreUnit的结构与功能,并根据功能给出测试点参考,方便测试的参与者理解测试需求,编写相关测试用例。 StoreUnit 是存储指令执行单元 ,由多个协同工作的子模块组成,包括其五级流水线处理流程、支持的三种类型store指令(标量、向量、非对齐)、接口设计与信号交互逻辑。该模块用于执行Store类指令的地址生成与处理,是Load/Store流水线中的关键组成部分。

术语说明

名称 定义
TLB(Translation Lookaside Buffer) 地址转换旁路缓冲器,用于虚拟地址到物理地址的快速转换
PMP(Physical Memory Protection) 物理内存访问权限检查机制
RAW(Read After Write)违例 写后读违例,表示一个load指令读取尚未写入的store数据
MMIO(Memory-Mapped Input/Output) 内存映射IO

存储指令执行

内存单元里包含2条Store地址流水线与2条Store数据流水线。各流水线独立接收并执行对应发射队列派发的指令。

存储地址流水线

sw指令流水示意图

由4级结构组成:

​Store地址流水线(4级结构)​​

  • stage 0:

    • 计算VA地址

    • 非对齐 > 向量 > 标量请求的优先级仲裁

    • 地址非对齐检查更新到uop.exceptionVec

    • 对地址的16字节边界检测

    • 发出DTLB读请求到tlb

    • 更新指令的掩码信息到s0_mask_out发送到StoreQueue

    • 判断是否为数据宽度为128bits的store指令。

  • stage 1:

    • 接收TLB地址转换响应,TLB若缺失则重试

    • 查询LoadQueueRAW以进行违规检查

    • 与加载单元s1和s2阶段的Load指令进行RAW冒险检测

    • 如果DTLB hit,将store issue信息发送到后端

  • stage 2:

    • mmio/PMP检查、检查原子操作权限

    • 更新storeQueue中标记为地址就绪状态

    • 更新DTLB结果通过feedback_slow更新到后端

  • stage 3:

    • 标量store发起写回,通过stout发送给后端

    • StoreQueue条目释放与状态清理

存储数据流水线

  • 从发射队列(issue queue)接收数据
  • 将数据写回StoreQueue
  • 标记发射队列接收的数据为就绪状态

向量存储指令执行

对于除 SEG指令外的向量内存访问指令,VSSplit 负责接收向量内存访问指令发射队列发送的微操作(uop),并将该微操作拆分为多个元素。随后VSSplit 将这些元素发送至StoreUnit 执行,执行流程与标量内存访问指令相同。执行完成后,元素会被写回至 VSMerge,其中 Merge 模块会将这些元素收集并组合成微操作,最终写回向量寄存器文件。 SEG 指令则由独立的 VSegmentUnit 模块处理。

vse指令流水示意图

StoreUnit处理非对齐Store指令流程和标量类似,特别的:

  • stage 0:

    • 接受vsSplit的执行请求,优先级高于标量请求,并且不需要计算虚拟地址
  • stage 1:

    • 计算vecVaddrOffset和vecTriggerMask
  • stage 2:

    • 不需要向后端发送feedback_slow响应
  • stage 3:

    • 向量store发起Writeback,通过vecstout发送给后端

非对齐存储指令执行

香山核支持标量与向量内存指令对存储空间进行非对齐访问。

标量非对齐访问未跨越16B边界时可正常执行,无需特殊处理,而跨越16B边界的标量非对齐内存访问在MisalignBuffer中拆分为两次对齐内存操作,完成后由MisalignBuffer处理拼接与写回。

向量非Segment的Unit-stride指令访问连续地址空间,合并元素后一次访问16B,因此无需特殊处理。

非Unit-stride的非Segment向量指令由VSplit模块完成元素拆分与地址计算后发送至流水线。若元素非对齐则发送至MisalignBuffer,后续过程与非对齐标量相同,区别在于MisalignBuffer最终写回至VMerge而非直接后端

向量Segment指令的非对齐处理由VSegmentUnit独立完成,不复用标量内存访问路径,通过独立状态机完成

原子指令、MMIO与NC地址空间均不支持非对齐访问,这些情况将触发AccessFault异常。

非对齐sd指令流水示意图

StoreUnit处理非对齐Store指令流程和标量类似,特别的:

  • stage 0:

    • 接受来自StoreMisalignBuffer的请求,优先级高于向量和标量请求,并且不需要计算虚拟地址
  • stage 2:

    • 不需要向后端发送feedback响应

    • 如果不是来自于StoreMisalignBuffer的请求并且没有跨越16字节边界的非对齐请求,那么需要进入StoreMisalignBuffer处理

      • 通过io_misalign_buf接口,向StoreMisalignBuffer发送入队请求
    • 如果是来自与StoreMisalignBuffer的请求并且没有跨越16字节边界请求,则需要向StoreMisliagnBuffer发送重发或者写回响应

      • 通过io_misalign_sout接口,向StoreMisalignBuffer发送响应

      • 如果出现TLB miss,则需要重发,否则写回

RAW违例

RAW内存违例:处理器核执行的Load指令的结果应来源于当前处理器核观察到的全局内存顺序中最新的写操作。具体而言,若最新的写操作来自当前核的Store指令,则Load应获取该Store写入的数据。为优化Load指令性能,超标量乱序处理器会投机执行Loads。因此,Load指令可能早于地址相同的更早Store执行,从而获取到该Store之前的旧值,即构成RAW内存违例。

整体框图及流水级

Store指令地址流水线分为S0/S1/S2/S3四级,如图所示:

整体框图

接收store地址发射队列发来的请求,处理完成之后需要给后端和向量部分响应,处理过程中需要给发射队列反馈信息,给StoreQueue反馈信息,最后写回, 如果中间出现异常则从发射队列重新发射。

StoreUnit功能说明

StoreUnit是存储指令的逻辑,功能被解构并集成到了 ​Memory Dispatch Queue、STA、STD、Integer ALUs、StoreQueue、SBuffer、LoadQueueRAW/RAR以及 DTLB​ 等一系列子模块中。

内存指令派发

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

对于标量内存访问指令,一条指令分配一个StoreQueue表项。

对于向量内存访问指令,一条指令在译码阶段会被拆分为多个uop,每个uop包含若干元素,相当于一次内存访问操作。在派发时,一个uop会分配与其包含元素数量相等的多个LSQ表项。

序号 功能名称 测试点名称 描述
1.1 SU_DISPATCH SCALAR_DISPATCH 验证标量Store指令派发时分配一个StoreQueue条目。
1.2 SU_DISPATCH VECTOR_DISPATCH 验证向量Store指令的一个uop分配多个LSQ条目(根据元素数量)。

地址流水线

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

向量内存指令执行

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

重执行​

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

RAW处理

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

RAW内存访问违例恢复:检测到RAW违例时,由LoadQueueRAW发起回滚,从造成违例的Store指令的下一条指令开始清空流水线。

序号 功能名称 测试点名称 描述
5.1 SU_RAW VIOLATION 验证RAW违例检测。
5.2 SU_RAW RECOVERY_MECH 验证检测到RAW违例后的恢复(流水线清空)。

SBuffer优化

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

SBuffer为16×512B的全相联结构。当多个Store地址落在同一缓存块时,SBuffer会合并这些Store。

SBuffer每周期最多可写入2条Store指令,每条Store指令写数据位宽为16B(例外:cbo.zero指令按缓存块操作,一次操作一个缓存块)。

SBuffer换出:

当SBuffer容量超过一定阈值时,执行换出操作,按PLRU替换算法选择被替换块写入DCache

SBuffer支持被动清空机制;FENCE/atomic/向量Segment等指令执行时会清空SBuffer

SBuffer支持超时清空机制;超过2^20周期未被换出的数据块将被驱逐

序号 功能名称 测试点名称 描述
6.1 SU_SBUFFER WRITE_MERGE 验证同一缓存块的多个Store在SBuffer中合并。
6.2 SU_SBUFFER PLRU_REPLACE 验证SBuffer满时按PLRU策略替换。

MMIO处理

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

原子指令与向量指令不支持MMIO访问。若此类指令访问MMIO地址空间,将触发对应AccessFault异常。

序号 功能名称 测试点名称 描述
7.1 SU_MMIO ORDER 验证MMIO指令强顺序执行(成为ROB头)。
7.2 SU_MMIO EXCEPTION 验证原子/向量指令访问MMIO触发异常。

Uncache指令执行

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

在StoreUnit流水线中被识别为NC地址(PBMT = NC)的内存访问指令会在LSQ中标记。LSQ负责将NC访问发送至Uncache模块。Uncache支持同时处理多个NC请求,支持请求合并,并负责向正在LoadUnit执行的NC Load转发Stores。

序号 功能名称 测试点名称 描述
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 EXCEPTION 验证原子指令、MMIO、NC空间非对齐访问触发异常。

常量说明

常量名 常量值
VAddrBits (Sv39) 39, (Sv48) 48
GPAddr Bits (Sv39x4) 41, (Sv48x4) 50
StoreExeUnit 2
StoreUnit 2 x 8B/16B
StoreQueue 56
StoreBuffer 16 x 64B
VSMergeBuffer 16
Store TLB 48项全相联

接口说明

输入接口

信号名 方向 位宽 描述
clock input 1 时钟信号,用于同步时序
reset input 1 复位信号,用于重置模块状态
io_redirect_valid input 1 重定向有效信号,指示是否有重定向操作
io_redirect_bits_robIdx_flag input 1 重定向ROB索引标志,指示是否需要重定向
io_redirect_bits_robIdx_value input 8 重定向ROB索引值
io_redirect_bits_level input 1 重定向级别信号,表示重定向的优先级
io_csrCtrl_hd_misalign_st_enable input 1 控制Misalign Store启用信号,指示是否启用未对齐存储
io_stin_valid input 1 输入有效信号,指示是否有有效的存储指令
io_stin_bits_uop_ftqPtr_flag input 1 指令FTQ指针标志,标记指令在队列中的位置
io_stin_bits_uop_ftqPtr_value input 6 指令FTQ指针值,指示指令在队列中的位置
io_stin_bits_uop_ftqOffset input 4 指令FTQ偏移量,指示指令在队列中的偏移
io_stin_bits_uop_fuType input 35 功能单元类型,指示该指令使用的功能单元类型
io_stin_bits_uop_fuOpType input 9 功能单元操作类型,指示该指令执行的操作类型
io_stin_bits_uop_rfWen input 1 指令是否写入寄存器,表示是否更新寄存器值
io_stin_bits_uop_imm input 32 指令立即数,包含该指令中的常数值
io_stin_bits_uop_pdest input 8 指令目的寄存器编号,表示数据存储的目标寄存器
io_stin_bits_uop_robIdx_flag input 1 ROB索引标志,表示是否使用ROB索引
io_stin_bits_uop_robIdx_value input 8 ROB索引值,指示指令对应的ROB索引
io_stin_bits_uop_debugInfo_eliminatedMove input 1 指令优化消除的移动,标识指令是否被优化
io_stin_bits_uop_debugInfo_renameTime input 64 指令重命名时间,记录指令的重命名时间
io_stin_bits_uop_debugInfo_dispatchTime input 64 指令调度时间,记录指令进入调度队列的时间
io_stin_bits_uop_debugInfo_enqRsTime input 64 指令入队时间,记录指令进入执行队列的时间
io_stin_bits_uop_debugInfo_selectTime input 64 指令选择时间,记录指令被选中执行的时间
io_stin_bits_uop_debugInfo_issueTime input 64 指令发射时间,指示指令进入执行单元的时间
io_stin_bits_uop_debugInfo_writebackTime input 64 指令回写时间,表示指令将结果回写到寄存器的时间
io_stin_bits_uop_debugInfo_runahead_checkpoint_id input 64 预执行检查点ID,用于标记预执行阶段的检查点
io_stin_bits_uop_debugInfo_tlbFirstReqTime input 64 TLB首次请求时间,记录指令发起首次TLB请求的时间
io_stin_bits_uop_debugInfo_tlbRespTime input 64 TLB响应时间,记录指令收到TLB响应的时间
io_stin_bits_uop_lqIdx_flag input 1 Load Queue索引标志,指示是否使用Load Queue
io_stin_bits_uop_lqIdx_value input 7 Load Queue索引值,标识该指令在Load Queue中的位置
io_stin_bits_uop_sqIdx_flag input 1 Store Queue索引标志,指示是否使用Store Queue
io_stin_bits_uop_sqIdx_value input 6 Store Queue索引值,标识该指令在Store Queue中的位置
io_stin_bits_src_0 input 64 数据源0,提供给指令执行的数据源
io_stin_bits_isFirstIssue input 1 是否是第一次发射,表示指令是否首次被发射
io_misalign_stin_valid input 1 Misalign Store输入有效信号,指示Misalign Store是否接收有效数据
io_misalign_stin_bits_uop_exceptionVec_0 input 1 Misalign Store输入异常向量0,表示是否发生异常
io_misalign_stin_bits_uop_exceptionVec_1 input 1 Misalign Store输入异常向量1,表示是否发生异常
io_misalign_stin_bits_uop_exceptionVec_2 input 1 Misalign Store输入异常向量2,表示是否发生异常
io_misalign_stin_bits_uop_exceptionVec_4 input 1 Misalign Store输入异常向量4,表示是否发生异常
io_misalign_stin_bits_uop_exceptionVec_5 input 1 Misalign Store输入异常向量5,表示是否发生异常
io_misalign_stin_bits_uop_exceptionVec_8 input 1 Misalign Store输入异常向量8,表示是否发生异常
io_misalign_stin_bits_uop_exceptionVec_9 input 1 Misalign Store输入异常向量9,表示是否发生异常
io_misalign_stin_bits_uop_exceptionVec_10 input 1 Misalign Store输入异常向量10,表示是否发生异常
io_misalign_stin_bits_uop_exceptionVec_11 input 1 Misalign Store输入异常向量11,表示是否发生异常
io_misalign_stin_bits_uop_exceptionVec_12 input 1 Misalign Store输入异常向量12,表示是否发生异常
io_misalign_stin_bits_uop_exceptionVec_13 input 1 Misalign Store输入异常向量13,表示是否发生异常
io_misalign_stin_bits_uop_exceptionVec_14 input 1 Misalign Store输入异常向量14,表示是否发生异常
io_misalign_stin_bits_uop_exceptionVec_16 input 1 Misalign Store输入异常向量16,表示是否发生异常
io_misalign_stin_bits_uop_exceptionVec_17 input 1 Misalign Store输入异常向量17,表示是否发生异常
io_misalign_stin_bits_uop_exceptionVec_18 input 1 Misalign Store输入异常向量18,表示是否发生异常
io_misalign_stin_bits_uop_exceptionVec_19 input 1 Misalign Store输入异常向量19,表示是否发生异常
io_misalign_stin_bits_uop_exceptionVec_20 input 1 Misalign Store输入异常向量20,表示是否发生异常
io_misalign_stin_bits_uop_exceptionVec_21 input 1 Misalign Store输入异常向量21,表示是否发生异常
io_misalign_stin_bits_uop_exceptionVec_22 input 1 Misalign Store输入异常向量22,表示是否发生异常
io_misalign_stin_bits_uop_ftqPtr_flag input 1 Misalign Store输入FTQ指针标志,表示指令位置
io_misalign_stin_bits_uop_ftqPtr_value input 6 Misalign Store输入FTQ指针值,指示指令在队列中的位置
io_misalign_stin_bits_uop_ftqOffset input 4 Misalign Store输入FTQ偏移量,表示指令在队列中的偏移
io_misalign_stin_bits_uop_fuType input 35 Misalign Store输入功能单元类型,表示指令所需的功能单元
io_misalign_stin_bits_uop_fuOpType input 9 Misalign Store输入功能单元操作类型,表示指令执行的操作类型
io_misalign_stin_bits_uop_rfWen input 1 Misalign Store输入是否写入寄存器,标识是否会更新寄存器
io_misalign_stin_bits_uop_vpu_vstart input 8 Misalign Store输入VPU向量起始位置,标识向量操作的起始位置
io_misalign_stin_bits_uop_vpu_nf input 3 Misalign Store输入VPU向量元素数,表示该向量操作的元素数量
io_misalign_stin_bits_uop_vpu_veew input 2 Misalign Store输入VPU向量元素宽度,表示向量的元素宽度
io_misalign_stin_bits_uop_uopIdx input 7 Misalign Store输入操作索引,表示该指令的操作索引
io_misalign_stin_bits_uop_pdest input 8 Misalign Store输入目的寄存器,表示存储的目标寄存器
io_misalign_stin_bits_uop_robIdx_flag input 1 Misalign Store输入ROB索引标志,表示是否使用ROB索引
io_misalign_stin_bits_uop_robIdx_value input 8 Misalign Store输入ROB索引值,表示该操作对应的ROB索引
io_misalign_stin_bits_uop_debugInfo_eliminatedMove input 1 Misalign Store输入优化消除的移动,表示该操作是否被优化消除
io_misalign_stin_bits_uop_debugInfo_renameTime input 64 Misalign Store输入指令重命名时间,记录指令的重命名时间
io_misalign_stin_bits_uop_debugInfo_dispatchTime input 64 Misalign Store输入指令调度时间,表示指令进入调度队列的时间
io_misalign_stin_bits_uop_debugInfo_enqRsTime input 64 Misalign Store输入指令入队时间,表示指令加入执行队列的时间
io_misalign_stin_bits_uop_debugInfo_selectTime input 64 Misalign Store输入指令选择时间,表示指令被选中执行的时间
io_misalign_stin_bits_uop_debugInfo_issueTime input 64 Misalign Store输入指令发射时间,表示指令发射到执行单元的时间
io_misalign_stin_bits_uop_debugInfo_writebackTime input 64 Misalign Store输入指令回写时间,表示指令回写结果的时间
io_misalign_stin_bits_uop_debugInfo_runahead_checkpoint_id input 64 Misalign Store输入指令预执行检查点ID,标记指令的预执行检查点
io_misalign_stin_bits_uop_debugInfo_tlbFirstReqTime input 64 Misalign Store输入指令TLB首次请求时间,表示该指令发起首次TLB请求的时间
io_misalign_stin_bits_uop_debugInfo_tlbRespTime input 64 Misalign Store输入指令TLB响应时间,表示该指令收到TLB响应的时间
io_misalign_stin_bits_uop_lqIdx_flag input 1 Misalign Store输入Load Queue索引标志,表示是否使用Load Queue
io_misalign_stin_bits_uop_lqIdx_value input 7 Misalign Store输入Load Queue索引值,标识该指令在Load Queue中的位置
io_misalign_stin_bits_uop_sqIdx_flag input 1 Misalign Store输入Store Queue索引标志,表示是否使用Store Queue
io_misalign_stin_bits_uop_sqIdx_value input 6 Misalign Store输入Store Queue索引值,标识该指令在Store Queue中的位置
io_misalign_stin_bits_vaddr input 50 Misalign Store输入虚拟地址,表示存储请求的虚拟地址
io_misalign_stin_bits_mask input 16 Misalign Store输入掩码,标识存储操作涉及的字节
io_misalign_stin_bits_isvec input 1 Misalign Store输入是否为向量操作,指示是否为向量Store指令
io_misalign_stin_bits_is128bit input 1 Misalign Store输入是否为128位操作,标识该操作是否为128位数据存储
io_misalign_stin_bits_isFinalSplit input 1 Misalign Store输入是否为最终分割,指示该操作是否为最后一次存储操作
io_tlb_resp_valid input 1 TLB响应有效信号,指示是否收到有效的TLB响应
io_tlb_resp_bits_paddr_0 input 48 TLB响应物理地址0,表示TLB响应中的物理地址
io_tlb_resp_bits_gpaddr_0 input 64 TLB响应通用物理地址0,提供对应的物理地址
io_tlb_resp_bits_fullva input 64 TLB响应完整虚拟地址,表示该指令请求的完整虚拟地址
io_tlb_resp_bits_pbmt_0 input 2 TLB响应页面映射类型0,指示TLB响应的页面映射类型
io_tlb_resp_bits_miss input 1 TLB响应是否命中,指示TLB是否命中请求的地址
io_tlb_resp_bits_isForVSnonLeafPTE input 1 TLB响应是否为非叶PTE,指示是否为虚拟化的非叶页面表项
io_tlb_resp_bits_excp_0_vaNeedExt input 1 TLB响应是否需要扩展虚拟地址,表示是否需要扩展地址
io_tlb_resp_bits_excp_0_isHyper input 1 TLB响应是否为Hypervisor模式的异常,表示TLB异常是否是超级管理模式
io_tlb_resp_bits_excp_0_gpf_st input 1 TLB响应是否为一般保护异常,指示TLB请求是否发生一般保护错误
io_tlb_resp_bits_excp_0_pf_st input 1 TLB响应是否为页面错误异常,指示TLB请求是否发生页面错误
io_tlb_resp_bits_excp_0_af_st input 1 TLB响应是否为地址错误异常,指示TLB请求是否发生地址错误
io_tlb_resp_bits_ptwBack input 1 TLB响应是否为物理地址翻译回写,表示TLB响应是否涉及物理地址回写
io_tlb_resp_bits_memidx_idx input 7 TLB响应内存索引索引,指示TLB响应所在的内存块索引
io_pmp_st input 1 PMP状态信号,表示是否为物理内存保护状态
io_pmp_mmio input 1 PMP内存映射IO信号,表示是否涉及内存映射IO
io_pmp_atomic input 1 PMP原子操作信号,表示是否为原子操作请求
io_prefetch_req_bits_vaddr input 50 预取请求的虚拟地址,表示请求的虚拟地址
io_vecstin_valid input 1 向量Store输入有效信号,指示是否有有效的输入数据
io_vecstin_bits_vaddr input 64 向量Store输入虚拟地址,表示该操作的虚拟地址
io_vecstin_bits_basevaddr input 50 向量Store输入基准虚拟地址,表示向量操作的基准虚拟地址
io_vecstin_bits_mask input 16 向量Store输入掩码,表示该向量操作涉及的字节
io_vecstin_bits_alignedType input 3 向量Store输入对齐类型,表示向量操作的对齐类型
io_vecstin_bits_vecActive input 1 向量Store输入是否为激活的向量操作
io_vecstin_bits_uop_exceptionVec_4 input 1 向量Store输入异常向量4,表示是否发生异常
io_vecstin_bits_uop_exceptionVec_5 input 1 向量Store输入异常向量5,表示是否发生异常
io_vecstin_bits_uop_exceptionVec_6 input 1 向量Store输入异常向量6,表示是否发生异常
io_vecstin_bits_uop_exceptionVec_13 input 1 向量Store输入异常向量13,表示是否发生异常
io_vecstin_bits_uop_exceptionVec_21 input 1 向量Store输入异常向量21,表示是否发生异常
io_vecstin_bits_uop_ftqPtr_flag input 1 向量Store输入FTQ指针标志,表示指令在队列中的位置
io_vecstin_bits_uop_ftqPtr_value input 6 向量Store输入FTQ指针值,指示指令在队列中的位置
io_vecstin_bits_uop_ftqOffset input 4 向量Store输入FTQ偏移量,表示指令在队列中的偏移
io_vecstin_bits_uop_fuType input 35 向量Store输入功能单元类型,表示指令所需的功能单元
io_vecstin_bits_uop_fuOpType input 9 向量Store输入功能单元操作类型,表示指令执行的操作类型
io_vecstin_bits_uop_rfWen input 1 向量Store输入是否写入寄存器,表示该指令是否会更新寄存器值
io_vecstin_bits_uop_vpu_vstart input 8 向量Store输入VPU向量起始位置,标识向量操作的起始位置
io_vecstin_bits_uop_vpu_nf input 3 向量Store输入VPU向量元素数,表示该向量操作的元素数量
io_vecstin_bits_uop_vpu_veew input 2 向量Store输入VPU向量元素宽度,表示向量的元素宽度
io_vecstin_bits_uop_uopIdx input 7 向量Store输入操作索引,表示该指令的操作索引
io_vecstin_bits_uop_pdest input 8 向量Store输入目的寄存器,表示存储的目标寄存器
io_vecstin_bits_uop_robIdx_flag input 1 向量Store输入ROB索引标志,表示是否使用ROB索引
io_vecstin_bits_uop_robIdx_value input 8 向量Store输入ROB索引值,表示该操作对应的ROB索引
io_vecstin_bits_uop_debugInfo_eliminatedMove input 1 向量Store输入优化消除的移动,标识该操作是否被优化消除
io_vecstin_bits_uop_debugInfo_renameTime input 64 向量Store输入指令重命名时间,表示该Store指令的重命名时间
io_vecstin_bits_uop_debugInfo_dispatchTime input 64 向量Store输入指令调度时间,表示该Store指令的调度时间
io_vecstin_bits_uop_debugInfo_enqRsTime input 64 向量Store输入指令入队时间,表示该Store指令的入队时间
io_vecstin_bits_uop_debugInfo_selectTime input 64 向量Store输入指令选择时间,表示该Store指令的选择时间
io_vecstin_bits_uop_debugInfo_issueTime input 64 向量Store输入指令发射时间,表示该Store指令的发射时间
io_vecstin_bits_uop_debugInfo_writebackTime input 64 向量Store输入指令回写时间,表示该Store指令的回写时间
io_vecstin_bits_uop_debugInfo_runahead_checkpoint_id input 64 向量Store输入指令预执行检查点ID,标记该Store指令的预执行阶段
io_vecstin_bits_uop_debugInfo_tlbFirstReqTime input 64 向量Store输入指令TLB首次请求时间,表示该Store指令的首次TLB请求时间
io_vecstin_bits_uop_debugInfo_tlbRespTime input 64 向量Store输入指令TLB响应时间,表示该Store指令的TLB响应时间
io_vecstin_bits_uop_lqIdx_flag input 1 向量Store输入Load Queue索引标志,指示是否使用Load Queue
io_vecstin_bits_uop_lqIdx_value input 7 向量Store输入Load Queue索引值,标识该指令在Load Queue中的位置
io_vecstin_bits_uop_sqIdx_flag input 1 向量Store输入Store Queue索引标志,指示是否使用Store Queue
io_vecstin_bits_uop_sqIdx_value input 6 向量Store输入Store Queue索引值,标识该指令在Store Queue中的位置
io_vecstin_bits_mBIndex input 4 向量Store输入块索引,标识该向量操作的块索引
io_vecstin_bits_elemIdx input 8 向量Store输入元素索引,标识该向量操作的元素索引
io_misalign_buf_ready input 1 Misalign缓冲区准备信号,指示Misalign操作是否准备好接收数据
io_fromCsrTrigger_tdataVec_0_matchType input 2 从CSR触发器接收的数据向量0匹配类型,指示匹配类型
io_fromCsrTrigger_tdataVec_0_select input 1 从CSR触发器接收的数据向量0选择标志,指示是否选择该向量
io_fromCsrTrigger_tdataVec_0_timing input 1 从CSR触发器接收的数据向量0定时标志,表示触发的定时信息
io_fromCsrTrigger_tdataVec_0_action input 4 从CSR触发器接收的数据向量0动作类型,表示触发动作
io_fromCsrTrigger_tdataVec_0_chain input 1 从CSR触发器接收的数据向量0链操作标志,指示是否为链操作
io_fromCsrTrigger_tdataVec_0_store input 1 从CSR触发器接收的数据向量0存储标志,指示是否为存储操作
io_fromCsrTrigger_tdataVec_0_tdata2 input 64 从CSR触发器接收的数据向量0附加数据2
io_fromCsrTrigger_tdataVec_1_matchType input 2 从CSR触发器接收的数据向量1匹配类型,指示匹配类型
io_fromCsrTrigger_tdataVec_1_select input 1 从CSR触发器接收的数据向量1选择标志,指示是否选择该向量
io_fromCsrTrigger_tdataVec_1_timing input 1 从CSR触发器接收的数据向量1定时标志,表示触发的定时信息
io_fromCsrTrigger_tdataVec_1_action input 4 从CSR触发器接收的数据向量1动作类型,表示触发动作
io_fromCsrTrigger_tdataVec_1_chain input 1 从CSR触发器接收的数据向量1链操作标志,指示是否为链操作
io_fromCsrTrigger_tdataVec_1_store input 1 从CSR触发器接收的数据向量1存储标志,指示是否为存储操作
io_fromCsrTrigger_tdataVec_1_tdata2 input 64 从CSR触发器接收的数据向量1附加数据2
io_fromCsrTrigger_tdataVec_2_matchType input 2 从CSR触发器接收的数据向量2匹配类型,指示匹配类型
io_fromCsrTrigger_tdataVec_2_select input 1 从CSR触发器接收的数据向量2选择标志,指示是否选择该向量
io_fromCsrTrigger_tdataVec_2_timing input 1 从CSR触发器接收的数据向量2定时标志,表示触发的定时信息
io_fromCsrTrigger_tdataVec_2_action input 4 从CSR触发器接收的数据向量2动作类型,表示触发动作
io_fromCsrTrigger_tdataVec_2_chain input 1 从CSR触发器接收的数据向量2链操作标志,指示是否为链操作
io_fromCsrTrigger_tdataVec_2_store input 1 从CSR触发器接收的数据向量2存储标志,指示是否为存储操作
io_fromCsrTrigger_tdataVec_2_tdata2 input 64 从CSR触发器接收的数据向量2附加数据2
io_fromCsrTrigger_tdataVec_3_matchType input 2 从CSR触发器接收的数据向量3匹配类型,指示匹配类型
io_fromCsrTrigger_tdataVec_3_select input 1 从CSR触发器接收的数据向量3选择标志,指示是否选择该向量
io_fromCsrTrigger_tdataVec_3_timing input 1 从CSR触发器接收的数据向量3定时标志,表示触发的定时信息
io_fromCsrTrigger_tdataVec_3_action input 4 从CSR触发器接收的数据向量3动作类型,表示触发动作
io_fromCsrTrigger_tdataVec_3_chain input 1 从CSR触发器接收的数据向量3链操作标志,指示是否为链操作
io_fromCsrTrigger_tdataVec_3_store input 1 从CSR触发器接收的数据向量3存储标志,指示是否为存储操作
io_fromCsrTrigger_tdataVec_3_tdata2 input 64 从CSR触发器接收的数据向量3附加数据2
io_fromCsrTrigger_tEnableVec_0 input 1 从CSR触发器接收的启用信号0,指示是否启用该向量
io_fromCsrTrigger_tEnableVec_1 input 1 从CSR触发器接收的启用信号1,指示是否启用该向量
io_fromCsrTrigger_tEnableVec_2 input 1 从CSR触发器接收的启用信号2,指示是否启用该向量
io_fromCsrTrigger_tEnableVec_3 input 1 从CSR触发器接收的启用信号3,指示是否启用该向量
io_fromCsrTrigger_debugMode input 1 从CSR触发器接收的调试模式标志,指示是否为调试模式
io_fromCsrTrigger_triggerCanRaiseBpExp input 1 从CSR触发器接收的触发是否可以引发BP异常标志

输出接口

信号名 方向 位宽 描述
io_stin_ready output 1 输入准备信号,指示是否准备好接收数据
io_issue_valid output 1 指令有效信号,指示该指令是否有效
io_issue_bits_uop_robIdx_flag output 1 指令ROB索引标志,标示该指令是否使用ROB索引
io_issue_bits_uop_robIdx_value output 8 指令ROB索引值,提供该指令的ROB索引
io_misalign_stin_ready output 1 Misalign Store输入准备信号,指示Misalign Store是否准备好接收数据
io_misalign_stout_valid output 1 Misalign Store输出有效信号,指示是否有有效的输出结果
io_misalign_stout_bits_uop_exceptionVec_3 output 1 Misalign Store输出异常向量3,表示该异常是否发生
io_misalign_stout_bits_uop_exceptionVec_6 output 1 Misalign Store输出异常向量6,表示该异常是否发生
io_misalign_stout_bits_uop_exceptionVec_7 output 1 Misalign Store输出异常向量7,表示该异常是否发生
io_misalign_stout_bits_uop_exceptionVec_15 output 1 Misalign Store输出异常向量15,表示该异常是否发生
io_misalign_stout_bits_uop_exceptionVec_23 output 1 Misalign Store输出异常向量23,表示该异常是否发生
io_misalign_stout_bits_uop_trigger output 4 Misalign Store输出触发器,标记触发的异常类型
io_misalign_stout_bits_paddr output 48 Misalign Store输出物理地址,表示该操作的目标物理地址
io_misalign_stout_bits_mmio output 1 Misalign Store输出是否为MMIO操作,标识是否为内存映射IO操作
io_misalign_stout_bits_vecActive output 1 Misalign Store向量激活标志,指示是否为有效的向量存储操作
io_misalign_stout_bits_need_rep output 1 Misalign Store输出是否需要重发标志,指示该操作是否需要重发
io_tlb_req_valid output 1 TLB请求有效信号,指示是否有有效的TLB请求
io_tlb_req_bits_vaddr output 50 TLB请求的虚拟地址,提供请求的虚拟地址
io_tlb_req_bits_fullva output 64 TLB请求的完整虚拟地址,包含更多的地址信息
io_tlb_req_bits_checkfullva output 1 TLB检查完整虚拟地址信号,指示是否检查完整地址
io_tlb_req_bits_hyperinst output 1 TLB请求的超指令标志,表示是否为超指令请求
io_tlb_req_bits_memidx_idx output 7 TLB请求的内存索引,标识内存请求的索引
io_tlb_req_bits_debug_robIdx_flag output 1 TLB请求的ROB索引调试标志,调试用
io_tlb_req_bits_debug_robIdx_value output 8 TLB请求的ROB索引值,调试用
io_tlb_req_bits_debug_isFirstIssue output 1 TLB请求的首次发射标志,指示是否是第一次发射
io_dcache_req_valid output 1 数据缓存请求有效信号,表示是否有有效的数据缓存请求
io_lsq_valid output 1 Load Store Queue有效信号,表示是否有有效的Load/Store指令
io_lsq_bits_uop_exceptionVec_0 output 1 LSQ异常向量0,表示是否发生异常
io_lsq_bits_uop_exceptionVec_1 output 1 LSQ异常向量1,表示是否发生异常
io_lsq_bits_uop_exceptionVec_2 output 1 LSQ异常向量2,表示是否发生异常
io_lsq_bits_uop_exceptionVec_3 output 1 LSQ异常向量3,表示是否发生异常
io_lsq_bits_uop_exceptionVec_4 output 1 LSQ异常向量4,表示是否发生异常
io_lsq_bits_uop_exceptionVec_5 output 1 LSQ异常向量5,表示是否发生异常
io_lsq_bits_uop_exceptionVec_6 output 1 LSQ异常向量6,表示是否发生异常
io_lsq_bits_uop_exceptionVec_7 output 1 LSQ异常向量7,表示是否发生异常
io_lsq_bits_uop_exceptionVec_8 output 1 LSQ异常向量8,表示是否发生异常
io_lsq_bits_uop_exceptionVec_9 output 1 LSQ异常向量9,表示是否发生异常
io_lsq_bits_uop_exceptionVec_10 output 1 LSQ异常向量10,表示是否发生异常
io_lsq_bits_uop_exceptionVec_11 output 1 LSQ异常向量11,表示是否发生异常
io_lsq_bits_uop_exceptionVec_12 output 1 LSQ异常向量12,表示是否发生异常
io_lsq_bits_uop_exceptionVec_13 output 1 LSQ异常向量13,表示是否发生异常
io_lsq_bits_uop_exceptionVec_14 output 1 LSQ异常向量14,表示是否发生异常
io_lsq_bits_uop_exceptionVec_15 output 1 LSQ异常向量15,表示是否发生异常
io_lsq_bits_uop_exceptionVec_16 output 1 LSQ异常向量16,表示是否发生异常
io_lsq_bits_uop_exceptionVec_17 output 1 LSQ异常向量17,表示是否发生异常
io_lsq_bits_uop_exceptionVec_18 output 1 LSQ异常向量18,表示是否发生异常
io_lsq_bits_uop_exceptionVec_19 output 1 LSQ异常向量19,表示是否发生异常
io_lsq_bits_uop_exceptionVec_20 output 1 LSQ异常向量20,表示是否发生异常
io_lsq_bits_uop_exceptionVec_21 output 1 LSQ异常向量21,表示是否发生异常
io_lsq_bits_uop_exceptionVec_22 output 1 LSQ异常向量22,表示是否发生异常
io_lsq_bits_uop_exceptionVec_23 output 1 LSQ异常向量23,表示是否发生异常
io_lsq_bits_uop_trigger output 4 Load Store Queue操作触发器,表示触发的异常类型
io_lsq_bits_uop_ftqPtr_flag output 1 Load Store Queue FTQ指针标志,标记指令在队列中的位置
io_lsq_bits_uop_ftqPtr_value output 6 Load Store Queue FTQ指针值,指示指令在队列中的位置
io_lsq_bits_uop_ftqOffset output 4 Load Store Queue FTQ偏移量,表示指令在队列中的偏移
io_lsq_bits_uop_fuType output 35 Load Store Queue功能单元类型,表示指令所需的功能单元
io_lsq_bits_uop_fuOpType output 9 Load Store Queue功能单元操作类型,表示指令执行的操作类型
io_lsq_bits_uop_rfWen output 1 Load Store Queue是否写入寄存器,表示该指令是否会更新寄存器值
io_lsq_bits_uop_vpu_nf output 3 Load Store Queue VPU向量元素数,表示该向量操作的元素数量
io_lsq_bits_uop_vpu_veew output 2 Load Store Queue VPU向量元素宽度,表示向量的元素宽度
io_lsq_bits_uop_uopIdx output 7 Load Store Queue操作索引,表示该指令的操作索引
io_lsq_bits_uop_pdest output 8 Load Store Queue目的寄存器,表示存储的目标寄存器
io_lsq_bits_uop_robIdx_flag output 1 Load Store Queue ROB索引标志,表示是否使用ROB索引
io_lsq_bits_uop_robIdx_value output 8 Load Store Queue ROB索引值,表示该Store操作对应的ROB索引
io_lsq_bits_uop_debugInfo_eliminatedMove output 1 Load Store Queue优化消除的移动,标识该Store是否优化消除
io_lsq_bits_uop_debugInfo_renameTime output 64 Load Store Queue重命名时间,表示该指令的重命名时间
io_lsq_bits_uop_debugInfo_dispatchTime output 64 Load Store Queue调度时间,表示指令调度的时间
io_lsq_bits_uop_debugInfo_enqRsTime output 64 Load Store Queue入队时间,表示指令入队的时间
io_lsq_bits_uop_debugInfo_selectTime output 64 Load Store Queue选择时间,表示指令选择的时间
io_lsq_bits_uop_debugInfo_issueTime output 64 Load Store Queue发射时间,表示指令发射的时间
io_lsq_bits_uop_debugInfo_writebackTime output 64 Load Store Queue回写时间,表示指令回写的时间
io_lsq_bits_uop_debugInfo_runahead_checkpoint_id output 64 Load Store Queue预执行检查点ID,标记该指令的预执行阶段
io_lsq_bits_uop_debugInfo_tlbFirstReqTime output 64 Load Store Queue TLB首次请求时间,表示该指令发起TLB请求的时间
io_lsq_bits_uop_debugInfo_tlbRespTime output 64 Load Store Queue TLB响应时间,表示该指令接收到TLB响应的时间
io_lsq_bits_uop_sqIdx_flag output 1 Load Store Queue Store Queue索引标志,指示是否涉及Store Queue
io_lsq_bits_uop_sqIdx_value output 6 Load Store Queue Store Queue索引值,标识该指令在Store Queue中的位置
io_lsq_bits_vaddr output 50 Load Store Queue虚拟地址,表示请求的虚拟地址
io_lsq_bits_fullva output 64 Load Store Queue完整虚拟地址,表示请求的完整虚拟地址
io_lsq_bits_vaNeedExt output 1 Load Store Queue虚拟地址是否需要扩展,指示是否需要扩展虚拟地址
io_lsq_bits_paddr output 48 Load Store Queue物理地址,表示指令执行后的物理地址
io_lsq_bits_gpaddr output 64 Load Store Queue通用物理地址,表示指令执行后的物理地址
io_lsq_bits_mask output 16 Load Store Queue掩码,指示数据存储操作涉及的字节
io_lsq_bits_wlineflag output 1 Load Store Queue是否为写回标志,表示是否写回数据
io_lsq_bits_miss output 1 Load Store Queue未命中标志,表示该存储请求是否命中
io_lsq_bits_nc output 1 Load Store Queue非一致性标志,表示该操作是否为非一致性操作
io_lsq_bits_isHyper output 1 Load Store Queue是否为超级管理模式,指示该操作是否为超级管理模式
io_lsq_bits_isForVSnonLeafPTE output 1 Load Store Queue是否为非叶PTE,指示是否为非叶页面表项操作
io_lsq_bits_isvec output 1 Load Store Queue是否为向量操作,指示是否为向量Store指令
io_lsq_bits_isFrmMisAlignBuf output 1 Load Store Queue是否为误对齐缓存操作,指示是否为误对齐操作
io_lsq_bits_isMisalign output 1 Load Store Queue是否为误对齐操作,指示是否为误对齐存储操作
io_lsq_bits_misalignWith16Byte output 1 Load Store Queue是否为16字节对齐的误对齐操作
io_lsq_bits_updateAddrValid output 1 Load Store Queue地址更新有效信号,指示是否有有效的地址更新
io_lsq_replenish_uop_exceptionVec_3 output 1 Load Store Queue重新补充操作异常向量3,表示该异常是否发生
io_lsq_replenish_uop_exceptionVec_6 output 1 Load Store Queue重新补充操作异常向量6,表示该异常是否发生
io_lsq_replenish_uop_exceptionVec_15 output 1 Load Store Queue重新补充操作异常向量15,表示该异常是否发生
io_lsq_replenish_uop_exceptionVec_23 output 1 Load Store Queue重新补充操作异常向量23,表示该异常是否发生
io_lsq_replenish_uop_uopIdx output 7 Load Store Queue重新补充操作索引,表示该指令的操作索引
io_lsq_replenish_uop_robIdx_flag output 1 Load Store Queue重新补充操作ROB索引标志,指示是否使用ROB索引
io_lsq_replenish_uop_robIdx_value output 8 Load Store Queue重新补充操作ROB索引值,表示该操作对应的ROB索引
io_lsq_replenish_fullva output 64 Load Store Queue重新补充操作完整虚拟地址,表示该操作的完整虚拟地址
io_lsq_replenish_vaNeedExt output 1 Load Store Queue重新补充操作是否需要扩展虚拟地址
io_lsq_replenish_gpaddr output 64 Load Store Queue重新补充操作物理地址,表示该操作的目标物理地址
io_lsq_replenish_af output 1 Load Store Queue重新补充操作是否为地址错误标志,表示是否发生地址错误
io_lsq_replenish_mmio output 1 Load Store Queue重新补充操作是否为MMIO操作,标示是否为内存映射IO操作
io_lsq_replenish_memBackTypeMM output 1 Load Store Queue重新补充操作是否为内存回写标志,表示是否为内存回写操作
io_lsq_replenish_atomic output 1 Load Store Queue重新补充操作是否为原子操作,指示是否为原子操作
io_lsq_replenish_hasException output 1 Load Store Queue重新补充操作是否包含异常,表示是否发生异常
io_lsq_replenish_isHyper output 1 Load Store Queue重新补充操作是否为超级管理模式操作,表示是否为超级管理模式操作
io_lsq_replenish_isForVSnonLeafPTE output 1 Load Store Queue重新补充操作是否为非叶PTE,指示是否为非叶页面表项操作
io_lsq_replenish_isvec output 1 Load Store Queue重新补充操作是否为向量操作,表示是否为向量Store指令
io_lsq_replenish_updateAddrValid output 1 Load Store Queue重新补充操作地址更新有效信号,指示是否有有效的地址更新
io_feedback_slow_valid output 1 反馈慢操作有效信号,表示是否有有效的反馈慢操作
io_feedback_slow_bits_robIdx_flag output 1 反馈慢操作ROB索引标志,指示是否涉及ROB索引
io_feedback_slow_bits_robIdx_value output 8 反馈慢操作ROB索引值,表示该操作对应的ROB索引
io_feedback_slow_bits_hit output 1 反馈慢操作命中标志,表示是否命中目标地址
io_feedback_slow_bits_flushState output 1 反馈慢操作刷新状态标志,表示是否需要刷新状态
io_feedback_slow_bits_sqIdx_flag output 1 反馈慢操作Store Queue索引标志,指示是否涉及Store Queue
io_feedback_slow_bits_sqIdx_value output 6 反馈慢操作Store Queue索引值,标识该操作在Store Queue中的位置
io_feedback_slow_bits_lqIdx_flag output 1 反馈慢操作Load Queue索引标志,指示是否涉及Load Queue
io_feedback_slow_bits_lqIdx_value output 7 反馈慢操作Load Queue索引值,标识该操作在Load Queue中的位置
io_stld_nuke_query_valid output 1 Store Load查询有效信号,表示是否有有效的Store Load查询
io_stld_nuke_query_bits_robIdx_flag output 1 Store Load查询ROB索引标志,指示是否涉及ROB
io_stld_nuke_query_bits_robIdx_value output 8 Store Load查询的ROB索引值
io_stld_nuke_query_bits_paddr output 48 Store Load查询的物理地址
io_stld_nuke_query_bits_mask output 16 Store Load查询的掩码
io_stld_nuke_query_bits_matchLine output 1 Store Load查询的匹配行标志,表示是否匹配
io_stout_valid output 1 Store操作有效信号,表示是否有有效的Store操作
io_stout_bits_uop_exceptionVec_3 output 1 Store输出异常向量3,表示该异常是否发生
io_stout_bits_uop_exceptionVec_6 output 1 Store输出异常向量6,表示该异常是否发生
io_stout_bits_uop_exceptionVec_7 output 1 Store输出异常向量7,表示该异常是否发生
io_stout_bits_uop_exceptionVec_15 output 1 Store输出异常向量15,表示该异常是否发生
io_stout_bits_uop_exceptionVec_23 output 1 Store输出异常向量23,表示该异常是否发生
io_stout_bits_uop_trigger output 4 Store操作触发器,标记触发的异常类型
io_stout_bits_uop_rfWen output 1 Store是否写入寄存器,表示该指令是否会更新寄存器
io_stout_bits_uop_pdest output 8 Store目的寄存器,表示该操作的目标寄存器
io_stout_bits_uop_robIdx_flag output 1 Store ROB索引标志,指示是否使用ROB索引
io_stout_bits_uop_robIdx_value output 8 Store ROB索引值,表示该操作对应的ROB索引
io_stout_bits_uop_debugInfo_eliminatedMove output 1 Store输出优化消除的移动,表示该Store是否优化消除
io_stout_bits_uop_debugInfo_renameTime output 64 Store输出指令重命名时间,表示该Store指令的重命名时间
io_stout_bits_uop_debugInfo_dispatchTime output 64 Store输出指令调度时间,表示该Store指令的调度时间
io_stout_bits_uop_debugInfo_enqRsTime output 64 Store输出指令入队时间,表示该Store指令的入队时间
io_stout_bits_uop_debugInfo_selectTime output 64 Store输出指令选择时间,表示该Store指令的选择时间
io_stout_bits_uop_debugInfo_issueTime output 64 Store输出指令发射时间,表示该Store指令的发射时间
io_stout_bits_uop_debugInfo_writebackTime output 64 Store输出指令回写时间,表示该Store指令的回写时间
io_stout_bits_uop_debugInfo_runahead_checkpoint_id output 64 Store输出指令预执行检查点ID,标记该Store指令的预执行检查点
io_stout_bits_uop_debugInfo_tlbFirstReqTime output 64 Store输出指令TLB首次请求时间,表示该Store指令的首次TLB请求时间
io_stout_bits_uop_debugInfo_tlbRespTime output 64 Store输出指令TLB响应时间,表示该Store指令的TLB响应时间
io_stout_bits_uop_sqIdx_flag output 1 Store输出Store Queue索引标志,指示是否使用Store Queue
io_stout_bits_uop_sqIdx_value output 6 Store输出Store Queue索引值,标识该Store操作在Store Queue中的位置
io_stout_bits_debug_isMMIO output 1 Store输出是否为MMIO操作,标示该Store操作是否为内存映射IO操作
io_stout_bits_debug_isNC output 1 Store输出是否为非一致性操作,指示该操作是否为非一致性操作
io_stout_bits_debug_paddr output 48 Store输出物理地址,表示该操作的目标物理地址
io_stout_bits_debug_vaddr output 50 Store输出虚拟地址,表示该操作的目标虚拟地址
io_vecstout_valid output 1 向量Store结果有效信号,表示是否有有效的向量Store结果
io_vecstout_bits_mBIndex output 4 向量Store块索引,标识该向量Store操作的块索引
io_vecstout_bits_hit output 1 向量Store命中标志,表示该向量Store操作是否命中目标地址
io_vecstout_bits_trigger output 4 向量Store触发器,标识触发的异常类型
io_vecstout_bits_exceptionVec_3 output 1 向量Store异常向量3,表示该异常是否发生
io_vecstout_bits_exceptionVec_6 output 1 向量Store异常向量6,表示该异常是否发生
io_vecstout_bits_exceptionVec_7 output 1 向量Store异常向量7,表示该异常是否发生
io_vecstout_bits_exceptionVec_15 output 1 向量Store异常向量15,表示该异常是否发生
io_vecstout_bits_exceptionVec_23 output 1 向量Store异常向量23,表示该异常是否发生
io_vecstout_bits_hasException output 1 向量Store是否有异常,表示是否发生异常
io_vecstout_bits_vaddr output 64 向量Store虚拟地址,表示该操作的目标虚拟地址
io_vecstout_bits_vaNeedExt output 1 向量Store虚拟地址扩展标志,指示是否需要扩展虚拟地址
io_vecstout_bits_gpaddr output 64 向量Store物理地址,表示该操作的目标物理地址
io_vecstout_bits_isForVSnonLeafPTE output 1 向量Store是否为非叶PTE,表示是否为非叶页面表项操作
io_vecstout_bits_vstart output 8 向量Store起始位置,表示该向量操作的起始位置
io_vecstout_bits_elemIdx output 8 向量Store元素索引,标识该向量操作的元素索引
io_vecstout_bits_mask output 16 向量Store掩码,标识该向量操作的有效位掩码
io_st_mask_out_valid output 1 Store Mask操作有效信号,指示是否有有效的存储掩码操作
io_st_mask_out_bits_sqIdx_value output 6 Store Mask操作Store Queue索引值,表示该掩码操作在Store Queue中的位置
io_st_mask_out_bits_mask output 16 Store Mask操作掩码,表示存储操作涉及的字节掩码
io_vecstin_ready output 1 向量Store输入准备信号,指示向量Store是否准备好接收数据
io_misalign_buf_valid output 1 Misalign缓冲区有效信号,表示是否有有效的数据
io_misalign_buf_bits_uop_exceptionVec_0 output 1 Misalign缓冲区异常向量0,表示是否发生异常
io_misalign_buf_bits_uop_exceptionVec_1 output 1 Misalign缓冲区异常向量1,表示是否发生异常
io_misalign_buf_bits_uop_exceptionVec_2 output 1 Misalign缓冲区异常向量2,表示是否发生异常
io_misalign_buf_bits_uop_exceptionVec_4 output 1 Misalign缓冲区异常向量4,表示是否发生异常
io_misalign_buf_bits_uop_exceptionVec_5 output 1 Misalign缓冲区异常向量5,表示是否发生异常
io_misalign_buf_bits_uop_exceptionVec_8 output 1 Misalign缓冲区异常向量8,表示是否发生异常
io_misalign_buf_bits_uop_exceptionVec_9 output 1 Misalign缓冲区异常向量9,表示是否发生异常
io_misalign_buf_bits_uop_exceptionVec_10 output 1 Misalign缓冲区异常向量10,表示是否发生异常
io_misalign_buf_bits_uop_exceptionVec_11 output 1 Misalign缓冲区异常向量11,表示是否发生异常
io_misalign_buf_bits_uop_exceptionVec_12 output 1 Misalign缓冲区异常向量12,表示是否发生异常
io_misalign_buf_bits_uop_exceptionVec_13 output 1 Misalign缓冲区异常向量13,表示是否发生异常
io_misalign_buf_bits_uop_exceptionVec_14 output 1 Misalign缓冲区异常向量14,表示是否发生异常
io_misalign_buf_bits_uop_exceptionVec_16 output 1 Misalign缓冲区异常向量16,表示是否发生异常
io_misalign_buf_bits_uop_exceptionVec_17 output 1 Misalign缓冲区异常向量17,表示是否发生异常
io_misalign_buf_bits_uop_exceptionVec_18 output 1 Misalign缓冲区异常向量18,表示是否发生异常
io_misalign_buf_bits_uop_exceptionVec_19 output 1 Misalign缓冲区异常向量19,表示是否发生异常
io_misalign_buf_bits_uop_exceptionVec_20 output 1 Misalign缓冲区异常向量20,表示是否发生异常
io_misalign_buf_bits_uop_exceptionVec_21 output 1 Misalign缓冲区异常向量21,表示是否发生异常
io_misalign_buf_bits_uop_exceptionVec_22 output 1 Misalign缓冲区异常向量22,表示是否发生异常
io_misalign_buf_bits_uop_trigger output 4 Misalign缓冲区触发器,表示触发的异常类型
io_misalign_buf_bits_uop_ftqPtr_flag output 1 Misalign缓冲区FTQ指针标志,表示指令位置
io_misalign_buf_bits_uop_ftqPtr_value output 6 Misalign缓冲区FTQ指针值,指示指令在队列中的位置
io_misalign_buf_bits_uop_ftqOffset output 4 Misalign缓冲区FTQ偏移量,表示指令在队列中的偏移
io_misalign_buf_bits_uop_fuType output 35 Misalign缓冲区功能单元类型,表示指令所需的功能单元
io_misalign_buf_bits_uop_fuOpType output 9 Misalign缓冲区功能单元操作类型,表示指令执行的操作类型
io_misalign_buf_bits_uop_rfWen output 1 Misalign缓冲区是否写入寄存器,表示该指令是否会更新寄存器
io_misalign_buf_bits_uop_vpu_vstart output 8 Misalign缓冲区VPU向量起始位置,表示向量操作的起始位置
io_misalign_buf_bits_uop_vpu_nf output 3 Misalign缓冲区VPU向量元素数,表示该向量操作的元素数量
io_misalign_buf_bits_uop_vpu_veew output 2 Misalign缓冲区VPU向量元素宽度,表示向量的元素宽度
io_misalign_buf_bits_uop_uopIdx output 7 Misalign缓冲区操作索引,表示该指令的操作索引
io_misalign_buf_bits_uop_pdest output 8 Misalign缓冲区目的寄存器,表示存储的目标寄存器
io_misalign_buf_bits_uop_robIdx_flag output 1 Misalign缓冲区ROB索引标志,表示是否使用ROB索引
io_misalign_buf_bits_uop_robIdx_value output 8 Misalign缓冲区ROB索引值,表示该操作对应的ROB索引
io_misalign_buf_bits_uop_debugInfo_eliminatedMove output 1 Misalign缓冲区优化消除的移动,标识该操作是否被优化消除
io_misalign_buf_bits_uop_debugInfo_renameTime output 64 Misalign缓冲区指令重命名时间,记录指令的重命名时间
io_misalign_buf_bits_uop_debugInfo_dispatchTime output 64 Misalign缓冲区指令调度时间,记录指令调度的时间
io_misalign_buf_bits_uop_debugInfo_enqRsTime output 64 Misalign缓冲区指令入队时间,表示指令加入执行队列的时间
io_misalign_buf_bits_uop_debugInfo_selectTime output 64 Misalign缓冲区指令选择时间,表示指令被选中执行的时间
io_misalign_buf_bits_uop_debugInfo_issueTime output 64 Misalign缓冲区指令发射时间,表示指令发射到执行单元的时间
io_misalign_buf_bits_uop_debugInfo_writebackTime output 64 Misalign缓冲区指令回写时间,表示指令回写的时间
io_misalign_buf_bits_uop_debugInfo_runahead_checkpoint_id output 64 Misalign缓冲区预执行检查点ID,标记指令的预执行阶段
io_misalign_buf_bits_uop_debugInfo_tlbFirstReqTime output 64 Misalign缓冲区指令TLB首次请求时间,表示该指令发起TLB请求的时间
io_misalign_buf_bits_uop_debugInfo_tlbRespTime output 64 Misalign缓冲区指令TLB响应时间,表示该指令收到TLB响应的时间
io_misalign_buf_bits_uop_lqIdx_flag output 1 Misalign缓冲区Load Queue索引标志,指示是否使用Load Queue
io_misalign_buf_bits_uop_lqIdx_value output 7 Misalign缓冲区Load Queue索引值,标识该指令在Load Queue中的位置
io_misalign_buf_bits_uop_sqIdx_flag output 1 Misalign缓冲区Store Queue索引标志,指示是否使用Store Queue
io_misalign_buf_bits_uop_sqIdx_value output 6 Misalign缓冲区Store Queue索引值,标识该指令在Store Queue中的位置
io_misalign_buf_bits_vaddr output 50 Misalign缓冲区虚拟地址,表示存储请求的虚拟地址
io_misalign_buf_bits_vaNeedExt output 1 Misalign缓冲区虚拟地址是否需要扩展,指示是否需要扩展虚拟地址
io_misalign_buf_bits_paddr output 48 Misalign缓冲区物理地址,表示该操作的目标物理地址
io_misalign_buf_bits_gpaddr output 64 Misalign缓冲区通用物理地址,表示该操作的目标物理地址
io_misalign_buf_bits_mask output 16 Misalign缓冲区掩码,表示存储操作涉及的字节
io_misalign_buf_bits_hasException output 1 Misalign缓冲区是否包含异常,表示是否发生异常
io_misalign_buf_bits_isForVSnonLeafPTE output 1 Misalign缓冲区是否为非叶PTE操作,表示是否为非叶页面表项操作
io_misalign_buf_bits_isvec output 1 Misalign缓冲区是否为向量操作,表示是否为向量Store指令
io_misalign_buf_bits_elemIdx output 8 Misalign缓冲区元素索引,表示该向量操作的元素索引
io_misalign_buf_bits_alignedType output 3 Misalign缓冲区对齐类型,表示向量操作的对齐类型
io_misalign_buf_bits_mbIndex output 4 Misalign缓冲区块索引,表示该向量操作的块索引
io_s0_s1_valid output 1 S0/S1有效信号,指示S0/S1阶段是否有效

接口时序

接口时序实例

StoreUnit接口时序

测试点总表

序号 功能名称 测试点名称 描述
1.1 SU_DISPATCH SCALAR_DISPATCH 验证标量Store指令派发时分配一个StoreQueue条目。
1.2 SU_DISPATCH VECTOR_DISPATCH 验证向量Store指令的一个uop分配多个LSQ条目(根据元素数量)。
2.1 SU_STORE S0_ADDRESS_CALC 验证s0阶段地址计算和仲裁是否按三类指令优先级排序。
2.2 SU_STORE S1_RAW_CHECK 验证s1阶段RAW冒险检测发生。
2.3 SU_STORE S2_SQ_MARK_READY 验证s2阶段StoreQueue地址就绪标记。
3.1 SU_VECTOR SPLIT 验证向量指令拆分正确性。
3.2 SU_VECTOR OFFSET 验证向量元素偏移地址计算。
4 SU_REPLAY TLB_MISS 验证TLB缺失时Store指令重发。
5.1 SU_RAW VIOLATION 验证RAW违例检测。
5.2 SU_RAW RECOVERY_MECH 验证检测到RAW违例后的恢复(流水线清空)。
6.1 SU_SBUFFER WRITE_MERGE 验证同一缓存块的多个Store在SBuffer中合并。
6.2 SU_SBUFFER PLRU_REPLACE 验证SBuffer满时按PLRU策略替换。
7.1 SU_MMIO ORDER 验证MMIO指令强顺序执行(成为ROB头)。
7.2 SU_MMIO EXCEPTION 验证原子/向量指令访问MMIO触发异常。
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 EXCEPTION 验证原子指令、MMIO、NC空间非对齐访问触发异常。

2 - 微报告模板

SCALAR_DISPATCH 测试点

功能描述

本测试点验证标量Store指令(如sb、sh、sw、sd)从发射队列派发到StoreUnit时,是否正确分配一个StoreQueue(SQ)条目。测试确保指令派发机制正常工作,包括SQ索引分配、状态标记和信号交互。这是StoreUnit最基本的功能,涉及指令派发流水线的初始阶段。

输入参数

  • 虚拟地址(vaddr)​​:0x1000
  • 存储数据(data)​​:0x12345678
  • 存储大小(size)​​:1、2、4、8字节
  • 首次派发标志(is_first_issue)​​:true或false
  • 指令类型​:通过fuOpType设置

输出验证

  • 派发成功信号​:io_stin_ready和io_stin_valid同时为高,表示指令被接收。
  • SQ条目分配​:io_lsq_valid为高,且io_lsq_bits_updateAddrValid为高,表示SQ地址更新有效。
  • SQ索引范围​:io_lsq_bits_uop_sqIdx_value在0到SQ_SIZE-1之间(如0-63)。
  • 状态标记​:SQ条目中的valid位被设置为1,robIdx正确记录。
  • 后续准备​:io_stin_ready保持为高,表示可接收新指令。

边界条件分析

  1. 不同存储大小​:测试了1字节(sb)、2字节(sh)、4字节(sw)和8字节(sd)指令,确保所有大小都能正确分配SQ条目。
  2. 地址对齐​:测试对齐地址(如0x1000)和不对齐地址(如0x1001),验证地址计算不影响派发。
  3. 首次派发与重发​:设置is_first_issue为true和false,模拟首次派发和重发场景,确保重发机制不干扰SQ分配。
  4. ​SQ容量边界​:通过多次派发指令,测试SQ接近满时的行为,确保索引不溢出。
  5. 信号时序​:验证在时钟上升沿信号稳定,避免时序问题导致派发失败。

结果总结

测试通过,所有验证点均符合预期。标量Store指令派发功能正常,SQ条目分配正确,边界条件处理稳健。覆盖了标量存储的所有大小类型和常见地址场景,为后续流水线阶段提供了可靠基础。无异常或错误发生,测试完整性高。