def get_config(tp): start_addr = None stop_addr = None set_pc_addr = None set_pc_offset = None debug_bridge_commands = None chip = tp.get_child_str('chip') if chip in ['pulpissimo', 'pulpissimo_v1', 'pulp', 'pulp_v1']: start_addr = '0x%X' % ( tp.get_child_int("soc/peripherals/fc_dbg_unit/base") + 0x0000) start_value = '0' stop_addr = '0x%X' % ( tp.get_child_int("soc/peripherals/fc_dbg_unit/base") + 0x0000) stop_value = '0x00010000' set_pc_addr = '0x%X' % ( tp.get_child_int("soc/peripherals/fc_dbg_unit/base") + 0x2000) debug_bridge_commands = 'reset stop load ioloop reqloop start wait' if chip in ['vivosoc3']: start_addr = '0x1A104014' start_value = '1' stop_addr = '0x%X' % ( tp.get_child_int("soc/peripherals/fc_dbg_unit/base") + 0x0000) stop_value = '0x00010000' set_pc_addr = '0x1A104010' debug_bridge_commands = 'reset stop load ioloop reqloop start wait' if chip in [ 'multino', 'bigpulp-standalone', 'bigpulp', 'bigpulp-z-7045', 'oprecompkw_sa' ]: start_addr = '0x%X' % ( tp.get_child_int("cluster/peripherals/cluster_ctrl/base") + 0x0008) start_value = '1' stop_addr = '0x%X' % ( tp.get_child_int("cluster/peripherals/cluster_ctrl/base") + 0x0008) stop_value = '0x00010000' set_pc_addr = '0x%X' % ( tp.get_child_int("cluster/peripherals/cluster_ctrl/base") + 0x0040) set_pc_offset = "-128" debug_bridge_commands = 'reset stop load ioloop reqloop start wait' system = Component() system.system_tree = Empty_Component( OrderedDict([('includes', ["pulp_system_common.json"]), ('vp_class', "pulp/system")])) system.system_tree.debug_bridge = Empty_Component() if start_addr is not None: system.system_tree.debug_bridge.set_property('start_addr', start_addr) system.system_tree.debug_bridge.set_property('start_value', start_value) if stop_addr is not None: system.system_tree.debug_bridge.set_property('stop_addr', stop_addr) system.system_tree.debug_bridge.set_property('stop_value', stop_value) if set_pc_addr is not None: system.system_tree.debug_bridge.set_property('set_pc_addr', set_pc_addr) if set_pc_offset is not None: system.system_tree.debug_bridge.set_property('set_pc_offset', set_pc_offset) if debug_bridge_commands is not None: system.system_tree.debug_bridge.set_property('commands', debug_bridge_commands) system.system_tree.board = Component( OrderedDict([('vp_class', "pulp/board")])) system.system_tree.board.chip = chip_gen.get_config(tp) system.system_tree.board.dpi_clock = Component( OrderedDict([('vp_class', "vp/clock_domain"), ('frequency', 50000000)])) system.system_tree.board.pulp_chip = Component() system.system_tree.board.pulp_chip.set_property(chip, {}) system.system_tree.board.dpi = Component( OrderedDict([('includes', ["periph/dpi_wrapper.json"])])) system.system_tree.board.dpi_clock.out = system.system_tree.board.dpi.clock system.system_tree.board.dpi.chip_reset = system.system_tree.board.chip.reset system.system_tree.board.ref_clock_clock = Component( OrderedDict([('vp_class', "vp/clock_domain"), ('frequency', 65536)])) system.system_tree.board.ref_clock = Component( OrderedDict([('includes', ["ips/misc/clock.json"])])) system.system_tree.board.ref_clock_clock.out = system.system_tree.board.ref_clock.clock system.system_tree.board.ref_clock.clock_sync = system.system_tree.board.chip.ref_clock if tp.get('soc/peripherals/pmu') is not None: system.system_tree.board.ref_clock_clock.out = system.system_tree.board.chip.ref_clock_engine if chip == 'wolfe': system.system_tree.board.bootsel = Component( OrderedDict([('vp_class', "board/switch"), ('value', "0")])) system.system_tree.board.bootsel.out = system.system_tree.board.chip.bootsel has_ddr = tp.get('ddr') is not None if has_ddr: system.system_tree.board.ddr_clock = Component( OrderedDict([('vp_class', "vp/clock_domain"), ('frequency', tp.get_child_str("ddr/frequency"))])) system.system_tree.board.ddr = Component( OrderedDict([('includes', ["ips/memory/ddr.json"]), ('size', tp.get_child_str("ddr/size"))])) system.system_tree.board.chip.ddr = system.system_tree.board.ddr.input system.system_tree.board.ddr_clock.out = system.system_tree.board.ddr.clock if tp.get('**/devices') is not None: for device_name, device in tp.get('**/devices').items.items(): generator = device.get_child_str('generator') if generator is None: raise Exception( 'No generator specified for device (name: %s)' % device_name) file, path, descr = imp.find_module(generator, None) module = imp.load_module(generator, file, path, descr) module.gen_config(device_name, tp, system, device) return system.get_js_config()
def get_config(tp): start_addr = None stop_addr = None set_pc_addr = None set_pc_offset = None debug_bridge_commands = None chip = tp.get_child_str('chip') if chip in ['pulpissimo', 'pulpissimo_v1', 'pulp', 'pulp_v1']: start_addr = '0x%X' % ( tp.get_child_int("soc/peripherals/fc_dbg_unit/base") + 0x0000) start_value = '0' stop_addr = '0x%X' % ( tp.get_child_int("soc/peripherals/fc_dbg_unit/base") + 0x0000) stop_value = '0x00010000' set_pc_addr = '0x%X' % ( tp.get_child_int("soc/peripherals/fc_dbg_unit/base") + 0x2000) debug_bridge_commands = 'reset stop load ioloop reqloop start wait' if chip in ['vivosoc3']: start_addr = '0x1A104014' start_value = '1' stop_addr = '0x%X' % ( tp.get_child_int("soc/peripherals/fc_dbg_unit/base") + 0x0000) stop_value = '0x00010000' set_pc_addr = '0x1A104010' debug_bridge_commands = 'reset stop load ioloop reqloop start wait' if chip in [ 'multino', 'bigpulp-standalone', 'bigpulp', 'bigpulp-z-7045', 'oprecompkw_sa' ]: start_addr = '0x%X' % ( tp.get_child_int("cluster/peripherals/cluster_ctrl/base") + 0x0008) start_value = '1' stop_addr = '0x%X' % ( tp.get_child_int("cluster/peripherals/cluster_ctrl/base") + 0x0008) stop_value = '0x00010000' set_pc_addr = '0x%X' % ( tp.get_child_int("cluster/peripherals/cluster_ctrl/base") + 0x0040) set_pc_offset = "-128" debug_bridge_commands = 'reset stop load ioloop reqloop start wait' system = Component() system.system_tree = Empty_Component( OrderedDict([('@includes@', ["pulp_system_common.json"]), ('vp_class', "pulp/system"), ('vp_component', 'utils.composite_impl')])) debug_bridge_dict = OrderedDict([ ('@includes@', ["tools/debug-bridge/debug_bridge.json"]) ]) debug_bridge_config = tp.get('**/debug_bridge/config') if debug_bridge_config is not None: debug_bridge_dict.update(debug_bridge_config.get_dict()) system.system_tree.debug_bridge = Component(properties=debug_bridge_dict) openocd_dict = OrderedDict([('@includes@', ["tools/openocd/openocd.json"]) ]) openocd_config = tp.get('**/openocd/config') if openocd_config is not None: openocd_dict.update(openocd_config.get_dict()) system.system_tree.openocd = Component(properties=openocd_dict) runner_dict = OrderedDict([('@includes@', ["tools/runner/runner.json"])]) runner_config = tp.get('**/runner/config') if runner_config is not None: runner_dict.update(runner_config.get_dict()) system.runner = Component(name='runner', properties=runner_dict) rt_dict = OrderedDict([('@includes@', ["tools/rt/rt.json"])]) rt_config = tp.get('**/rt/config') if rt_config is not None: rt_dict.update(rt_config.get_dict()) system.rt = Component(properties=rt_dict) if start_addr is not None: system.system_tree.debug_bridge.set_property('start_addr', start_addr) system.system_tree.debug_bridge.set_property('start_value', start_value) if stop_addr is not None: system.system_tree.debug_bridge.set_property('stop_addr', stop_addr) system.system_tree.debug_bridge.set_property('stop_value', stop_value) if set_pc_addr is not None: system.system_tree.debug_bridge.set_property('set_pc_addr', set_pc_addr) if set_pc_offset is not None: system.system_tree.debug_bridge.set_property('set_pc_offset', set_pc_offset) if debug_bridge_commands is not None: system.system_tree.debug_bridge.set_property('commands', debug_bridge_commands) board_name = tp.get_child_str('**/board/name') if board_name is None: board_name = chip system.system_tree.board = Component( OrderedDict([('vp_class', "pulp/board"), ('vp_component', 'utils.composite_impl'), ('name', board_name)])) system.system_tree.board.chip = chip_gen.get_config(tp) system.system_tree.board.dpi_clock = Component( OrderedDict([('vp_class', "vp/clock_domain"), ('vp_component', 'vp.clock_domain_impl'), ('frequency', 50000000)])) system.system_tree.board.pulp_chip = Component() system.system_tree.board.pulp_chip.set_property(chip, {}) system.system_tree.board.dpi = Component( OrderedDict([('@includes@', ["periph/dpi_wrapper.json"])])) system.system_tree.board.dpi_clock.out = system.system_tree.board.dpi.clock system.system_tree.board.dpi.chip_reset = system.system_tree.board.chip.reset system.system_tree.board.ref_clock_clock = Component( OrderedDict([('vp_class', "vp/clock_domain"), ('vp_component', 'vp.clock_domain_impl'), ('frequency', 65536)])) system.system_tree.board.ref_clock = Component( OrderedDict([('@includes@', ["ips/misc/clock.json"])])) system.system_tree.board.ref_clock_clock.out = system.system_tree.board.ref_clock.clock system.system_tree.board.ref_clock.clock_sync = system.system_tree.board.chip.ref_clock if tp.get('soc/peripherals/pmu') is not None: system.system_tree.board.ref_clock_clock.out = system.system_tree.board.chip.ref_clock_engine if chip == 'wolfe' or chip == 'vega' or chip == 'gap9' or chip == 'gap9_v2': system.system_tree.board.bootsel = Component( OrderedDict([('vp_class', "board/switch"), ('vp_component', 'board.switch_impl'), ('value', "0")])) system.system_tree.board.bootsel.out = system.system_tree.board.chip.bootsel system.system_tree.board.dpi.chip_config = system.system_tree.board.bootsel.input has_ddr = tp.get('ddr') is not None if has_ddr: system.system_tree.board.ddr_clock = Component( OrderedDict([('vp_class', "vp/clock_domain"), ('vp_component', 'vp.clock_domain_impl'), ('frequency', tp.get_child_str("ddr/frequency"))])) system.system_tree.board.ddr = Component( OrderedDict([('@includes@', ["ips/memory/ddr.json"]), ('size', tp.get_child_str("ddr/size"))])) system.system_tree.board.chip.ddr = system.system_tree.board.ddr.input system.system_tree.board.ddr_clock.out = system.system_tree.board.ddr.clock components = tp.get("board/components") if components is not None: for comp_name, comp_config in components.items.items(): system.system_tree.board.add_component(comp_name, Config(config=comp_config)) bindings = tp.get("board/bindings") if bindings is not None: for binding in bindings.elems: client, server = binding.elems client_comp, client_port = client.get().split('.') server_comp, server_port = server.get().split('.') system.system_tree.board.get(client_comp).set( client_port, system.system_tree.board.get(server_comp).new_itf(server_port)) devices = {} if tp.get('**/devices') is not None: devices.update(tp.get('**/devices').items) if tp.get('target/board/devices') is not None: devices.update(tp.get('target/board/devices').items) for device_name, device in devices.items(): generator = device.get_child_str('generator') if generator is None: raise Exception('No generator specified for device (name: %s)' % device_name) file, path, descr = imp.find_module(generator, None) module = imp.load_module(generator, file, path, descr) module.gen_config(device_name, tp, system, device) return system.get_js_config(expand=True)