likes
comments
collection
share

tinyriscv - CPU基本模块讲解

作者站长头像
站长
· 阅读数 3

1 三级流水线

取指 译码 执行

2 cpu中断系统的设计

3 以cpu为核心的soc设计,完成rom,ram,time的外设的设计

32位risc_v 处理器指令格式

tinyriscv - CPU基本模块讲解

0-6 位 操作码: opcode

7 - 11 位 目的寄存器: rd

12-14 func3

15 - 19 源寄存器1 rs1

20 - 24 源寄存器2 rs2

25 - 31 func7

func3 func7 以及操作码 就可以判断出是ADD指令。

汇编指令实现加法:

ADD rd,rs2,rs1

rs1的值和rs2的值加起来送到rd

三级流水线

tinyriscv - CPU基本模块讲解

ADD指令存在ROM中,ROM按字节存储,32位占四个字节,所以在ROM占四个地址。

计算机体系中大小端模式,高字节放低位,为大端模式。低字节放低位,为小端模式。

再存储四条指令。

将执行和回写放在一起,一个时钟周期完成。

时钟复位时rom地址为0x00. PC寄存器 将指令地址给取指模块,第一个时钟周期取0x00,if取指,取指模块为组合逻辑,立刻执行。取值模块立刻将指令地址给ROM,ROM将指令给取指模块,{func7,rs2,rs1,func 3,rd,opcode} 32位指令,传送到if_id模块,这个模块为时序电路,将指令打一拍,因为取指是组合逻辑有延迟。 id译码模块通过寄存器组,一共有32个寄存器x0 - x31,32位寄存器用五位来表示,源寄存器和目的寄存器都为5位。译码模块将rs1,rs2给寄存器组,寄存器组将数据读出,给译码模块。然后传送给id_ex模块,在第三个时钟周期到来的时候,ex执行,将数据给执行模块执行。 执行结束将回写,将结果到目的寄存器rd,即通用寄存器组中。

tinyriscv - CPU基本模块讲解

三级流水线

tinyriscv - CPU基本模块讲解

rom:存指令,外设

module pc_reg :指示pc寄存器

module if: 组合逻辑 取指令

module if_id:

module id:组合逻辑完成译码

id_ex:

module ex: 组合逻辑完成执行

tinyriscv - CPU基本模块讲解

pc_o: 取指结束,送出的指令。送到if

if将指令地址给rom,rom再返回指令。

if将指令给if_id,打一拍,送到id。 译码模块进行译码,通过译码得到地址给寄存器组,寄存器组返回数据给id译码模块。 再将数据给id_ex模块。

tinyriscv - CPU基本模块讲解

译码就可以知道要不要写寄存器。 id_ex将数据打一拍给ex模块。ex将数据相加,送回到rd寄存器中,

tinyriscv - CPU基本模块讲解

tinyriscv - CPU基本模块讲解