Risc - V 处理器设计

The CPU

Processor(CPU)

计算机的活动部分即完成全部工作的(数据操纵与决策)

Datapath

处理器的一部分,包含执行处理器所需操作所需的硬件( 肌肉 )

Control

处理器的一部分(在硬件方面也是如此),告诉数据通路需要做什么(大脑)

需要实现的所有 Rv32I 指令

image-20240908151829845

单指令每周期 Risc - V 机

image-20240908151937450

  • 在时钟的每一个刻度上,计算机执行一条指令
  • 当前状态的输出驱动组合逻辑的输入,组合逻辑的输出固定在下一个时钟边之前的状态值
  • 在上升的时钟边沿,所有的状态变量用组合逻辑输出进行更新,执行转移到下一个时钟周期

数据通路的阶段:概述

  • 问题:”执行指令” 的单个”单片”块(从取指令开始执行所有必要的操作)过于庞大,效率低下
  • 解决方法:将”执行指令”的过程分解为阶段,然后连接各个阶段创建整个数据通路
    • -更小的阶段更容易设计
    • -容易优化(更改)一个阶段而不接触其他阶段(模块化)

数据通路的五个阶段

  • Stage 1: Instruction Fetch (IF)
    • 取指令
  • Stage 2: Instruction Decode (ID)
    • 指令解码
  • Stage 3: Execute (EX) - ALU (Arithmetic-Logic Unit)
    • 执行
  • Stage 4: Memory Access (MEM)
    • 存储器存取
  • Stage 5: Write Back to Register (WB)
    • 写回寄存器

image-20240908152423453

R-Type Add Datapath

image-20240908152822758

add 指令的实现

image-20240908152853063

Datapath for add

image-20240908152921456

add 时序图

image-20240908152941025

Sub Datapath

sub 指令的实现

image-20240908153118051

add/sub 的 Datapath

image-20240908153144170

Implementing Other R-Format Instructions

image-20240908153213678

Datapath with Immediates

Implementing I-Format - addi instruction

image-20240908153253497

Adding addi to Datapath

image-20240908153312865

I-Format 的构造基本上和 R-Type 的相同,只需要把 Re[rs2]的值改成传递的 Imm 值就好了

image-20240908153321466

image-20240908153344363

Imm. Gen 将 Inst 当中[31:20]的值扩展为 Imm[31:0],如下图

image-20240908153506405

对于其他所有 I 格式算术指令( slti , sltiu , andi , ori , xori , slli , srli , srai),只需更改 ALUSel 即可

Datapath for Loads

Add lw

image-20240908153829272

R+I Arithmetic/Logic Datapath

image-20240908154043423

image-20240908154026017

All RV32 Load Instructions

image-20240908154140968

Funct3 字段编码负载数据的大小和”符号性”

Datapath for Stores

添加 sw 指令

image-20240908154304703

读取两个寄存器,rs1 为基内存地址,rs2 为待存储的数据,以及立即偏转值

Adding sw to Datapath

image-20240908154426614

image-20240908154440506

image-20240908154453442

image-20240908154648351

I+S Immediate Generation

image-20240908154657023

  • 只需要一个 5 位的多路复用器来选择立即数的低 5 位在指令中的两个位置之间。

  • 立即数的其他位被连接到指令中的固定位置。

I 型和 S 型指令格式

  • I 型指令:立即数位于指令的[31:20]位。
  • S 型指令:立即数被拆分为两部分,一部分位于指令的[31:25]位,另一部分位于[11:7]位。

多路选择器的作用

  • 图中的 5 位多路复用器(5-bit mux)用于在立即数的低 5 位的位置之间进行选择。具体来说:
    • 对于 I 型指令,立即数的低 5 位位于[24:20]位。
    • 对于 S 型指令,立即数的低 5 位位于[11:7]位。
  • 该多路选择器根据指令类型选择正确的位置,将立即数的这 5 位提取出来。

其他位的处理

  • 立即数的其余部分,例如符号扩展(sign extension)等,按照固定的位置分配到指令的不同位中。对于符号扩展,立即数的最高有效位(第 31 位)通过符号扩展填充到最终的立即数中。

All RV32 Store Instructions

image-20240908154816320

实现 Branches

RISC-V B-Format for Branches

image-20240908154834693

image-20240908154925884

Addding Branches to Datapath

image-20240908154939949

image-20240908154956106

Branch Comparator

image-20240908155716874

Branch Immediates

image-20240908160041505

image-20240908160049387

done

image-20240908160057989

JALR Datapath

image-20240908160738419

image-20240908160747255

image-20240908160752958

image-20240908160759411

JAL Datapath

image-20240908160838183

image-20240908160845289

image-20240908160850328

U-Types

U-Format for “Upper Immediate” Instructions

image-20240908161200550

Datapath With LUI, AUIPC

image-20240908161213831

Lighting Up LUI

image-20240908161227448

Lighting Up AUIPC

image-20240908161236681