Skip to content

4.1

:material-circle-edit-outline: 约 819 个字 :material-clock-time-two-outline: 预计阅读时间 3 分钟

Chap4 The Processor-Part1

单周期

两个前置步骤

三种指令类型

对于每个指令,先从内存取出(fetch),解码并读取寄存器

再根据指令种类进行具体操作:

  • Memory-reference
  • Arithmetic-logical
  • branches

下面是总表

image-20240409201657509

约定,黑的是数据线,蓝的是控制线

注意ALU的zero也是控制信号

图的顶端有个AND,这里的zero表示beq 用ALU判断两个数是否相等的信号(即比较是否相等是用减法实现)

有三种情况会将数据写入reg

  1. ALU计算结果放回reg
  2. ld指令放回reg
  3. jalr将返回地址放于reg

不要忘了pc本身是个64bit的reg,放的是指令地址,不是指令

寄存器,x0~x31

image-20240509095613755

内存与Imm整合模块

注意,内存的地址接口需要提供已经偏移过的地址,所以需要ALU提前将偏移量算进去

Imm整合模块见后文

image-20240409204026561

具体各类型指令的链路(注意下面是32位的例子,上面的是64位)

每个指令有两张图,一个表现指令码去向,比较简略;一个指示数据流

image-20240409205138542

image-20240409210221831

红色框是解码部分,解码后将相应的码位输出到对应的地方

右下角的mux有2bit控制信号,图里少了个jump指令返回pc+4的输入

image-20240409205144282

注意上面Sign extend,imm32={{20{inst[31]}, inst[31:20]}}

有符号数拓展

image-20240409210225622

ImmGen用于处理指令里的立即数,比如合并、移位

两个mux与R型都不一样了,且需要进入data mem

image-20240409210107845

image-20240409210231337

sd差不多

image-20240409210112433

image-20240409210236126

立即数左移了一位,因为,beq指令中的imm是地址偏移量

实际连线时会直接从第二位开始连,不用额外的移位运算,图中只是强调一下

上面有两个add,左边专门pc+4,右边获得偏移后的目标地址

目标地址会直接给pc,结束beq

image-20240409210117648

image-20240409210241041

首先是pc+4到MemtoReg到reg,实现x1=pc+4

然后将跳转地址交给pc

image-20240410151220906

共7+4个信号

controller有7个信号

  1. RegWrite - Mem
  2. ALUSrc - Mux
  3. MemWrite - Mem
  4. MemRead - Mem
  5. MemtoReg - Mux
  6. Branch/PCSrc - Mux
  7. jump/PCSrc - Mux

ALU operation信号 从controller交给ALU control另外处理4个运算

注意,即便inst没有fuct3和func7,ALU control也能控制ALU。R-type之外的指令ALU都是固定一种运算的。

注意:

  1. 没用到的mux的信号要写X,表示无关值,不能写0或1,算错
  2. menWrite和menRead默认情况下都要强制置零
    1. 前者为了避免误写入(这是不可逆的),后者实际上其实无所谓,但是后面会提到与cache有关
  3. branch也是强制置零,防止pc被改掉

controller各信号各值的影响:

image-20240509105951127

Scheme of Controller

控制信号就是一串二进制数,需要组合电路进行解码

我们分主次两个解码器

  • First: Main opcode
  • Second: ALU

image-20240410151918840

Controller

这个图要背下来,数据线路和控制线路都怎么连的,有几个bit,哪几个bit

测试会不会,自己画一次

image-20240509111014374

image-20240507104224528

opcode不用记,但是相应的控制信号状态要记

image-20240410152221859

下面是各类指令用到的模块,没用到的府改为灰色

image-20240410152542788

image-20240410152548951

ld是开销最大的指令,所有主要模块都用了

image-20240410152554396

image-20240410152600489

image-20240410152606005

image-20240530163659934