计组这个实验真给我整emo了呜呜呜
实验要求:实现六位补码阵列乘法器,并且保证特殊条件下的运算结果正常
特殊条件
话不多说先上电路图
一步一步来解释!!!
普通情况(都是正数,都是负数,一正一负)
X和Y都是正数或都是负数
都是正数,就先把符号位去了,把绝对值输入进5位阵列乘法器。
都是负数,就先把XY送进求补器,得到的就是X和Y的绝对值,然后输入进5位阵列乘法器。
这部分电路为
今天复习计组的时候又发现原来书上有讲这个,其实求补器上面写的是-x,即输入x的补码,求-x的补码,也就是把x每位取反,再加一就行。下面是原来的想法(那个时候真笨哈哈哈)
这里顺便解释一下求补器的工作效果
求补器输入:100101
求补器输出:011011
我一开始很迷惑这啥啊不是在求补吗???那100101的补码难道不是111011????后面问了同学才知道,求补器是先把负数的补码转化成原码,再把符号位改为0。比如这里的100101是负数的补码,转化成原码是111011,符号为改为0之后变成了011011,就是所求的答案。
求补器输入:000011
求补器输出:111101
如果输进去一个正数,就先把它变为负数,再求补码。比如000011,先变为负数100011,再求补码111101。
现在明白了求补器,再来看这个电路
下面只分析X,Y同理。
分析X求绝对值电路
X在求绝对值时分成了两路,分别对应X是正数和X是负数的情况。
上边那条路代表X是正数
先经过一个分线器,分线器将X分成了两部分:符号位和数值位。将符号位输入连接进选择端,这样的话如果是0,那么直接输出第0路,也就是数值位。(这里不懂的话可能是因为不知道多路选择器的用法,建议自己去学一下,不讲了)
下边那条路代表X是负数
经过求补器直接得到绝对值。
分析普通情况下的6位补码阵列乘法器
前面已经讲了五位阵列乘法器的输入,现在讲输出该怎么连接
输出一共有两条线
上面那条线是XY都是正数或者都是负数的情况
X5和Y5经过异或门,如果都是正数或者都是负数,那么结果是0,这个结果输入进多路选择器,则选择上面那条路输出。
下面那条线是XY异号
所以将结果送进求补器
最后分线器自己调一下位宽,得到P‘(为什么是P’呢?因为这只是考虑到了普通情况,并不是最终答案,最后还要结合特殊情况,经过一定处理才能得出最完美的答案)
得到P‘的分线器位宽如下图所示
特殊情况
在测试时,会发现一些特殊情况,按照之前设计的电路并不正确,所以还要对此进行完善。好吧其实是因为做了这个会加分我才做的。
实验要求说要单独写那就单独再来个电路呗
先总体看一下特殊情况的电路!
很显然,分成两部分。左边是根据choose的数值,来判断最终输出P。右边是判断choose的大小。choose一共有7个值:
000:最正常的一种了,又没有0,又没有-32
001:X=0,Y不等于-32,P=0
010:X=-32,Y为负数
011:X=-32,Y=0;
100:X为负数,Y=-32
101:X=0,Y=-32,P=0
110:X=-32,Y=-32 P=010000000000
在图中为什么左边引脚是400?因为用的16进制,最后输出二进制为010000000000
好!