• 算法乐园 主页 笔记 刷题




      计算机组成原理


      第一章 计算机系统概述

      程序被翻译成不同的格式

      image-20230924214846800

      计算机系统基本执行结构

      image-20230830191551124

      image-20230831201453225

      缩写英文含义
      IRinstruction register指令寄存器,计算机中用于存储当前正在执行的指令的寄存器。
      PCprogram counter程序计数器,用于存储处理器当前(或下一条)指令的地址。
      ARaddress register地址寄存器,用来存放指令或操作数的地 址。是一个暂存单元。
      DRdata register数据寄存器
      MARMemory address register存储地址寄存器
      MDRMemory data register存储数据寄存器
      ACCAccumulator累加器
      MQMultiplier-Quotient Register乘商寄存器,在乘、除运算时,用于存放操作数或运算结果。
      ALUarithmetic logic unit算术逻辑单元:计算机中央处理器的一个电路,用于执行基本的数学计算
      X 通用的操作数寄存器
         
         

      经典冯·诺依曼计算机框架

      image-20230830192247864

      现代计算机组成

      image-20230830192339823

      主存储器

      image-20230831172009928

      MARMemory address register存储地址寄存器
      MDRMemory data register存储数据寄存器

      读操作:CPU把想要的数据地址放在MAR,然后在MDR取走数据

      写操作:CPU把想要写的地址放在MAR,然后把数据放在MDR

      主存储器
      存储单元
      存储元件

      存储单元是一串二进制代码,也称存储字

      存储元件指单个二进制位

      CPU

      image-20230831185319508

      CPU time = 程序包含的指令数量 × CPI × 时钟周期

      三个因素之间的相互影响?

       

      运算器的组成部分

      运算器是计算机中执行各种算术和逻辑运算操作的部件,通常由以下几个部分组成:

      几种驱动方式

      控制流驱动方式、数据流控制方式、微程序控制方式、多指令多数据流方式是计算机的不同工作方式,它们各有特点和优缺点。下面我简单介绍一下:

      相联存储器

      是一种特殊的存储器,它可以根据存储内容而不是地址来进行存取。相联存储器的优点是可以快速地查找数据,因为它可以同时比较多个存储单元的内容。相联存储器的缺点是成本高,容量小,复杂度高。

      相联存储器的工作原理是这样的:

      相联存储器可以用在不同的场合,例如:

      衡量计算机性能的指标

      计算机有两种不同的性能

      不同应用场合用户关心的性能不同

      CPU 性能的影响因素

      image-20230924222348945

      名称影响因素如何影响
      算法指令数、CPI算法决定源程序的指令条数,因此决定了处理器执行的指令条数。算法由于对慢速或快速指令的不同倾向性而同样影响了CPI。
      编程语言指令数、CPI由于编程语言中的语句被翻译成CPU指令,而后者决定了指令条数,因此编程语言势必会影响指令条数。由于编程语言的自身特点,它可能同样影响CPI。例:强支持数据抽象的语言(如Java)要求间接调用,而这往往会用到具有高CPI的指令
      编译器指令数、CPI编译器的效率对指令数及每条指令的平均周期数均有影响,这是因为编译器决定了从源语言语句到机器指令的翻译。编译器的作用可以非常复杂,同时通过复杂的方式影响CPI
      指令集体系结构指令数、时钟频率、CPI指令集的结构对CPU性能的这三个方面均有影响,因为它影响了函数需要的指令、每条指令需要周期及CPU总的时钟频率

      小结

      影响系统性能的硬件技术指标

      1)主频

      2)运算速度

      3)运算精度

      1. 存储容量

      并行计算

      Amdahl定律

      SA=1s+1sN

      N: 为处理器数量

      s: 指程序中串行部分的工作量占整个程序工作量的比例

      SA:加速比

      ==SA

      Amdahl定律说明什么?

      省流:并行计算没有前途

      N,1sN0,SA1s

      SA存在上限

      对计算机系统的某个部分采用并行优化措施后所获得的计算机性能的提高是有上限的,这个上限取决于串行部分所占的比例

      Gustafson公式

      ScaledSpeedup=s+p×Ns+p=s+p×N=N+(1N)×s

      Gustafson公式说明什么?

      省流:并行计算有前途

      打破Amdahl定律的一个假设:问题规模不变,相对于Amdahl,Gustafson只是换了个看问题的角度而已,但超级计算机研制的道路豁然开朗

      第二章 指令系统和数据存储

      指令系统概述

      兼容性:

      两种类型指令系统计算机:CISC与RISC

      Complex Instruction Set Computer 出现较早,大而全

      Reduced Instruction Set Computer John cock & 小而精

      指令格式

      定长操作码/扩展操作码

      寻址方式

      立即数寻址

      源操作数直接在指令中

      1.指令执行时间很短,无需访存 2.操作数的大小受地址字段长度的限制 3.广泛使用

      平时用的基本都是很小的数,特别是1和0用得最多, 这种方式访问速度更快

      存储器直接寻址

      操作数在存储器中,指令地址字段 直接给出操作数在存储器中的地址

      1. 处理简单、直接
      2. 寻址空间受到指令的地址字段长度限制
      3. 较少使用,8位计算机和一些16位计算机

      能够直接寻址的那一部分内存空间 可以给操作系统内核用,别的程序不允许使用

      操作系统内核是基本不变的,并且经常访问

      寄存器直接寻址

      操作数在寄存器中,指令地址字段直接给出存放操作数的寄存器编号

      1. 只需要很短的地址字段
      2. 无需访存,指令执行速度快
      3. 地址范围有限,可以编程使用的通用寄存器不多
      4. 使用最多,是提高性能的常用手段

      存储器间接寻址

      操作数和操作数地址都在存储器中 指令地址字段直接给出操作数地址在存储器中的地址

      两次访存,速度慢 实际使用很少

      寄存器间接寻址

      比存储器间接寻址少访问存储器一次 寻址空间大,使用比较普遍

      偏移寻址

      相对寻址是把 PC 的内容加上指令格式中的形式地址 A 而形成操作数的有效地址,即 EA =(PC)+A,其中 A 是相对于当前指令地址的位移量,可正可负,补码表示,常用于jmp指令的跳转

      image-20230925081235817

      设指令长度为Δ, DispA给出的位移量

      则目的地址=(PC+Δ)+Δ×Disp

      基址寻址实现程序的重定位

      基址寻址是指将CPU中基址寄存器(BR)的内容加上指令格式中的形式地址A而形成操作数的有效地址,即EA=(BR) + A。其中基址寄存器既可采用专用寄存器,又可采用通用寄存器

      image-20230925081904623

      基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定,主要用于解决程序逻辑空间与存储器物理空间的无关性。在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量)。采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器,但其内容仍由操作系统确定。

      基址寻址的优点是可扩大寻址范围(基址寄存器的位数大于形式地址A的位数);用户不必考虑自己的程序存于主存的哪个空间区域,因此有利于多道程序设计,并可用于编制浮动程序,但偏移量(形式地址A)的位数较短。

      变址寻址实现线性表元素的存取

      变址寄存器的内容由用户设定,在程序执行过程中其值可变,而指令字中的形式地址A是不可变的!

      image-20230925082325685

      变址寻址是指有效地址EA等于指令字中的形式地址A与变址寄存器IX 的内容之和,即EA= (IX) + A,其中IX为变址寄存器(专用),也可用通用寄存器作为变址寄存器。图为采用专用寄存器IX的变址寻址示意图。

      堆栈寻址

      堆栈是存储器(或专用寄存器组)中一块特定的、按后进先出(LIFO)原则管理的存储区,该存储区中读/写单元的地址是用一个特定的寄存器给出的,该寄存器称为堆栈指针(SP)。堆栈可分为硬堆栈与软堆栈两种。

      寄存器堆栈又称硬堆栈。寄存器堆栈的成本较高,不适合做大容量的堆栈;而从主存中划出一段区域来做堆栈是最合算且最常用的方法,这种堆栈称为软堆栈。

      在采用堆栈结构的计算机系统中,大部分指令表面上都表现为无操作数指令的形式,因为操作数地址都隐含使用了SP。通常情况下,在读/写堆栈中的一个单元的前后都伴有自动完成对SP 内容的增量或减量操作。

      复合寻址

      寻址方式的确定

      总结

      image-20230925105219699

      数据在计算机中的表示

      为什么计算机内部所有信息都采用二进制编码表示?

      1. 制造二个稳定态的物理器件比较容易
      2. 二进制的编码、计数、运算规则简单
      3. 与逻辑命题对应,便于逻辑运算,并能方便地用逻辑电路实现算术运算

      image-20231001165337343

      浮点表示

      浮点数标准IEEE 754

      image-20230925112717303

       符号 s (Sign)阶码e (整数)Exponent尾数f (小数)Significand
      float1823
      double11152

      SP(单精度)浮点数: (1)S×(1+f)×2(Exponent127)

      DP(双精度)浮点数: (1)S×(1+f)×2(Exponent1023)

      阶码

      阶码用移码表示,移码比补码更容易比较大小,便于浮点数加减运算时进行对阶操作

      n为阶码位数,则偏置常数为2n11

      偏置常数为: 127(单精度SP);1023(双精度DP) 单精度规格化数阶码范围为 0000 0001 (-126) ~ 11111110 (127)

      全0和全1的编码留做它用

      特殊浮点数

      阶码(移码)尾数数据类型
      1~254任何值规格化数(隐含小数点前为“1”)
      000
      0非零的数非规格化数(表示更小的数) Denormalized numbers
      2550inf
      255非零的数非数(NaN)Not a Number,用于方便调试错误

      表示0:

      +0: 0 00000000 00000000000000000000000 -0: 1 00000000 00000000000000000000000

      表示+/

      +:0 11111111 00000000000000000000000

      :1 11111111 00000000000000000000000

      非规格化数可表示0.0001×21260.1111×2126之间的数

      打破第一位为1的限制,牺牲精度换更大的表示范围

      数据度量单位

      度量单位缩写存储二进制时 换算关系描述计算机通信带宽时 换算关系
      千字节KB1KiB=210字节=1024B1KB=103字节=1000B
      兆字节MB1MiB=220字节=1024KB1MB=106字节=1000KB
      千兆字节GB1GiB=230字节=1024MB1GB=109字节=1000MB
      兆兆字节TB1TiB=240字节=1024GB1TB=1012字节=1000GB

      大端和小端存储

      有些机器两种方式都支持,需要通过特定控制位来设定(ARM, Alpha)

      音频、视频和图像等文件格式或处理程序都涉及字节的顺序问题 例: Little endian:GIF, PC Paintbrush, Microsoft RTF等 Big endian:Adobe Photoshop, JPEG, MacPaint等

      数据对齐

      数据校验

      定点小数

      定点小数转化为反码、补码和定点整数转化为反码、补码完全一样

      加减也一样,转化为补码运算

      image-20231001170611957

      定点小数和定点整数在位数扩展时,扩展的位置不一样

      MIPS指令集

      image-20230925123624596

      第三章 数据运算

      补码基本运算(加减)

      补码加法器的基本实现

      image-20230925150310944

      溢出问题

      image-20230925150757629

      溢出检测方法:运算中增加一位补码(模4补码)

      符号位相同0110
      状态表示正常正溢出负溢出

      加法器

      image-20230925152132572

      组内并行,组间传递

      image-20230925152207693

      四个组同时计算,需要算两轮,首先各自独立算C4,C8,C12,C16,再根据得到的C4,C8,C12,C16重新算一遍,需要两个时钟周期

      移码的加减运算

      注意:此处的移码和IEEE754标准中的移码不同,使用不一样的偏置常数,所以运算法则不同,请注意区分

      此处的移码运算:以8位移码为例,偏置常数27=128,

      [E1+E2]=E1+E2+128mod28=[E1]+[E2]128mod28=[E1]+[E2]+10000000(2)mod28
      [E1E2]=[E1]+[E2]+128mod28=[E1]+128([E2]+128)+128mod28=[E1][E2]+10000000(2)mod28

      补码和移码的关系:符号位相反、数值位相同!

      移码相加减的结果等于其对应补码

      1. 加法:直接将[E1][E2]进行模2n相加,对结果符号取反
      2. 减法:先将减数[E2] 求补(各位取反,末位加1),再与被减数 [E1]进行模2n相加,对结果的符号取反
      3. 溢出判断:进行模2n相加时,如果两个加数的符号相同,且与和数的符号也相同,则发生溢出

      原码乘法

      乘法

      补码乘法(Booth乘法)

      例:C=A*B 被乘数 [A]=A01A02A1A2An 乘数 [B]=B0B1B2Bn 乘积 [C]=C0C1C2CnCn+1Cn+2C2n

      判断位 (Bn,Bn+1)新部分积 [Pi+1]=操作说明
      0 021[Pi]1右移一位
      0 121{[Pi]+[A]}+,1[A]后再右移一位
      1 021{[Pi]+[A]},1[A]后再右移一位
      1 121[Pi]1右移一位

      快速加法

      存储进位加法器CSA: 将进位在本级加法器中保存,留待以后级进行计算。又称伪加器

      image-20230925180128545

      浮点数的计算

      加法

      进行尾数加法运算前,必须“对阶”!

      IEEE754尾数右移时,需要注意的是什么?

      1、要将隐含的“1”移到小数部分,空出位补0; 2、移出的低位保留到特定的“附加位”上

      浮点数加法步骤

      有四种舍入方式

      就近舍入:

      1.110111 ~ 1.1110

      1.110101 ~ 1.1101

      1.110110 ~ 1.1110

      1.111100 ~ 1.1111

      +方向舍入

      方向舍入

      朝0方向舍入

      溢出

      乘除法

      浮点移码

      IEEE754标准中的移码计算法则和前面的移码运算法则不同,使用不一样的偏置常数,所以运算法则不同,请注意区分

      [E1+E2]=E1+E2+127mod28=[E1]+[E2]127mod28=[E1]+[E2]+10000001(2)mod28
      [E1E2]=[E1]+[E2]+127mod28=[E1]+127([E2]+127)+127mod28=[E1][E2]+01111111(2)mod28

      加法:相当于移码相加的结果对符号位取反后再加一

      减法:相当于移码相减的结果对符号位取反后再减一

      规格化:

      规格化原则 当尾数高位为0,左规 当尾数产生进位,右规

      规格化尾数:11<212<2 (尾数形为1.xxx)

      (考试重点)

      计组实验

      RISC-V指令集

      在线 RISC-V 整数指令集解释器

      六种基本指令格式:

      1. 用于寄存器-寄存器操作的 R 类型指令
      2. 用于短立即数和访存 load 操作的 I 型指令
      3. 用于访存 store 操作的 S 型指令
      4. 用于条件跳转操 作的 B 类型指令
      5. 用于长立即数的 U 型指令
      6. 用于无条件跳转的 J 型指令。

      image-20231027073124564

      Arithmetics

      带立即数:

      image-20231017122311122

      不带立即数:

      image-20231017123011030

      Logical

      sets

      shifts

      Slli rd, rs1, imm表示shift left logical imm,将rs1中的数,逻辑左移imm这么多位数,逻辑移位的话都是填充0. Srli rd, rs1, imm表示shift right logical imm,表示逻辑右移,也是填充0 Srai rd, rs1, imm表示shift right arithmetic imm,表示算数右移,即右移的时候,填充符号位。

      image-20231017122702842

      Memory

      PC

      risc-v

       

      chisel

      :=运算符

      在chisel中,:=运算符用于给可变对象重新赋值,例如Wire或Reg。它是一种特殊的方法,可以在硬件描述中表示连接或驱动的语义。它与=运算符不同,=运算符用于给不可变对象初始化赋值,例如val变量或常量。:=运算符的优先级与=运算符相同,都是最低的。你可以参考以下两个网页了解更多关于chisel中=和:=的区别和用法:Chisel 入门引导教程chisel中=和:=的区别

      +&

      代码见3.1节

      32个32位寄存器组

      见3.2节

      中断

      然后从 mtvec 获取中断处理程序的地址,跳转到该地址执行进一步的中断处理。

      CSR和CLINT

      在RISC-V架构的CPU中,CSR(Control and Status Registers)和CLINT(Core Local Interruptor)是两个重要的组成部分。CSR是一类控制和状态寄存器,属于CPU自带的一类寄存器,用于控制和监视CPU的运行状态。CLINT是一个内存映射设备,用于处理器核之间的中断和定时器功能。下面是它们的工作原理:

      CSR的访问与当前指令或程序处于何种模式密切相关,不同模式下所能访问的CSR数量都不同。如果强行访问一个本不应该在该模式下访问的CSR则会触发非法指令异常。所以在设计CSR访问逻辑时,需要知道该CSR允许在哪些种模式下可以访问。

      以下CSR寄存器的详细功能:

      当MSIP寄存器被写入时,会向处理器核发送一个软件中断请求。当MTIME计数达到MTIMECMP设置的值时,会向处理器核发送一个定时器中断请求。

      CSR指令

      翻译自非特权级手册第九章

      image-20231103092649198

      符号说明:以下用[csr]表示在CSR寄存器组中编号为csr的寄存器中存储的值

      (rd)表示在通用寄存器组中编号为rd的寄存器中存储的值

      csr[11:10]为11的是只读寄存器,为10,01,00的是读写寄存器

      vivado新手入门

      器件选择xc7a35tcpg236-1

      1. 左上角绿色箭头运行run synthesis
      2. Open synthesized design设计芯片引脚

      打开I/O ports

      时钟信号接W5(CLK100MHz)

      I/O std改为LVCMOS33

      1. 左上角绿色箭头运行run implementation
      2. 选择generate bitstream
      3. hardware manager ,选择program device

      bit文件路径D:/vivado/vivado_ducuments/AndLogic/AndLogic.runs/impl_1/AndLogic.bit

      (D:/vivado/vivado_ducuments/AndLogic为项目目录)

      bit文件写的程序在开发板的RAM中

      把程序写在ROM中:

      settings/bitstream/-bin_file打勾

      重新generate bitstream,现在在生成bit文件的同时还会生成bin文件

      hardware manager ,选择add configuration memory device,搜索S25FL032

      如果单击流程导航窗口“编程和调试(Program and Debug)”项下的“增加配置内存设备(Add configuration Memory Device)”项进行比特流设置。该项在“Program Device”项之前是灰色的,不可单击,可能因为已经选择了一个flash芯片,可以先把内核下面的芯片移除,重新选择flash型号 如下图,鼠标右键[n25q64-3.3v-spi-x1_x2_x4],选择[Remove Configuration Memory Device]

      bin文件目录:D:/vivado/vivado_ducuments/AndLogic/AndLogic.runs/impl_1/AndLogic.bin

      (D:/vivado/vivado_ducuments/AndLogic为项目目录)

      1.第一个程序

      与门逻辑

      译码器

      2.七段显示学号

      首先创建文件xuehao.v

      七段数码管:

      image-20231003185917731

      image-20231003210052863

      Top.v

      AndLogic.v

      CLK_div.v

      xuehao.v

      image-20231003205832116

      3.实现ALU

      输入:两个四位数据输入 运算符

      输出:运算结果,符号标志位,0标志位

      image-20231004075331791

      所需模块

      4位无符号加法器

      top.v

      CLK_div.v

      my_alu.v

      Xianshi.v

      constraint.xdc

      四位多功能ALU

      第五章 中央处理器

      image-20231004194113247

      CPU的功能和基本结构

      1.指令控制。完成取指令、分析指令和执行指令的操作,即程序的顺序控制。

      2.操作控制。一条指令的功能往往是由若干操作信号的组合来实现的。CPU管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应的部件,从而控制这些部件按指令的要求进行动作。

      3.时间控制。对各种操作加以时间上的控制。时间控制要为每条指令按时间顺序提供应有的控制信号。

      4.数据加工。对数据进行算术和逻辑运算。

      5.中断处理。对计算机运行过程中出现的异常情况和特殊请求进行处理。

      运算器---->对数据进行加工

      控制器---->协调并控制计算机各部件执行程序的指令序列,基本功能包括取指令、分析指令、执行指令CPU

      取指令: 自动形成指令地址; 自动发出取指令的命令。

      分析指令:操作码译码(分析本条指令要完成什么操作);产生操作数的有效地址。

      执行指令:根据分析指令得到的“操作命令”和“操作数地址”,形成操作信号控制序列,控制运算器、存储器以及I/O设备完成相应的操作。

      中断处理:管理总线及输入输出;处理异常情况(如掉电)和特殊请求(如打印机请求打印一行字符)。

      ALU算术逻辑单元内部基本结构

      1.算术逻辑单元:主要功能是进行算术/逻辑运算。

      2.通用寄存器组:如AX、BX、CX、DX、SP等,用于存放操作数(包括源操作数、目的操作数及中间结果)和各种地址信息等。SP是堆栈指针,用于指示栈顶的地址。

      3.暂存寄存器:用于暂存从主存读来的数据,这个数据不能存放在通用寄存器中,否则会破坏其原有内容。

      4.累加寄存器:它是一个通用寄存器,用于暂时存放ALU运算的结果信息,用于实现加法运算。

      5.程序状态字寄存器:保留由算术逻辑运算指令或测试指令的结果而建立的各种状态信息,如溢出标志(OP)、符号标志(SF)、零标志(ZF)、进位标志(CF)等。PSW中的这些位参与并决定微操作的形成。

      6,移位器:对运算结果进行移位运算。

      7,计数器:控制乘除运算的操作步数。

      CU控制器基本结构

      1.程序计数器:用于指出下一条指令在主存中的存放地址。CPU就是根据PC的内容去主存中取指令的。因程序中指令(通常)是顺序执行的,所以PC有自增功能。

      2,指令寄存器:用于保存当前正在执行的那条指令。

      3,指令译码器:仅对操作码字段进行译码,向控制器提供特定的操作信号。

      4,微操作信号发生器:根据IR的内容(指令)、PSW的内容(状态信息)及时序信号,产生控制整个计算机系统所需的各种控制信号,其结构有组合逻辑型和存储逻辑型两种。

      5·时序系统:用于产生各种时序信号,它们都是由统一时钟(CLOCK)分频得到。

      6,存储器地址寄存器:用于存放所要访问的主存单元的地址。

      7,存储器数据寄存器:用于存放向主存写入的信息或从主存中读出的信息。

      image-20231004204715687

      image-20231004205122082

      image-20231005112648332

      数据通路

      image-20231005133153312

      MIPS的数据通路

      CPU执行过程

      公共部件:取址部件

       

      硬布线控制器的设置

      根据指令操作码、目前的机器周期、节拍信号、机器状态条件,即可确定现在这个节拍下应该发出哪些“微命令”

      image-20231005150844171

      微程序控制器

      image-20231006075235556

      image-20231006141747712

      image-20231007075608895

      指令流水线

      机器周期的一种经典设置

      这是经典MIPS架构提出的五段式

      缩写英文解释实际耗时
      IFInstruction Fetch从Instruction cache取指令(访存)100ns
      IDInstruction Decode指令译码+从通用寄存器取数80ns
      EXExecute执行,使用ALU70ns
      MMemory访存50ns
      WBWrite Back写(寄存器)50ns

      为了方便流水线的设计,机器周期设置为100ns

      image-20231007090713326

      流水线每一个功能段部件后面都要有一个缓冲寄存器,或称为锁存器,其作用是保存本流水段的执行结果,提供给下一流水段使用。

      Imm用来存立即数

      问题

      1. 结构相关(资源冲突)

        由于多条指令在同一时刻争用同一资源而形成的冲突称为结构相关。

        1. 后一相关指令暂停一周期
        2. 资源重复配置:数据存储器+指令存储器
      2. 数据相关

        数据相关指在一个程序中,存在必须等前一条指令执行完才能执行后一条指令的情况,则这两条指令即为数据相关。

        1. 把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行。可分为硬件阻塞(stall)和软件插入“NOP”(Null operator)两种方法。
        2. 数据旁路技术(转发机制)
        3. 编译优化:通过编译器调整指令顺序来解决数据相关
      3. 控制相关(控制冲突)

        当流水线遇到转移指令和其他改变PC值的指令而造成断流时,会引起控制相关。

        1. 转移指令分支预测。简单预测(永远猜true或false)、动态预测(根据历史情况动态调整)
        2. 预取转移成功和不成功两个控制流方向上的目标指令
        3. 加快和提前形成条件码
        4. 提高转移方向的猜准率

      image-20231007092842875

      流水线的分类

      1. 部件功能级、处理机级和处理机间级流水线

        根据流水线使用的级别的不同,流水线可分为部件功能级流水线、处理机级流水线和处理机间流水线。

        部件功能级流水就是将复杂的算术逻辑运算组成流水线工作方式。例如,可将浮点加法操作分成求阶差、对阶、尾数相加以及结果规格化等4个子过程。

        处理机级流水是把一条指令解释过程分成多个子过程,如前面提到的取指、译码、执行、访存及写回5个子过程。

        处理机间流水是一种宏流水,其中每一个处理机完成某一专门任务,各个处理机所得到的结果需存放在与下一个处理机所共享的存储器中。

      2. 单功能流水线和多功能流水线

        按流水线可以完成的功能,流水线可分为单功能流水线和多功能流水线。

        单功能流水线指只能实现一种固定的专门功能的流水线;

        多功能流水线指通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线。

      3. 动态流水线和静态流水线

        按同一时间内各段之间的连接方式,流水线可分为静态流水线和动态流水线。

        静态流水线指在同一时间内,流水线的各段只能按同一种功能的连接方式工作。

        动态流水线指在同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算。这样对提高流水线的效率很有好处,但会使流水线控制变得很复杂。

      4. 线性流水线和非线性流水线

        按流水线的各个功能段之间是否有反馈信号,流水线可分为线性流水线与非线性流水线。

        线性流水线中,从输入到输出,每个功能段只允许经过一次,不存在反馈回路。

        非线性流水线存在反馈回路,从输入到输出过程中,某些功能段将数次通过流水线,这种流水线适合进行线性递归的运算。

      流水线的多发技术

      1. 超标量技术

        每个时钟周期内可 并发多条独立指令,要配置多个功能部件

        不能调整指令的执行顺序,通过编译优化技术,把可并行执行的指令搭配起来

      2. 超流水技术

        在一个时钟周期内再分段(3段)

        在一个时钟周期内一个功能部件使用多次(3次)

        不能调整指令的执行顺序,靠编译程序解决优化问题

      3. 超长指令字

        由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条

        具有多个操作码字段的超长指令字(可达几百位),采用 多个处理部件

      image-20231007095656648

      image-20231007095835609

      五段式指令流水线

      image-20231007173352240

      ①IF取指→②ID译码&取数→③EX执行→④M访存→⑤WB写回寄存器

      考试中常见的五类指令:

      运算类指令、LOAD指令、STORE指令、条件转移指令、无条件转移指令

      运算类指令

      ①IF取指→②ID译码&取数→③EX执行→④M访存→⑤WB写回寄存器

      LOAD指令

      ①IF取指→②ID译码&取数→③EX执行→④M访存→⑤WB写回寄存器

      通常,RISC处理器只有“取数LOAD”和“存数STORE”指令才能访问主存

      STORE指令

      ①IF取指→②ID译码&取数→③EX执行→④M访存→⑤WB写回寄存器

      条件转移指令

      ①IF取指→②ID译码&取数→③EX执行→④M访存→⑤WB写回寄存器

      很多教材把写回PC的功能段称为"WrPC段” ,其耗时比M段更短,可安排在M段时间内完成

      无条件转移指令

      ①IF取指→②ID译码&取数→③EX执行→④M访存⑤WB写回寄存器

      多处理器系统

      image-20231008092815203

      image-20231009073704131