Page 51 - 《软件学报》2025年第9期
P. 51

3962                                                       软件学报  2025  年第  36  卷第  9  期


                 Spike 原有的缓存模型使用了简单的软件指令缓存来提升仿真速度. 当访问指令缓存时, 如果命中, 直接通过软件
                 指令缓存进行访问; 如果未命中, 则通过重新填充软件指令缓存进行访问. 为了不降低仿真速度, Spike-FlexiCAS
                 保留了软件指令缓存结构. 同时, 无论软件指令缓存是否命中, 地址转换完成后, 都会将指令读取请求同步到
                 FlexiCAS  的读接口. 清理/失效缓存块行为用于支持          RISC-V  指令集中   cbo_clean、cbo_flush 和 cbo_inval 等缓存
                 一致性维护指令. 执行清理/失效缓存块时, 将清理/失效请求同步至对应的                     FlexiCAS  写回/冲刷接口.
































                                             图 5 使用   FlexiCAS  如何搭建三级缓存

                 3.2   硬件  TLB
                    Spike 原有的软件   TLB  模块采用单级     TLB  结构, 表项仅记录主机地址与物理地址相对于虚拟地址的偏移, 不
                 访问缓存, 其设计目的是加速仿真速度. Spike-FlexiCAS         在保留软件    TLB  的基础上, 添加了硬件      TLB, 以兼顾仿真
                 速度和真实模拟      TLB  对缓存的影响. Spike-FlexiCAS  的硬件  TLB 架构基于    Coffee Lake (Intel Gen 9) 的二级  TLB
                 设计  [34] , 其中一级指令  TLB  与数据  TLB  共享二级  TLB.
                    Spike-FlexiCAS  的硬件  TLB  主要提供  3  个接口供  MMU  使用: (1) 地址转换: 将虚拟地址转换为物理地址. 如
                 果  TLB  命中, 返回  TLB  表项; 如果未命中, 则需要进行页表遍历         (walk) 操作并将结果填充到      TLB  中, 同时访问缓
                 存模型的一级缓存. (2) 冲刷      TLB: 清空  TLB  中的所有表项. (3) 地址转换函数模块: 封装地址转换函数, 以供 CSR
                 接口调用.

                 3.3   CSR  接口
                    为了实现外部仿真程序对          FlexiCAS  缓存模型的动态访问, 并能够灵活调整缓存模型的性能计数器, Spike-
                 FlexiCAS  扩展了一个用户模式下的非标准         CSR (本文称为    Spike 交互  CSR), 用于实现外部程序与     FlexiCAS  缓存
                 模型之间的交互.
                    Spike 交互  CSR  的地址空间映射了     FlexiCAS  缓存模型中所有交互行为的命令编码. FlexiCAS         缓存模型内部
                 定义了   CSR  命令编码与交互行为之间的映射关系. 外部程序可以通过                  csrw  指令将命令编码写入      FlexiCAS  缓存
                 模型的   CSR  写接口. 收到命令编码后, 缓存模型将执行对应的交互行为. 如果该行为产生返回值, 返回值将被存储
                 在     Spike 交互  CSR  中. 外部程序可以通过  csrr 指令读取  Spike 交互  CSR  以获取交互行为的返回值.
   46   47   48   49   50   51   52   53   54   55   56