Closed. This question is off-topic。它目前不接受答案。
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
三年前关闭。
我很难通过半加器和全加器测试,我想知道我的逻辑在FullAdder()HalfAdder()方法中有什么问题?我的测试似乎都没有通过。。。
代码如下:
    # All wires that enter/exit the circuit need to be visible outside of the
    # function: they are to be created in the enclosing scope and passed
    # as parameters.
    # However, wires that connect the AND gates to the OR gates are
    # _internal wires_, visible only inside the circuit: they need to be created
    xy = self.Wire('xy')
    xz = self.Wire('xz')
    yz = self.Wire('yz')
    xy_or_xz = self.Wire('xy_or_xz')

    self.AndGate(x, y, xy)
    self.AndGate(x, z, xz)
    self.Andgate(x, z, yz)

    # OR(xy,xz,yz) = OR( OR(xy,xz),  yz)
    self.OrGate(xy, xz, xy_or_xz)
    self.OrGate(xy_or_xz, yz, o)

    return 'ok'

def TwoSwitches(self, x, y, o):
    """ An example: light controlled by 2 switches (Rosen, 12.3, Example 3,
        - Figure 6, p. 825)

        F(x, y) = xy + !x.!y
    """
    # Wires x, y, and o are passed as parameters.
    # Only the internal wires need to be created:
    xy = self.Wire('xy')
    not_x = self.Wire('not_x')
    not_y = self.Wire('not_y')
    notx_noty = self.Wire('notx_noty')

    self.AndGate(x,y,xy)
    self.Inverter(x, not_x)
    self.Inverter(y, not_y)
    self.AndGate(not_x, not_y, notx_noty)
    self.OrGate(xy, notx_noty, o)

    return 'ok'

# This function needs to be defined: parameter, body definition
def HalfAdder(self, x, y, s, c):
            notx_and_y=self.wire('notx_and_y')
            x_and_noty=self.wire('x_and_noty')
            cwire=self.wire('cwire')
            allwire=self.wire(allwire)
            self.OrGate(self.AndGate(not x,y,notx_and_y),self.AndGate(x,not y,x_and_noty),allwire)
    cwire=self.AndGate(x,y,cwire)
    c=cwire
    s=allwire
    pass

def FullAdder(self,x,y,c_i,s, c_out):
    #TODO
    pass

最佳答案

半加法器
半加法器可以使用AND-AND-XOR门实现:

  x    y
  |    |
  |------------------\
  |    |--------\    |
+--------+    +--------+
|  AND   |    |  XOR   |
+--------+    +--------+
    |             |
    c             s

因此,实现方式如下:
def Xor(self, x, y, xor):
    nx = self.Wire('nx')
    ny = self.Wire('ny')
    self.Inverter(x,nx)
    self.Inverter(x,ny)
    a1 = self.Wire('a1')
    a2 = self.Wire('a2')
    self.AndGate(nx,y,a1)
    self.AndGate(x,ny,a2)
    self.OrGate(a1,a2,xor)
    pass

def HalfAdder(self, x, y, s, c):
    self.AndGate(x,y,c)
    self.Xor(x,y,s)

全加器
有几种方法可以构建一个完整的加法器,一种方法是使用两个半加法器,如我在digital electronics课程文本中所述(荷兰语,抱歉):
      x    y          c_i
      |    |           |
    +--------+         |
  /-|   HA   |         |
  | +--------+         |
  |     |              |
  |     `---------\    |
  |               |    |
  |             +--------+
  |    /--------|   HA   |
  |    |        +--------+
+--------+           |
|   OR   |           s
+--------+
    |
  c_out

在aHalfAdderxy的顶部,左侧为c,底部为s
所以这意味着:
def FullAdder(self,x,y,c_i,s, c_out):
    ha1s = self.Wire('ha1s')
    ha1c = self.Wire('ha1c')
    self.HalfAdder(x,y,ha1s,ha1c)
    ha2c = self.Wire('ha2c')
    self.HalfAdder(ha1s,c_i,s,ha2c)
    self.OrGate(ha1c,ha2c,c_out)
    pass

一个普遍的建议是总是把一个问题分成更小的子问题,你可以更容易地控制。

关于python - 半加法器和全加法器逻辑? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34124935/

10-10 19:32