八进制全加器是什么?如何实现?

8

我有一个项目如下,不确定从哪里开始,也许有人可以给我一些指导或者指引我正确的方向?谢谢!

输入: A、B = 八进制数字(见下文);Cin = 二进制数字

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

任务:使用二进制全加器,设计一个作为八进制全加器的电路。具体来说,该电路将输入两个八进制数字A、B,将它们转换成二进制数,仅使用二进制全加器相加,将二进制结果转换回八进制,并将总和作为八进制数字和二进制进位输出。

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

每个八进制数字将使用以下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

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


你打算使用VHDL?Verilog?还是实际的原理图? - Corbin
这一切都在课堂上用纸完成。 - soniccool
我正在寻找如何做到这一点,并已经打了标签 :) - soniccool
你试过我建议的吗? - tomato
一些指针:http://xkcd.com/138/ - SomeKittens
3个回答

11

好的,实际上您被要求设计一个8到3的编码器和一个3到8的译码器。因为您已经有可用的FAs来工作了,所以这不是任务的重点。

首先,我们需要定义编码器和译码器的功能。因此,我们构造一个真值表:

编码器:

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

解码器只是编码器的反向操作。

接下来,我们如何构建编码器?我们可以一次处理一个比特位。

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

对于2的数字,我们需要将OR门连接到2、3、6、7。最后,将4个端口连接到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个三输入AND门和3个NOT门!

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

3-to-8解码器


竞态条件怎么办?:-P - Alex L
1
我假设这是一个入门的电路逻辑课程,并且不会开始讨论竞争条件。 - OmnipotentEntity

5
如果需要在课堂上手动进行转换,可以尝试以下方法。
八进制转二进制的转换:
将每个八进制数字替换为其二进制表示。例如:将518转换为二进制: 5 = 101 1 = 001 因此,518 = 101 001。
二进制转八进制的转换:
该过程是前一个算法的相反过程。二进制数字从小数点(如果存在)或最后一位开始向左和向右以三位一组分组。如有必要,添加前导0(或在小数点右侧添加尾随0)以填满最后一组三位。然后用相应的八进制数字替换每个三元组。
例如,将二进制数1010111100转换为八进制数: (添加两个前导零,得到001010111100) 001 = 1,010 = 2,111 = 7,100 = 4 因此,1010111100 = 1274。

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接