--- nand.py- +++ nand.py @@ -748,6 +748,37 @@ Lamp_7seg(self, 'lamp', latency, pos) conn2_n(7, (self.deco, 'out', 0), (self.lamp, 'inp', 0) ) +class LAMP_7_DEV_3(Obj): + # en, CLK, A_0, A_1, inp_x, out_x + def __init__(self, parent, name='lamp_7_dev_3', latency=10, pos=(0,0)): + Obj.__init__(self, parent, name, None, pos) + + DEV_BASE(self, 4, 2, 'dev_base', latency) + Pin(self, 'CLK').conn = self.dev_base.CLK + Pin(self, 'en').conn = self.dev_base.en + Pin(self, 'A_0').conn = self.dev_base.A_0 + Pin(self, 'A_1').conn = self.dev_base.A_1 + new_pin_n( 4, self, 'inp' ) + conn2_n( 4, (self, 'inp', 0), (self.dev_base, 'inp', 0) ) + new_pin_n( 4, self, 'out' ) + conn2_n( 4, (self.dev_base, 'out', 0), (self, 'out', 0) ) + + n = (1 << 2) + for i in range(n): + jt = Joint_N( self, 4, name_i('jt', i) ) + jt.new_pin_conn( self.dev_base, name_i('dev_out', i), direc='from_targ' ) + jt.new_pin_conn( self.dev_base, name_i('dev_inp', i), direc='to_targ' ) + x = 12 + for i in range(3): + dl7 = DECODER_Lamp_7seg(self, name_i('deco_lamp_7seg', i), latency, (x,0) ) + jt = getattr( self, name_i('jt', i) ) + jt.new_pin_conn( dl7, 'inp', direc='to_targ' ) + x -= 6 + + self.jt_3.jt_0.new_pin().conn = self.deco_lamp_7seg_0.en + self.jt_3.jt_1.new_pin().conn = self.deco_lamp_7seg_1.en + self.jt_3.jt_2.new_pin().conn = self.deco_lamp_7seg_2.en + class ADD(Obj): # A, B, Y, C def __init__(self, parent, name='add', latency=10): @@ -801,25 +832,48 @@ def __init__(self, parent, dbit_n, name='add_dev', latency=10): Obj.__init__(self, parent, name) - LATCH_N(self, 2, dbit_n, 'latch_2', latency) - ADD_N(self, dbit_n, 'add_n', latency) - MUX(self, dbit_n, 1, 'mux', latency) + DEV_BASE(self, dbit_n, 1, 'dev_base', latency) + Pin(self, 'CLK').conn = self.dev_base.CLK + Pin(self, 'en').conn = self.dev_base.en + Pin(self, 'A_0').conn = self.dev_base.A_0 + new_pin_n(dbit_n, self, 'inp') + conn2_n( dbit_n, (self, 'inp', 0), (self.dev_base, 'inp', 0) ) + new_pin_n(dbit_n, self, 'out') + conn2_n( dbit_n, (self.dev_base, 'out', 0), (self, 'out', 0) ) - Pin(self, 'CLK').conn = self.latch_2.CLK - Pin(self, 'en').conn = self.mux.en - Pin(self, 'A_0').conn = self.mux.A_0 + ADD_N(self, dbit_n, 'add_n', latency) + conn2_n( dbit_n, (self.dev_base, 'dev_out_0', 0), (self.add_n, 'A', 0) ) + conn2_n( dbit_n, (self.dev_base, 'dev_out_1', 0), (self.add_n, 'B', 0) ) + conn2_n( dbit_n, (self.add_n, 'Y', 0), (self.dev_base, 'dev_inp_0', 0) ) + self.add_n.C.conn = self.dev_base.dev_inp_1_0 + +class DEV_BASE(Obj): + # en, CLK, A_ax, inp_dx, out_dx, dev_out_x_dx, dev_inp_x_dx + def __init__(self, parent, dbit_n, abit_n, name='dev_base', latency=10): + Obj.__init__(self, parent, name) - self.mux.deco_out_0.conn = self.latch_2.sel_0 - self.mux.deco_out_1.conn = self.latch_2.sel_1 + n = 1 << abit_n + LATCH_N(self, n, dbit_n, 'latch_n', latency) + Pin(self, 'CLK').conn = self.latch_n.CLK + new_pin_n( dbit_n, self, 'inp' ) + conn2_n( dbit_n, (self, 'inp', 0), (self.latch_n, 'inp', 0) ) + for i in range(n): + nm = name_i('dev_out', i) + new_pin_n( dbit_n, self, nm ) + conn2_n( dbit_n, (self.latch_n, name_i('out', i), 0), (self, nm, 0) ) - new_pin_n(dbit_n, self, 'inp') - conn2_n( dbit_n, (self, 'inp', 0), (self.latch_2, 'inp', 0) ) - conn2_n( dbit_n, (self.latch_2, 'out_0', 0), (self.add_n, 'A', 0) ) - conn2_n( dbit_n, (self.latch_2, 'out_1', 0), (self.add_n, 'B', 0) ) - conn2_n( dbit_n, (self.add_n, 'Y', 0), (self.mux, 'inp_0', 0) ) - self.add_n.C.conn = self.mux.inp_1_0 - new_pin_n(dbit_n, self, 'out') + MUX(self, dbit_n, abit_n, 'mux', latency) + Pin(self, 'en').conn = self.mux.en + new_pin_n( abit_n, self, 'A' ) + conn2_n( abit_n, (self, 'A', 0), (self.mux, 'A', 0) ) + new_pin_n( dbit_n, self, 'out' ) conn2_n( dbit_n, (self.mux, 'out', 0), (self, 'out', 0) ) + + conn2_n( n, (self.mux, 'deco_out', 0), (self.latch_n, 'sel', 0) ) + for i in range(n): + nm = name_i('dev_inp', i) + new_pin_n( dbit_n, self, nm ) + conn2_n( dbit_n, (self, nm, 0), (self.mux, name_i('inp', i), 0) ) class DEV_TEST_4(Obj): # en