八进制全加器如何

时间:2012-05-07 21:17:10

标签: binary computer-architecture circuit boolean-operations

我有这个项目在下面听,我不知道从哪里开始也许有人可以给我一些指示或者可能指出我正确的方向开始这个? 谢谢!

输入: A,B =八进制数字(见下面的表示); Cin =二进制数字

输出: S =八位数(见下图); Cout =二进制数字

任务: 使用二进制FAs,设计一个充当八进制FA的电路 。进一步来说, 这个电路会输入两个八进制数字A,B,将它们转换成二进制数,加上 它们只使用二进制FAs,将二进制结果转换回八进制,并将总和输出为 八进制数字,二进制执行。

输入/输出八进制数字的二进制表示

每个八进制数字将使用以下8位二进制表示来表示:

八进制8位输入行:

数字: 0 1 2 3 4 5 6 7
0 1 0 0 0 0 0 0 0
1 0 1 0 0 0 0 0 0
2 0 0 1 0 0 0 0 0
3 0 0 0 1 0 0 0 0
4 0 0 0 0 1 0 0 0
5 0 0 0 0 0 1 0 0
6 0 0 0 0 0 0 1 0
7 0 0 0 0 0 0 0 1

您需要以结构化方式设计电路。

3 个答案:

答案 0 :(得分:11)

好的,基本上你被要求设计一个8到3编码器和一个3到8解码器。因为你被赋予了FA,所以不是任务的重点。

首先,我们需要定义编码器和解码器的功能。所以我们构建一个真值表:

编码器:

Input    | Output
01234567 | 421
-----------------
10000000 | 000
01000000 | 001
00100000 | 010
00010000 | 011
00001000 | 100
00000100 | 101
00000010 | 110
00000001 | 111

和解码器正好相反。

接下来,我们如何构建编码器?好吧,我们可以一次攻击一下。

因此对于1s数字,如果输入位1,3,5或7设置则为1,否则为0.所以我们只需要一个连接到1,3,5和7的4个输入的大型OR。

对于2s数字,我们需要将OR门连接到2,3,6,7。最后对于4s门,将它们连接到4,5,6,7。这不会进行任何错误检查以确保额外的位没有设置。虽然,在这种情况下的行为似乎没有被规范定义,所以它可能是好的。

然后你拿走你的三行并将它们提供给你的加法器。这很容易,所以我不会介入它。

最后你需要一个解码器,这比编码器更棘手。

让我们看一下解码器真值表:

Input | Output
421   | 01234567 
----------------
000   | 10000000
001   | 01000000
010   | 00100000
011   | 00010000
100   | 00001000
101   | 00000100
110   | 00000010
111   | 00000001

这次我们不能只使用3门或大门,而是每天打电话。

让我们用类似C的代码写下来:

if (!input[0] && !input[1] && !input[2])
  output[0] = 1
if (input[0]  && !input[1] && !input[2])
  output[1] = 1
if (!input[0] && input[1]  && !input[2])
  output[2] = 1
if (input[0]  && input[1]  && !input[2])
  output[3] = 1
if (!input[0] && !input[1] && input[2])
  output[4] = 1
if (input[0]  && !input[1] && input[2])
  output[5] = 1
if (!input[0] && input[1]  && input[2])
  output[6] = 1
if (input[0]  && input[1]  && input[2])
  output[7] = 1

所以,看起来我们将使用8个3输入AND门和3个NOT门!

这个有点复杂,所以我做了一个示例实现:

3-to-8 decoder

答案 1 :(得分:5)

如果要在课堂上手动完成转换,您可以尝试以下方式。

将八进制转换为二进制:

要将八进制转换为二进制,请将每个八进制数字替换为其二进制表示。 示例:将518转换为二进制: 58 = 1012 18 = 0012 因此,518 = 101 0012。

将二进制转换为八进制:

该过程与先前算法相反。二进制数字按三位分组,从小数点(如果存在)或最后一位开始,然后向左和向右。如果需要,添加前导0(或小数点右侧的尾随零)以填写最后一组三。然后用等效的八进制数替换每个三重奏。

示例,将二进制1010111100转换为八进制: (添加两个前导零,数字为001010111100) 001 = 1,010 = 2,111 = 7,100 = 4 因此,1010111100 = 1274

答案 2 :(得分:4)

要转换为八进制和从八进制转换,您可以使用编码器和放大器。解码器对(http://www.asic-world.com/digital/combo3.html)。 3位加法器可以通过链接3个FAs来制作。