【问题标题】:Intuition for implementing logic gates实现逻辑门的直觉
【发布时间】:2020-09-01 20:12:15
【问题描述】:

我被要求用半 HDL 语言实现逻辑门以进行练习。 问题是我对实现缺乏直觉,并且看不到将真值表“转换”为逻辑门的方法或算法,即使是更简单的逻辑门(如 XOR);如何将一个运算符“转换”为多个逻辑门的形式?到目前为止,这个练习感觉就像“尝试所有可能的逻辑门组合”,我想它不会是这样的。

【问题讨论】:

  • Truth-table reduction to ternary logic operations, vpternlog 展示了您可以用作第一步的工具,以找到有效的布尔表达式来实现真值表。 (然后它继续将这些减少到 3 输入三元运算,所以它不是重复的)
  • XOR 实际上不是更简单的一种,它相当复杂(就基本逻辑门而言)。如果您从未有过任何逻辑门的经验并从 Nand 开始,那么即使 NOT 也可能会很棘手。把它想象成一个谜题,而不是数学练习,请记住,可能有许多可能的方法可以创建正确的逻辑电路,提供相同的输出,即使它们在内部完全不同。

标签: cpu-architecture logical-operators nand2tetris


【解决方案1】:

由于最初的问题被标记为nand2tetris,我认为需要一个不同的答案。

如果您正在处理the bookthe coursera course,那么您应该已经拥有可以自己处理的信息。但是,我也为此苦苦挣扎,因为这对我来说是新事物,所以也许我了解您正在经历的事情并可以提供帮助。 coursera 课程应该涵盖在Week 1 中的异或的实现。这本书涵盖了Chapter 1 中的Xor。我将在这里介绍我对本书的解释的理解。

作者已要求人们不要为互联网上的问题提供答案。但是,Xor 的答案是由本书的作者完成并提供的,您可以在第 16 页找到它。鉴于此,我将继续并在此处提供我自己的解释。

为了实现异或,你需要理解作者所说的以下几点:

  1. "...每个布尔函数都可以使用至少一个称为规范表示"的布尔表达式来表达,第 9 页
  2. “从函数的真值表开始,我们关注函数值为 1 的所有行。对于每一个这样的行,我们构造一个由 And-ing 在一起的文字(变量或其否定)创建的术语,用于修复所有行输入的值。”第 9 页
  3. “现在,如果我们将所有这些项(对于函数具有 value1 的所有行)进行或运算,我们会得到一个布尔表达式,它等效于给定的真值表。”, page 9
  4. “这...引出了一个重要的结论:每个布尔函数,无论多么复杂,都可以仅使用三个布尔运算符来表示:And、Or 和 Not”page9时间>

因此,如果您尝试实现布尔逻辑门(如 Xor 一样),您可以通过写下其真值表、写下该真值表的规范表示,然后实现布尔逻辑门来实现在 HDL 中使用由规范表示指定的 And、Or 和 Not 门的组合。


Xor 的工作原理如下:

  1. 写下异或的真值表:
a  b   out 
0  0 |  0  
0  1 |  1  
1  0 |  1  
1  1 |  0
  1. 写下 Xor 真值表的规范表示:
(!a && b) || (a && !b)
  1. 在 HDL 中实现规范表示:
CHIP Xor {
    IN a, b;
    OUT out;

    PARTS:
    // !a && b
    Not(in=a, out=nota);
    And(a=nota, b=b, out=lhs);
    // a && !b
    Not(in=b, out=notb);
    And(a=a, b=notb, out=rhs);

    // (!a && b) || (a && !b)
    Or(a=lhs, b=rhs, out=out);
}

就是这样。


具体来说,我认为你可能需要学习自己解决这个问题的技术是如何写下真值表的规范表示。因此,试着弄清楚我是怎么得到的从第 1 步到第 2 步,如果您有问题,请在此处提问。请记住,这本书和 coursera 课程都详细介绍了如何做到这一点,并且我引用了上面书中最相关的部分。

我希望这会带来您正在寻找的直觉。祝你好运。

【讨论】:

    【解决方案2】:

    既然您谈到了从真值表到实现,我给您提供了一种替代方法来实现或可视化数字电路。这在当今更为普遍,因此每个数字电路设计人员都应该意识到这一点。

    如今,数字电路通常在 FPGA 或 CPLD(包含 LUT(查找表)和触发器阵列)中实现,而不是使用单独的基本门,如(AND、OR 和 NOT)或 NAND 或 NOR。 LUT用于实现任何组合电路。

    简单地说,LUT 就是一个多路复用器。与真值表(TT)相关,TT(0和1)的输出连接到多路复用器的输入。多路复用器的选择线是TT的输入。

    查看 LUT 的另一种方法是内存,它存储 TT 的输出。使用TT的输入作为地址获取特定位置的值。

    例如,可以使用两个 4 对 1 多路复用器来实现半加法器。 Sum 多路复用器的 4 个输入为 0,1,1,0,进位多路复用器的 4 个输入为 0,0,0,1。每个多路复用器中将有 2 条选择线,即输入 A 和 B。

    另一个例子,一个全加器可以使用两个 8-to-1 多路复用器来实现。 Sum 多路复用器的 8 个输入为 0,1,1,0,1,0,0,1,进位多路复用器的 8 个输入为 0,0,0,1,0,1,1,1。每个多路复用器中将有 3 条选择线,输入 A 和 B 和 Cin。

    【讨论】:

      猜你喜欢
      • 2011-08-31
      • 2020-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多