计算机组成原理之处理器(单周期)

引言

处理器的实现方式决定了时钟周期长度和CPI。实现方式有单周期与流水线,本篇谈谈单周期处理器。

目前CPU的频率一般是3GHZ/4GHZ,但是频率是有极限值的,受cycletime影响

基本的RISC-V实现

  • 存储指令:ld,sd
  • 算术逻辑指令 :add ,sub,and,or
  • 条件分支指令:beq

实现每条指令的前两个步骤是一样的:

  • 程序计数器发送到指令所在的存储单元,并从其中取出指令
  • 根据指令的某些字段选择要读的一个或两个寄存器

所有类型的指令在读取后都用ALU(存储器访问,算术逻辑,条件分支比较)

单周期CPU概览

计算机组成原理之处理器(单周期)_第1张图片


流程介绍

所有的指令都用程序计数器获得指令在指令存储器中的地址

  • 取到指令后,指令的对应字段知道要使用的寄存器操作数。
  • 寄存器操作数一被取出,即可用于计算存储器地址(load指令或store指令)、计算算术运算结果(定点算术逻辑指令)或进行相等检验(分支指令)。
  • 如果是算术指令,ALU的结果要写回寄存器。
  • 如果是存取操作,ALU的结果黄作为存储器地址以及存储来自寄存器的值,或将存储器数据加载到寄存器中。
  • 对于分支指令ALU的输出来觉得下一条指令的地址,这个地址可能来自PC和分支偏量相加的加法器,也可能来自PC+4的加法器。

时钟同步方法

一般用边沿触发来到达时钟同步的目的。这也决定了要在一个时钟周期内读出寄存器的值。

建立数据通路

数据通路单元

数据通路单元是一个用来操作或保存处理器中数据的单元。在RISC-V实现中,数据通路单元包括指令存储器、数据存储器、ALU和加法器。

如果一个单元内部有存储功能,它就包含状态,称为状态单元

计算机组成原理之处理器(单周期)_第2张图片

程序计数器

包含当前程序正在执行指令地址的寄存器,是一个64位的寄存器,在每个周期结束后被写入。

存储单元

寄存器堆

处理器的32个通用寄存器位于寄存器堆(register-file)的结构中

计算机组成原理之处理器(单周期)_第3张图片


数据存储单元

读写信号是相互独立的,但仅有一个可以在任意给定的时钟上有效

为实现beq指令,需要将PC值与符号扩展后的指令偏移量相加得到分支地址

计算机组成原理之处理器(单周期)_第4张图片


分支指令

  • 指令系统结构规定了计算分支目标地址的基址分支是所在地址
  • 将偏移量左移以为以表示板子为单位的偏移量,这样的偏移有效范围扩大两位

计算机组成原理之处理器(单周期)_第5张图片


ALU控制

”load/store = add“ “branch = sub" "R type ~ depend on opcode"

计算机组成原理之处理器(单周期)_第6张图片


计算机组成原理之处理器(单周期)_第7张图片


控制信号

计算机组成原理之处理器(单周期)_第8张图片

计算机组成原理之处理器(单周期)_第9张图片


数据通路操作

R型

  • 取出指令,PC自增
  • 从寄存器堆读两个寄存器,对从寄存器堆读出的数据进行操作
  • 根据部分操作码确定ALU的功能,对寄存器堆读出的数据进行操作
  • 将ALU的结果写入寄存器堆中的目标寄存器

计算机组成原理之处理器(单周期)_第10张图片

load指令

步骤:

  • 从指令存储器中取出指令,PC自增
  • 从寄存器堆中读出对应一个寄存器的值
  • ALU将从寄存器堆中读出的值和符号扩展后的12位(偏移量)相加
  • 将ALU的结果用作数据存储器的地址
  • 将从寄存器读出的数据写入寄存器堆

计算机组成原理之处理器(单周期)_第11张图片

beq指令

  • 从指令存储器中取出指令,PC自增
  • 从寄存器堆中读出两个寄存器x1和x2
  • ALU将寄存器堆读出的两数相减。PC与左移一位、符号扩展的指令中的12位相加,结果是分支目标地址
  • ALU的零数超出决定将哪个加法器的结果写入PC

计算机组成原理之处理器(单周期)_第12张图片

本文由博客一文多发平台 OpenWrite 发布!

你可能感兴趣的:(青少年编程,c++)