组成原理第三章(上) |
您所在的位置:网站首页 › 实现和完成是一个意思吗 › 组成原理第三章(上) |
组成原理第三章(上)——ALU与整数的四则运算
参考资料
《计算机组成与设计:硬件/软件接口》——机械工业出版社《Arithmetic for Computers》——Jiang Zhong授课内容 —— 吴长泽老师
ALU的构建
ALU就是运算器,这些内容都可以在书中的附录中找到,我们接下来看一个简单的例子 逻辑的与、或![]() 可以看到,这里有两个输入,a、b,他们分别连接到了一个与门和一个或门,他们分别与和或的结果又连接到了一个多路选择器上,Select用于控制到底是做与运算还是做或运算,Select = 0时,做与,Select = 1的时候我们就做或运算。 回归正题,加法——半加器为了达到计算的目的,我们需要构建最基础的运算单元,那就是半加器。半加器是什么?半加器可以接收两个相加的数,然后给出他们相加的和以及他们的进位,但是他没有接受低位的进位,所以它叫半加器。 a halfAdder b sum carry我们先来构建一个真值表: abresultcarry0000011010101101根据真值表可以构建出表达式: S u m = a ‾ b + a b ‾ C a r r y = a b Sum = \overline{a}b +a\overline{b}\\ Carry = ab Sum=ab+abCarry=ab 根据表达式可以构建出电路: ![]() ![]() S u m = A x o r B x o r C a r r y I n C a r r y O u t = B C a r r y I n + A C a r r y I n + A B Sum = A\ xor\ B\ xor\ CarryIn \\ CarryOut = B\ CarryIn + A\ CarryIn + A\ B Sum=A xor B xor CarryInCarryOut=B CarryIn+A CarryIn+A B 电路![]() 有了加法器之后,我们就可以做很多的运算了,以加法为例,只需要将很多全加器串在一起就可以构成一个多位整数的加法器。 1 bit ALU有了上面的这些积累之后,我们就可以实现一个有以下功能的ALU: ANDORADD其实实现的方法也非常简单,就是对刚才的多路选择器做一个拓展,把全加器加进来就可以了。 ![]() 那么有了一个1 bit ALU之后,就可以把32个1 bit ALU级联在一起,就可以形成一个32位的ALU ![]() 但是值得注意的是,级联的运算器的数目越多,它的体积、成本以及出错概率都会相应的上升,他的可靠性、成本都会有所下降,所以往往不会以1bitALU为基础进行级联,而是会以多位的ALU为基础在进行级联,这样能够降低成本、增加准确率。 扩展1 bit ALU我们还希望我们的这个ALU可以完成减法操作,那么应该怎么做呢?我们都知道,假如说要完成 a − b a-b a−b的操作,那么实际上完成的是 a a a加上 b b b的补码。 b b b的补码就是对 b b b进行取反,然后加一。那么这一系列的操作反应在电路中实际上就是: ![]() 如果我们要进行减法运算,那么我们就需要将 B i n v e r t Binvert Binvert设置为1这样就完成了对b的取反操作,同时,我们需要将最低位的 C a r r y i n Carryin Carryin的值改为1,就可以完成上面说的加一的操作。这样我们在没有添加过多的逻辑单元的情况下就完成了从加法器到加法、减法器的扩展。 那么经过扩展后,我们的功能有: ANDORADDSubtract我们发现缺少了比较操作: Slt rd, rs, rt; 也就是比较功能如果rs < rt, rd = 1 否则 为0那么怎么去做呢?我们可以是用减法来完成这一功能,我们可以做 r s − r t rs - rt rs−rt的操作,如果结果是负数,那么就表示 r s < r t rs |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |