Пример #1
0
 def create_nand(self, inputs):
     """ Create the NAND for the predecode input stage """
     if inputs == 2:
         self.nand = pnand2()
     elif inputs == 3:
         self.nand = pnand3()
     else:
         debug.error("Invalid number of predecode inputs.", -1)
Пример #2
0
    def add_layout(self):
        self.inv = pinv()
        self.add_mod(self.inv)

        self.inv_no_output = pinv(route_output=False)
        self.add_mod(self.inv_no_output)

        self.nand2 = pnand2()
        self.add_mod(self.nand2)
Пример #3
0
 def add_modules(self):
     self.inv = pinv()
     self.add_mod(self.inv)
     self.nand2 = pnand2()
     self.add_mod(self.nand2)
     self.nand3 = pnand3()
     self.add_mod(self.nand3)
     
     self.add_decoders()
Пример #4
0
    def runTest(self):
        globals.init_openram("config_20_{0}".format(OPTS.tech_name))
        import pnand2
        import tech

        debug.info(2, "Checking 2-input nand gate")
        tx = pnand2.pnand2(name="pnand2", size=1)
        self.local_check(tx)

        globals.end_openram()
Пример #5
0
    def add_modules(self):
        # This is just used for measurements,
        # so don't add the module

        self.inv = pinv()
        self.add_mod(self.inv)

        self.inv_no_output = pinv(route_output=False)
        self.add_mod(self.inv_no_output)

        self.nand2 = pnand2()
        self.add_mod(self.nand2)
Пример #6
0
    def add_modules(self):
        self.inv = pinv()
        self.add_mod(self.inv)
        self.nand2 = pnand2()
        self.add_mod(self.nand2)
        self.nand3 = pnand3()
        self.add_mod(self.nand3)

        # CREATION OF PRE-DECODER
        self.pre2_4 = pre2x4()
        self.add_mod(self.pre2_4)
        self.pre3_8 = pre3x8()
        self.add_mod(self.pre3_8)
Пример #7
0
    def runTest(self):
        globals.init_openram("config_20_{0}".format(OPTS.tech_name))
        # we will manually run lvs/drc
        OPTS.check_lvsdrc = False

        import pnand2
        import tech

        debug.info(2, "Checking 2-input nand gate")
        tx = pnand2.pnand2(size=1)
        self.local_check(tx)

        OPTS.check_lvsdrc = True
        globals.end_openram()
Пример #8
0
    def add_modules(self):
        """ Create modules for later instantiation """
        # 1x Inverter
        self.inv = pinv()
        self.add_mod(self.inv)

        # 4x Inverter
        self.inv4x = pinv(4)
        self.add_mod(self.inv4x)

        self.nor2 = pnor2()
        self.add_mod(self.nor2)

        self.nand2 = pnand2()
        self.add_mod(self.nand2)
Пример #9
0
    def create_modules(self):
        """ add all the required modules """
        input_lst = ["csb", "web", "oeb", "clk"]
        output_lst = [
            "s_en", "w_en", "tri_en", "tri_en_bar", "clk_bar", "clk_buf"
        ]
        rails = ["vdd", "gnd"]
        for pin in input_lst + output_lst + rails:
            self.add_pin(pin)

        self.nand2 = pnand2()
        self.add_mod(self.nand2)
        self.nand3 = pnand3()
        self.add_mod(self.nand3)
        self.nor2 = pnor2()
        self.add_mod(self.nor2)

        # Special gates: inverters for buffering
        self.inv = self.inv1 = pinv(1)
        self.add_mod(self.inv1)
        self.inv2 = pinv(2)
        self.add_mod(self.inv2)
        self.inv4 = pinv(4)
        self.add_mod(self.inv4)
        self.inv8 = pinv(8)
        self.add_mod(self.inv8)
        self.inv16 = pinv(16)
        self.add_mod(self.inv16)

        c = reload(__import__(OPTS.ms_flop_array))
        ms_flop_array = getattr(c, OPTS.ms_flop_array)
        self.msf_control = ms_flop_array(name="msf_control",
                                         columns=3,
                                         word_size=3)
        self.add_mod(self.msf_control)

        c = reload(__import__(OPTS.replica_bitline))
        replica_bitline = getattr(c, OPTS.replica_bitline)
        # FIXME: These should be tuned according to the size!
        delay_stages = 4  # This should be even so that the delay line is inverting!
        delay_fanout = 3
        bitcell_loads = int(math.ceil(self.num_rows / 5.0))
        self.replica_bitline = replica_bitline(delay_stages, delay_fanout,
                                               bitcell_loads)
        self.add_mod(self.replica_bitline)
Пример #10
0
    def create_modules(self):
        """ add all the required modules """
        input_lst = ["csb", "web", "oeb", "clk"]
        output_lst = [
            "s_en", "w_en", "tri_en", "tri_en_bar", "clk_bar", "clk_buf"
        ]
        rails = ["vdd", "gnd"]
        for pin in input_lst + output_lst + rails:
            self.add_pin(pin)

        self.nand2 = pnand2()
        self.add_mod(self.nand2)
        self.nand3 = pnand3()
        self.add_mod(self.nand3)
        self.nor2 = pnor2()
        self.add_mod(self.nor2)

        # Special gates: inverters for buffering
        self.inv = self.inv1 = pinv(1)
        self.add_mod(self.inv1)
        self.inv2 = pinv(2)
        self.add_mod(self.inv2)
        self.inv4 = pinv(4)
        self.add_mod(self.inv4)
        self.inv8 = pinv(8)
        self.add_mod(self.inv8)
        self.inv16 = pinv(16)
        self.add_mod(self.inv16)

        c = reload(__import__(OPTS.config.ms_flop_array))
        ms_flop_array = getattr(c, OPTS.config.ms_flop_array)
        self.msf_control = ms_flop_array(name="msf_control",
                                         columns=3,
                                         word_size=3)
        self.add_mod(self.msf_control)

        c = reload(__import__(OPTS.config.replica_bitline))
        replica_bitline = getattr(c, OPTS.config.replica_bitline)
        self.replica_bitline = replica_bitline(
            rows=int(math.ceil(self.num_rows / 10.0)))
        self.add_mod(self.replica_bitline)
Пример #11
0
    def add_modules(self):
        """ Add all the required modules """

        dff = dff_inv()
        dff_height = dff.height

        self.ctrl_dff_array = dff_inv_array(rows=2, columns=1)
        self.add_mod(self.ctrl_dff_array)

        self.nand2 = pnand2(height=dff_height)
        self.add_mod(self.nand2)
        self.nand3 = pnand3(height=dff_height)
        self.add_mod(self.nand3)

        # Special gates: inverters for buffering
        # Size the clock for the number of rows (fanout)
        clock_driver_size = max(1, int(self.num_rows / 4))
        self.clkbuf = pinvbuf(clock_driver_size, height=dff_height)
        self.add_mod(self.clkbuf)
        self.inv = self.inv1 = pinv(size=1, height=dff_height)
        self.add_mod(self.inv1)
        self.inv2 = pinv(size=4, height=dff_height)
        self.add_mod(self.inv2)
        self.inv8 = pinv(size=16, height=dff_height)
        self.add_mod(self.inv8)

        from importlib import reload
        c = reload(__import__(OPTS.replica_bitline))
        replica_bitline = getattr(c, OPTS.replica_bitline)
        # FIXME: These should be tuned according to the size!
        delay_stages = 4  # Must be non-inverting
        delay_fanout = 3  # This can be anything >=2
        bitcell_loads = int(math.ceil(self.num_rows / 5.0))
        self.replica_bitline = replica_bitline(delay_stages, delay_fanout,
                                               bitcell_loads)
        self.add_mod(self.replica_bitline)