Example #1
0
def test_dsn(bag_project: BagProject, dsn_specs: Dict[str, Any],
             gen_output: bool, run_lvs: bool) -> None:
    impl_lib: str = dsn_specs['impl_lib']
    root_dir: str = dsn_specs['root_dir']
    lay_str: str = dsn_specs.get('lay_class', '')
    pytest_info: Dict[str, Path] = dsn_specs['pytest']
    model_type: str = dsn_specs.get('model_type', 'SYSVERILOG')
    root_path = Path(root_dir)
    mod_type: DesignOutput = DesignOutput[model_type]

    lay_db = bag_project.make_template_db(impl_lib)
    bag_project.generate_cell(dsn_specs,
                              raw=True,
                              gen_lay=bool(lay_str),
                              gen_sch=True,
                              run_drc=False,
                              run_lvs=run_lvs,
                              run_rcx=False,
                              lay_db=lay_db,
                              gen_model=True)

    if not gen_output:
        for key, expect_path in pytest_info.items():
            if key == 'test_id':
                continue

            out_path = root_path / key.replace('_', '.')
            if not out_path.is_file():
                raise ValueError(f'Cannot find output file: {out_path}')
            if key.endswith('yaml'):
                actual_dict = read_yaml(out_path)
                expect_dict = read_yaml(expect_path)
                assert actual_dict == expect_dict
            elif key.endswith('gds'):
                lay_map = get_gds_layer_map()
                obj_map = get_gds_object_map()
                grid = lay_db.grid
                tr_colors = lay_db.tr_colors
                expect_cv_list = read_gds(str(expect_path), lay_map, obj_map,
                                          grid, tr_colors)
                actual_cv_list = read_gds(str(out_path), lay_map, obj_map,
                                          grid, tr_colors)
                assert expect_cv_list == actual_cv_list
            else:
                if key.endswith('netlist'):
                    output_type = DesignOutput.CDL
                else:
                    output_type = mod_type

                actual = read_file(out_path)
                expect = read_file(expect_path)
                check_netlist(output_type, actual, expect)
Example #2
0
def run_main(prj: BagProject, args: argparse.Namespace) -> None:
    specs = read_yaml(args.specs)
    prj.generate_cell(specs,
                      raw=args.raw,
                      gen_lay=args.gen_lay,
                      run_drc=args.run_drc,
                      gen_sch=args.gen_sch,
                      run_lvs=args.run_lvs,
                      run_rcx=args.run_rcx,
                      gen_lef=args.gen_lef,
                      flat=args.flat,
                      sim_netlist=args.gen_sim,
                      gen_hier=args.gen_hier,
                      gen_model=args.gen_mod,
                      gen_shell=args.gen_shell,
                      export_lay=args.export_lay,
                      gen_netlist=args.gen_netlist)
Example #3
0
def run_main(prj: BagProject, args: Namespace):
    specs_fname = Path(args.specs_fname)
    io_cls = io_cls_dict[args.format]
    specs = io_cls.load(str(specs_fname))

    results = prj.generate_cell(specs=specs,
                                gen_lay=args.gen_lay,
                                gen_sch=args.gen_sch,
                                run_lvs=args.lvs,
                                run_rcx=args.rcx,
                                use_cybagoa=True,
                                use_cache=args.use_cache,
                                save_cache=args.save_cache,
                                prefix=args.prefix,
                                suffix=args.suffix)

    if results is not None and args.dump:
        out_tmp_file = Path(args.dump)
        io_cls.save(results, out_tmp_file)
Example #4
0
def run_main(prj: BagProject, args: argparse.Namespace) -> None:
    specs = read_yaml(args.specs)

    lay_db = prj.make_template_db(specs['impl_lib']) if args.gen_lay else None
    sch_db = prj.make_module_db(specs['impl_lib'])
    cv_info = []
    dut_params = specs['dut_params']
    dut_netlist = prj.generate_cell(dut_params,
                                    lay_db=lay_db,
                                    sch_db=sch_db,
                                    gen_lay=args.gen_lay,
                                    gen_sch=args.gen_sch,
                                    cv_info_out=cv_info,
                                    run_rcx=args.run_rcx)

    print(f'dut_netlist: {dut_netlist}')
    wrapper_params = specs['wrapper_params']
    prj.replace_dut_in_wrapper(wrapper_params['params'],
                               dut_params['impl_lib'], dut_params['impl_cell'])
    generate_wrapper(sch_db,
                     wrapper_params,
                     cv_info,
                     dut_netlist,
                     gen_sch=args.gen_sch)
Example #5
0
# -*- coding: utf-8 -*-

import yaml

from bag.core import BagProject

from serdes_ec.layout.qdr_hybrid.tapx import TapXSummer

if __name__ == '__main__':
    with open('specs_test/serdes_ec/qdr_hybrid/tapx_summer.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    bprj.generate_cell(block_specs, TapXSummer, debug=True)
    # bprj.generate_cell(block_specs, TapXSummer, gen_sch=True, debug=True)
Example #6
0
# -*- coding: utf-8 -*-

import yaml

from bag.core import BagProject

from serdes_ec.layout.qdr_hybrid.datapath import RXDatapath


if __name__ == '__main__':
    with open('specs_test/serdes_ec/qdr_hybrid/datapath.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    # bprj.generate_cell(block_specs, RXDatapath, debug=True)
    bprj.generate_cell(block_specs, RXDatapath, gen_sch=True, debug=True)
Example #7
0
# -*- coding: utf-8 -*-

import yaml

from bag.core import BagProject

from abs_templates_ec.routing.fill import DecapFill

if __name__ == '__main__':
    with open('specs_test/abs_templates_ec/routing/decap.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    bprj.generate_cell(block_specs, DecapFill, debug=True)
    # bprj.generate_cell(block_specs, DecapFill, gen_sch=True, debug=True)
Example #8
0
# -*- coding: utf-8 -*-

import yaml

from bag.core import BagProject

from serdes_ec.layout.analog.passives import CMLResLoad

if __name__ == '__main__':
    with open('specs_test/serdes_ec/passives/cml_load.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    bprj.generate_cell(block_specs, CMLResLoad, debug=True)
    # bprj.generate_cell(block_specs, CMLResLoad, gen_sch=True, debug=True)
Example #9
0
# -*- coding: utf-8 -*-

import yaml

from bag.core import BagProject

from serdes_ec.layout.laygo.strongarm import SenseAmpStrongArm

if __name__ == '__main__':
    with open('specs_test/serdes_ec/qdr_hybrid/strongarm.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    # bprj.generate_cell(block_specs, SenseAmpStrongArm)
    # bprj.generate_cell(block_specs, SenseAmpStrongArm, gen_sch=True, run_lvs=True)
    bprj.generate_cell(block_specs, SenseAmpStrongArm, gen_sch=True)
Example #10
0
# -*- coding: utf-8 -*-

import yaml

from bag.core import BagProject

from analog_ec.layout.passives.capacitor.momcap import MOMCapChar

if __name__ == '__main__':
    with open('specs_test/analog_ec/cap/momcap.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    bprj.generate_cell(block_specs, MOMCapChar, debug=True)
    # bprj.generate_cell(block_specs, MOMCapChar, gen_sch=True, run_lvs=True, debug=True)
Example #11
0
# -*- coding: utf-8 -*-

import yaml

from bag.core import BagProject

from digital_ec.layout.digital.delay import DelayLineMux

if __name__ == '__main__':
    with open('specs_test/digital_ec/delay/delay_line_mux.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    # bprj.generate_cell(block_specs, DelayLineMux, debug=True)
    bprj.generate_cell(block_specs, DelayLineMux, gen_sch=True, debug=True)
Example #12
0
# -*- coding: utf-8 -*-

import yaml

from bag.core import BagProject

from serdes_ec.layout.digital.buffer import BufferArray

if __name__ == '__main__':
    with open('specs_test/serdes_ec/digital/buffer_array.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    bprj.generate_cell(block_specs, BufferArray, debug=True)
    # StdCellWrapper.generate_cells(bprj, block_specs, gen_sch=True, run_lvs=True)
Example #13
0
# -*- coding: utf-8 -*-

import yaml

from bag.core import BagProject

from serdes_ec.layout.analog.passives import PassiveCTLE


if __name__ == '__main__':
    with open('specs_test/serdes_ec/passives/ctle.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    bprj.generate_cell(block_specs, PassiveCTLE, debug=True)
    # bprj.generate_cell(block_specs, PassiveCTLE, gen_sch=True, run_lvs=True, debug=True)
Example #14
0
# -*- coding: utf-8 -*-

import yaml

from bag.core import BagProject

from analog_ec.layout.dac.rladder.mux_stdcell import RLadderMuxArray

if __name__ == '__main__':
    with open('specs_test/rdac/mux_array_stdcell.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    stats = bprj.generate_cell(block_specs,
                               RLadderMuxArray,
                               debug=True,
                               profile_fname='new.data')
Example #15
0
# -*- coding: utf-8 -*-

import yaml

from bag.core import BagProject

from serdes_ec.layout.tx.datapath import TXDatapath

if __name__ == '__main__':
    with open('specs_test/serdes_ec/tx/datapath.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    bprj.generate_cell(block_specs, TXDatapath, debug=True)
    # bprj.generate_cell(block_specs, TXDatapath, gen_sch=True, debug=True)
Example #16
0
# -*- coding: utf-8 -*-

import yaml

from bag.core import BagProject

from analog_ec.layout.dac.rladder.top import RDACArray

if __name__ == '__main__':
    with open('specs_test/analog_ec/rdac/array.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    # bprj.generate_cell(block_specs, RDACArray, debug=True, save_cache=True)
    # bprj.generate_cell(block_specs, RDACArray, debug=True, use_cache=True)
    bprj.generate_cell(block_specs, RDACArray, debug=True)
    # bprj.generate_cell(block_specs, RDACArray, gen_lay=False, gen_sch=True)
Example #17
0
        # compute schematic parameters
        self._sch_params = dict(
            lch=lch,
            w_dict=w_dict,
            th_dict=th_dict,
            seg_dict=seg_dict,
            stack_dict=stack_dict,
            dum_info=self.get_sch_dummy_info(),
        )


if __name__ == '__main__':
    with open('specs_test/vco_core.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    bprj.generate_cell(block_specs,
                       VCOCore,
                       gen_sch=False,
                       run_lvs=False,
                       use_cybagoa=True)
    # bprj.generate_cell(block_specs, VCOCore, gen_sch=True, run_lvs=False, use_cybagoa=True)
Example #18
0
# -*- coding: utf-8 -*-

import yaml

from bag.core import BagProject

from analog_ec.layout.passives.resistor.ladder import ResLadderTop

if __name__ == '__main__':
    with open('specs_test/res/ladder.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    stats = bprj.generate_cell(block_specs,
                               ResLadderTop,
                               debug=True,
                               profile_fname='new.data')
    # bprj.generate_cell(block_specs, ResLadderTop, gen_sch=True, run_lvs=False, use_cybagoa=True)
Example #19
0
# -*- coding: utf-8 -*-

import yaml

from bag.core import BagProject

from serdes_ec.layout.tx.ser import Serializer32

if __name__ == '__main__':
    with open('specs_test/serdes_ec/tx/ser32.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    bprj.generate_cell(block_specs, Serializer32, debug=True)
    # bprj.generate_cell(block_specs, Serializer32, gen_sch=True, debug=True)
Example #20
0
# -*- coding: utf-8 -*-

import yaml

from bag.core import BagProject

from serdes_ec.layout.qdr_hybrid.tap1 import Tap1LatchRow


if __name__ == '__main__':
    with open('specs_test/serdes_ec/qdr_hybrid/tap1_latch_row.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    bprj.generate_cell(block_specs, Tap1LatchRow, debug=True)
    # bprj.generate_cell(block_specs, Tap1LatchRow, gen_sch=True, run_lvs=True, debug=True)
Example #21
0
# -*- coding: utf-8 -*-

import yaml

from bag.core import BagProject

from serdes_ec.layout.qdr_hybrid.amp import IntegAmp

if __name__ == '__main__':
    with open('specs_test/serdes_ec/qdr_hybrid/integ_amp.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    # bprj.generate_cell(block_specs, IntegAmp, debug=True)
    bprj.generate_cell(block_specs, IntegAmp, gen_sch=True, debug=True)
Example #22
0
# -*- coding: utf-8 -*-

import yaml

from bag.core import BagProject

from serdes_ec.layout.laygo.strongarm import StrongArmLatch

if __name__ == '__main__':
    with open('specs_test/strongarm_core.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    bprj.generate_cell(block_specs,
                       StrongArmLatch,
                       gen_sch=False,
                       run_lvs=False,
                       use_cybagoa=True)
Example #23
0
# -*- coding: utf-8 -*-

import yaml

from bag.core import BagProject

from digital_ec.layout.analog.inv import AnaInvChain


if __name__ == '__main__':
    with open('specs_test/digital_ec/analog/inv_chain.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    bprj.generate_cell(block_specs, AnaInvChain, debug=True)
    # bprj.generate_cell(block_specs, AnaInvChain, gen_sch=True, debug=True)
Example #24
0
# -*- coding: utf-8 -*-

import yaml

from bag.core import BagProject

from serdes_ec.layout.qdr_hybrid.tapx import TapXColumn

if __name__ == '__main__':
    with open('specs_test/serdes_ec/qdr_hybrid/tapx_column_ffe.yaml',
              'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    bprj.generate_cell(block_specs, TapXColumn, debug=True)
    # bprj.generate_cell(block_specs, TapXColumn, gen_sch=True, debug=True)
Example #25
0
# -*- coding: utf-8 -*-

import yaml

from bag.core import BagProject

from serdes_ec.layout.laygo.strongarm import SenseAmpStrongArm

if __name__ == '__main__':
    with open('specs_test/serdes_ec/qdr_hybrid/strongarm.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    bprj.generate_cell(block_specs, SenseAmpStrongArm)
    # bprj.generate_cell(block_specs, SenseAmpStrongArm, gen_sch=True, run_lvs=True)
Example #26
0
# -*- coding: utf-8 -*-

import yaml

from bag.core import BagProject

from abs_templates_ec.routing.fill import PowerFill

if __name__ == '__main__':
    with open('specs_test/abs_templates_ec/routing/power_fill.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    bprj.generate_cell(block_specs, PowerFill, debug=True)
Example #27
0
# -*- coding: utf-8 -*-

import yaml

from bag.core import BagProject

from abs_templates_ec.routing.bias import BiasShieldCrossing


if __name__ == '__main__':
    with open('specs_test/abs_templates_ec/routing/bias_crossing.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    bprj.generate_cell(block_specs, BiasShieldCrossing, debug=True)
Example #28
0
    def get_params_info(cls):
        return dict(
            cache_fname='the cache file name.',
        )

    def draw_layout(self):
        master = self.new_template(self.params, temp_cls=CachedTemplate)

        self.add_instance(master)
        self.set_size_from_bound_box(master.top_layer, master.bound_box)
        self.array_box = master.array_box

        for bbox in self.blockage_iter(4, self.bound_box):
            self.add_rect('M8', bbox, unit_mode=True)


if __name__ == '__main__':
    with open('specs_test/cache_test.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    bprj.generate_cell(block_specs, CacheTest, debug=True)
Example #29
0
# -*- coding: utf-8 -*-

import yaml

from bag.core import BagProject

from analog_ec.layout.dac.rladder.core import ResLadderDAC

if __name__ == '__main__':
    with open('specs_test/analog_ec/rdac/unit.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    bprj.generate_cell(block_specs, ResLadderDAC, debug=True)
    # bprj.generate_cell(block_specs, ResLadderDAC, gen_sch=True, run_lvs=True, debug=True)
Example #30
0
# -*- coding: utf-8 -*-

import yaml

from bag.core import BagProject

from serdes_ec.layout.analog.cml import CMLAmpPMOS

if __name__ == '__main__':
    with open('specs_test/serdes_ec/analog/cml_amp.yaml', 'r') as f:
        block_specs = yaml.load(f)

    local_dict = locals()
    if 'bprj' not in local_dict:
        print('creating BAG project')
        bprj = BagProject()

    else:
        print('loading BAG project')
        bprj = local_dict['bprj']

    bprj.generate_cell(block_specs, CMLAmpPMOS, debug=True)
    # bprj.generate_cell(block_specs, CMLAmpPMOS, gen_sch=True, debug=True)