3. riscv-mini
2024年3月6日riscvriscv-mini大约 2 分钟
1. RISC-V指令集
始于2010年,诞生于加州大学伯克利分校。 目前由RISC-V基金会管理,免费开源。
- 特点:模块化。-> 袖珍、低功耗
- 核心:RV32I的基础指令集架构,能够运行一个完整的软件栈,但只能支持整数运算。
- 可以实现额外的扩展指令集
RV32I指令集架构
六种基本指令格式:R I S B U J 均为32位定长,寄存器标识符、操作码位置固定
2. riscv-mini
由加州大学伯克利分校开发,具备三级流水线 采用经典的哈佛架构
- 独立的指令缓存和数据缓存
- 一个AIX总线接口用于访存。
- 指令实现:RV32I,特权指令集手册1.7版
- 模块结构
- 两个cache模块与core相联
- 两个cache连接到一个仲裁器,通过AXI总线访问内存
- 在riscv-mini中并不存在真实的内存模块,其内存模块通过使用C++编写的软件进行仿真。
- 所以riscv-mini只能在仿真环境下运行。
core
一个具有三级流水线结构的处理器核心 取指令、执行、写回。
在取指令阶段需要完成指令的读取。控制信号包含PC选择、stall、异常、分支跳转。 当出现分支,则执行地址跳转后的指令 当流水线阻塞时会出现stall信号,则不需要执行下一条指令, 当CSR模块发出异常信号,下一条指令则为预设的异常处理程序地址。
在执行阶段,先译码,然后根据指令类型产生各个部件的控制信号。 存在立即数则由立即数单元进行提取合并 根据需要从寄存器组读取对应的数据送到ALU进行算术或逻辑运算 分支指令由BrCond单元进行处理。
在写回阶段,完成数据的写回,完成特权指令的执行。若指令为特权指令,则需要由CSR模块进行处理。 CSR模块访问或者修改CSR寄存器,或者发出异常信号更改PC等。
cache
一个具有256行采用直接映射的Cache模块,Cache数据块的大小为16字节。 访存过程:CPU请求访存,提取行号,访问行中的有效位,1则比较Tag字段,相等命中,直接读取并返回;0或者Tag字段不等,则访问内存+修改Cache行+返回
- 在数据的存储上,cache模块把数据块、标记位、有效位、修改位存储在不同的数据结构。
val v = RegInit(0.U(nSets.W))
val d = RegInit(0.U(nSets.W))
val metaMem = SeqMem(nSets, new MetaData)
val dataMem = Seq.fill(nWords)(SeqMem(nSets,Vec(wBytes, UInt(8.W))))
- 有限状态自动机FMS控制各个阶段的行为。
- 7个状态