【问题标题】:Octal full adder How to八进制全加器 如何
【发布时间】:2012-05-16 09:15:21
【问题描述】:

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

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

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

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

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

每个八进制数字都将使用以下 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吗?维罗格?还是实际的示意图?
  • 这一切都是在课堂上在纸上完成的。
  • 我正在寻找如何做到这一点,我标记了它:)
  • 你试过我的建议了吗?
  • 几点指点:xkcd.com/138

标签: binary computer-architecture circuit boolean-operations


【解决方案1】:

好的,所以基本上你被要求设计一个 8-to-3 编码器和一个 3-to-8 解码器。因为你有 FA 来工作,所以这不是任务的重点。

首先我们需要定义编码器和解码器的功能。于是我们构造了一个真值表:

编码器:

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。所以我们只需要一个巨大的 OR,其中 4 个输入连接到 1、3、5 和 7。

对于 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 输入与门和三个非门!

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

【讨论】:

  • 竞态条件如何? :-P
  • 我假设这是一个介绍性电路逻辑类,并没有开始谈论竞争条件。
【解决方案2】:

如果要在课堂上手工转换,可以试试下面的方法。

八进制到二进制的转换:

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

二进制到八进制的转换:

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

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

【讨论】:

    【解决方案3】:

    要在八进制之间进行转换,您可以使用编码器和解码器对 (http://www.asic-world.com/digital/combo3.html)。 3 位加法器可以通过链接 3 个 FA 来实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 2015-09-15
      • 2016-04-15
      • 2021-09-10
      • 2016-09-04
      • 2011-02-04
      相关资源
      最近更新 更多