adder与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里?
标签:s3,s2,s1,s0,s7,adder,latch,def 来源: https://www.cnblogs.com/funwithwords/p/15599925.html