本次笔记内容:
P19 计算机组成原理(19)
P20 计算机组成原理(20)

本节课对应幻灯片:

  • 组成原理24 singlecycle.pptx

基于上节课的7条MIPS指令的数据通路,分别针对7条MIPS指令设计控制信号,接着是时序设计;依此绘制了控制信号表,接着即可进行电路设计的实现。

文章目录

  • 本讲提要
  • 计算机程序 - 引出CPU需要做的事
    • 计算机程序的不同层次
    • 典型的程序执行流程
  • CPU 设计
  • 指令执行步骤:单周期CPU
  • 实现的指令集
  • 设计思路
  • 上节课设计的数据通路,我们将基于此设计CPU
    • 使用的组合逻辑器件
    • D触发器(寄存器)
    • 存储器
    • 寄存器组
  • 具体设计
    • 第一步:取址
      • 取到了些什么?
      • MIPS指令的特点
    • 寄存器间运算指令
      • 实现R型指令的数据通路
    • ORI指令
      • 立即数型指令的实现
    • Load指令
      • 支持Load指令的Datapath
    • Store指令
      • 支持Store指令的Datapath
    • BEQ指令
    • Jump指令
    • 支持Beq, Jump指令的Datapath
  • 组装到一起
  • 时序设计
    • 时钟周期开始时的控制
    • 算术逻辑运算指令的控制
    • Ori指令的控制
    • Load指令
    • Store指令
    • Beq指令
    • Jump指令
  • 由上面的分析,可得控制信号表
    • 小技巧-分级控制
    • 基于分级控制,精进控制信号表
  • 完整的单周期CPU
  • 单周期CPU特点
  • 小结
  • 清华留了什么作业

本讲提要

  • 指令执行方式和步骤
  • 单周期CPU设计
    • 指令集:7条典型指令
    • 数据通路
    • 控制器
  • Project 3(布置第3个实验)
    • 存储器及串口访问

计算机程序 - 引出CPU需要做的事

计算机程序的不同层次


高级语言通过编译器转换为汇编语言,之后通过汇编器转换为汇编语言。

典型的程序执行流程


其实对于机器语言来讲,循环执行与分支执行是一样的。


如上,子程序调用执行与转移执行的区别在于:

  • CALA 除了指定子程序外;
  • 还要为 RET 指定好返回到哪里。

因此,引出CPU设计的两点需求。

CPU 设计

  • 完成指令功能的主要部件:ALU
  • 指令功能
    • 数据运算:算术、逻辑、移位
    • 数据移动
    • 流程控制:转移、调用/返回、中断
    • 其他
  • 如何实现?
    • Datapath:实现数据的移动和运算
    • 控制器:指挥数据的移动和运算

指令执行步骤:单周期CPU

计算机一条指令的执行时间被称为指令周期,一个CPU时钟时间被称为CPU周期(在某些计算机中,还可再把一个CPU周期区分为几个更小的步骤,称其为节拍)。执行每条指令平均使用CPU周期个数被称为CPI

全部指令都选用一个CPU周期完成的系统被称为单周期CPU,指令串行执行,前一条指令结束后才启动下条指令。每条指令都用5个步骤的时间完成,控制各部件运行的信号在整个指令周期不变化。单周期CPU用于早期计算机, 系统性能和资源利用率很低,相对当前技术变得不再实用

实现的指令集

选取MIPS指令中7条典型指令组成的子集:

  • 访存指令:LW、SW
  • 算逻运算指令:ADDU、SUBU、ORI
  • 转移指令:BEQ、J

解决三个主要问题:

  • 数据通路设计
  • 控制信号设计
  • 执行时序设计

其他指令的实现原理可以从中体现。

这里的内容承接上节课设计好的数据通路。

设计思路

指令的执行:

  • 显然要设计一个时序逻辑电路
  • 一条指令用一个CPU周期完成

执行步骤的实现:

  • 取指:从指令存储器中读指令(地址:PC)
  • 译码:读出一或两个源寄存器的值(寄存器组)
  • 运算:进行指令规定的运算(ALU)
  • 访存:读/写数据存储器
  • 写回:将结果写入目的寄存器

需要保存的值:

  • PC、寄存器组、存储器

上节课设计的数据通路,我们将基于此设计CPU

使用的组合逻辑器件


如上,ALU需要控制信号、多路选择器MUX需要控制信号。

D触发器(寄存器)


在时钟的上升沿写入输入数据:

  • 一直保持到下一个上升沿

对于寄存器,输入输出是分开的。而下面的存储器不同。

存储器


应该控制其:

  • 非存储器工作时,不应该向总线输出数据;
  • 需要的控制信号更复杂一些。

寄存器组


接口简单:

  • 输入
    • 地址
    • 写入数据
    • 写信号
  • 输出
    • 读出的数据

3个地址端口,2个用来读,1个用来写;每个时钟周期可以完成3次访问。

具体设计

第一步:取址

  • 当前指令存储在存储器中,用PC指示指令地址
  • Instr = MEM[PC]
    • 从存储器中读出指令
    • 给地址,一定时间的延迟后,存储器输出当前的指令
  • 修改PC,使其指向下一条指令(PC+4或BEQ目的地址或JMP的目的地址)
    • 下一条指令的地址是?
  • 取指令需要哪些控制信号?无。

取到了些什么?


如上,都先按照R-format进行读取;有些可能不需要,如读到了I-format的rt,可以不使用,无所谓,先读着。

MIPS指令的特点
  • 指令长度固定
    • 不需要根据当前指令的类型来确定下一条指令的地址
    • 只需对PC增量即可
  • 寄存器位置基本固定
    • 目的寄存器位置有所变动,但是
    • 源寄存器位置总是固定的
    • 或者不需要源寄存器
    • 在指令译码完成前就可以取操作数了

寄存器间运算指令

两条算术指令:

  • Addu rd rs rt
  • Subu rd rs rt

运算如下。

实现R型指令的数据通路
  • R[rd] ← R[rs] op R[rt]
  • 通过指令译码得到
    • ALU功能码ALUOp
    • 写寄存器控制信号RegWrite
  • 根据指令格式,从指令字段中得到寄存器地址

ORI指令

  • OR 立即数指令
    • Ori rt rs imm
    • R[rt] ← R[rs] or ZeroExt(imm)
  • 需要将Instr[15:0]送到ALU中
  • 目的寄存器字段有变化

立即数型指令的实现

将Datapath扩展以实现立即数型指令

  • 目的寄存器:rt 或rd
  • 立即数字段要零扩展或者是符号扩展
  • ALUOp:来自指令功能译码
  • ALUSrc:来自指令操作码译码(寄存器/立即数)

如上,数据通路做了绿色的改变:

  • 低16送到ALU输入端;
  • 相应增加一个控制信号;
  • 目的寄存器字段也可能来自不同字段;
  • 因此做一个二选一,加一个控制信号。

目前以及需要四个控制信号了。

Load指令

LOAD 指令

  • lw rt, rs, imm
  • Addr ← R[rs] + SignExt(imm) 计算地址
  • R[rt] ← MEM[Addr] 读数据

使用和立即数指令基本相同的Datapath, 但需要增加数据存储器的读操作。

支持Load指令的Datapath
  • 增加符号扩展和零扩展选择
  • 增加读数据存储器的通路
  • 增加ALU输出结果和数据存储器输出的选通

如上,最下方的线其实是数据总线,还有串口等等,因此在图最右侧,要加一个选择器,有控制信号。

Store指令

Store 指令

  • sw rt, rs, imm
  • Addr ← R[rs] + SignExt(imm) 计算地址
  • MEM[Addr] ← R[rt] 写数据

支持Store指令的Datapath
  • 基本和Load指令的相同
  • 增加读出数据2到数据存储器的通道
  • 增加写存储器的控制信号

BEQ指令

跳转指令

  • BEQ rs, rt, imm
  • 改变PC的值
  • cond← R[rs] –R[rt] 计算条件
  • If ( cond eq 0) then 判断条件
  • pc ←pc+4 + SignExt(imm)* 4 else 计算下一条指令的地址
  • pc ←pc+4


下一条指令的地址:

  • 指令存储器按字节编址
  • 顺序执行
  • PC ← PC+4
  • 跳转
  • PC ← PC+4+SignExt(imm)*4

Jump指令

Jump指令

  • J target
  • PC[31:0] ← PC[31:28] || traget[25:0]||00

支持Beq, Jump指令的Datapath

在取指部件增加多路选择器。

组装到一起


所需要的控制信号:RegDst,RegWrite,ExtOp,ALUsrc,ALUop,Branch,Jump,MemRead,MemWrite,MemtoReg

时序设计

每条指令占用一个时钟周期:

  • 取指令后分析指令,并给出整个执行期间的全部信号
  • 不需要状态信息,在时钟的结束的边沿写入结果

控制对象:

  • ALU的运算
  • 寄存器组和存储器的写入
  • 多路选通器

时钟周期开始时读取指令:

  • 与具体指令无关

时钟周期开始时的控制

算术逻辑运算指令的控制

Addu rd rs rt
Subu rd rs rt

Ori指令的控制

Ori rt rs imm

Load指令

lw rt, rs, imm

Store指令

sw rt, rs, imm

Beq指令

BEQ rs, rt, imm
# pc ←pc+4 + SignExt(imm)* 4

Jump指令

J target

由上面的分析,可得控制信号表


有数字逻辑课基础了,就要看很好地设计出这个表。

小技巧-分级控制

只有ALU需要Func字段:将FUNC字段直接传给ALU,在ALU处进行译码。

基于分级控制,精进控制信号表

完整的单周期CPU

单周期CPU特点

优点:

  • 每条指令占用一个时钟周期
  • 逻辑设计简单,时序设计也简单

缺点:

  • 各组成部件的利用率不高:维持有效信号(各部件大部分都在等待
  • 时钟周期应满足执行时间最长指令的要求:Load指令

CPI =1

小结

单周期CPU设计

  • 全部控制信号
  • 无需状态信息
  • 控制信号生成:组合逻辑电路
    • 输入:OP、FUNC
    • 输出:完成指令功能所需要的全部控制信号

清华留了什么作业

实验目的和要求:

  • 熟悉THINPAD的内存和串口访问方式
  • 完成基本要求,并可进行一定的扩展

连接方式和地址空间分配

  • 双存储体(型号:IS61LV25616-10TI )
  • 指令系统地址空间
  • 64MWRAM(实际256MW)
  • 64MWRAM(实际256MW)
  • 多个串口(UART、USB等)

控制信号生成

  • http://m.eepw.com.cn/article/201502/269611.html


【Computer Organization笔记10】单周期CPU设计:基于7条MIPS指令的数据通路相关推荐

  1. 31条指令单周期cpu设计(Verilog)-(八)上代码→指令译码以及控制器

    说在前面 开发环境:Vivado 语言:Verilog cpu框架:Mips 控制器:组合逻辑 指令译码器 我们需要根据一条32位的指令的结构确定是哪一条指令 可以根据操作码(op)以及功能码(fun ...

  2. 31条指令单周期cpu设计(Verilog)-(十)上代码→顶层模块设计总结

    说在前面 开发环境:Vivado 语言:Verilog cpu框架:Mips 控制器:组合逻辑 设计思路 按照预先设计好的数据通路图将各个模块连接起来 `timescale 1ns / 1ps mod ...

  3. 31条指令单周期cpu设计(Verilog)-(二)总体设计

    目录 31条指令单周期cpu设计(Verilog)-(一)相关软件 31条指令单周期cpu设计(Verilog)-(二)总体设计 31条指令单周期cpu设计(Verilog)-(三)指令分析      ...

  4. 单周期CPU设计【Verilog】

    第一章 单周期CPU的设计原理 1.1 单周期CPU概述 1.2 CPU工作原理 第二章 单周期CPU的设计内容 2.1 指令系统的设计 2.1.1 概述 2.1.2 运算类指令的设计 2.1.3 传 ...

  5. 【中山大学计算机组成原理实验】单周期CPU设计与实现

    实验一 : 单周期CPU设计与实现 一. 实验目的 (1) 掌握单周期CPU数据通路图的构成.原理及其设计方法: (2) 掌握单周期CPU的实现方法,代码实现方法: (3) 认识和掌握指令与CPU的关 ...

  6. (Verilog)单周期CPU设计

    (Verilog)单周期CPU设计 首先是基础资料部分(借用学校资料): 一.实验内容 设计一个单周期CPU,该CPU至少能实现以下指令功能操作.需设计的指令与格式如下: ==> 算术运算指令 ...

  7. 单周期CPU设计与实现原理分析

    文章目录 单周期CPU设计与实现原理分析 一.单周期CPU的设计思路 二.单周期CPU的模块实现 ① Instruction Memory指令存储器的设计 ② ALU算术逻辑单元的设计 ③ PC程序计 ...

  8. 合肥工业大学宣城校区计算机组成原理实验 单周期 CPU 设计与实现

    本实验使用的是Verilog,离谱的是CSDN居然找不到Verilog的代码块,只能使用c语言的代码块了. 一.实验目的: 通过设计并实现支持 10 条指令的CPU,进一步理解和掌握CPU 设计的基本 ...

  9. 计算机组成原理实验单周期处理,计算机组成原理实验实验报告-单周期cpu设计...

    计算机组成原理实验实验报告-单周期cpu设计 (16页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 计算机组成原理实验计算机组成原理实验 ...

最新文章

  1. KMP算法的详细解释及实现
  2. 从eclipse中下载到手机的android程序总是旧的版本
  3. RHEL6入门系列之三十,服务管理
  4. 设置UITableView设置contentsize
  5. 《Linux shell变量总结回顾》RHEL6(转)
  6. 福州大学计算机报录比2019,2019-2020福州大学报录比波动分析:2020年调剂难度加大...
  7. ORACLE纯SQL实现多行合并一行【转】
  8. 浅析python的metaclass
  9. 爬取线上小程序源码看这一篇就够了!
  10. 51单片机全自动锂电池容量电量检测放电电流电压ACS712 ADC0832
  11. 电容式计算机键盘的按键下,计算机键盘开关
  12. Java获取当前时间到凌晨12点剩余秒数
  13. vuejs crc算法,16进制换算
  14. 选择使用Yarn来做Docker的调度引擎
  15. Warning: require(E:\oms\public/../vendor/autoload.php): failed to open stream: No such file or direc
  16. 用python写一个有AI的斗地主游戏(二)——简述后端代码和思路
  17. iOS 设置代理详细步骤
  18. java软件工程师简历项目经验pdf_java软件工程师简历中项目经验怎么写?
  19. 云计算核心技术和框架整理
  20. JLINK的SWD解法

热门文章

  1. 提高对邮件的认识,两类邮件都要重视!!(不光有和客户的邮件工作方面的,还有单位的邮件一些联系事项),还有要自己看清楚邮件的全部内容,不要丢三落四!!
  2. 力扣题目——102. 二叉树的层序遍历
  3. c语言程序设计逗号作用,逗号运算符C语言程序设计.pdf
  4. 解决webstorm本地IP访问页面出错的问题,webstorm支持IP访问
  5. 深入理解分布式事务,高并发下分布式事务的解决方案
  6. visual studio(vs)中项目解决方案的目录组织安排
  7. python __file__ is not defined 解决方法
  8. IDEA使用@Data注解,类调用get、set方法标红的解决办法
  9. office2010使用mathtype时,出现未找到MathPage.WLL解决方案--亲测有用
  10. MySQL报错解决方案:2013-Lost connection