--- nand.py- +++ nand.py @@ -64,9 +64,11 @@ self.enque( self.out.set, (v,) ) class Joint(Obj): - def __init__(self, parent, name='jt', latency=None): - Obj.__init__(self, parent, name, latency) + def __init__(self, parent, name='jt', latency=None, pos=(0,0), lamp_name=None): + Obj.__init__(self, parent, name, latency, pos) self.pins = [] + if lamp_name: + self.new_pin().conn = Lamp(self, lamp_name).inp def new_pin(self): i = len(self.pins) @@ -293,19 +295,46 @@ self.jt_k_o.new_pin().conn = self.nand_j.inp_a self.jt_k_o.new_pin().conn = Pin(self, 'nQ') -class CLK(Obj): - def __init__(self, parent, hz=1.0, name='clk'): +class TFF(Obj): + def __init__(self, parent, name='tff', latency=10): Obj.__init__(self, parent, name) + JKFF(self, 'jkff', latency) + Pin(self, 'CLK', 'L').conn = self.jkff.CLK + self.jkff.J.enque_set('H') + self.jkff.K.enque_set('H') + self.jkff.Q.conn = Pin(self, 'Q') + self.jkff.nQ.conn = Pin(self, 'nQ') + +class DFF(Obj): + def __init__(self, parent, name='dff', latency=10): + Obj.__init__(self, parent, name) + JKFF(self, 'jkff', latency) + Pin(self, 'CLK', 'L').conn = self.jkff.CLK + Pin(self, 'D', 'L').conn = Joint(self, 'jt').new_pin() + self.jt.new_pin().conn = self.jkff.J + self.jt.new_pin().conn = NOT(self, 'not_', latency).inp + self.not_.out.conn = self.jkff.K + self.jkff.Q.conn = Pin(self, 'Q') + self.jkff.nQ.conn = Pin(self, 'nQ') + +class CLK(Obj): + def __init__(self, parent, hz=1.0, name='clk', pos=(0,0), lamp_name=None): + Obj.__init__(self, parent, name, None, pos) latency = tm_from_fsec( 1.0 / ( 2 * hz ) ) NAND(self, 'nand', latency) Joint(self) - NOT(self) + AND(self) - Pin(self, 'en', 'L').conn = self.nand.inp_a + Pin(self, 'en', 'L').conn = Joint(self, 'jt_en').new_pin() + self.jt_en.new_pin().conn = self.nand.inp_a self.nand.out.conn = self.jt.new_pin() self.jt.new_pin().conn = self.nand.inp_b - self.jt.new_pin().conn = self.not_.inp - self.not_.out.conn = Pin(self, 'out') + self.jt.new_pin().conn = self.and_.inp_b + self.jt_en.new_pin().conn = self.and_.inp_a + self.and_.out.conn = Joint(self, 'jt_out').new_pin() + self.jt_out.new_pin().conn = Pin(self, 'out') + if lamp_name: + self.jt_out.new_pin().conn = Lamp(self, lamp_name).inp class Lamp(Obj): def __init__(self, parent, name='lamp', latency=None, pos=(0,0)):