计算机组成部分有cpu吗,计算机组成原理笔记——处理器(1)[未完]

文章目录

Chapter4_逻辑设计基础

部件介绍

-组合逻辑

-状态组件

数据通路(Datapath)和控制器

-Datapath组件

-操作简述

-操作详述(结合图片&暂不考虑控制信号)

控制信号详述

ALU controller

ALU控制信号的分配

ALU 控制信号生成方式

主控制单元

控制信号

Chapter4_逻辑设计基础

部件介绍

组合逻辑部件不遵循时序,有输入就有输出

时序部件:

存储信息 Store information

PC 指令内存, 数据内存

-组合逻辑

与门

加法器

多路选择开关 Multiplexer

ALU 算术逻辑单元

9 条指令但不是9种运算

lw,sw的加法

减法

AND , OR

set-on-less-than

共五种运算

-状态组件

寄存器输出信号在上升沿变化(有效表示逻辑高,无效表示逻辑低)

写控制的寄存器,需要在时钟沿上升时write写入信号为真,才会根据输入改变输出

时钟控制策略

组合逻辑电路至于时钟间隔中

从时序部件取出,置入时序部件,从寄存器取出,放入内存或寄存器中

组合逻辑完成后的下一个时钟再传回PC+4

数据通路(Datapath)和控制器

-Datapath组件

​ CPU内处理数据和地址的组件

寄存器 Registers

算术逻辑单元 ALU

两个32位输入,一个32位输出,一个1位输出(表示结果是否为0)

多路选择器 MUX

内存 Data Memory

其实是DCache,在教学模型中简化了

程序计数器 PC

任何类型的指令都需要使用到PC

**符号扩展 Sign-extend **

有符号数扩展——高位填充

寄存器堆,ALU

-操作简述

R-format Instruction

读取两个寄存器

进行算术逻辑运算

结果写入寄存器

Load/Store Instructions

读取寄存器

使用16位立即数进行计算地址(使用算术逻辑单元进行符号扩展)

Load: 读取内存,更新寄存器

Store: 将寄存器值写入内存

Branch Instructions

需要两种指令beq, bne的原因:

跳转范围一共是232 ,而分支跳转的范围是216 ,若beq无法达到该位置,则可以使用bne加j完成跳转

计算分支目标地址

比较操作数

-操作详述(结合图片&暂不考虑控制信号)

8dd58462c416e66be3c18ec7a06b6f4f.png

R-format Instructions (指令包含三个寄存器)

获取三个寄存器地址,进入寄存器堆,

将两个读取数据置入ALU,通过ALUOP控制运算方法。

输出值为数值,无需进入数据内存,直接返回到寄存器堆。

将结果写入目标寄存器中

PC获取新的指令地址(PC+4),完成

Load/Store Instructions (指令包含两个寄存器和一个16位有符号立即数)

获取寄存器地址,进入寄存器堆,立即数通过扩展进入ALU

将内存地址读取置入ALU,与立即数进行加法运算得到准确的内存地址

如果是Load指令

进入数据内存读取数据,返回到寄存器堆

将结果写入目标寄存器中(写寄存器通过RegDst控制)

这里值得注意的一点是,虽然我们写的是 lw $t0 (0)$a0

但是$t0作为需要被写入的寄存器,在机器码中处于[20:16]的位置,也就是如图所示,Read register2的位置,于是通过多重选择器,导入到了Write register的位置,进行写入操作

如果是Store指令

将从Read Register2读取到的数据(Read Data2)传输到数据内存的写入区(Write Data)进行写入操作

之所以是从Read Register2读取数据,见上面Load中解释

PC获取新的指令地址,完成

Branch Instructions (指令包含两个寄存器和一个16位有符号立即数)

获取寄存器地址,进入寄存器堆,立即数通过扩展进入Shift-left左移两位

左移两位是因为地址信息需要乘以数据长度

两个寄存器读取的数据进入ALU进行运算,ZERO位输出是否相等的结果

结果通过组合逻辑电路输入到右上角的MUX进行多重选择,若满足条件,则使用PC+4+L,否则使用PC+4

组合逻辑电路此图未显示

PC获取新的指令地址,完成

控制信号详述

ALU controller

ALU控制信号的分配

Load/Store : F = add

Branch: F = subtract

R-type F depends on function field

ALU control

Function

0000

AND

0001

OR

0010

add

0110

subtract

0111

set-on-less-than

1100

NOR

每个数据通路同时只能进行一个操作

ALU 控制信号生成方式

根据2位操作码和6位功能字段生成ALU控制信号

29e9d558c63b1c5cbda5faa31f226b55.png

通过将[27:26]的ALUop和[6:0]的Funct字段联合控制,可以由组合逻辑电路产生控制信号,具体实现方式可以通过列出带无关项 的真值表获得。(如下图)

bae5b1363805ba56d9702919aa9335ac.png

主控制单元

​ 数据通路如何得知需要进行哪些操作呢?除了ALU通过ALU控制信号得知运算单元需要进行的运算方式,读写控制,多重选择都需要控制信号的注入,而这些控制信号,就由主控制单元根据[31:26]的Op字段操作码运算得出~

控制信号

ab7da02f6899e56229c0417355023963.png

RegDst [Register Destination]

在寄存器堆处,用于区分存取指令和R指令(存取指令写入rt,R指令写入rd)

RegWrite [Register Write]

寄存器堆可写入

ALUSrc [我并不能想到全称是什么]

用于MUX,ALU操作数之一为Read Data1,第二个操作数可选,ALUSrc用于选择Read Data2或是Sign-extend后的offset立即数

**PCSrc ** [Src可能是System resource controller?]

正常情况,PC自增之后替换原PC,但在分支指令中,若分支为真,则需要用PC+4+L替换原PC,PCSrc即用于Branch Instructions

MemRead [Memory Read]

内存数据读取使能,用于load word指令

MemWrite [Memory Write]

内存数据写入使能,用于save word指令

MemtoReg [Memory to Register?]

写入寄存器数据是否来自内存,用于lw指令

下图即为不同指令所对应需要的控制位信息:

4ea65bfcd1f36e1f9822856f61f01ab9.png

(未完,若有错误请大佬不吝指正)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值