adder与latch(Adder and latch)

# -*- coding: utf-8 -*-
class maiAdder8:
    def __init__(m):
        m.a7 = m.a6 = m.a5 = m.a4 = m.a3 = m.a2 = m.a1 = m.a0 = 0
        m.b7 = m.b6 = m.b5 = m.b4 = m.b3 = m.b2 = m.b1 = m.b0 = 0
        m.s7 = m.s6 = m.s5 = m.s4 = m.s3 = m.s2 = m.s1 = m.s0 = 0
    def zheng(m): # 整
        def add1(a, b):
            nonlocal carry
            s = a + b + carry
            carry = 1 if s >= 2 else 0
            return s & 1
        carry = 0
        a = (m.a7, m.a6, m.a5, m.a4, m.a3, m.a2, m.a1, m.a0)
        b_ = (m.b0, m.b1, m.b2, m.b3, m.b4, m.b5, m.b6, m.b7)
        (m.s7, m.s6, m.s5, m.s4, m.s3, m.s2, m.s1, m.s0) = tuple(reversed(tuple(map(add1, a[::-1], b_))))

a = maiAdder8()
(a.a7, a.a6, a.a5, a.a4, a.a3, a.a2, a.a1, a.a0) = (0, 0, 0, 0, 0, 0, 1, 1)
(a.b7, a.b6, a.b5, a.b4, a.b3, a.b2, a.b1, a.b0) = (0, 0, 0, 0, 0, 1, 1, 1)
a.zheng()
print((a.s7, a.s6, a.s5, a.s4, a.s3, a.s2, a.s1, a.s0))

class maiDLatch8:
    def __init__(m):
        m.s7 = m.s6 = m.s5 = m.s4 = m.s3 = m.s2 = m.s1 = m.s0 = 0
        m.r7 = m.r6 = m.r5 = m.r4 = m.r3 = m.r2 = m.r1 = m.r0 = 0
        m.d7 = m.d6 = m.d5 = m.d4 = m.d3 = m.d2 = m.d1 = m.d0 = 0
        m.q7 = m.q6 = m.q5 = m.q4 = m.q3 = m.q2 = m.q1 = m.q0 = 0
    def zheng(m):
        def logic(s, r, d):
            if s == 0 and r == 1:
                return 0
            elif s == 1 and r == 0:
                return 1
            else:
                return d
        s = (m.s0, m.s1, m.s2, m.s3, m.s4, m.s5, m.s6, m.s7)
        r = (m.r0, m.r1, m.r2, m.r3, m.r4, m.r5, m.r6, m.r7)
        d = (m.d0, m.d1, m.d2, m.d3, m.d4, m.d5, m.d6, m.d7)
        (m.q0, m.q1, m.q2, m.q3, m.q4, m.q5, m.q6, m.q7) = tuple(map(logic, s, r, d))
    def zheng2(m):
        (m.d0, m.d1, m.d2, m.d3, m.d4, m.d5, m.d6, m.d7) = (m.q0, m.q1, m.q2, m.q3, m.q4, m.q5, m.q6, m.q7)
# 1. 不知道对不对; 2. 不会写Q = S R D的逻辑表达式,好像得列真值表、最大项最小项啥的。
# 没有整明白,好像也整不动了。放几句狠话:-)算了,请自行添加哈哈或呵呵
# 组合电路像函数,时序电路像对象。上面的代码都是对象,都有成员变量,但pin和内部的“灵”/“小人”:-)/状态是不一样的。
# 闭包不是JavaScript这种解释型语言的专利。Pascal这种编译型、函数也可以嵌套的语言,也有闭包的问题。或者说函数有个生存环境: 代码加数据才完整。
# x,which one? 自己还是上层、上上层乃至全局的?stack还是heap里?
————————
# -*- coding: utf-8 -*-
class maiAdder8:
    def __init__(m):
        m.a7 = m.a6 = m.a5 = m.a4 = m.a3 = m.a2 = m.a1 = m.a0 = 0
        m.b7 = m.b6 = m.b5 = m.b4 = m.b3 = m.b2 = m.b1 = m.b0 = 0
        m.s7 = m.s6 = m.s5 = m.s4 = m.s3 = m.s2 = m.s1 = m.s0 = 0
    def zheng(m): # 整
        def add1(a, b):
            nonlocal carry
            s = a + b + carry
            carry = 1 if s >= 2 else 0
            return s & 1
        carry = 0
        a = (m.a7, m.a6, m.a5, m.a4, m.a3, m.a2, m.a1, m.a0)
        b_ = (m.b0, m.b1, m.b2, m.b3, m.b4, m.b5, m.b6, m.b7)
        (m.s7, m.s6, m.s5, m.s4, m.s3, m.s2, m.s1, m.s0) = tuple(reversed(tuple(map(add1, a[::-1], b_))))

a = maiAdder8()
(a.a7, a.a6, a.a5, a.a4, a.a3, a.a2, a.a1, a.a0) = (0, 0, 0, 0, 0, 0, 1, 1)
(a.b7, a.b6, a.b5, a.b4, a.b3, a.b2, a.b1, a.b0) = (0, 0, 0, 0, 0, 1, 1, 1)
a.zheng()
print((a.s7, a.s6, a.s5, a.s4, a.s3, a.s2, a.s1, a.s0))

class maiDLatch8:
    def __init__(m):
        m.s7 = m.s6 = m.s5 = m.s4 = m.s3 = m.s2 = m.s1 = m.s0 = 0
        m.r7 = m.r6 = m.r5 = m.r4 = m.r3 = m.r2 = m.r1 = m.r0 = 0
        m.d7 = m.d6 = m.d5 = m.d4 = m.d3 = m.d2 = m.d1 = m.d0 = 0
        m.q7 = m.q6 = m.q5 = m.q4 = m.q3 = m.q2 = m.q1 = m.q0 = 0
    def zheng(m):
        def logic(s, r, d):
            if s == 0 and r == 1:
                return 0
            elif s == 1 and r == 0:
                return 1
            else:
                return d
        s = (m.s0, m.s1, m.s2, m.s3, m.s4, m.s5, m.s6, m.s7)
        r = (m.r0, m.r1, m.r2, m.r3, m.r4, m.r5, m.r6, m.r7)
        d = (m.d0, m.d1, m.d2, m.d3, m.d4, m.d5, m.d6, m.d7)
        (m.q0, m.q1, m.q2, m.q3, m.q4, m.q5, m.q6, m.q7) = tuple(map(logic, s, r, d))
    def zheng2(m):
        (m.d0, m.d1, m.d2, m.d3, m.d4, m.d5, m.d6, m.d7) = (m.q0, m.q1, m.q2, m.q3, m.q4, m.q5, m.q6, m.q7)
# 1. 不知道对不对; 2. 不会写Q = S R D的逻辑表达式,好像得列真值表、最大项最小项啥的。
# 没有整明白,好像也整不动了。放几句狠话:-)算了,请自行添加哈哈或呵呵
# 组合电路像函数,时序电路像对象。上面的代码都是对象,都有成员变量,但pin和内部的“灵”/“小人”:-)/状态是不一样的。
# 闭包不是JavaScript这种解释型语言的专利。Pascal这种编译型、函数也可以嵌套的语言,也有闭包的问题。或者说函数有个生存环境: 代码加数据才完整。
# x,which one? 自己还是上层、上上层乃至全局的?stack还是heap里?