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,清除中断请求
- Victory1
- Victory0 到 Victory1
- Victory0
- 向 TO_HOST 寄存器(0x1210_000C)写入一条 32 位消息
- Victory1
- 等待接收到 SYS_RISCV 中断(PLIC_IP1 的 bit22)
- 读取 TO_HOST 寄存器以获取消息
- 处理该消息
- 向 TO_HOST 寄存器写 0,清除中断请求
- Victory0
| 模块 | 起始地址 | 结束地址 | 大小(KB) | 说明 |
|---|---|---|---|---|
| V0_DEV CCU | 0x1210_0000 | 0x1210_FFFF | 64 | V0_DEV CCU 寄存器 |
| V0_SRAM | 0x1200_0000 | 0x1200_FFFF | 64 | V0 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 将代码与数据隔离,硬件将无法保证实时性。