运算方法和运算器 _ 运算器和流水线
基本算数逻辑部件
半加器
半加器是指对两个输入数据位相加,输出一个结果位和进位,没有进位输入的加法器。
通过 异或门和与门 可以很清楚的设计出半加器,逻辑图如下:
一位全加器
实际应用中,不可能只进行一位的加法,而半加器没有考虑上位对本位的影响,因此必须改进半加器,从而使多位运算成为可能。
全加器 与半加器相比,全加器 考虑 上一位对本位的进位,从而可以把多个一位全加器级联后做成多位全加器.
分析:
输入有:𝐴𝑖,𝐵𝑖,𝐶𝑖−1(前一位进位);需要求:𝑆𝑖(当前位结果),𝐶𝑖(当前位进位),
𝐵𝑖:很简单,输入中有奇数个1时为1,用异或即可。
𝐶𝑖:有两种思路:思路1. 判断输入中至少2个1;
一般更常用思路2:对两个进位源分别判断,然后进行或运算。
- G产生进位(来自本级𝐴𝑖和𝐵𝑖)
- P传递进位(来自前一级𝐶𝑖−1 与本级某个数)
用公式表示就是:
- \(S_i = A_i ⊕ B_i ⊕ C_{i-1}\)
- \(C_i = A_i•B_i+(A_i ⊕ B_i)•C_{i-1}=G_i + P_i•C_{i-1}\)
一位全加器逻辑设计图如下:
封装后展示如下:
行波进位 并行加法器
行波进位的并行加法器:把n个全加器串接起来,就可进行两个n位数的相加。
行波进位:每一级进位直接依赖于前一级的进位,即进位信号是逐级形成的。
将一位全加器串联进行多位运算显然是可行的,设计图如下:
缺点:
-
不能并行,速度慢。
低位产生完进位,下一波才能运算进位,数位越多,运算时间越长。 -
只能做加法运算,不能做逻辑运算。
n位行波进位加法器的延迟时间?
\(n*2T+9T=(2n+9)T\)
并行进位 并行加法器
行波进位速度慢的原因是需要等待上级进位;通过对进位公式的刨析,可以发现各级进位同时发生,公式推到如下:
已知:𝐶𝑖 = 𝐺𝑖 + 𝑃𝑖 𝐶𝑖−1;𝐺𝑖= 𝐴𝑖𝐵𝑖;𝑃𝑖= 𝐴𝑖⊕𝐵𝑖
\(C_1=G_1+P_1C_0\)
\(C_2=G_2+P_2C_1 =G_2+P_2G_1+P_2P_1C_0\)
\(C_3=G_3+P_3C_2 =G_3+P_3G_2+P_3P_2G_1+P_3P_2P_1C_0\)
所有进位的产生只与进位产生函数G和进位传递函数P,以及最低位进位输入有关。这种产生进位的方法称为并行进位,也叫先行进位。
由此就可设计出 并行进位加法器。
并行进位的并行加法器:各级进位信号同时形成。(又称为先行进位、同时进位)
并行进位速度快的原因简述:
并行加法器的最长运算时间主要由进位信号的传递时间决定的。提高并行加法器速度的关键是尽量加快进位产生和传递的速度,并行进位加快了进位产生。
缺点:
- 只能做加法运算,不能做逻辑运算。
算术逻辑单元ALU
设计到并行进位 并行加法器,运算器距离ALU还差 逻辑运算 功能没有实现。
算术逻辑单元 (Arithmetic logic unit)是能实现多组 算术运算和逻辑运算 的组合逻辑电路。
为了实现多种算术逻辑运算,可将Ai和Bi输入一个函数发生器得到输出Xi和Yi,作为一位全加器的输入。
一位ALU逻辑图
将Ai和Bi先组合成由控制参数S0,S1,S2,S3控制的组合函数Xi和Yi,然后再将Xi和Yi和下一位进位数通过全加器进行全加。
不同的控制参数可得到不同的组合函数,因而能够实现多种算数运算和逻辑运算。
XiYi 与控制参数和输入量的关系构造如下真值表
Yi是受S0、S1控制的Ai和Bi的组合函数,
Xi是受S2、S3控制的Ai和Bi的组合函数。
根据如上关系得到的Xi和Yi的逻辑表达式如下所示。
进一步化简得到下式
\(X_i= \overline{S_3 A_i B_i +S_2 A_i \overline{B_i}}\)
\(Y_i= \overline{A_i +S_0 B_i +S_1 \overline{B_i}}\)
例如:
\(S_3S_2S_0S_1=0000\)
代入:
串行进位 4位进位ALU
串行进位和全加器设计方案类似:直接串联即可
先行(并行)进位发生器CLA
也和并行进位全加器设计方案类似:需要增加线路。
增加P和G的目的在于实现多片(组)ALU之间的先行进位(先行进位即高位进位和低位进位同时产生的进位),需要配合电路,称为先行进位发生器(CLA,carry look ahead )
4位ALU器件的商业标号为: 74181
通过M控制
M=1时,进位门被封锁,做逻辑运算
M=0时,对进位信号没有影响,做算术运算
A=B端可以判断两个数是否相等。
正逻辑操作数表示的74181ALU逻辑电路图
A/B为两个输入的操作数据;S0-S3四个选择控制端,F为输出的结果;
M为控制端:包括各种算术元算(M=0)和逻辑运算等;
Cn为低位向它的进位,Cn+4为它向高位的进位;
G为进位产生函数;P为进位传递函数。
A=B为指示A与B相等的输出信号。
设计16位ALU
由于制作工艺的限制,单片ALU的位数不可能太多。当需要组成更多位数的ALU时,可以使用多片ALU组合。
常见的组合方式有两种:
(1)片内先行进位,片间串行进位
16位ALU分为4组,每组包含4位全加器,组内采用并行进位方式,组间采用串行进位。
由于组内采用并行进位,故每一组内的进位是同时产生的;但组间进位与低位传来的进位有关,而每一组的低位进位不能同时产生,因此所有进位不会同时产生。
(2)片内先行进位,片间先行进位.
需要一个配合电路,称之为先行进位发生器(CLA 74182 )。
74181ALU设置了P和G两个本组先行进位输出端。
如果将四片74181的P,G输出端送入到74182先行进位部件(CLA),又可实现第二级的先行进位,即组与组之间的先行进位。
设计16位先行进位ALU:需要1个74L182,4个4位ALU74L181
每片74181作为1个4位的小组,组内采用并行进位。
74181输出的G、P作为74182的输入,实现四个小组之间的先行进位。
题目
1、提高加法器运算速度的关键是 降低进位信号的传播时间。
先行进位的含义是:低有效位的进位信号可以直接向最高位传递。
2、74181是采用 先行进位方式 的4位并行算术逻辑器,
74182是实现组间并行进位的进位逻辑。若某计算机系统
字长为64位,每4位组成一个小组,每4个小组组成一个大组,为实现小组内并行、大组内并行进位方式,共需要16片74181和4片74182。
3、74181设置了 进位发生输出G 和 进位传送输出P 两个本组先行进位输出端 。如果将此两输出端送往74182CLA部件,又可实现 组与组 之间的先行进位
内部总线
内部总线:
指CPU内部连接各寄存器及运算部件之间的总线。运算器的设计主要是围绕着ALU和寄存器同数据总线之间如何传输操作数和运算结果而进行的,因此内部总线也称为ALU总线。
分类
所处位置
- 内部总线(CPU内各部件的连线)
- 外部总线(系统总线,即CPU与存储器,I/O之间的连线)
逻辑结构
- 单向传送总线:信息只能向一个方向传送。
- 双向传送总线:信息可以向两个方向传送。
图: 由三态门组成的双向数据总线
当发送端为高电平时,从左向右传送数据。
当接收端为高电平时,从右向左传送数据。
定点运算器的基本结构
运算器包括ALU、阵列乘除器、寄存器、多路开关、三态缓冲器、数据总线等逻辑部件。
计算机的运算器大体有如下三种结构形式:
- 单总线结构的运算器(所有部件都接到同一总线)
- 双总线结构的运算器
- 三总线结构的运算器
单总线结构的运算器(所有部件都接到同一总线)
同一时间内,只有一个操作数放在单总线上。为了把两个操作数输入到ALU,需要分两次来做。
再需要第三个动作,才能把结果送到目的寄存器。
缺点:操作速度慢
优点:控制电路简单
双总线结构的运算器
两个操作数同时加到ALU进行运算,只需要一次操作控制,下一步就能把运算结果送入目的寄存器。
因此需要两步就可以完成运算。
注意:
当形成操作结果输出时,两条总线都被输入线占据,因此必须在ALU输出端设置缓冲寄存器。
三总线结构的运算器
在三总线结构中,ALU的两个输入端分别由两条总线供给,而ALU的输出则与第三条总线相连。
这样算数逻辑操作就可以在一步的控制之内完成。
优点: 操作时间快
注意:
一个数据不需要修改,而直接从总线2到总线3,那么可通过总线旁路器把数据传出。
浮点运算器
浮点运算步骤如下
先表示为浮点数补码形式(阶码、尾数)
① 0操作数的检查
②比较阶码大小并完成对阶(小阶向大阶对齐。阶小的尾数向右移位,每右移一位,阶码加1 )
③尾数进行加运算(减法转为补码加)
[x+y]补=[x]补+[y]补
[x-y]补=[x]补+[-y]补
④结果规格化
⑤舍入处理
浮点运算流水线
提高并行性的两个渠道:
-
空间并行性:多个独立的操作部件,并且使这些部件并行工作
-
时间并行性:改善操作流程
如流水线技术
流水技术原理?
实现:
- 把一个任务分解为几个有联系的子任务。
- 每个子任务由一个专门的功能部件实现
注意:
-
在流水线中的每个功能部件之后都要有一个缓冲寄存器,或称为锁存器
-
流水线中各段的时间应该尽量相等,否则将会引起“堵塞”和“断流”的现象
-
流水线需要有装入时间和排空时间,只有当流水线完全充满时,才能充分发挥效率。
设过程段 \(S_i\)所需的时间为\(τ_i\),缓冲寄存器的延时为\(τ_t\)
线性流水线的时钟周期定义为
\(τ=max\{τ_i\}+τ_t=τ_m+τ_t\)
流水线处理的频率为 \(f=\frac{1}{τ}\)。
也就是说:
时钟周期应以最长的执行时间为准,否则用时长的流水段的功能将不能正确完成。
考研真题:某计算机的指令流水线由四个功能段组成,指令流经各功能段的时间(忽略各功能段之间的缓存时间)分别是90ns、80ns、70ns和60ns,则该计算机的流水线时钟周期至少是
( A )
A. 90ns B. 80ns C. 70ns D. 60ns
各段时间均相等的流水线
各段时间均相等的流水线时空图
具有k 级过程段的流水线处理 n 个任务需要的时钟周期数为
\(T_k=k+(n-1)\)
装入时间是指第一个任务进入流水线到输出流水线的时间。
流水线各段时间相等(都是△t)(忽略缓冲时间)
1、具有k 级过程段的流水线处理 n 个任务需要的时钟周期数为
\(T_k=k+(n-1)\)
2、非流水线的硬件来处理这n个任务,时间上只能串行进行,则所需时钟周期数为
\(T_L=n*k\)
3、k级线性流水线的加速比(完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比):
Ck = n·kΔt
{k+(n-1) } Δt
= n·k
k+(n-1)
注意:
如果不忽略缓冲时间,流水线各环节需要增加缓冲时间
二、流水线的各段时间不完全相等时(忽略缓冲时间)
顺序执行n个任务所需要的时间:
装入时间是指第一个任务进入流水线到输出流水线的时间。
注意:
如果不忽略缓冲时间,流水线各环节需要增加缓冲时间
题目:
例题:若指令流水线把一条指令分为取指、分析和执行三部分,且三部分的时间分别为\(t_{取值}=2ns,t_{分析}=2ns\),t-{执行}=1ns,则100条指令全部执行完毕需( 203 )ns。
解:一条k段流水线完成n个连续任务所需要的时间为
\(\sum_{i=1}^{k} \Delta t_{i}+(n-1) \max \left(\Delta t_{1}, \Delta t_{2}, \cdots, \Delta t_{k}\right)\)
带入公式得:(2+2+1)+ (100-1) × 2 = 5 + 198 = 203ns
流水线的各段时间不完全相等时(忽略缓冲)
一条k段流水线完成n个连续任务
所需要的时间为
顺序执行n个任务所需要的时间:
流水线的实际加速比为