【计算机组成原理】单周期处理器设计


处理器设计涉及数据通路的设计和控制逻辑的设计

(数据通路和控制单元一起构成处理器)

前置知识

数据通路

注意:数据通路不是通路(datapath doesn’t mean path),数据通路其实是指好几个部件
datapath:The component of the processor that performs arithmetic operations(处理器中执行算术运算的部件)

【维基百科】中这样介绍:数据通路执行单元的集合,例如执行数据处理操作的算术逻辑单元乘法器寄存器总线它与控制单元一起组成中央处理器(CPU)
通过使用数据选择器连接多于一个的数据通路,可以创建更大的数据通路

数据通路的基本结构

”数据通路的基本结构“有两层含义:①这些部件怎么连接,②这些部件本身的结构
(因为datapath涉及多个componet,所以我们只能大致掌握其结构)

  • 数据通路由两类元件组成:组合逻辑元件(也称操作元件)和时序逻辑元件(也称状态元件,存储元件)
  • 元件间的连接方式总线连接方式分散连接方式

数据通路的构成:由“操作元件”和“存储元件”通过总线方式分散方式连接而成
数据通路的功能:进行数据存储、处理、传送

【总结】数据通路由“操作元件”和“存储元件”通过总线方式或分散方式连接而成的进行数据存储、处理、传送的路径

操作(算数)元件(组合逻辑电路)

在这里插入图片描述

组合逻辑元件的特点

  • 其输出只取决于当前的输入,即:若输入一样,则其输出也一样
  • 定时:所有输入到达后,经过一定的逻辑门延时,输出端改变,并保持到下次改变,不需要时钟信号来定时
状态(存储)元件(时序逻辑电路)

状态(存储)元件的特点

  • 输出不仅与输入有关,还与其本身状态有关,例如寄存器
  • 具有存储功能,在时钟控制下输入被写到电路中,直到下个时钟到达
  • 输入端状态由时钟决定何时被写入,输出端状态随时可以读出
  • 定时方式:规定信号何时写入状态元件或何时从状态元件读出
  • 采用边沿触发方式:状态单元中的值只在时钟边沿改变,每个时钟周期改变一次

数据通路中的状态元件有两种:寄存器(组) + 存储器

MIPS指令格式

所有指令都是32位宽,须按字地址对齐字地址为4的倍数

指令分为三种类型:R型(Register)、I型(Immediate)和J型(Jump)。三种类型的指令的最高6位均为6位的opcode码。从25位往下,

  • R型指令用连续三个5位二进制码来表示三个寄存器的地址,然后用一个5位二进制码来表示移位的位数(如果未使用移位操作,则全为0),最后为6位的function码(它与opcode码共同决定R型指令的具体操作方式);
  • I型指令则用连续两个5位二进制码来表示两个寄存器的地址,然后是一个16位二进制码来表示的一个立即数二进制码(immediate:立即数或load/store指令和分支指令的偏移地址
  • J型指令用26位二进制码来表示跳转目标的指令地址(实际的指令地址应为32位,其中最低两位为00)【指令按字地址对齐,所以每条指令的地址都是4的倍数(最后两位为0)】

三种用于核心指令集的指令图示如下:

在这里插入图片描述


单周期处理器设计过程

  1. 分析每条指令的功能
  2. 根据指令的功能给出所需的元件,并考虑如何将它们互连
  3. 确定每个元件所需控制信号的取值
  4. 汇总所有指令所涉及到的控制信号,生成反映指令与控制信号之间的关系表
  5. 根据表得到每个控制信号的逻辑表达式,据此设计控制器电路

由于一个指令系统常常有几十到几百条指令,实现一个完整指令系统的处理器是一项非常复杂、繁琐的任务,为了能清楚说明处理器设计过程和基本原理,这里以实际的MIPS指令系统为例来说明

这里选择具有代表性的11条指令作为实现目标:

  • 5条 R-型指令

    add rd, rs, rt	;ADD 算术运算指令
    sub rd, rs, rt	;SUBSTRACT 算术运算指令
    subu rd, rs, rt
    slt rd, rs, rt
    sltu rd, rs, rt
    
  • 5条 I-型指令

    ori  rt, rs, imm16	;OR 逻辑运算指令
    addiu rt, rs, imm16
    lw rt, rs, imm16	;LOAD 访存指令
    sw rt, rs, imm16	;STORE 访存指令
    beq rs, rt, imm16	;BRANCH 分支指令
    
  • 1条 J-型指令

    j  target	;JUMP 无条件转移指令
    

指令功能分析

在这里插入图片描述

数据通路的设计

在对所有指令进行功能分析的基础上,可以进行数据通路的设计

算数逻辑部件的设计

算术逻辑单元(Arithmetic logic unit,ALU)

为了支持以上11条指令包含的运算,ALU必须具有相应的功能

在这里插入图片描述

【分析】

  • 该 ALU 的输入为两个 32 位操作数 A 和 B ,其中核心部件是加法器,加法器的输出除两个数的和 Add-Result 以外,还有进位标志 Add-carry、零标志 Zero、溢出标志 Add-Overflow 和符号标志 Add-Sign
  • 在操作控制端 ALUctr 的控制下,在 ALU 中执行加、减、按位或、带符号整数比较小于置 1 和无符号数比较小于置 1 等运算
  • Result 作为 ALU 运算的结果被输出,同时零标志 Zero 和溢出标志 Overflow 也被作为 ALU 的结果标志信息输出
  • ALU 的操作由一个 “ALU 操作控制信号生成部件” 产生的控制信号来控制,其输入是 ALUctr ,输出有4个控制信号:
    1. SUBctr 用来控制 ALU 执行加法还是减法运算
      当 SUBctr=1 时,做减法,当 SUBctr=0 时,做加法
    2. OPctr 用来控制选择哪种运算的结果作为Result输出
      因为所实现的11条指令中只可能有加/减、按位或、小于置 1 这 3 种运算,所以 OPctr 有两位( 2 2 = 4 > 3 2^2=4>3 22=4>3
    3. OVctr 用来控制是否要进行溢出判断
      当 OVctr=1 时,进行溢出判断,此时,若结果发生溢出,则溢出标志 Overflow 为 1
      当 OVctr=0 时,无须溢出判断,此时,即使结果发生溢出,溢出标志 Overflow 也不为 1
    4. SIGctr 信号控制 ALU 是执行 “带符号整数比较小于置1” 还是 “无符号数比较小于置1” 功能
      当 SIGctr=0 时,则执行 “无符号数比较小于置1”
      当 SIGctr=1 时,则执行 “带符号整数比较小于置1”

11条目标指令对应的4种 ALU 操作控制信号取值

在这里插入图片描述

在对 ALUctr 进行编码时,可以根据这些 ALU 操作和 4 种 ALU 操作控制信号的对应关系进行优化
例如,把加减控制(SUBctr)、溢出判断(OVctr)和符号控制(SIGctr)等信号 分别对应到不同的位来进行控制
ALUctr 的三位编码及其对应的操作类型和 ALU 控制信号

在这里插入图片描述

根据上表可得到各输出控制信号的逻辑表达式如下:

  • SUBctr = ALUctr<2>
  • OVctr = !ALUctr<1> & ALUctr<0>
  • SIGctr = ALUctr<0>
  • OPctr<1> = ALUctr<2> & ALUctr<1>
  • OPctr<0> = !ALUctr<2> & ALUctr<1> & !ALUctr<0>

根据上述逻辑表达式来设计 “ALU 操作控制信号生成部件”

取指令部件的设计

每条指令的第一步都是完成取指令并计算下条指令地址的功能,因此,在数据通路中,需要 专门设计一个取指令部件来完成上述功能

在这里插入图片描述

每条指令都有的公共操作:

  • 取指令: M[PC]
  • 更新 PC:PC ← PC + 4 ,转移时,PC 内容再次被更新为 “转移目标地址”

R-型指令的数据通路

用 R-型指令的数据通路可以完成对两个寄存器 Rs 和 Rt 内容的运算并将结果写入 Rd 寄存器,像 add 和 sub 等指令还要判断结果是否溢出,只有不溢出时才写结果到 Rd,否则转异常处理程序执行

R[rd] ← R[rs] + R[rt]

在这里插入图片描述

【分析】

  • 指令中 Rs 和 Rt 是两个源操作数寄存器编号,Rd是目的寄存器编号,因此寄存器堆的两个读地址端 Ra 和 Rb 应分别与 Rs 和 Rt 相连,写地址端 Rw 与 Rd 相连
  • ALU运算结果连到寄存器堆的写数据端 busW
  • 控制信号 RegWr 为“写使能”信号,只有在 RegWr 信号为 1 且不溢出的情况下,运算结果才写入寄存器堆,显然R-型指令执行时,RegWr 信号应该为 1

立即数运算指令的数据通路

I-型带立即数的运算类指令都涉及对 16 位立即数进行符号扩展或零扩展,然后和 Rs 的内容进行运算,最终把 ALU 的运算结果送目的寄存器 Rt

  • R[rt] ← R[rs] or ZeroExt(imm16),立即数零扩展,并与 rs 内容做 “或” 运算

    在这里插入图片描述

  • Addr ← R[rs] or SignExt(imm16),立即数符号扩展,并与 rs 内容做 “或” 运算

    在这里插入图片描述

立即数运算指令的数据通路是在R-型指令的数据通路的基础上增加了I-型立即数运算类指令功能而得到的,因此,它同时也能完成R-型指令的执行

在这里插入图片描述

【分析】

  • 因为R-型指令和 I-型指令的目的寄存器不同,所以在寄存器堆的写地址端 Rw 处, 增加了一个多路选择器,由控制信号 RegDst 控制选择 Rd 为目的寄存器还是 Rt 为目的寄存器
  • 因为 I-型指令的立即数只有 16 位,需要对其扩展为 32 位才能送到 32 位 ALU 运算,对于按位逻辑运算,应采用零扩展,对于算术运算,应采用符号扩展。因此,在数据通路中应增加一个扩展器,由控制信号 ExtOp 控制进行符号扩展还是零扩展,其输入端连到指令中的 imm16
  • 因为 R-型指令和 I-型指令在 ALU 的 B 口的操作数来源不同,所以在 ALU 的 B 输入端增加了一个多路选择器,由控制信号 ALUSrc 控制选择 busB 还是扩展器输出作为 ALU 的 B 口操作数

load/store指令的数据通路

访存指令中的数据装入指令 (lw):
Addr ← R[rs] or SignExt(imm16),计算存储单元地址 (立即数要进行符号扩展)
R[rt] ← M[Addr],从存储器中取出数据,装入到寄存器 rt 中

访存指令中的存数指令 (sw):
Addr ← R[rs] or SignExt(imm16),计算存储单元地址 (立即数要进行符号扩展)
M[Addr] ← R[rt],寄存器 rt 中的内容存到内存单元中

load 指令和 store 指令的地址计算过程一样,都要先对立即数 imm16 进行符号扩展,然后和寄存器 Rs 的内容相加,得到访存地址

load/store指令的数据通路是在立即数运算指令的数据通路的基础上增加了 load/store 指令功能而得到的,因此它同时也能完成 R-型和 I-型运算类指令的执行

在这里插入图片描述

【分析】

  • 因为运算类指令和 load 指令写入目的寄存器的结果的来源不同,所以在寄存器堆的写数据端 busW 处增加了一个多路选择器,由控制信号 MemtoReg 控制选择将 ALU 结果还是存储器读出数据写入目的寄存器
  • 因为 load/store 指令需要读写数据存储器,故增加了数据存储器。访存地址在 ALU中计算,因此数据存储器的地址端 Adr 连到 ALU 的输出
    store 指令将 Rt 内容送存储器,所以直接将 busB 连到数据存储器的 Dataln 输入端,而将输出端连到 busW 端的多路选择器上
    控制信号 MemWr 用作“写使能”信号
    load/store指令的地址运算对立即数 imm16进行符号扩展
    ALUctr 输入端的操作类型是不判溢出的加法 addu

分支(条件转移)指令的数据通路

分支指令也是I-型指令,能根据不同的条件选择是否跳转执行

相等转移beq
Cond ← R[rs] - R[rt],做减法比较 rs 和 rt 中的内容
计算下地址(根据比较结果,修改PC):
if (COND eq 0)PC ← PC + 4 + ( SignExt(imm16) x 4 )
elsePC ← PC + 4

支持分支指令功能的数据通路:

在这里插入图片描述

【分析】

  • 下地址逻辑的输出是下条指令地址,4个输入是 PC、Zero 标志、立即数 imm16 和控制信号 Branch

    在 ALU 中对 R[Rs] 和 R[Rt] 做减法得到一个 Zero 标志,根据 Zero 标志可 判断是否转移

    对于转移目标地址的计算,需要先对立即数 imm16 进行符号扩展再乘 4,然后和基准地址 PC+4 相加

    ALU 的输出 Zero 标志需送到下地址逻辑,立即数 imm16 和 PC 也要送到下地址逻辑,控制信号 Branch 表示当前指令是否是分支指令,也应送到下地址逻辑,以决定是否按分支指令方式计算下条指令地址

  • 因为指令长度为 32 位,主存按字节编址,所以指令地址总是 4 的倍数,即最后两位总是 00,因此 PC 中只需存放前 30 位地址,即PC <31:2>,这样下条指令地址的计算方法如下:

    • 顺序执行时: P C < 31 : 2 > − P C < 31 : 2 > + 1 PC<31:2> - PC<31:2> + 1 PC<31:2>PC<31:2>+1
    • 跳转执行时: P C < 31 : 2 > − P C < 31 : 2 > + 1 + S E X T [ i m m 16 ] PC<31:2>-PC<31:2>+1+SEXT[imm16] PC<31:2>PC<31:2>+1+SEXT[imm16]
    • 取指令时:指令地址 = P C < 31 : 2 >  串接  00 PC<31:2>~串接~00 PC<31:2> 串接 00

分支指令的下地址逻辑设计:

在这里插入图片描述

【分析】每来一个时钟 CLK,当前 PC 作为指令地址被送到指令存储器去取指令的同时,下地址逻辑计算下条指令地址并送 PC 的输人端,在下个时钟到来后写入PC

无条件转移指令的数据通路

PC<31:2> ← PC<31:28> 串接 target<25:0> ,计算目标地址

【说明】J型指令格式:
在这里插入图片描述

在下地址逻辑中增加了无条件转移指令功能的完整的取指令部件

在这里插入图片描述

取指令部件的外部结构:

在这里插入图片描述

完整的单周期数据通路:

在这里插入图片描述

图中所有加下画线的都是控制信号,用虚线表示
指令执行结果总是在下个时钟到来时开始 保存在寄存器、数据存储器或PC中

控制器的设计

  1. 考察每条指令在数据通路中的执行过程和涉及到的控制信号的取值
    • 公共操作:取指令和计算下址 PC
    • R-Type指令( add / sub )
    • 立即数指令( ori )
    • 访存指令( lw / sw )
    • 分支指令( beq )
    • 跳转指令( j )
  2. 根据每条指令的功能,分析控制信号的取值,并在表中列出
  3. 根据列出的指令和控制信号的关系,写出每个控制信号的逻辑表达式
一、 设计目标 设计目的: 设计一个含有36条指令的MIPS单周期处理器,并能将指令准确的执行并烧写到试验箱上来验证 设计初衷 1、理解MIPS指令结构,理解MIPS指令集中常用指令的功能编码,学会对这些指令进行归纳分类。 2、了解熟悉MIPS体系中的处理器结构 3、熟悉并掌握单周期处理器CPU的原理设计 4、进一步加强Verilog语言进行电路设计的能力 二、实验设备 1、装有xilinx ISE的计算机一台 2、LS-CPU-EXB-002教学系统实验箱一台 三、实验任务 1.、学习 MIPS 指令集,深入理解常用指令的功能编码,并进行归纳确定处理器各部件的控制码,比如使用何种 ALU 运算,是否写寄存器堆等。 2、单周期 CPU 是指一条指令的所有操作在一个时钟周期内执行完。设计中所有寄存器存储器都是异步读同步写的,即读数据不需要时钟控制,但写入数据需时钟控制。 故单周期 CPU 的运作即:在一个时钟周期内,根据 PC 值从指令 ROM 中读相应的指令,将指令译码后从寄存器堆中读需要的操作数,送往 ALU 模块,ALU 模块运算得到结果。 如果是 store 指令,则 ALU 运算结果为数据存储的地址,就向数据 RAM 发写请求,在下一个时钟上升沿真正写入到数据存储器。 如果是 load 指令,则 ALU 运算结果为数据存储的地址,根据该值从数据存 RAM 中读数据,送往寄存器堆根据目的寄存器发写请求,在下一个时钟上升沿真正写入到寄存器堆中。 如果非 load/store 操作,若有写寄存器堆的操作,则直接将 ALU 运算结果送往寄存器堆根据目的寄存器发写请求,在下一个时钟上升沿真正写入到寄存器堆中。 如果是分支跳转指令,则是需要将结果写入到 pc 寄存器中的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值