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)
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)
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)
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)
# -*- 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)
# -*- 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)
# -*- 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)
# -*- 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)
# -*- 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)
# -*- 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)
# -*- 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)
# -*- 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)
# -*- 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)
# -*- 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')
# -*- 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)
# -*- 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)
# 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)
# -*- 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)
# -*- 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)
# -*- 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)
# -*- 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)
# -*- 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)
# -*- 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)
# -*- 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)
# -*- 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)
# -*- 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)
# -*- 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)
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)
# -*- 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)
# -*- 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)