数字逻辑复习
数逻
导学
证明身份、简单、方便、高可用
数字系统与信息
- 信息表示:模拟计算机(电流/电压等连续物理量)/数字计算机(数值)
- 数制及其转换
- 二进制相较十进制:表示简单(高为1,低为0)、运算简单、存储容易
- 进制转换体现人文关怀
- 二转十

- 十转二

注意这里的0.6875恰好能拆成2的幂次的组合,而0.6877的低位可能会无限延伸下去 - 八与十六与二转:用三位二进制表示一位8进制,用四位二进制表示一位十六进制
- 二转十
逻辑代数
- 公理
- 交换律
- 结合律
- 分配律
工程意义:前者可以省去一个或门、后者可以省去一个与门 - 0-1 律
工程意义:对于或门来说1相当于关门信号,对于与门来说0相当于关门信号 - 互补律
注意:对于给定的A,我们给与A相对应的逻辑变量取别名为\(\overline{A}\)
- 逻辑运算
- 与、或、非
- 与非、或非


- 异或

性质:

异或运算符可以和等于号换位置,以此来恢复数据 - 同或

- 定理(基于公理)


依次使用分配律和互补律即可
严格参照互补律的定义即可


难点 - 规则

注意运算顺序保持不变
一个等式成立,那么该等式的对偶形式也成立
- 逻辑函数

- 逻辑函数的表示方法:逻辑表达式、真值表、卡诺图、波形图
- 逻辑表达式
逻辑表达式中的优先级
- 卡诺图


- 波形图

- 逻辑表达式
- 逻辑表达式的形式并不唯一,我们需要确定一种标准形式:最小项的与或式(对应F取1的所有情况)、最大项的或与式(对应F取0的所有情况)
求标准与或式:化为与或式,根据\(A=AB+A\overline{B}\)扩展为标准式 ; 真值表法
求标准或与式:化为或与式,根据\(A=(A+B)\cdot(A+\overline{B})\)扩展为标准式 ; 真值表法










- 实现某一逻辑功能的逻辑电路的复杂性与描述该功能的逻辑表达式的复杂性直接相关,因此我们需要尽可能的化简:代数化简法、卡诺图化简法(以与或式化简为例)
- 代数化简常用方法


如果要求解最简或与式,可以直接化简

- 卡诺图化简法
如果要求解最简或与式,可以将卡诺图中的0当成1,得到\(\overline{F}\)的最简与或式然后求反;或者将F取对偶,然后画卡诺图,之后对\(F\prime\)的最简与或式取对偶
- 代数化简常用方法
数据表示
- 如何快速实现二进制数与十进制数之间的转换
BCD编码(Binary Coded Decimal)
一个十进制数与四个二进制位对应
常见类型: 8421码、2421码和余3码


在8421的基础上加0011 - 为什么从硬件层面考虑提高系统的可靠性?有哪些提高可靠性的方法?
- 格雷码 :用格雷码表示数据能够使数据出错时更有可能变为相邻的值,格雷码只能减少影响并不能检错纠错


- 校验码
增加冗余校验位,增大码距
- 奇偶校验:根据有效信息计算校验信息位,使校验码(数据+1位校验信息)中1的个数满足奇/偶数的要求

有错结论可信,无错结论不可信

- CRC校验 \(\bigstar\)


- CRC检错就是利用G(X)对收到的编码多项式做模2除运算的结果 ,余数不为0说明传输有错
- CRC在不能保证只有1位错时,无错结论不可信
- CRC校验在一位出错情况下余数的循环特性:将余数左移后再次计算就能得到当前出错位置左边一个的位置出错时应该得到的余数

- 利用这一特性我们的做法是:首先计算出余数,如果不为0说明某一位出错,如果不是最高位出错对应的余数,说明不是最高位出的错,我们将余数左移一位做计算,同时也将将CRC编码循环左移一位,如果不是最高位出错对应的余数,重复这一步骤,否则说明出错的位现在在最高位对最高位取非,然后按照之前的做法再左移若干次,使纠错位回到一开始的位置即可

- 汉明码

- 由于校验位位于汉明码的2的幂次位,假如汉明码的第10位需要校验,为了让校验位之和等于10,我们需要汉明码的第2位和第8位来校验,而不需要第1位和第4位,(10=1010)

- 所有使用第1位进行校验的数据位参与确定第1位的值

- 如果一个数据出错,那么有它参与的所有奇偶校验都会出错,也就是说指错字唯一确定出错数据的编号
- 在能确定只有一位出错时,出错结论可靠且能定位错误;否则,出错结论可靠但不能定位,无错结论不可靠
- 奇偶校验:根据有效信息计算校验信息位,使校验码(数据+1位校验信息)中1的个数满足奇/偶数的要求
- 格雷码 :用格雷码表示数据能够使数据出错时更有可能变为相邻的值,格雷码只能减少影响并不能检错纠错
- 数值数据表示
- 定点数(分为整数和小数)
- 原码: 符号位: 0表示正数,1表示负数,数值位与真值相同

- 反码:0表示正数,数值位与真值或原码相同,1表示负数,数值位与真值或原码相反

- 补码:0表示正数,数值位与真值或原码相同,1表示负数,数值位在反码最低位加1
整数表示


小数表示


数据表示范围

运算


- 移码

- 小结


- 原码: 符号位: 0表示正数,1表示负数,数值位与真值相同
- 浮点数
机器字长确定时,浮点数能表示更大范围或更高精确度的数据,科学记数法利用幂和尾数来表示浮点数, 浮点数采用阶码和尾数来表示


- IEEE 754格式与浮点数真值的转换 \(\bigstar\)


- 由于精度损失,浮点数不满足结合律

- IEEE 754格式与浮点数真值的转换 \(\bigstar\)
- 定点数(分为整数和小数)
组合逻辑电路设计
- 组合逻辑电路不含任何记忆(存储)元件
- 信号单向传输,不存在反馈回路

例:4-2异或表示74LS86里面有四个两输入的异或门,进而74LS86可以进行两输入异或也可以进行四输入异或

方便使用四输入与非
设计组合逻辑电路时要综合考虑元件的个数(成本)和电路的级数(时延)
信号经过任何部件都会产生时延,导致输入稳定时输出并不立即达到稳定
时延的危害:速度下降,信号波形参数变坏,产生竞争险象等;

无关项参与化简可以使电路更加简介,但当输入为无关项对应的输入时,输出为1,可能会带来潜在错误,应该在设计时给出说明(例如不准有无关项相关的输入)
竞争:组合电路中,信号经不同途径达到某一会合点时存在时差的现象
险象的概念: 由竞争导至的错误输出信号
险象的特征:组合电路中的险象是一种瞬态现象,它表现为在输出端产生不应有的尖脉冲,暂时地破坏正常逻辑关系。一旦瞬态过程结束,即可恢复正常逻辑关系

时延导致输入A改变,输出d、e、g不能立即改变,由于逻辑表达式中可能出现\(A\overline{A}\)所以会发生"1"型险象
同样逻辑表达式中可能出现\(A+\overline{A}\)则可能会发生"0"型险象
判断方法:找逻辑表达式中同时含原变量和反变量的变量,考虑其他变量的所有输入情况,看能否出现上面的形式

还可以通过卡诺图判断

险象消除:增加冗余项、增加惯性延时环节、选通法

例如\(F=AC+\overline{A}B\)在B=C=1时可能会出现"0"型险象,我们增加冗余项BC即可解决
当已知卡诺图时,可以通过将可能产生险象的两个相邻最小项用卡诺圈包围即可,同时是添加冗余项
增加惯性延时环节

图中RC电路是低通滤波器。由于竞争引起的险象是一些频率很高的尖脉冲信号,因此,险象在通过RC电路后能基本被滤掉

复用器
- 多路选择器:从一组输入数据中,选择出某一个数据,完成这种功能的逻辑电路称为数据选择器(或称为多路选择开关)
- 多路分配器:将1个输入数据,根据需要传送到m个输出端的任何一个输出端的电路,称为数据分配器、多路分配器或解复用器(与多路选择器相反)
- 译码器是一种数字逻辑电路,其主要功能是将输入的二进制编码转换为特定的输出信号。它根据输入信号的不同组合,将其转换为对应的输出信号
实际上每个输出是输入的一个最小项,且总的输出包含了所有的最小项,我们可以利用译码器的最小项进行组合逻辑设计


运算方法与运算器
定点数加法可以用补码直接计算
定点数减法可以用补码直接计算,物理实现时用加法器实现
求相反数的补码:记住从右往左找第一个1(也就是lowbit),这个1左边的位取反,其余部分保持不变
计算相反数的补码:对原补码取反再加1
基本加减法实现方法:

Sub同时起到控制是否取反和提供加的1的作用
溢出判断:对操作数和运算结果的符号位进行检测、通过运算中最高位数据的进位与符号位的进位是否同步来检测、用变型补码的双符号位
- 对操作数和运算结果的符号位进行检测,很显然是要两个操作数的符号相同([X]补与[Y]补, [X]补 与[-Y]补),但结果的符号发生改变

连到A处,判断电路较为复杂 - 显然溢出的两种情况不同步


- 显然溢出的两种情况低符号位是错的,但高符号位是正确的符号

无符号的加减法溢出检测:

无符号数加两个加数以及结果无符号位

无符号数减X-Y实际上用加Y的补码来实现,结果无符号位

快速加法器设计:先行进位
基本加减法实现方法采用迭代的方法,高位依赖于低位的进位结果,导致电路有很多级,时延较长


根据如上的分析,可以发现\(G_i,P_i\)没有依赖,\(C_i\)存在依赖
我们直接基于\(C_0\)开始计算\(C_1,C_2,C_3\),这样就能直接开始计算\(S_i\)


前面发现

我们使用迭代设计进行先行进位
同理组间也可以先行进位


我们只需要构建成组进位传递函数和成组进位生成函数的相关电路即可

这个设计可以迭代多层

SN74181运算芯片由若干个下图所示结构,它对数据A、B的第i位进行运算,S0、S1、S2、S3控制做何种运算,Xi和Yi是真正做一位加法的数据,Fi是运算结果,Cn+i是进位输入,Cn+i+1是进位输出(但一般进位输入不由低位的进位输出提供,而是由先行进位电路提供,这样可以减少时延)

如图所示

根据S值得不同Xi和Yi的取值也不同,这样就能利用加法器实现多种操作
浮点数加/减运算:

我们采用的是双符号位的补码浮点数表示,与IEEE754不同
例如

对阶时小变大,尾数同步右移(这样右移到一定范围可能会将权值最小的位移出,如果大变小,左移会将权值大的移出去,所以不采用)
运算结果需要规格化,标准是

- 对于00.0XXXX,它没有出现溢出但显然尾数太小也就是阶码太大,将阶码减去若干位,尾数左移相应位,使其规格化
- 对于11.1XXXX同理
- 对于01.XXXXX出现溢出,说明尾数太大,将阶码加1,尾数右移一位即可
- 对于10.XXXXX同理,注意符号扩展
规格化的舍入处理策略(右移时低位丢失):0舍1入,截去法,增加浮点运算附加位

定点乘法
- 原码
- 总是与部分积的高n位累加,之后将结果左移,这样可以累积右移的效果
- 原码的符号位是不参与计算的,相当于绝对值相乘,符号位直接异或当作结果的符号位
- 补码
Booth算法的推导:
+ 假设x y均为小数且按补码形式存储(结论对整数也适用)
注意到在 \(mod\ 2\) 的条件下 \(2=2^{n+1},2=(Y_1Y_2...Y_n)\)

+ 在2)的证明中使用1)的结论

+ 故在补码运算中,\([X*Y]_{\text{补}}=[X]_{\text{补}}*0.Y_1Y_2...Y_n-Y_0[X]_{\text{补}}\)
+ 进一步的
- 写出被乘数X及其相反数的补码表示
- 在乘数的末尾加上一个0
- 根据最末尾的值减次末尾的值的+1 ,0 ,-1分别给部分积加上\([X]_{\text{补}}\),0,\([-X]_{\text{补}}\)
- 每次乘数都右移一位更新末尾的值
- 阵列乘法
需要与门阵列做乘法,全加器阵列做累加
以5*5位阵列乘法为例,斜向进位的阵列乘法器时延相较横向进位更优(区别在于把进位放到全加器的横向还是斜向,即进位给当前的还是下一级的相同权重的位置)


先按绝对值相乘再转为补码

定点除法
据说不考,不看了
运算器设计
三态门:输出端输出高阻抗(相当于输出端与所连接线路断开)

例如下图中ALU的输出和寄存器堆的输出都进到总线中,它们必须有三态功能,否则数据就会在总线中产生冲突

同步时序逻辑电路

存储单元可能由触发器组成,触发器具有信息存储功能,是时序电路的基本单元

R-S触发器

- 注意是低电平有效
- 反馈回路的结果就是R(Reset)有效时置0,S(Set)有效时置1,R和S都无效时保持不变,都有效时无法确定Q的状态
- 属于电平触发,RS变Q就变,基于基本R-S触发器的所有触发器都有电平触发这一特征,相反地有的寄存器是电平上升\下降沿触发
R-S触发器的特征可以用如下方式描述:包含\(R、S、Q_{现态}、Q_{次态}\)的状态转换真值表,相应的卡诺图,特征方程(即对应的逻辑表达式),波形图,状态转移图:用于分析是否存在遗漏的状态变迁,激励表(为达到状态转换的目标,电路的输入应该是什么)
前四种已经讲过,后两种如下:
- 状态转移图:同样包含了激励

- 激励表

钟控R-S触发器

- 右半是普通的R-S触发器
- CP=1时,R、S高电平有效
- 左半CP为0时无论R、S的输入是什么Q3、Q4一定是高电平也就是无效,状态不变,否则相当于开门信号,尽管R、S是高电平有效,但经过与非之后对于右半部分依旧是Q3、Q4低电平有效
D触发器

代替,这样原本的R和S必定有一个有效有一个无效,D为1就是置1,否则就是置0
JK触发器
用\(S= JQ^n\ \ R = KQ^n\)代替了原本的R、S

触发器的特征方程变为

也就是说

其激励为

T触发器是将J和K合并

主从触发器
- 触发器在CP=1期间都会相应R、S的变化,CP过长容易出现空翻,为此我们引入主从触发器
- 主触发器和从触发器的CP是相反的,这里的主触发器是一个R-S触发器,从触发器相当于一个D触发器,它们不能同时工作

- 这样当从触发器开始工作时,主触发器恰好被封锁,也就意味着从触发器在工作时输入的值(即主触发器输出的值)不会发生改变,从而最终的结果由时钟下降沿瞬间,主触发器收集到的输入决定

维持阻塞结构触发器
看不懂
Mealy型电路:时序逻辑电路的外输出是电路外输入和电路状态的函数,则称为Mealy型时序电路

Moore型电路:时序逻辑电路的外输出仅仅是电路电路状态的函数,则称为Moore型时序电路

时序逻辑电路的描述工具
- 逻辑函数表达式
包含4项

- 状态转移表

- 状态转换图

左为Mealy,右为Moore - 时间图

同步时序逻辑电路分析

状态化简:在同步时序逻辑电路设计时,会对一开始设计的可能状态进行化简
等效对:状态Si和Sj是完全确定状态表中的两个状态,若对于所有可能的输入序列,分别从状态Si和状态Sj出发,所得到的输出响应序列完全相同,则状态Si和Sj等效,记作(Si,Sj),称为等效对
等效对的判断原则:
- 状态交错:

- 次态循环:

- 等效对具有传递性
具体流程:作隐含表

化简完之后就要对状态进行编码表示

编码表示之后要根据外输入和现态设计外输出的输出函数,根据外输入和现态以及次态和适用的触发器设计次态的激励函数




对设计进行检查

挂起实质状态不能迁移至正常的工作循环


上图所示电路不存在挂起,也没有错误输出
经过分析才能进行相应的处理(如reset)
存储系统

RAM可以随机读写,ROM只读


半导体存储器:
- 六管SRAM存储单元
- 工作管: T1、 T2
- 负载管: T3、 T4
- 门控管: T5、T6 、T7、T8
- 门控管接高电平时导通,否则关闭,依靠T1、 T2 构成的稳定互锁状态来保存1 bit 信息,比如A为高电位会使T2导通,使右半产生电流,B就会处于一个较低的电位,导致T1不导通,左半不会产生电流,使A维持在高电位,这就是一种互锁
- 当X地址线和Y地址线导通时,A点会和I/O相连,如果是写入就从I/O向A送电荷,如果是读就通过外接于I/O和I/O间电流放大器中电流方向判断读出的是1还是0


- DRAM存储单元
- 利用电容电荷存储数据,且一旦导通A,B两点很快就会与Vss同电位

- 写操作没有问题,但读操作会消耗电容中的电荷,由于失去了Vdd没法及时补充,造成内容破坏
- 解决方法:

- 利用电容电荷存储数据,且一旦导通A,B两点很快就会与Vss同电位
- 简化的DRAM


DRAM的刷新

集中刷新较简单但存在死区

分散刷新没个读写周期都刷新,刷新次数较多

异步刷新性能较好

DRAM先用\(\overline{RAS}\)信号控制读行地址,然后用\(\overline{CAS}\)信号控制读列地址
SRAM直接将地址读入,规定一部分为行地址,一部分为列地址
两种RAM都采用双译码结构,但DRAM读地址要两次,所以DRAM更慢
主存的数据组织

计算机主存一般按字节编址,而计算机的字长也往往包含多个字节,如16、32和64位字长,分别为2、4、8个字节
数据字长为32的就是32位机



主存与CPU的连接



要求字位同时扩展时,先做位扩展,再做字扩展(先做位扩展,每片的地址线不需要改变,但如果先做字扩展,地址线也需要相应扩展增加了难度)
Cache的工作过程:根据Address去cache中找,然后判断是否HIT,然后。。。

如何快速查找?:从地址中剥离特征值,用相联存储器,通过硬件并发查找,相联存储器本质上是一种按内容访问的存储器,
简称为CAM (Content Addressable Memory)
工作原理示意图:



-
全相联

- 例如00001111 1表示第15块第1个字,也就是15*4+1第61个字的地址
- 分为tag+offset


-
直接相联

- 主存特定区的块只能映射到Cache的特定行
- 第0块映射到第0行,第1块映射到第1行,。。。,第n块映射到第0行
- 分为tag+index+offset


-
组相联

- 主存特定组的块能映射到Cache的特定组的任意行(不止一行)
- 主存第0块映射到cache的第0组的任意行,。。。,第n+1块映射到cache的第1组的任意行
- 分为tag+index+offset


- 组相联介于前两种之间


求解有顺序:offset 、index、tag

Cache写操作:写回法、写直达法
- 写回法:命中则写入cache同时设置脏位为1,未命中则在cache中为其分配一块,写入cache同时设置脏位为1(在使用分配的块之前,检查分配的块是否dirty,如果dirty将其写回主存)
- 写直达法:命中则写入cache同时写入主存,不命中直接写入主存
程序运行一段时间后,Cache存储空间被占满,当有新数据被调入
时,就需要借助某种机制决定替换的对象,因此我们引入了替换算法
替换算法:



抖动


数组和指令行优先顺序存放
虚拟存储器




- 虚拟地址能否访问外存的所有空间,程序员看到的容量大小是外存的大小
- 从PTBR中找到页表,看虚拟地址是的页号是多少,去页表中找到对应的页表项,看是否有效,有效说明在内存(主存)中,按页表项找到物理地址(据此访问Cache),无效说明在外存(辅存)中,产生页中断


可以看出MMU经常访问页表

- 将虚拟页号划分为Tag和Index,采用类似Cache映射的方法来加快查找
- 这里的VPN相当于访问Cache时的Address,TLB的行大小和页表的块大小都是一个页表项,所以相当于没有offset,如果是全相联甚至没有index

由于TLB是页表的一部分,我们要更新里面的内容来访问页表中不同的项

即在TLB未命中,访问Cache或主存中的页表后把这部分页表更新到TLB中方便后续使用
指令系统

指令的寻址方式只有两种:
- 顺序寻址:CPU中设置 程序计数器(PC)对指令执行顺序进行记录。开始存放程序首地址,执行一条指令,PC 加”1”,指出下条指令地址,直到程序结束(1指的是指令的长度)
- 跳跃寻址:

操作数的寻址方式则有多种:
1.取指令时也取了数据 
2. 给出寄存器编号 
3. 访问主存 
4. 可以访问主存的范围更广 
5. 只需访问主存一次且范围与间接一样广 
6. 注意PC先自增后根据PC计算地址,同样是访问内存 
7. 访问基址相同的若干数据时比较方便,基址设定后不变 
8. 变址寄存器内容可变 
指令格式设计

指令决定寻址方式

ARM指令略
CPU设计



数据加工:ALU
程序控制:控制PC的值
操作控制\(\bigstar\):操作控制器
时序控制\(\bigstar\):时序控制器
异常处理:中断(略)
操作控制器:硬布线控制器 (时序逻辑型)、微程序控制器 (存储程序型)
指令周期是指从内存中取出一条指令并执行该指令所需的时间,其中不同指令取指令的时间一般是相同的,但执行时间不同

指令执行的每个步骤有若干微操作,每个微操作占用一个时钟周期,每个步骤占用一个CPU周期,指令执行完需要一个指令周期

三级时序系统:clk、时序产生器、控制器

现代时序系统:控制信号只与状态有关

使用三态门的总线型

不产生数据冲突且对应不同部件的数据通路的时钟周期可以进行合并

最终得到下图

考虑不同指令之间的区分,进行一些条件判断的修改
至此已经完成了下图的第一步

同步时序发生器:状态是所有指令的执行阶段


异步时序发生器:状态是不同指令的执行阶段








Moore型

多总线结构

数据通路设计:列出下表,对部件可能的多个输入用多路选择器加控制信号放止数据冲突

微程序控制器:

- 每个微指令对应一个状态保存在控制存储器中

- \(P_{IR}\)表示需要结合IR指令寄存器中的内容来判断下址
- \(P_{equal}\)表示相等条件,有些指令是条件执行的
微指令中的操作控制字段如何表示控制信号也是一个问题

- 直接表示法:微指令的操作控制字段每位直接表示一个微命令(微操作),这样利用率不高但简单
- 编码表示法:微指令操作控制字段现有23位,若编码则可表810241024个微命令,但全部编码所需的译码器会很复杂,且每次只能给出一个微命令
- 混合表示法:部分编码,将微命令分为互斥性和相容性的
互斥性的可以用译码器编码


中断不考?略

浙公网安备 33010602011771号