4.1 KiB
计算机组成原理第一章知识脉络
本章讨论的主要内容是数据通路(data path)的设计,关键在于如何实现一个ALU。
为了实现一个计算机(computing machine),首要的当然是要能够实现基本的计算功能。而为了实现计算功能,首先需要将数据在计算机中表示,这包括字符型数据,定点数(整数)以及浮点数,这里主要讨论定点数的表示。将定点数在计算机中表示,最简单直白的方法就是直接将它的二进制形式存储在计算机中,新增一位符号位来表示它的正负,这就是原码表示法。然而原码表示法具有一些致命性的缺陷,比如原码的计算不服从加法性质;为了构造一种复合加法性质的表示法,就产生了反码。反码的确是可以进行加法和减法运算的,但是在反码表示法下,0将具有两种反码表示,可以将反码简单加1来规避这种情况,这就是补码表示法。现代计算机中数据的存储几乎都是采用补码。
成功将数据在计算机中表示后,紧接着就需要讨论如何实现计算的问题。首先是最简单的加法运算,可以首先构造一个一位的全加器,其中加法的结果S和进位位C1都可以表达成两个输入X, Y以及上一位的进位C0的简单组合逻辑;通过将多个这样一位的全加器组合起来,就可以形成多位的全加器。然而,这样的全加器在计算的效率上存在缺陷,因为每一位必须等到前一位的进位计算完毕之后才可以开始计算,为了改进改进这种缺陷,产生了超前进位的策略,实际中采用的是分组的超前进位。
利用补码的运算法则,可以方便地通过全加器实现减法运算。由于
(x - y)补 = (x)补 + (-y)补
因此可以通过求被减数的相反数的补码,将减法转化成加法来进行。为此,只需要将被减数逐位取反再加一,再添加一些控制逻辑即可。
乘法和除法的实现则稍显复杂。对于乘法,是通过多次的加法和移位操作来实现的。乘法器的设计具有三个版本,需要把握三个版本的不同,以及优化的思想。而补码的乘法,是通过布斯算法来实现的。除法的逻辑电路和乘法几乎相同,只是在一些细节上有所改变,除法的实现主要有恢复余数法与加减交替法两种方法,后者是前者的一种改进策略,其正确性要能够证明。补码的除法的运行算法也有有所了解。
实现了基本的算术运算(与逻辑运算)后,就可以着手进行ALU的搭建。构造ALU的方法与前面的加法器是类似的,首先建立一位的ALU,确立其输入与输出,以及必要的控制信号,通过算术逻辑给出真值表,从而搭建起组合逻辑电路。将多个一位的ALU组合起来,即可得到多位的ALU了。
最后讨论浮点数的表示与运算。浮点数的表示分为两个部分,即阶码与尾数,两个部分都有自己的符号位。浮点数的表示遵循IEEE754标准,为了理解这个标准,关键在于各个部分的位数以及它们的位置,以及相应的表示方法,比如阶码采用移码表示,而尾数则采用原码,并且省略了规范后首位的1。此外,IEEE754还保留了两个部分一些特殊的值,来表示一些特殊情况,比如0的表示,无穷的表示,NaN的表示以及非规范化浮点数的表示。此外,浮点数的加减法与乘除法的实现,也需要有一定的了解,比方说由于浮点数本身的特点,浮点加法并不满足结合律,两个浮点数之间也不能判等。
最后的最后还有一些内容,(我觉得和计算机组成真的没有什么关系),是检错纠错码。这里主要是讨论了两种检错纠错码,即奇偶检验码和汉明校验码,两种的编码方式都要非常熟悉。对于汉明校验码,其关键在于理解数据数位k和检验数位r之间满足的两个不等式关系。这里还需要把握码距的概念。