USER GUIDE / PROCESSOR & BUS / RISC V V0 / OVERVIEW

概述

Victory0 内核是一款 32 位、顺序执行、三级流水的 RISC-V 内核,集成 8KB L1 I-Cache 和 8KB L1 D-Cache,实现 RV32IMC 指令集架构。

功能说明

Victory1 向 CSRR 寄存器的 bit31 写 0,释放 Victory0 的软复位。

当 Victory1 读取到 CCSR.sleep 的值为 1 时,向 CSRR 寄存器的 bit31 写 1,以维持 Victory0 的软 复位状态。

(参见 CCU TIME 寄存器) Victory0 的中断 ID 为 53。

用户可通过 FROM_HOST 和 TO_HOST 两个 32 位寄存器在 Victory1 与 Victory0 之间传输状态 或控制信息。

  • Victory1 到 RISC-V
    • Victory1
      • 向 FROM_HOST 寄存器(0x1210_0008)写入一条 32 位消息
    • Victory0
      • 等待接收到来自主机的中断(PLIC_IP2 的 bit2)
      • 读取 FROM_HOST 寄存器以获取消息
      • 处理该消息
      • 向 FROM_HOST 寄存器写 0,清除中断请求
  • Victory0 到 Victory1
    • Victory0
      • 向 TO_HOST 寄存器(0x1210_000C)写入一条 32 位消息
    • Victory1
      • 等待接收到 SYS_RISCV 中断(PLIC_IP1 的 bit22)
      • 读取 TO_HOST 寄存器以获取消息
      • 处理该消息
      • 向 TO_HOST 寄存器写 0,清除中断请求
表 1 Victory0 内部物理内存映射
模块起始地址结束地址大小(KB)说明
V0_DEV CCU0x1210_00000x1210_FFFF64V0_DEV CCU 寄存器
V0_SRAM0x1200_00000x1200_FFFF64V0 SRAM

Victory0 内部有一块 16KB 的独占 SRAM。对于实时性要求较高的程序,可将相关代码、数据和堆栈 放置在该 SRAM 中,并以非缓存方式(uncache)访问,以避免缓存未命中(cache miss)、DDR 时序 等引入不确定时延。系统需要保证在精确 4 个周期内读取一条指令或完成一次数据读写。

在保证正确性的基础上,实现实时性的方案是将 64KB SRAM 通过 4 个 4096x32 单端口 RAM 实现。

这 4 个 BANK RAM 通过地址 bit[15:14] 区分。每个 bank 的 RAM 读写端口都带有一套仲裁逻辑,用于选 择来自 RISC-V CPU 的指令和数据请求。只有当指令与数据不竞争同一个 BANK SRAM 时,仲裁逻辑才 不会生效,才能保证每次 RAM 读写完成时间固定。(一旦存在 bank 竞争,必然会因仲裁选择而产生 stall, 进而导致流水线阻塞等情况,从而无法保证实时性。) 当将实时性要求较高的程序放在该 SRAM 中运行时,必须通过链接脚本将代码与数据(包含堆栈)在

这 64KB SRAM 上按 bank 级别进行物理隔离。例如,可将代码段放在 64KB 的低 32KB(0x12000000~0x

12007FFF,bank0、bank1),将数据和堆栈放在 64KB 的高 32KB(0x12008000~0x1200FFFF,bank2、

bank3)。如果软件未能按 bank 将代码与数据隔离,硬件将无法保证实时性。