计算机组成与设计---硬件/软件接口---处理器

在这里插入图片描述

4.1逻辑设计的一般方法

二进制信息编码

  • 低电平= 0, 高电平= 1
  • 一线一位
  • 根据多条数据总线确定多位数据编码

组合部件

  • 对数据操作
  • 输出是输入的函数
    在这里插入图片描述

状态(时序)部件

  • 存储信息
  • 寄存器:将数据存储在电路里
  • 时钟信号决定数据更新时刻
  • 边沿触发:当 Clk 从 0 变为 1时更新数据
    在这里插入图片描述
  • 带有写信号控制的寄存器
  • 仅在时钟边沿且写控制信号为1时更新数据
  • 在存储数据时使用
    在这里插入图片描述

4.2建立数据通路

  • CPU中处理数据和地址的所有部件
    • 寄存器,数逻运算单元,多选器,存储器等

取指令在这里插入图片描述
寄存器型指令

  • 读取两个寄存器操作数
  • 执行算术/逻辑运算
  • 将运算结果写入寄存器
    在这里插入图片描述

读取/存储( Load/Store )指令

  • 读寄存器操作数
  • 用16位偏移量 计算地址
    • 使用ALU计算,偏移量需要进行符号扩展
  • 读取(load) :从存储器读出数据并写入寄存器
  • 存储(store):将寄存器内容写入存储器
    在这里插入图片描述

分支指令
例如指令:bne $ s0,$ s1,exit # go to exit if $s0 ≠ $s1
在这里插入图片描述

  • 读取寄存器操作数

  • 比较两个操作数

    • 使用ALU做减法,检查ALU的零输出信号
  • 计算目标地址

    • 符号扩展偏移量
    • 左移2位(以字为单位的偏移量×4)
    • 加到 PC + 4
      • 取指阶段已计算(下一条指令的地址)
        在这里插入图片描述
        组成部件
  • 第一段数据通路需要在一个时钟周期内完成一条指令

    • 每个数据通路部件一次只能完成一个功能
    • 所以指令和数据需要分开存储
  • 多选器为不同指令选择不同的数据源

寄存器型/读取/存储三类指令数据通路合并
在这里插入图片描述

4.3一个简单的实现机制

4.3.1 ALU控制
  • ALU用于
    • 读取/存储:F=加法
    • 分支:F=减法
    • 寄存器型: F 由funct字段决定
      在这里插入图片描述
  • 假设2位ALUOp从操作码获得
    • 组合逻辑得到ALU控制
      在这里插入图片描述
4.3.2主控制单元的设计
  • 指令中的控制信号
    在这里插入图片描述
    R-型(寄存器)操作举例
    在这里插入图片描述
    add $t0, $s1, $s2
    在这里插入图片描述
4.3.3为什么不使用单周期实现方式
  • 时钟周期由执行时间最长的指令决定
    • 读取指令数据通路,使用5个功能单元
    • 1指令存储器 2寄存器堆 3 ALU4 数据存储器 5 寄存器堆
  • 不同指令使用不同的时钟周期是不可行的,因为时钟周期必须满足所有指令中最坏的情况。
  • 违反设计原则
    • 加速常用操作
  • 可以通过流水线技术提高性能

4.4流水线概述

4.4.1面向流水线的指令集

5段,每段一步

  1. IF: 从存储器读取指令
  2. ID: 指令解码并读取寄存器
  3. EX: 执行操作或计算地址
  4. MEM: 访问存储器操作数
  5. WB: 将结果写回寄存器
4.4.2流水线冒险

在下一个时钟周期中下一条指令不能执行的情形,称为冒险

  • 结构冒险
    • 需要的资源被占用
  • 数据冒险
    • 需要等待前面指令完成其数据读写操作
  • 控制冒险
    • 根据前面正在执行的指令决策控制操作
4.4.3对流水线概述的小结
  • 流水线通过提高指令的吞吐率改进系统性能
    • 并行执行多条指令
    • 每条指令执行时间不变(相同延迟)
  • 流水线设计者必须解决冒险
    • 结构,数据,控制
  • 指令集的设计影响流水线实现的复杂性

4.5流水线数据通路及其控制

4.5.1图形化表示的流水线

在这里插入图片描述

例:指令流水线有取指(IF)、译码(ID)、执行(EX)、访存(MEM)、写回寄存器(WB)五个过程段,共有16条指令连续输入此流水线。
⑴画出流水处理的时空图,假设时钟周期为100ns
⑵求流水线的实际吞吐率(单位时间里执行完毕的指令数)
⑶求流水线的加速比

在这里插入图片描述
答:

  1. 20条指令连续进入流水线时空图
  2. 流水线在20个时钟周期中执行完16条指令,故实际吞吐率为16/20×100ns=4/5×107条指令/S
  3. k级流水线处理n个任务所需时钟周期数为 Tk=k+(n-1)
    非流水线处理器处理n个任务所需时钟周期数为 Te=nk
    k级流水线处理器的加速比为Ck=Te/Tk=nk/k+(n-1)代入已知数据n=20,k=5,Ck=20×5/5+19=100/24=4.16
4.5.2流水线控制

在这里插入图片描述

4.6数据冒险:旁路与阻塞

在这里插入图片描述
Load-Use 冒险检测

  • 当运行指令在ID段解码时检查
  • 给出ID段中的ALU 操作数寄存器号
    • IF/ID.RegisterRs, IF/ID.RegisterRt
  • 当出现以下情况时存在装载使用冒险
  • ID/EX.MemRead and ((ID/EX.RegisterRt = IF/ID.RegisterRs) or (ID/EX.RegisterRt = IF/ID.RegisterRt))
  • 如果检测到,阻塞并插入气泡

怎样阻塞流水线

  • 将ID/EX 寄存器中的控制变量的值置为0
    • EX, MEM and WB 空操作
  • 阻止更新 PC 和 IF/ID 寄存器中的值
    • 将执行中的指令重新解码
    • 再次取出后续指令
    • 对lw指令阻塞1个周期后允许MEM读取数据
      • 接下来可以转到EX段

4.7控制冒险

在这里插入图片描述

4.7.1 缩短分支的延迟
  • 设置硬件将分支地址计算提前到 ID 段
  • 目标地址加法器
  • 寄存器比较器

例如:分支发生时的执行情况
36: sub $10, $4, $8
40: beq $1, $3, 7
44: and $12, $2, $5
48: or $13, $2, $6
52: add $14, $4, $2
56: slt $15, $6, $7
...
72: lw $4, 50($7)

4.7.2动态分支预测

在这里插入图片描述在这里插入图片描述

  • 更深的和超标量流水线中,分支代价将增加

动态分支预测

  • 分支预测缓存 (也称分支历史记录表)
  • 按照最近的分支指令地址索引的存储区
  • 包含分支是否发生的标志位
  • -预测分支的执行过程
    • 查表,采用上次执行该指令时相同的分支处理方法
    • 沿着预测的方向进行取指
    • 如果假设错误,则删除预测错误的指令,预测位取反,并返回原来的位置重新取指执行

4.8异常

  • 不预期的事件发生,需要改变控制流
    • 不同的 ISAs 对这两个术语定义也不同
  • 异常
    • CPU内部引起
    • 例如:未定义的指令,溢出,用户进行操作系统调用等
  • 中断
    • 来自外部 I/O 控制器
  • 处理异常和中断而不牺牲处理器性能是很困难的
4.8.1 MIPS体系结构中的异常处理
  • 由系统控制协处理器(CP0)管理异常
  • 保存出错指令(被中断)的地址
    • 异常程序计数器 (EPC)
  • 保存问题产生的原因
    • 状态寄存器 Cause register
    • 我们假定一位
    • 0 表示未定义指令, 1 表示算术溢出
  • 异常处理系统跳转至统一的入口地址 8000 00180
  • 向量中断
    • 由异常原因决定中断控制的转移地址
  • 例如:
    • 未定义指令: 8000 0000
    • 算术溢出: 8000 0180
  • 指令可能是:
    • 处理中断,或
    • 跳转到实际的中断处理程序
4.8.2在流水线实现中的异常
  • 控制冒险的另一种形式
  • 假设加法指令 add $1, $2, $1在执行阶段产生了算术溢出
    • 防止$1被破坏
    • 完成前面的指令
    • 清除add和后面的指令
    • 设置Casue和EPC寄存器的值
    • 把控制转交给异常处理程序
  • 类似于分支预测错误的情形
    • 使用许多相同的硬件
      在这里插入图片描述

4.9 指令级并行

  • 流水线:并行执行多条指令

  • 增加指令级并行程度

  • 增加流水线深度

    • 每级减少工作 为 缩短时钟周期
  • 多发射

    • 复制流水线的段 为 多流水线
    • 每个时钟周期执行多条指令
    • CPI < 1, 因此用IPC来描述
    • E.g., 4GHz 4-路多发射微处理器
      • 16 BIPS, peak CPI = 0.25, peak IPC = 4
    • 但实际应用中,指令间的相关性降低了性能。
  • 静态多发射

    • 编译器对即将一同发射指令分组
    • 打包指令并发送到发射槽
    • 编译器检测和避免冒险
  • 动态多发射

    • 在每个时钟周期,CPU检查指令流并选择要发射的指令
    • 编译器通过调整指令顺序加以协助
    • 运行阶段,CPU通过先进的技术(硬件支持)能消除某些冒险。
4.9.1推测的概念

“猜测”指令结果

  • 尽快执行操作
  • 检查猜测是否正确
  • 如果正确,完成操作
  • 如果不正确,回滚,做正确的

编译器/硬件推测

  • 编译器可以重新排序指令
    • e.g., 把load指令移到分支指令的前面
    • 可以提供修复指令,以便从错误的猜测中恢复
  • 硬件可以提前执行指令
    • 缓存猜测的结果直到该结果得到确认
    • 清除错误预测的缓存结果

推测与异常

  • 推测执行指令引起了本不存在的异常
    • e.g., 在空指针检查之前,推测执行装载指令
  • 静态推测
    • 加入额外的推测支持,推迟异常
  • 动态推测
    • 缓存异常,直到导致异常的指令确定执行完(可能不发生)
4.9.2静态多发射处理器
  • 编译器分组即将发射的多条指令,形成“发射包”
    • 一组指令可以在一个时钟周期内被发射
    • 由流水线需求的资源决定
    • 可以把发射包看成一条长指令
  • 指定了多个并发操作
  • 超长指令字 (VLIW)

调度静态多发射

  • 编译器必须能够消除一些或全部的冒险
    • 重新排序指令,形成发射包
    • 同一个包内,指令间不相互依赖
    • 包间可能有某种依赖关系
    • 可以改变ISAs;但编译器设计者必须知道!
    • 必要时可以插入空操作
      MIPS静态双发射
  • 双发射包
    • 一个是ALU操作或分支指令
    • 一个是装载或存储指令
    • 64位对齐方式
    • 先执行ALU/branch,再执行load/store
    • 如找不到另一条与之可以同时发射的指令,就用nop指令代替它
      在这里插入图片描述
      MIPS静态双发射的冒险
  • 并行执行更多的指令
  • EX 数据冒险 data hazard
    • 转发可以避免单一发射的阻塞
    • 现在load/store不能在同一个包里使用ALU的运算结果
    • add $t0, $s0, $s1load $s2, 0($t0)
    • 可以分成两个包,对阻塞很有效
  • Load-use hazard 冒险
    • 仍有一个周期的使用延迟,但现在是两条指令
    • 需要更高级的调度技术
4.9.3动态多发射处理器
  • “超标量”处理器
  • CPU决定每个周期发射0条,1条,还是多条指令
    • 避免结构和数据冒险
  • 避免使用编译器调度
    • 尽管它还是有帮助的
    • 不管代码是否经过调度,都是由硬件来保证执行的正确性
      动态流水线调度
  • 为避免阻塞的发生,允许CPU不按次序执行指令
    • 但要按顺序把结果提交给寄存器
      在这里插入图片描述
      寄存器重命名
  • 保留站和重排序缓冲区提供有效的寄存器的重命名机制
  • 当指令发射到保留站时
  • 如果它的操作数在寄存器堆或冲排序缓冲区中可用
    • 操作数立即被复制到保留站中
    • 操作数对应的寄存器堆副本不再需要,其值可以被覆盖
  • -如果操作数不可用
    • 它应该被某个功能单元以计算结果的形式提供给保留站
    • 可以不用更新寄存器,直接跳过
      推测
  • 推测分支并继续进行取指和执行
    • 直到分支结果确定之后才提交Don’t commit until branch outcome determined
  • 装载推测Load speculation
  • 避免装载和cache缺失的延迟Avoid load and cache miss delay
    • 预测有效地址Predict the effective address
    • 预测装载的数值Predict loaded value
    • 在完成存储之前装载Load before completing outstanding stores
    • 顺便存储到装载单元Bypass stored values to load unit
  • 直到推测被清除之后才提交装载Don’t commit load until speculation cleared

计算机组成与设计—硬件/软件接口—计算机概要与技术

计算机组成与设计—硬件/软件接口—指令: 计算机的语言

计算机组成与设计—硬件/软件接口—计算机的算术运算

计算机组成与设计—硬件/软件接口—大容量和高速度:开发存储器层次结构

企业级的理解—你不得不看的Pentium处理器

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《计算机组成设计-硬件/软件接口 riscv版》是一本介绍计算机硬件软件接口的教材,特定版本使用了RISC-V指令集架构。 RISC-V是一个开放、基于精简指令集(RISC)的指令集架构。它的设计目标是简化指令集,并提供在各种不同计算机体系结构上使用的通用接口。这使得RISC-V成为一种流行的选择,用于教育和研究中的计算机体系结构。 这本教材通过系统地介绍计算机硬件软件接口设计原理,通过RISC-V指令集架构的设计和实现,帮助读者理解计算机系统的工作原理。教材内容包括计算机的基本组成部分,如处理器、存储器和输入输出设备,以及它们之间的接口。 在硬件方面,教材涵盖了处理器的工作原理,包括指令执行过程、流水线设计和指令级并行等。还介绍了存储器的层次结构,包括缓存和虚拟内存的设计。此外,教材还涉及输入输出设备的接口设计及中断控制等方面的内容。 在软件方面,教材介绍了汇编语言的基本知识和使用方法,以及如何将高级语言编译成RISC-V指令。此外,还介绍了操作系统的基本概念和设计原理,以及如何编写基于RISC-V架构的操作系统。 通过学习《计算机组成设计-硬件/软件接口 riscv版》,读者能够全面了解计算机系统的工作原理和硬件/软件接口设计。这本教材对于计算机科学和工程专业的学生以及从事计算机体系结构和嵌入式系统开发的工程师都是一本很好的学习资料。 ### 回答2: 计算机组成设计-硬件/软件接口RISC-V版是一门介绍计算机硬件软件之间接口的课程,重点教授RISC-V指令集体系结构。 RISC-V是一种开源指令集架构,设计简单、灵活且可定制。它具有精简指令集和固定长度指令,使得硬件实现和编译器开发变得更加容易。RISC-V通过明确接口定义,为硬件设计者和软件开发者提供了共同的基础。 在这门课程中,学生将学习如何设计和实现一个RISC-V处理器,包括指令集架构设计、流水线处理和高级缓存设计等。同时,还会学习如何通过编写汇编代码和C语言程序来充分利用处理器的功能。 课程还将介绍计算机硬件软件之间的接口技术,包括存储器层次结构、I/O接口和中断处理等。学生将了解如何通过这些接口与外部设备进行通信和交互。 此外,本课程还会涵盖一些高级主题,如超标量处理、向量处理和多核处理器等。学生将学习如何利用这些技术提高计算机系统的性能和效率。 这门课程将使学生在计算机硬件软件交互的基础上,全面了解RISC-V架构的设计与实现。通过这门课程的学习,学生将能够设计、实现和优化RISC-V处理器,为计算机系统的发展做出贡献。 ### 回答3: 计算机组成设计-硬件/软件接口 RISC-V版是一本经典的计算机教材,主要介绍了计算机硬件软件之间的接口设计。RISC-V是一种新兴的指令集架构,由于其开放性和简洁性,越来越多的人开始研究和应用。 这本教材主要分为两个部分:硬件接口软件接口硬件接口部分主要讲解了RISC-V指令集的设计原理和架构。RISC-V采用了精简指令集的设计思想,通过精简指令集来提高执行效率。教材详细介绍了RISC-V指令集的各种指令类型和操作码,以及指令的执行过程和控制流程。同时,还介绍了RISC-V的寄存器文件和存储器层次结构,以及寄存器和存储器的地址映射方法。 软件接口部分主要介绍了RISC-V汇编语言和机器代码的编写和调试方法。教材详细介绍了RISC-V汇编语言的语法和语义,以及如何使用RISC-V汇编语言编写简单的程序。同时,还介绍了RISC-V的编译器和调试工具,以及如何使用这些工具来编译和调试RISC-V程序。 总的来说,这本教材通过深入浅出的方式介绍了计算机硬件软件之间的接口设计,特别是RISC-V版的接口设计。无论是对于计算机硬件工程师还是软件工程师,这本教材都是一本不可多得的学习资料。通过学习这本教材,读者可以深入理解计算机硬件软件之间的接口设计原理,并且能够熟练使用RISC-V指令集进行硬件软件的开发与调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值