diff --git a/f4pga/__init__.py b/f4pga/__init__.py index fa63294..cc217e7 100755 --- a/f4pga/__init__.py +++ b/f4pga/__init__.py @@ -41,7 +41,7 @@ from pathlib import Path from argparse import Namespace from sys import argv as sys_argv from os import environ -from json import load as json_load, loads as json_loads +from yaml import load as yaml_load, Loader as yaml_loader from typing import Iterable from colorama import Fore, Style @@ -72,7 +72,7 @@ F4CACHEPATH = '.f4cache' install_dir = environ.get("F4PGA_INSTALL_DIR", "/usr/local") -mypath = str(Path(__file__).resolve().parent) +ROOT = Path(__file__).resolve().parent FPGA_FAM = environ.get('FPGA_FAM', 'xc7') @@ -81,6 +81,7 @@ share_dir_path = \ environ.get('F4PGA_SHARE_DIR', str(Path(f'{install_dir}/{FPGA_FAM}/share/f4pga').resolve())) + class DependencyNotProducedException(F4PGAException): dep_name: str provider: str @@ -91,9 +92,11 @@ class DependencyNotProducedException(F4PGAException): self.message = f'Stage `{self.provider}` did not produce promised ' \ f'dependency `{self.dep_name}`' + def dep_value_str(dep: str): return ':' + dep + def platform_stages(platform_flow, r_env): """ Iterates over all stages available in a given flow. """ @@ -102,6 +105,7 @@ def platform_stages(platform_flow, r_env): mod_opts = stage_options.get(stage_name) if stage_options else None yield Stage(stage_name, modulestr, mod_opts, r_env) + def req_exists(r): """ Checks whether a dependency exists on a drive. """ @@ -115,6 +119,7 @@ def req_exists(r): f'paths, or path lists (reason: {r})') return True + def map_outputs_to_stages(stages: 'list[Stage]'): """ Associates a stage with every possible output. @@ -133,18 +138,22 @@ def map_outputs_to_stages(stages: 'list[Stage]'): 'provider at most.') return os_map + def filter_existing_deps(deps: 'dict[str, ]', f4cache): return [(n, p) for n, p in deps.items() \ if req_exists(p)] # and not dep_differ(p, f4cache)] + def get_stage_values_override(og_values: dict, stage: Stage): values = og_values.copy() values.update(stage.value_ovds) return values + def prepare_stage_io_input(stage: Stage): return { 'params': stage.params } if stage.params is not None else {} + def prepare_stage_input(stage: Stage, values: dict, dep_paths: 'dict[str, ]', config_paths: 'dict[str, ]'): takes = {} @@ -168,6 +177,7 @@ def prepare_stage_input(stage: Stage, values: dict, dep_paths: 'dict[str, ]', return stage_mod_cfg + def update_dep_statuses(paths, consumer: str, f4cache: F4Cache): if type(paths) is str: return f4cache.update(Path(paths), consumer) @@ -179,6 +189,7 @@ def update_dep_statuses(paths, consumer: str, f4cache: F4Cache): return update_dep_statuses(p, consumer, f4cache) fatal(-1, 'WRONG PATHS TYPE') + def dep_differ(paths, consumer: str, f4cache: F4Cache): """ Check if a dependency differs from its last version, lack of dependency is @@ -195,6 +206,8 @@ def dep_differ(paths, consumer: str, f4cache: F4Cache): return True in [dep_differ(p, consumer, f4cache) \ for _, p in paths.items()] return False + + def dep_will_differ(target: str, paths, consumer: str, os_map: 'dict[str, Stage]', run_stages: 'set[str]', f4cache: F4Cache): @@ -209,12 +222,14 @@ def dep_will_differ(target: str, paths, consumer: str, dep_differ(paths, consumer, f4cache) return dep_differ(paths, consumer, f4cache) + def _print_unreachable_stage_message(provider: Stage, take: str): sfprint(0, ' Stage ' f'`{Style.BRIGHT + provider.name + Style.RESET_ALL}` is ' 'unreachable due to unmet dependency ' f'`{Style.BRIGHT + take.name + Style.RESET_ALL}`') + def config_mod_runctx(stage: Stage, values: 'dict[str, ]', dep_paths: 'dict[str, str | list[str]]', config_paths: 'dict[str, str | list[str]]'): @@ -222,6 +237,7 @@ def config_mod_runctx(stage: Stage, values: 'dict[str, ]', dep_paths, config_paths) return ModRunCtx(share_dir_path, bin_dir_path, config) + def _process_dep_path(path: str, f4cache: F4Cache): f4cache.process_file(Path(path)) _cache_deps = deep(_process_dep_path) @@ -452,6 +468,7 @@ class Flow: sfprint(0, f'Target {Style.BRIGHT + self.target + Style.RESET_ALL} ' f'-> {self.dep_paths[self.target]}') + def display_dep_info(stages: 'Iterable[Stage]'): sfprint(0, 'Platform dependencies/targets:') longest_out_name_len = 0 @@ -485,10 +502,11 @@ def display_dep_info(stages: 'Iterable[Stage]'): sfprint(0, f' {Style.BRIGHT + out.name + Style.RESET_ALL}:' f'{indent}{pdesc}{nl_indentstr}{pgen}') + def display_stage_info(stage: Stage): if stage is None: sfprint(0, f'Stage does not exist') - sfbuild_fail() + f4pga_fail() return sfprint(0, f'Stage `{Style.BRIGHT}{stage.name}{Style.RESET_ALL}`:') @@ -500,18 +518,21 @@ def display_stage_info(stage: Stage): sfprint(0, f' {mod_info}') -sfbuild_done_str = Style.BRIGHT + Fore.GREEN + 'DONE' -sfbuild_silent = 0 -def sfbuild_fail(): - global sfbuild_done_str - sfbuild_done_str = Style.BRIGHT + Fore.RED + 'FAILED' +f4pga_done_str = Style.BRIGHT + Fore.GREEN + 'DONE' -def sfbuild_done(): - sfprint(1, f'f4pga: {sfbuild_done_str}' + +def f4pga_fail(): + global f4pga_done_str + f4pga_done_str = Style.BRIGHT + Fore.RED + 'FAILED' + + +def f4pga_done(): + sfprint(1, f'f4pga: {f4pga_done_str}' f'{Style.RESET_ALL + Fore.RESET}') exit(0) + def setup_resolution_env(): """ Sets up a ResolutionEnv with default built-ins. """ @@ -543,6 +564,7 @@ def setup_resolution_env(): r_env.add_values(_generate_values()) return r_env + def open_project_flow_config(path: str) -> ProjectFlowConfig: try: flow_cfg = open_project_flow_cfg(path) @@ -550,11 +572,12 @@ def open_project_flow_config(path: str) -> ProjectFlowConfig: fatal(-1, 'The provided flow configuration file does not exist') return flow_cfg + def verify_part_stage_params(flow_cfg: FlowConfig, part: 'str | None' = None): if part: platform_name = get_platform_name_for_part(part) - if not verify_platform_name(platform_name, mypath): + if not verify_platform_name(platform_name, str(ROOT)): sfprint(0, f'Platform `{part}`` is unsupported.') return False if part not in flow_cfg.part(): @@ -563,17 +586,19 @@ def verify_part_stage_params(flow_cfg: FlowConfig, return True + def get_platform_name_for_part(part_name: str): """ Gets a name that identifies the platform setup required for a specific chip. The reason for such distinction is that plenty of chips with different names differ only in a type of package they use. """ - with (Path(mypath) / 'part_db.json').open('r') as rfptr: - for key, val in json_load(rfptr).items(): + with (ROOT / 'part_db.yml').open('r') as rfptr: + for key, val in yaml_load(rfptr, yaml_loader).items(): if part_name.upper() in val: return key - raise(Exception(f"Unknown part name <{part_name}>!")) + raise Exception(f"Unknown part name <{part_name}>!") + def make_flow_config(project_flow_cfg: ProjectFlowConfig, part_name: str) -> FlowConfig: """ Create `FlowConfig` from given project flow configuration and part name """ @@ -592,22 +617,18 @@ def make_flow_config(project_flow_cfg: ProjectFlowConfig, part_name: str) -> Flo r_env = setup_resolution_env() r_env.add_values({'part_name': part_name.lower()}) - scan_modules(mypath) + scan_modules(str(ROOT)) - platform_path = str(Path(mypath) / f'platforms/{platform}.json') - platform_def = None - try: - with open(platform_path) as platform_file: - platform_def = platform_file.read() - except FileNotFoundError as _: - raise F4PGAException( - message=f'The platform flow definition file {platform_path} for the platform ' \ - f'{platform} cannot be found.' - ) + with (ROOT / 'platforms.yml').open('r') as rfptr: + platforms = yaml_load(rfptr, yaml_loader) + if platform not in platforms: + raise F4PGAException(message=f'Flow definition for platform <{platform}> cannot be found!') - flow_definition_dict = json_loads(platform_def) - flow_def = FlowDefinition(flow_definition_dict, r_env) - flow_cfg = FlowConfig(project_flow_cfg, flow_def, part_name) + flow_cfg = FlowConfig( + project_flow_cfg, + FlowDefinition(platforms[platform], r_env), + part_name + ) if len(flow_cfg.stages) == 0: raise F4PGAException(message = 'Platform flow does not define any stage') @@ -638,11 +659,11 @@ def cmd_build(args: Namespace): if args.info: display_dep_info(flow_cfg.stages.values()) - sfbuild_done() + f4pga_done() if args.stageinfo: display_stage_info(flow_cfg.stages.get(args.stageinfo[0])) - sfbuild_done() + f4pga_done() target = args.target if target is None: @@ -663,7 +684,7 @@ def cmd_build(args: Namespace): sfprint(dep_print_verbosity, '') if args.pretend: - sfbuild_done() + f4pga_done() try: flow.execute() @@ -671,18 +692,19 @@ def cmd_build(args: Namespace): raise e except Exception as e: sfprint(0, f'{e}') - sfbuild_fail() + f4pga_fail() if flow.f4cache: flow.f4cache.save() + def cmd_show_dependencies(args: Namespace): """ `showd` command implementation """ flow_cfg = open_project_flow_config(args.flow) if not verify_part_stage_params(flow_cfg, args.part): - sfbuild_fail() + f4pga_fail() return platform_overrides: 'set | None' = None @@ -711,6 +733,7 @@ def cmd_show_dependencies(args: Namespace): set_verbosity_level(-1) + def main(): parser = setup_argparser() args = parser.parse_args() @@ -719,14 +742,15 @@ def main(): if args.command == 'build': cmd_build(args) - sfbuild_done() + f4pga_done() if args.command == 'showd': cmd_show_dependencies(args) - sfbuild_done() + f4pga_done() sfprint(0, 'Please use a command.\nUse `--help` flag to learn more.') - sfbuild_done() + f4pga_done() + if __name__ == '__main__': main() diff --git a/f4pga/part_db.json b/f4pga/part_db.json deleted file mode 100644 index 072d51b..0000000 --- a/f4pga/part_db.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "xc7a50t": [ - "XC7A50TCSG324-1", - "XC7A35TCSG324-1", - "XC7A35TCPG236-1" - ], - "xc7a100t": [ - "XC7A100TCSG324-1", - "XC7A100TFGG484-2" - ], - "xc7a200t": [ - "XC7A200TSBG484-1" - ], - "xc7z010t": [ - "XC7C010CLG400-1" - ], - "ql-eos-s3": [ - "EOS3FF512-PDN64", - "EOS3FF512-WRN42", - "EOS3FLF512-PDN64", - "EOS3FLF512-WRN42", - "EOS3CF512-PDN64", - "EOS3CF512-WRN42", - "EOS3CLF512-PDN64", - "EOS3CLF512-WRN42" - ], - "ql-k4n8_slow": [ - "K4N8", - "K4N8_SLOW" - ], - "ql-k4n8_fast": [ - "K4N8_FAST" - ] -} diff --git a/f4pga/part_db.yml b/f4pga/part_db.yml new file mode 100644 index 0000000..b04020a --- /dev/null +++ b/f4pga/part_db.yml @@ -0,0 +1,47 @@ +# Copyright (C) 2022 F4PGA Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 + +xc7a50t: + - XC7A50TCSG324-1 + - XC7A35TCSG324-1 + - XC7A35TCPG236-1 + +xc7a100t: + - XC7A100TCSG324-1 + - XC7A100TFGG484-2 + +xc7a200t: + - XC7A200TSBG484-1 + +xc7z010t: + - XC7C010CLG400-1 + +ql-eos-s3: + - EOS3FF512-PDN64 + - EOS3FF512-WRN42 + - EOS3FLF512-PDN64 + - EOS3FLF512-WRN42 + - EOS3CF512-PDN64 + - EOS3CF512-WRN42 + - EOS3CLF512-PDN64 + - EOS3CLF512-WRN42 + +ql-k4n8_slow: + - K4N8 + - K4N8_SLOW + +ql-k4n8_fast: + - K4N8_FAST diff --git a/f4pga/platforms.yml b/f4pga/platforms.yml new file mode 100644 index 0000000..f44299d --- /dev/null +++ b/f4pga/platforms.yml @@ -0,0 +1,763 @@ +# Copyright (C) 2022 F4PGA Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 + + +xc7a50t: &xc7 + + values: + device: xc7a50t_test + bitstream_device: artix7 + pinmap: '${shareDir}/arch/xc7a50t_test/vpr_grid_map.csv' + arch_def: '${shareDir}/arch/xc7a50t_test/arch.timing.xml' + rr_graph_lookahead_bin: '${shareDir}/arch/xc7a50t_test/rr_graph_xc7a50t_test.lookahead.bin' + rr_graph_real_bin: '${shareDir}/arch/xc7a50t_test/rr_graph_xc7a50t_test.rr_graph.real.bin' + vpr_place_delay: '${shareDir}/arch/xc7a50t_test/rr_graph_xc7a50t_test.place_delay.bin' + vpr_grid_layout_name: xc7a50t-test + vpr_options: &xc7-vpr_options + max_router_iterations: 500 + routing_failure_predictor: 'off' + router_high_fanout_threshold: -1 + constant_net_method: route + route_chan_width: 500 + router_heap: bucket + clock_modeling: route + place_delta_delay_matrix_calculation_method: dijkstra + place_delay_model: delta + router_lookahead: extended_map + check_route: quick + strict_checks: 'off' + allow_dangling_combinational_nodes: 'on' + disable_errors: 'check_unbuffered_edges:check_route' + congested_routing_iteration_threshold: '0.8' + incremental_reroute_delay_ripup: 'off' + base_cost_type: delay_normalized_length_bounded + bb_factor: 10 + acc_fac: '0.7' + astar_fac: '1.8' + initial_pres_fac: '2.828' + pres_fac_mult: '1.2' + check_rr_graph: 'off' + suppress_warnings: >- + ${noisyWarnings},sum_pin_class:check_unbuffered_edges:load_rr_indexed_data_T_values:check_rr_node:trans_per_R:check_route:set_rr_graph_tool_comment:calculate_average_switch + + stages: + mk_build_dir: + module: 'common:mkdirs' + params: + build_dir: 'build/${device}' + synth: + module: 'common:synth' + params: + takes: + - xdc? + produces: + - sdc + - synth_v + prod_meta: + sdc: Standard Design Constraints file for X7 series. + values: + tcl_scripts: '${shareDir}/scripts/xc7' + yosys_tcl_env: + USE_ROI: 'FALSE' + TOP: '${top}' + OUT_JSON: '${:json}' + OUT_SDC: '${:sdc}' + PART_JSON: '${prjxray_db}/${bitstream_device}/${part_name}/part.json' + OUT_FASM_EXTRA: '${:fasm_extra}' + TECHMAP_PATH: '${shareDir}/techmaps/xc7_vpr/techmap' + OUT_SYNTH_V: '${:synth_v}' + SYNTH_JSON: '${:synth_json}' + OUT_EBLIF: '${:eblif}' + PYTHON3: '${python3}' + UTILS_PATH: '${shareDir}/scripts' + INPUT_XDC_FILES: '${:xdc}' + pack: + module: 'common:pack' + ioplace: + module: 'common:generic_script_wrapper' + params: + stage_name: ioplace + interpreter: '${python3}' + script: '${shareDir}/scripts/prjxray_create_ioplace.py' + outputs: + io_place: + mode: stdout + target: '${:net[noext]}.ioplace' + inputs: + blif: '${:eblif}' + map: '${shareDir}/arch/${device}/${part_name}/pinmap.csv' + net: '${:net}' + pcf: '${:pcf?}' + $PYTHONPATH: '${binDir}/python/' + place_constraints: + module: 'common:generic_script_wrapper' + params: + stage_name: place_constraints + interpreter: '${python3}' + script: '${shareDir}/scripts/prjxray_create_place_constraints.py' + outputs: + place_constraints: + mode: stdout + target: '${:net[noext]}.preplace' + inputs: + net: '${:net}' + arch: '${shareDir}/arch/${device}/arch.timing.xml' + blif: '${:eblif}' + input: '${:io_place}' + db_root: '${prjxray_db}' + part: '${part_name}' + vpr_grid_map: '${shareDir}/arch/${device}/vpr_grid_map.csv' + $PYTHONPATH: '${binDir}/python/' + place: + module: 'common:place' + route: + module: 'common:route' + fasm: + module: 'common:fasm' + bitstream: + module: 'common:generic_script_wrapper' + params: + stage_name: bitstream + script: xcfasm + outputs: + bitstream: + mode: file + file: '${:fasm[noext]}.bit' + target: '${:fasm[noext]}.bit' + inputs: + db-root: '${prjxray_db}/${bitstream_device}' + part: '${part_name}' + part_file: '${prjxray_db}/${bitstream_device}/${part_name}/part.yaml' + sparse: true + emit_pudc_b_pullup: true + fn_in: '${:fasm}' + frm2bit: xc7frames2bit + bit_out: '${:fasm[noext]}.bit' + + +xc7a100t: + + <<: *xc7 + + values: + device: xc7a100t_test + bitstream_device: artix7 + pinmap: '${shareDir}/arch/xc7a100t_test/vpr_grid_map.csv' + arch_def: '${shareDir}/arch/xc7a100t_test/arch.timing.xml' + rr_graph_lookahead_bin: '${shareDir}/arch/xc7a100t_test/rr_graph_xc7a100t_test.lookahead.bin' + rr_graph_real_bin: '${shareDir}/arch/xc7a100t_test/rr_graph_xc7a100t_test.rr_graph.real.bin' + vpr_place_delay: '${shareDir}/arch/xc7a100t_test/rr_graph_xc7a100t_test.place_delay.bin' + vpr_grid_layout_name: xc7a100t-test + vpr_options: *xc7-vpr_options + + +xc7a200t: + + <<: *xc7 + + values: + device: xc7a200t_test + bitstream_device: artix7 + pinmap: '${shareDir}/arch/xc7a200t_test/vpr_grid_map.csv' + arch_def: '${shareDir}/arch/xc7a200t_test/arch.timing.xml' + rr_graph_lookahead_bin: '${shareDir}/arch/xc7a200t_test/rr_graph_xc7a200t_test.lookahead.bin' + rr_graph_real_bin: '${shareDir}/arch/xc7a200t_test/rr_graph_xc7a200t_test.rr_graph.real.bin' + vpr_place_delay: '${shareDir}/arch/xc7a200t_test/rr_graph_xc7a200t_test.place_delay.bin' + vpr_grid_layout_name: xc7a200t-test + vpr_options: *xc7-vpr_options + + +ql-eos-s3: + + values: + device: ql-eos-s3 + device_alt: ql-eos-s3_wlcsp + pinmap: '${shareDir}/arch/ql-eos-s3_wlcsp/pinmap_${package}.csv' + arch_def: '${shareDir}/arch/ql-eos-s3_wlcsp/arch.timing.xml' + rr_graph_lookahead_bin: '${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.lookahead.bin' + rr_graph_real_bin: '${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.rr_graph.real.bin' + vpr_place_delay: '${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.place_delay.bin' + vpr_grid_layout_name: ql-eos-s3 + vpr_options: + max_router_iterations: 500 + routing_failure_predictor: 'off' + router_high_fanout_threshold: -1 + constant_net_method: route + route_chan_width: 100 + clock_modeling: route + place_delay_model: delta_override + router_lookahead: extended_map + check_route: quick + strict_checks: 'off' + allow_dangling_combinational_nodes: 'on' + disable_errors: 'check_unbuffered_edges:check_route' + congested_routing_iteration_threshold: '0.8' + incremental_reroute_delay_ripup: 'off' + base_cost_type: delay_normalized_length_bounded + bb_factor: '10' + initial_pres_fac: '4.0' + check_rr_graph: 'off' + pack_high_fanout_threshold: 'PB-lOGIC:18' + suppress_warnings: >- + ${noisyWarnings},sum_pin_class:check_unbuffered_edges:load_rr_indexed_data_T_values:check_rr_node:trans_per_R:check_route:set_rr_graph_tool_comment + + stages: + mk_build_dir: + module: 'common:mkdirs' + params: + build_dir: 'build/${device}' + synth: + module: 'common:synth' + params: + takes: + - pcf? + produces: + - synth_v + values: + tcl_scripts: '${shareDir}/scripts/pp3' + read_verilog_args: [] + yosys_tcl_env: + OUT_JSON: '${:json}' + OUT_SYNTH_V: '${:synth_v}' + OUT_EBLIF: '${:eblif}' + OUT_FASM_EXTRA: '${:fasm_extra}' + TECHMAP_PATH: '${shareDir}/techmaps/pp3' + DEVICE_CELLS_SIM: '${shareDir}/arch/ql-eos-s3_wlcsp/cells/ram_sim.v' + DEVICE_CELLS_MAP: '${shareDir}/arch/ql-eos-s3_wlcsp/cells/ram_map.v' + PINMAP_FILE: '${shareDir}/arch/ql-eos-s3_wlcsp/pinmap_${package}.csv' + PCF_FILE: '${:pcf}' + PYTHON3: '${python3}' + UTILS_PATH: '${shareDir}/scripts' + prepare_sdc: + module: 'common:generic_script_wrapper' + params: + stage_name: prepare_sdc + interpreter: '${python3}' + script: '${shareDir}/scripts/process_sdc_constraints.py' + outputs: + sdc: + mode: file + file: '${:eblif[noext]}.sdc' + target: '${:eblif[noext]}.sdc' + inputs: + eblif: '${:eblif}' + sdc-in: '${:sdc-in}' + sdc-out: '${:eblif[noext]}.sdc' + pcf: '${:pcf}' + pin-map: '' + $PYTHONPATH: '${shareDir}/scripts/' + pack: + module: 'common:pack' + values: + device: ql-eos-s3 + device_alt: ql-eos-s3_wlcsp + pinmap: '${shareDir}/arch/ql-eos-s3_wlcsp/pinmap_${package}.csv' + arch_def: '${shareDir}/arch/ql-eos-s3_wlcsp/arch.timing.xml' + rr_graph_lookahead_bin: '${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.lookahead.bin' + rr_graph_real_bin: >- + ${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.rr_graph.real.bin + vpr_place_delay: >- + ${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.place_delay.bin + vpr_grid_layout_name: ql-eos-s3 + vpr_options: + write_block_usage: block_usage.json + max_router_iterations: 500 + routing_failure_predictor: 'off' + router_high_fanout_threshold: -1 + constant_net_method: route + route_chan_width: 100 + clock_modeling: route + place_delay_model: delta_override + router_lookahead: extended_map + check_route: quick + strict_checks: 'off' + allow_dangling_combinational_nodes: 'on' + disable_errors: 'check_unbuffered_edges:check_route' + congested_routing_iteration_threshold: '0.8' + incremental_reroute_delay_ripup: 'off' + base_cost_type: delay_normalized_length_bounded + bb_factor: '10' + initial_pres_fac: '4.0' + check_rr_graph: 'off' + pack_high_fanout_threshold: 'PB-lOGIC:18' + suppress_warnings: >- + ${noisyWarnings},sum_pin_class:check_unbuffered_edges:load_rr_indexed_data_T_values:check_rr_node:trans_per_R:check_route:set_rr_graph_tool_comment + ioplace: + module: 'common:generic_script_wrapper' + params: + stage_name: ioplace + interpreter: '${python3}' + script: '${shareDir}/scripts/pp3_create_ioplace.py' + outputs: + io_place: + mode: stdout + target: '${:eblif[noext]}.ioplace' + inputs: + blif: '${:eblif}' + net: '${:net}' + pcf: '${:pcf}' + map: '${shareDir}/arch/ql-eos-s3_wlcsp/pinmap_${package}.csv' + $PYTHONPATH: '${shareDir}/scripts/' + place_constraints: + module: 'common:generic_script_wrapper' + params: + stage_name: place_constraints + interpreter: '${python3}' + script: '${shareDir}/scripts/pp3_create_place_constraints.py' + outputs: + place_constraints: + mode: stdout + target: '${:eblif[noext]}_constraints.place' + inputs: + blif: '${:eblif}' + map: '${shareDir}/arch/ql-eos-s3_wlcsp/clkmap_${package}.csv' + i: '${:io_place}' + $PYTHONPATH: '${shareDir}/scripts/' + place: + module: 'common:place' + iomux_jlink: + module: 'common:generic_script_wrapper' + params: + stage_name: iomux_jlink + interpreter: '${python3}' + script: '${shareDir}/scripts/pp3_eos_s3_iomux_config.py' + outputs: + iomux_jlink: + mode: stdout + target: '${:eblif[noext]}_iomux.jlink' + inputs: + eblif: '${:eblif}' + pcf: '${:pcf}' + map: '${shareDir}/arch/ql-eos-s3_wlcsp/pinmap_${package}.csv' + output-format: jlink + $PYTHONPATH: '${shareDir}/scripts/' + iomux_openocd: + module: 'common:generic_script_wrapper' + params: + stage_name: iomux_openocd + interpreter: '${python3}' + script: '${shareDir}/scripts/pp3_eos_s3_iomux_config.py' + outputs: + iomux_openocd: + mode: stdout + target: '${:eblif[noext]}_iomux.openocd' + inputs: + eblif: '${:eblif}' + pcf: '${:pcf}' + map: '${shareDir}/arch/ql-eos-s3_wlcsp/pinmap_${package}.csv' + output-format: openocd + $PYTHONPATH: '${shareDir}/scripts/' + iomux_binary: + module: 'common:generic_script_wrapper' + params: + stage_name: iomux_binary + interpreter: '${python3}' + script: '${shareDir}/scripts/pp3_eos_s3_iomux_config.py' + outputs: + iomux_binary: + mode: stdout + target: '${:eblif[noext]}_iomux.bin' + inputs: + eblif: '${:eblif}' + pcf: '${:pcf}' + map: '${shareDir}/arch/ql-eos-s3_wlcsp/pinmap_${package}.csv' + output-format: binary + $PYTHONPATH: '${shareDir}/scripts/' + route: + module: 'common:route' + values: + device: ql-eos-s3 + device_alt: ql-eos-s3_wlcsp + pinmap: '${shareDir}/arch/ql-eos-s3_wlcsp/pinmap_${package}.csv' + arch_def: '${shareDir}/arch/ql-eos-s3_wlcsp/arch.timing.xml' + rr_graph_lookahead_bin: '${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.lookahead.bin' + rr_graph_real_bin: >- + ${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.rr_graph.real.bin + vpr_place_delay: >- + ${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.place_delay.bin + vpr_grid_layout_name: ql-eos-s3 + vpr_options: + write_timing_summary: timing_summary.json + max_router_iterations: 500 + routing_failure_predictor: 'off' + router_high_fanout_threshold: -1 + constant_net_method: route + route_chan_width: 100 + clock_modeling: route + place_delay_model: delta_override + router_lookahead: extended_map + check_route: quick + strict_checks: 'off' + allow_dangling_combinational_nodes: 'on' + disable_errors: 'check_unbuffered_edges:check_route' + congested_routing_iteration_threshold: '0.8' + incremental_reroute_delay_ripup: 'off' + base_cost_type: delay_normalized_length_bounded + bb_factor: '10' + initial_pres_fac: '4.0' + check_rr_graph: 'off' + pack_high_fanout_threshold: 'PB-lOGIC:18' + suppress_warnings: >- + ${noisyWarnings},sum_pin_class:check_unbuffered_edges:load_rr_indexed_data_T_values:check_rr_node:trans_per_R:check_route:set_rr_graph_tool_comment + analysis: + module: 'common:analysis' + values: + device: ql-eos-s3 + device_alt: ql-eos-s3_wlcsp + pinmap: '${shareDir}/arch/ql-eos-s3_wlcsp/pinmap_${package}.csv' + arch_def: '${shareDir}/arch/ql-eos-s3_wlcsp/arch.timing.xml' + rr_graph_lookahead_bin: '${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.lookahead.bin' + rr_graph_real_bin: >- + ${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.rr_graph.real.bin + vpr_place_delay: >- + ${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.place_delay.bin + vpr_grid_layout_name: ql-eos-s3 + vpr_options: + gen_post_synthesis_netlist: 'on' + gen_post_implementation_merged_netlist: 'on' + post_synth_netlist_unconn_inputs: nets + post_synth_netlist_unconn_outputs: nets + verify_file_digests: 'off' + max_router_iterations: 500 + routing_failure_predictor: 'off' + router_high_fanout_threshold: -1 + constant_net_method: route + route_chan_width: 100 + clock_modeling: route + place_delay_model: delta_override + router_lookahead: extended_map + check_route: quick + strict_checks: 'off' + allow_dangling_combinational_nodes: 'on' + disable_errors: 'check_unbuffered_edges:check_route' + congested_routing_iteration_threshold: '0.8' + incremental_reroute_delay_ripup: 'off' + base_cost_type: delay_normalized_length_bounded + bb_factor: '10' + initial_pres_fac: '4.0' + check_rr_graph: 'off' + pack_high_fanout_threshold: 'PB-lOGIC:18' + suppress_warnings: >- + ${noisyWarnings},sum_pin_class:check_unbuffered_edges:load_rr_indexed_data_T_values:check_rr_node:trans_per_R:check_route:set_rr_graph_tool_comment + fasm: + module: 'common:fasm' + bitstream: + module: 'common:generic_script_wrapper' + params: + stage_name: bitstream + script: qlfasm + outputs: + bitstream: + mode: file + file: '${:eblif[noext]}.bit' + target: '${:eblif[noext]}.bit' + bitstream_log: + mode: stdout + target: '${:eblif[noext]}.bit.log' + inputs: + '#1': '${:fasm}' + '#2': '${:eblif[noext]}.bit' + dev-type: ql-eos-s3 + values: + build_dir: . + bitstream_bitheader: + module: 'common:generic_script_wrapper' + params: + stage_name: bitstream_bitheader + script: symbiflow_write_bitheader + outputs: + bitstream_bitheader: + mode: file + file: '${:bitstream}.h' + target: '${:bitstream}.h' + bitstream_bitheader_log: + mode: stdout + target: '${:bitstream}.h.log' + inputs: + '#1': '${:bitstream}' + '#2': '${:bitstream}.h' + '#3': '${:iomux_binary}' + bitstream_jlink: + module: 'common:generic_script_wrapper' + params: + stage_name: bitstream_jlink + script: symbiflow_write_jlink + outputs: + bitstream_jlink: + mode: file + file: '${:bitstream}.jlink' + target: '${:bitstream}.jlink' + bitstream_jlink_log: + mode: stdout + target: '${:bitstream}.jlink.log' + inputs: + '#1': '${:bitstream}' + '#2': '${:bitstream}.jlink' + '#3': '${:iomux_jlink}' + bitstream_openocd: + module: 'common:generic_script_wrapper' + params: + stage_name: bitstream_openocd + script: symbiflow_write_openocd + outputs: + bitstream_openocd: + mode: file + file: '${:bitstream}.openocd' + target: '${:bitstream}.openocd' + bitstream_openocd_log: + mode: stdout + target: '${:bitstream}.openocd.log' + inputs: + '#1': '${:bitstream}' + '#2': '${:bitstream}.openocd' + '#3': '${:iomux_openocd}' + bitstream_binary: + module: 'common:generic_script_wrapper' + params: + stage_name: bitstream_binary + script: symbiflow_write_binary + outputs: + bitstream_binary: + mode: file + file: '${:bitstream}.bin' + target: '${:bitstream}.bin' + bitstream_binary_log: + mode: stdout + target: '${:bitstream}.bin.log' + inputs: + '#1': '${:bitstream}' + '#2': '${:bitstream}.bin' + '#3': '${:iomux_binary}' + fasm2bels: + module: 'common:generic_script_wrapper' + params: + stage_name: fasm2bels + script: symbiflow_fasm2bels + outputs: + fasm2bels_verilog: + mode: file + file: '${:bitstream}.v' + target: '${:bitstream}.v' + fasm2bels_pcf: + mode: file + file: '${:bitstream}.pcf' + target: '${:bitstream}.pcf' + fasm2bels_qcf: + mode: file + file: '${:bitstream}.qcf' + target: '${:bitstream}.qcf' + fasm2bels_log: + mode: stdout + target: '${:bitstream}.log' + inputs: + device: '${device}' + part: '${package}' + pcf: '${:pcf}' + bit: '${:bitstream}' + out-verilog: '${:bitstream}.v' + out-pcf: '${:bitstream}.pcf' + out-qcf: '${:bitstream}.qcf' + $F4PGA_INSTALL_DIR: '${shareDir}/../../../../' + $FPGA_FAM: eos-s3 + $PATH: >- + ${shareDir}/../../../conda/envs/eos-s3/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + $BIN_DIR_PATH: '${binDir}' + + +ql-k4n8_fast: &ql-k4n8 + + values: + device: qlf_k4n8_umc22 + rr_graph_lookahead_bin: >- + ${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_fast_qlf_k4n8-qlf_k4n8_umc22_fast/rr_graph_qlf_k4n8-qlf_k4n8_umc22_fast_qlf_k4n8-qlf_k4n8_umc22_fast.lookahead.bin + rr_graph_real_bin: >- + ${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_fast_qlf_k4n8-qlf_k4n8_umc22_fast/qlf_k4n8-qlf_k4n8_umc22_fast.rr_graph.bin + vpr_place_delay: >- + ${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_fast_qlf_k4n8-qlf_k4n8_umc22_fast/rr_graph_qlf_k4n8-qlf_k4n8_umc22_fast_qlf_k4n8-qlf_k4n8_umc22_fast.place_delay.bin + vpr_grid_layout_name: qlf_k4n8-qlf_k4n8_umc22_fast + arch_def: >- + ${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_fast_qlf_k4n8-qlf_k4n8_umc22_fast/arch_qlf_k4n8-qlf_k4n8_umc22_fast_qlf_k4n8-qlf_k4n8_umc22_fast.xml + vpr_options: &ql-k4n8-vpr_options + max_router_iterations: 500 + routing_failure_predictor: 'off' + router_high_fanout_threshold: -1 + constant_net_method: route + route_chan_width: 100 + clock_modeling: ideal + place_delta_delay_matrix_calculation_method: dijkstra + place_delay_model: delta_override + router_lookahead: extended_map + allow_dangling_combinational_nodes: 'on' + absorb_buffer_luts: 'off' + + stages: &ql-k4n8-stages + mk_build_dir: + module: 'common:mkdirs' + params: + build_dir: 'build/${device}' + synth: + module: 'common:synth' + params: + produces: + - synth_v + values: + tcl_scripts: '${shareDir}/scripts/qlf_k4n8' + read_verilog_args: [] + yosys_tcl_env: + TOP: '${top}' + OUT_JSON: '${:json}' + TECHMAP_PATH: '${shareDir}/techmaps/qlf_k4n8' + OUT_SYNTH_V: '${:synth_v}' + OUT_EBLIF: '${:eblif}' + PYTHON3: '${python3}' + pack: + module: 'common:pack' + ioplace: + module: 'common:generic_script_wrapper' + params: + stage_name: ioplace + interpreter: '${python3}' + script: '${binDir}/python/ql_qlf_create_ioplace.py' + outputs: + io_place: + mode: stdout + target: '${:eblif[noext]}.ioplace' + inputs: + blif: '${:eblif}' + net: '${:net}' + pcf: '${:pcf}' + pinmap_xml: >- + ${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_fast_qlf_k4n8-qlf_k4n8_umc22_fast/pinmap_qlf_k4n8_umc22.xml + csv_file: >- + ${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_fast_qlf_k4n8-qlf_k4n8_umc22_fast/pinmap_qlf_k4n8_umc22.csv + $PYTHONPATH: '${binDir}/python/' + repack: &ql-k4n8-stages-repack + module: 'common:generic_script_wrapper' + params: + stage_name: repack + interpreter: '${python3}' + script: '${binDir}/python/repacker/repack.py' + outputs: + eblif_repacked: + mode: file + file: '${:eblif[noext]}_repacked.eblif' + target: '${:eblif[noext]}_repacked.eblif' + place_repacked: + mode: file + file: '${:place[noext]}_repacked.place' + target: '${:place[noext]}_repacked.place' + net_repacked: + mode: file + file: '${:net[noext]}_repacked.net' + target: '${:net[noext]}_repacked.net' + repack_log: + mode: stdout + target: '${top}.repack.log' + inputs: + eblif-in: '${:eblif}' + net-in: '${:net}' + place-in: '${:place}' + eblif-out: '${:eblif[noext]}_repacked.eblif' + place-out: '${:place[noext]}_repacked.place' + net-out: '${:net[noext]}_repacked.net' + absorb_buffer_luts: 'on' + vpr-arch: '${arch_def}' + repacking-rules: '${repacking_rules}' + json-constraints: '${json_constraints?}' + pcf-constraints: '${pcf?}' + $PYTHONPATH: '${binDir}/python/' + values: + repacking_rules: >- + ${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_fast_qlf_k4n8-qlf_k4n8_umc22_fast/qlf_k4n8-qlf_k4n8_umc22_fast.repacking_rules.json + place: + module: 'common:place' + route: + module: 'common:io_rename' + params: + module: 'common:route' + rename_takes: + eblif: eblif_repacked + place: place_repacked + net: net_repacked + fasm: + module: 'common:io_rename' + params: + module: 'common:fasm' + rename_takes: + eblif: eblif_repacked + place: place_repacked + net: net_repacked + bitstream: + module: 'common:generic_script_wrapper' + params: + stage_name: bitstream + script: qlf_fasm + outputs: + bitstream: + mode: file + file: '${:fasm[noext]}.bit' + target: '${:fasm[noext]}.bit' + inputs: + '#1': '${:fasm}' + '#2': '${:fasm[noext]}.bit' + db-root: '${shareDir}/fasm_database/qlf_k4n8' + format: 4byte + assemble: true + + +ql-k4n8_slow: + + <<: *ql-k4n8 + + values: + device: qlf_k4n8_umc22 + rr_graph_lookahead_bin: >- + ${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_slow_qlf_k4n8-qlf_k4n8_umc22_slow/rr_graph_qlf_k4n8-qlf_k4n8_umc22_slow_qlf_k4n8-qlf_k4n8_umc22_slow.lookahead.bin + rr_graph_real_bin: >- + ${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_slow_qlf_k4n8-qlf_k4n8_umc22_slow/qlf_k4n8-qlf_k4n8_umc22_slow.rr_graph.bin + vpr_place_delay: >- + ${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_slow_qlf_k4n8-qlf_k4n8_umc22_slow/rr_graph_qlf_k4n8-qlf_k4n8_umc22_slow_qlf_k4n8-qlf_k4n8_umc22_slow.place_delay.bin + vpr_grid_layout_name: qlf_k4n8-qlf_k4n8_umc22_slow + arch_def: >- + ${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_slow_qlf_k4n8-qlf_k4n8_umc22_slow/arch_qlf_k4n8-qlf_k4n8_umc22_slow_qlf_k4n8-qlf_k4n8_umc22_slow.xml + vpr_options: *ql-k4n8-vpr_options + + stages: + <<: *ql-k4n8-stages + ioplace: + module: 'common:generic_script_wrapper' + params: + stage_name: ioplace + interpreter: '${python3}' + script: '${binDir}/python/ql_qlf_create_ioplace.py' + outputs: + io_place: + mode: stdout + target: '${:eblif[noext]}.ioplace' + inputs: + blif: '${:eblif}' + net: '${:net}' + pcf: '${:pcf}' + pinmap_xml: >- + ${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_slow_qlf_k4n8-qlf_k4n8_umc22_slow/pinmap_qlf_k4n8_umc22.xml + csv_file: >- + ${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_slow_qlf_k4n8-qlf_k4n8_umc22_slow/pinmap_qlf_k4n8_umc22.csv + $PYTHONPATH: '${binDir}/python/' + repack: + <<: *ql-k4n8-stages-repack + values: + repacking_rules: >- + ${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_slow_qlf_k4n8-qlf_k4n8_umc22_slow/qlf_k4n8-qlf_k4n8_umc22_slow.repacking_rules.json diff --git a/f4pga/platforms/ql-eos-s3.json b/f4pga/platforms/ql-eos-s3.json deleted file mode 100644 index dafd9e3..0000000 --- a/f4pga/platforms/ql-eos-s3.json +++ /dev/null @@ -1,491 +0,0 @@ -{ - "values": { - "device": "ql-eos-s3", - "device_alt": "ql-eos-s3_wlcsp", - "pinmap": "${shareDir}/arch/ql-eos-s3_wlcsp/pinmap_${package}.csv", - "arch_def": "${shareDir}/arch/ql-eos-s3_wlcsp/arch.timing.xml", - "rr_graph_lookahead_bin": "${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.lookahead.bin", - "rr_graph_real_bin": "${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.rr_graph.real.bin", - "vpr_place_delay": "${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.place_delay.bin", - "vpr_grid_layout_name": "ql-eos-s3", - "vpr_options": { - "max_router_iterations": 500, - "routing_failure_predictor": "off", - "router_high_fanout_threshold": -1, - "constant_net_method": "route", - "route_chan_width": 100, - "clock_modeling": "route", - "place_delay_model": "delta_override", - "router_lookahead": "extended_map", - "check_route": "quick", - "strict_checks": "off", - "allow_dangling_combinational_nodes": "on", - "disable_errors": "check_unbuffered_edges:check_route", - "congested_routing_iteration_threshold": "0.8", - "incremental_reroute_delay_ripup": "off", - "base_cost_type": "delay_normalized_length_bounded", - "bb_factor": "10", - "initial_pres_fac": "4.0", - "check_rr_graph": "off", - "pack_high_fanout_threshold": "PB-lOGIC:18", - "suppress_warnings": "${noisyWarnings},sum_pin_class:check_unbuffered_edges:load_rr_indexed_data_T_values:check_rr_node:trans_per_R:check_route:set_rr_graph_tool_comment " - } - }, - - "stages": { - "mk_build_dir": { - "module": "common:mkdirs", - "params": { - "build_dir": "build/${device}" - } - }, - - "synth": { - "module": "common:synth", - "params": { - "takes": [ "pcf?" ], - "produces": [ - "synth_v" - ] - }, - "values": { - "tcl_scripts": "${shareDir}/scripts/pp3", - "read_verilog_args": [], - "yosys_tcl_env": { - "OUT_JSON": "${:json}", - "OUT_SYNTH_V": "${:synth_v}", - "OUT_EBLIF": "${:eblif}", - "OUT_FASM_EXTRA": "${:fasm_extra}", - "TECHMAP_PATH": "${shareDir}/techmaps/pp3", - "DEVICE_CELLS_SIM": "${shareDir}/arch/ql-eos-s3_wlcsp/cells/ram_sim.v", - "DEVICE_CELLS_MAP": "${shareDir}/arch/ql-eos-s3_wlcsp/cells/ram_map.v", - "PINMAP_FILE": "${shareDir}/arch/ql-eos-s3_wlcsp/pinmap_${package}.csv", - "PCF_FILE": "${:pcf}", - "PYTHON3": "${python3}", - "UTILS_PATH": "${shareDir}/scripts" - } - } - }, - - "prepare_sdc": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "prepare_sdc", - "interpreter": "${python3}", - "script": "${shareDir}/scripts/process_sdc_constraints.py", - "outputs": { - "sdc": { - "mode": "file", - "file": "${:eblif[noext]}.sdc", - "target": "${:eblif[noext]}.sdc" - } - }, - "inputs": { - "eblif": "${:eblif}", - "sdc-in": "${:sdc-in}", - "sdc-out": "${:eblif[noext]}.sdc", - "pcf": "${:pcf}", - "pin-map": "", - "$PYTHONPATH": "${shareDir}/scripts/" - } - } - }, - - "pack": { - "module": "common:pack", - "values": { - "device": "ql-eos-s3", - "device_alt": "ql-eos-s3_wlcsp", - "pinmap": "${shareDir}/arch/ql-eos-s3_wlcsp/pinmap_${package}.csv", - "arch_def": "${shareDir}/arch/ql-eos-s3_wlcsp/arch.timing.xml", - "rr_graph_lookahead_bin": "${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.lookahead.bin", - "rr_graph_real_bin": "${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.rr_graph.real.bin", - "vpr_place_delay": "${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.place_delay.bin", - "vpr_grid_layout_name": "ql-eos-s3", - "vpr_options": { - "write_block_usage": "block_usage.json", - "max_router_iterations": 500, - "routing_failure_predictor": "off", - "router_high_fanout_threshold": -1, - "constant_net_method": "route", - "route_chan_width": 100, - "clock_modeling": "route", - "place_delay_model": "delta_override", - "router_lookahead": "extended_map", - "check_route": "quick", - "strict_checks": "off", - "allow_dangling_combinational_nodes": "on", - "disable_errors": "check_unbuffered_edges:check_route", - "congested_routing_iteration_threshold": "0.8", - "incremental_reroute_delay_ripup": "off", - "base_cost_type": "delay_normalized_length_bounded", - "bb_factor": "10", - "initial_pres_fac": "4.0", - "check_rr_graph": "off", - "pack_high_fanout_threshold": "PB-lOGIC:18", - "suppress_warnings": "${noisyWarnings},sum_pin_class:check_unbuffered_edges:load_rr_indexed_data_T_values:check_rr_node:trans_per_R:check_route:set_rr_graph_tool_comment " - } - } - }, - - "ioplace": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "ioplace", - "interpreter": "${python3}", - "script": "${shareDir}/scripts/pp3_create_ioplace.py", - "outputs": { - "io_place": { - "mode": "stdout", - "target": "${:eblif[noext]}.ioplace" - } - }, - "inputs": { - "blif": "${:eblif}", - "net": "${:net}", - "pcf": "${:pcf}", - "map": "${shareDir}/arch/ql-eos-s3_wlcsp/pinmap_${package}.csv", - "$PYTHONPATH": "${shareDir}/scripts/" - } - } - }, - - "place_constraints": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "place_constraints", - "interpreter": "${python3}", - "script": "${shareDir}/scripts/pp3_create_place_constraints.py", - "outputs": { - "place_constraints": { - "mode": "stdout", - "target": "${:eblif[noext]}_constraints.place" - } - }, - "inputs": { - "blif": "${:eblif}", - "map": "${shareDir}/arch/ql-eos-s3_wlcsp/clkmap_${package}.csv", - "i": "${:io_place}", - "$PYTHONPATH": "${shareDir}/scripts/" - } - } - }, - - "place": { - "module": "common:place" - }, - - "iomux_jlink": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "iomux_jlink", - "interpreter": "${python3}", - "script": "${shareDir}/scripts/pp3_eos_s3_iomux_config.py", - "outputs": { - "iomux_jlink": { - "mode": "stdout", - "target": "${:eblif[noext]}_iomux.jlink" - } - }, - "inputs": { - "eblif": "${:eblif}", - "pcf": "${:pcf}", - "map": "${shareDir}/arch/ql-eos-s3_wlcsp/pinmap_${package}.csv", - "output-format": "jlink", - "$PYTHONPATH": "${shareDir}/scripts/" - } - } - }, - - "iomux_openocd": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "iomux_openocd", - "interpreter": "${python3}", - "script": "${shareDir}/scripts/pp3_eos_s3_iomux_config.py", - "outputs": { - "iomux_openocd": { - "mode": "stdout", - "target": "${:eblif[noext]}_iomux.openocd" - } - }, - "inputs": { - "eblif": "${:eblif}", - "pcf": "${:pcf}", - "map": "${shareDir}/arch/ql-eos-s3_wlcsp/pinmap_${package}.csv", - "output-format": "openocd", - "$PYTHONPATH": "${shareDir}/scripts/" - } - } - }, - - "iomux_binary": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "iomux_binary", - "interpreter": "${python3}", - "script": "${shareDir}/scripts/pp3_eos_s3_iomux_config.py", - "outputs": { - "iomux_binary": { - "mode": "stdout", - "target": "${:eblif[noext]}_iomux.bin" - } - }, - "inputs": { - "eblif": "${:eblif}", - "pcf": "${:pcf}", - "map": "${shareDir}/arch/ql-eos-s3_wlcsp/pinmap_${package}.csv", - "output-format": "binary", - "$PYTHONPATH": "${shareDir}/scripts/" - } - } - }, - - "route": { - "module": "common:route", - "values": { - "device": "ql-eos-s3", - "device_alt": "ql-eos-s3_wlcsp", - "pinmap": "${shareDir}/arch/ql-eos-s3_wlcsp/pinmap_${package}.csv", - "arch_def": "${shareDir}/arch/ql-eos-s3_wlcsp/arch.timing.xml", - "rr_graph_lookahead_bin": "${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.lookahead.bin", - "rr_graph_real_bin": "${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.rr_graph.real.bin", - "vpr_place_delay": "${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.place_delay.bin", - "vpr_grid_layout_name": "ql-eos-s3", - "vpr_options": { - "write_timing_summary": "timing_summary.json", - "max_router_iterations": 500, - "routing_failure_predictor": "off", - "router_high_fanout_threshold": -1, - "constant_net_method": "route", - "route_chan_width": 100, - "clock_modeling": "route", - "place_delay_model": "delta_override", - "router_lookahead": "extended_map", - "check_route": "quick", - "strict_checks": "off", - "allow_dangling_combinational_nodes": "on", - "disable_errors": "check_unbuffered_edges:check_route", - "congested_routing_iteration_threshold": "0.8", - "incremental_reroute_delay_ripup": "off", - "base_cost_type": "delay_normalized_length_bounded", - "bb_factor": "10", - "initial_pres_fac": "4.0", - "check_rr_graph": "off", - "pack_high_fanout_threshold": "PB-lOGIC:18", - "suppress_warnings": "${noisyWarnings},sum_pin_class:check_unbuffered_edges:load_rr_indexed_data_T_values:check_rr_node:trans_per_R:check_route:set_rr_graph_tool_comment " - } - } - }, - - "analysis": { - "module": "common:analysis", - "values": { - "device": "ql-eos-s3", - "device_alt": "ql-eos-s3_wlcsp", - "pinmap": "${shareDir}/arch/ql-eos-s3_wlcsp/pinmap_${package}.csv", - "arch_def": "${shareDir}/arch/ql-eos-s3_wlcsp/arch.timing.xml", - "rr_graph_lookahead_bin": "${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.lookahead.bin", - "rr_graph_real_bin": "${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.rr_graph.real.bin", - "vpr_place_delay": "${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.place_delay.bin", - "vpr_grid_layout_name": "ql-eos-s3", - "vpr_options": { - "gen_post_synthesis_netlist": "on", - "gen_post_implementation_merged_netlist": "on", - "post_synth_netlist_unconn_inputs": "nets", - "post_synth_netlist_unconn_outputs": "nets", - "verify_file_digests": "off", - "max_router_iterations": 500, - "routing_failure_predictor": "off", - "router_high_fanout_threshold": -1, - "constant_net_method": "route", - "route_chan_width": 100, - "clock_modeling": "route", - "place_delay_model": "delta_override", - "router_lookahead": "extended_map", - "check_route": "quick", - "strict_checks": "off", - "allow_dangling_combinational_nodes": "on", - "disable_errors": "check_unbuffered_edges:check_route", - "congested_routing_iteration_threshold": "0.8", - "incremental_reroute_delay_ripup": "off", - "base_cost_type": "delay_normalized_length_bounded", - "bb_factor": "10", - "initial_pres_fac": "4.0", - "check_rr_graph": "off", - "pack_high_fanout_threshold": "PB-lOGIC:18", - "suppress_warnings": "${noisyWarnings},sum_pin_class:check_unbuffered_edges:load_rr_indexed_data_T_values:check_rr_node:trans_per_R:check_route:set_rr_graph_tool_comment " - } - } - }, - - "fasm": { - "module": "common:fasm" - }, - - "bitstream": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "bitstream", - "script": "qlfasm", - "outputs": { - "bitstream": { - "mode": "file", - "file": "${:eblif[noext]}.bit", - "target": "${:eblif[noext]}.bit" - }, - "bitstream_log": { - "mode": "stdout", - "target": "${:eblif[noext]}.bit.log" - } - }, - "inputs": { - "#1": "${:fasm}", - "#2": "${:eblif[noext]}.bit", - "dev-type": "ql-eos-s3" - } - }, - "values": { - "build_dir": "." - } - }, - - "bitstream_bitheader": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "bitstream_bitheader", - "script": "symbiflow_write_bitheader", - "outputs": { - "bitstream_bitheader": { - "mode": "file", - "file": "${:bitstream}.h", - "target": "${:bitstream}.h" - }, - "bitstream_bitheader_log": { - "mode": "stdout", - "target": "${:bitstream}.h.log" - } - }, - "inputs": { - "#1": "${:bitstream}", - "#2": "${:bitstream}.h", - "#3": "${:iomux_binary}" - } - } - }, - - "bitstream_jlink": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "bitstream_jlink", - "script": "symbiflow_write_jlink", - "outputs": { - "bitstream_jlink": { - "mode": "file", - "file": "${:bitstream}.jlink", - "target": "${:bitstream}.jlink" - }, - "bitstream_jlink_log": { - "mode": "stdout", - "target": "${:bitstream}.jlink.log" - } - }, - "inputs": { - "#1": "${:bitstream}", - "#2": "${:bitstream}.jlink", - "#3": "${:iomux_jlink}" - } - } - }, - - "bitstream_openocd": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "bitstream_openocd", - "script": "symbiflow_write_openocd", - "outputs": { - "bitstream_openocd": { - "mode": "file", - "file": "${:bitstream}.openocd", - "target": "${:bitstream}.openocd" - }, - "bitstream_openocd_log": { - "mode": "stdout", - "target": "${:bitstream}.openocd.log" - } - }, - "inputs": { - "#1": "${:bitstream}", - "#2": "${:bitstream}.openocd", - "#3": "${:iomux_openocd}" - } - } - }, - - "bitstream_binary": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "bitstream_binary", - "script": "symbiflow_write_binary", - "outputs": { - "bitstream_binary": { - "mode": "file", - "file": "${:bitstream}.bin", - "target": "${:bitstream}.bin" - }, - "bitstream_binary_log": { - "mode": "stdout", - "target": "${:bitstream}.bin.log" - } - }, - "inputs": { - "#1": "${:bitstream}", - "#2": "${:bitstream}.bin", - "#3": "${:iomux_binary}" - } - } - }, - - "fasm2bels": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "fasm2bels", - "script": "symbiflow_fasm2bels", - "outputs": { - "fasm2bels_verilog": { - "mode": "file", - "file": "${:bitstream}.v", - "target": "${:bitstream}.v" - }, - "fasm2bels_pcf": { - "mode": "file", - "file": "${:bitstream}.pcf", - "target": "${:bitstream}.pcf" - }, - "fasm2bels_qcf": { - "mode": "file", - "file": "${:bitstream}.qcf", - "target": "${:bitstream}.qcf" - }, - "fasm2bels_log": { - "mode": "stdout", - "target": "${:bitstream}.log" - } - }, - "inputs": { - "device": "${device}", - "part": "${package}", - "pcf": "${:pcf}", - "bit": "${:bitstream}", - "out-verilog": "${:bitstream}.v", - "out-pcf": "${:bitstream}.pcf", - "out-qcf": "${:bitstream}.qcf", - "$F4PGA_INSTALL_DIR": "${shareDir}/../../../../", - "$FPGA_FAM": "eos-s3", - "$PATH": "${shareDir}/../../../conda/envs/eos-s3/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", - "$BIN_DIR_PATH": "${binDir}" - } - } - } - } -} diff --git a/f4pga/platforms/ql-k4n8_fast.json b/f4pga/platforms/ql-k4n8_fast.json deleted file mode 100644 index deeb9c4..0000000 --- a/f4pga/platforms/ql-k4n8_fast.json +++ /dev/null @@ -1,175 +0,0 @@ -{ - "values": { - "device": "qlf_k4n8_umc22", - "rr_graph_lookahead_bin": "${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_fast_qlf_k4n8-qlf_k4n8_umc22_fast/rr_graph_qlf_k4n8-qlf_k4n8_umc22_fast_qlf_k4n8-qlf_k4n8_umc22_fast.lookahead.bin", - "rr_graph_real_bin": "${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_fast_qlf_k4n8-qlf_k4n8_umc22_fast/qlf_k4n8-qlf_k4n8_umc22_fast.rr_graph.bin", - "vpr_place_delay": "${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_fast_qlf_k4n8-qlf_k4n8_umc22_fast/rr_graph_qlf_k4n8-qlf_k4n8_umc22_fast_qlf_k4n8-qlf_k4n8_umc22_fast.place_delay.bin", - "vpr_grid_layout_name": "qlf_k4n8-qlf_k4n8_umc22_fast", - "arch_def": "${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_fast_qlf_k4n8-qlf_k4n8_umc22_fast/arch_qlf_k4n8-qlf_k4n8_umc22_fast_qlf_k4n8-qlf_k4n8_umc22_fast.xml", - "vpr_options": { - "max_router_iterations": 500, - "routing_failure_predictor": "off", - "router_high_fanout_threshold": -1, - "constant_net_method": "route", - "route_chan_width": 100, - "clock_modeling": "ideal", - "place_delta_delay_matrix_calculation_method": "dijkstra", - "place_delay_model": "delta_override", - "router_lookahead": "extended_map", - "allow_dangling_combinational_nodes": "on", - "absorb_buffer_luts": "off" - } - }, - - "stages": { - "mk_build_dir": { - "module": "common:mkdirs", - "params": { - "build_dir": "build/${device}" - } - }, - - "synth": { - "module": "common:synth", - "params": { - "produces": [ "synth_v" ] - }, - "values": { - "tcl_scripts": "${shareDir}/scripts/qlf_k4n8", - "read_verilog_args": [], - "yosys_tcl_env": { - "TOP": "${top}", - "OUT_JSON": "${:json}", - "TECHMAP_PATH": "${shareDir}/techmaps/qlf_k4n8", - "OUT_SYNTH_V": "${:synth_v}", - "OUT_EBLIF": "${:eblif}", - "PYTHON3": "${python3}" - } - } - }, - - "pack": { - "module": "common:pack" - }, - - "ioplace": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "ioplace", - "interpreter": "${python3}", - "script": "${binDir}/python/ql_qlf_create_ioplace.py", - "outputs": { - "io_place": { - "mode": "stdout", - "target": "${:eblif[noext]}.ioplace" - } - }, - "inputs": { - "blif": "${:eblif}", - "net": "${:net}", - "pcf": "${:pcf}", - "pinmap_xml": "${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_fast_qlf_k4n8-qlf_k4n8_umc22_fast/pinmap_qlf_k4n8_umc22.xml", - "csv_file": "${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_fast_qlf_k4n8-qlf_k4n8_umc22_fast/pinmap_qlf_k4n8_umc22.csv", - "$PYTHONPATH": "${binDir}/python/" - } - } - }, - - "repack": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "repack", - "interpreter": "${python3}", - "script": "${binDir}/python/repacker/repack.py", - "outputs": { - "eblif_repacked": { - "mode": "file", - "file": "${:eblif[noext]}_repacked.eblif", - "target": "${:eblif[noext]}_repacked.eblif" - }, - "place_repacked": { - "mode": "file", - "file": "${:place[noext]}_repacked.place", - "target": "${:place[noext]}_repacked.place" - }, - "net_repacked": { - "mode": "file", - "file": "${:net[noext]}_repacked.net", - "target": "${:net[noext]}_repacked.net" - }, - "repack_log": { - "mode": "stdout", - "target": "${top}.repack.log" - } - }, - "inputs": { - "eblif-in": "${:eblif}", - "net-in": "${:net}", - "place-in": "${:place}", - "eblif-out": "${:eblif[noext]}_repacked.eblif", - "place-out": "${:place[noext]}_repacked.place", - "net-out": "${:net[noext]}_repacked.net", - "absorb_buffer_luts": "on", - "vpr-arch": "${arch_def}", - "repacking-rules": "${repacking_rules}", - "json-constraints": "${json_constraints?}", - "pcf-constraints": "${pcf?}", - "$PYTHONPATH": "${binDir}/python/" - } - }, - "values": { - "repacking_rules": "${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_fast_qlf_k4n8-qlf_k4n8_umc22_fast/qlf_k4n8-qlf_k4n8_umc22_fast.repacking_rules.json" - } - }, - - "place": { - "module": "common:place" - }, - - "route": { - "module": "common:io_rename", - "params": { - "module": "common:route", - "rename_takes": { - "eblif": "eblif_repacked", - "place": "place_repacked", - "net": "net_repacked" - } - } - }, - - "fasm": { - "module": "common:io_rename", - "params": { - "module": "common:fasm", - "rename_takes": { - "eblif": "eblif_repacked", - "place": "place_repacked", - "net": "net_repacked" - } - } - }, - - "bitstream": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "bitstream", - "script": "qlf_fasm", - "outputs": { - "bitstream": { - "mode": "file", - "file": "${:fasm[noext]}.bit", - "target": "${:fasm[noext]}.bit" - } - }, - "inputs": { - "#1": "${:fasm}", - "#2": "${:fasm[noext]}.bit", - "db-root": "${shareDir}/fasm_database/qlf_k4n8", - "format": "4byte", - "assemble": true - } - } - } - } -} \ No newline at end of file diff --git a/f4pga/platforms/ql-k4n8_slow.json b/f4pga/platforms/ql-k4n8_slow.json deleted file mode 100644 index aac581c..0000000 --- a/f4pga/platforms/ql-k4n8_slow.json +++ /dev/null @@ -1,175 +0,0 @@ -{ - "values": { - "device": "qlf_k4n8_umc22", - "rr_graph_lookahead_bin": "${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_slow_qlf_k4n8-qlf_k4n8_umc22_slow/rr_graph_qlf_k4n8-qlf_k4n8_umc22_slow_qlf_k4n8-qlf_k4n8_umc22_slow.lookahead.bin", - "rr_graph_real_bin": "${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_slow_qlf_k4n8-qlf_k4n8_umc22_slow/qlf_k4n8-qlf_k4n8_umc22_slow.rr_graph.bin", - "vpr_place_delay": "${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_slow_qlf_k4n8-qlf_k4n8_umc22_slow/rr_graph_qlf_k4n8-qlf_k4n8_umc22_slow_qlf_k4n8-qlf_k4n8_umc22_slow.place_delay.bin", - "vpr_grid_layout_name": "qlf_k4n8-qlf_k4n8_umc22_slow", - "arch_def": "${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_slow_qlf_k4n8-qlf_k4n8_umc22_slow/arch_qlf_k4n8-qlf_k4n8_umc22_slow_qlf_k4n8-qlf_k4n8_umc22_slow.xml", - "vpr_options": { - "max_router_iterations": 500, - "routing_failure_predictor": "off", - "router_high_fanout_threshold": -1, - "constant_net_method": "route", - "route_chan_width": 100, - "clock_modeling": "ideal", - "place_delta_delay_matrix_calculation_method": "dijkstra", - "place_delay_model": "delta_override", - "router_lookahead": "extended_map", - "allow_dangling_combinational_nodes": "on", - "absorb_buffer_luts": "off" - } - }, - - "stages": { - "mk_build_dir": { - "module": "common:mkdirs", - "params": { - "build_dir": "build/${device}" - } - }, - - "synth": { - "common": "synth", - "params": { - "produces": [ "synth_v" ] - }, - "values": { - "tcl_scripts": "${shareDir}/scripts/qlf_k4n8", - "read_verilog_args": [], - "yosys_tcl_env": { - "TOP": "${top}", - "OUT_JSON": "${:json}", - "TECHMAP_PATH": "${shareDir}/techmaps/qlf_k4n8", - "OUT_SYNTH_V": "${:synth_v}", - "OUT_EBLIF": "${:eblif}", - "PYTHON3": "${python3}" - } - } - }, - - "pack": { - "module": "common:pack" - }, - - "ioplace": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "ioplace", - "interpreter": "${python3}", - "script": "${binDir}/python/ql_qlf_create_ioplace.py", - "outputs": { - "io_place": { - "mode": "stdout", - "target": "${:eblif[noext]}.ioplace" - } - }, - "inputs": { - "blif": "${:eblif}", - "net": "${:net}", - "pcf": "${:pcf}", - "pinmap_xml": "${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_slow_qlf_k4n8-qlf_k4n8_umc22_slow/pinmap_qlf_k4n8_umc22.xml", - "csv_file": "${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_slow_qlf_k4n8-qlf_k4n8_umc22_slow/pinmap_qlf_k4n8_umc22.csv", - "$PYTHONPATH": "${binDir}/python/" - } - } - }, - - "repack": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "repack", - "interpreter": "${python3}", - "script": "${binDir}/python/repacker/repack.py", - "outputs": { - "eblif_repacked": { - "mode": "file", - "file": "${:eblif[noext]}_repacked.eblif", - "target": "${:eblif[noext]}_repacked.eblif" - }, - "place_repacked": { - "mode": "file", - "file": "${:place[noext]}_repacked.place", - "target": "${:place[noext]}_repacked.place" - }, - "net_repacked": { - "mode": "file", - "file": "${:net[noext]}_repacked.net", - "target": "${:net[noext]}_repacked.net" - }, - "repack_log": { - "mode": "stdout", - "target": "${top}.repack.log" - } - }, - "inputs": { - "eblif-in": "${:eblif}", - "net-in": "${:net}", - "place-in": "${:place}", - "eblif-out": "${:eblif[noext]}_repacked.eblif", - "place-out": "${:place[noext]}_repacked.place", - "net-out": "${:net[noext]}_repacked.net", - "absorb_buffer_luts": "on", - "vpr-arch": "${arch_def}", - "repacking-rules": "${repacking_rules}", - "json-constraints": "${json_constraints?}", - "pcf-constraints": "${pcf?}", - "$PYTHONPATH": "${binDir}/python/" - } - }, - "values": { - "repacking_rules": "${shareDir}/arch/qlf_k4n8-qlf_k4n8_umc22_slow_qlf_k4n8-qlf_k4n8_umc22_slow/qlf_k4n8-qlf_k4n8_umc22_slow.repacking_rules.json" - } - }, - - "place": { - "module": "common:place" - }, - - "route": { - "module": "common:io_rename", - "params": { - "module": "common:route", - "rename_takes": { - "eblif": "eblif_repacked", - "place": "place_repacked", - "net": "net_repacked" - } - } - }, - - "fasm": { - "module": "common:io_rename", - "params": { - "module": "common:fasm", - "rename_takes": { - "eblif": "eblif_repacked", - "place": "place_repacked", - "net": "net_repacked" - } - } - }, - - "bitstream": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "bitstream", - "script": "qlf_fasm", - "outputs": { - "bitstream": { - "mode": "file", - "file": "${:fasm[noext]}.bit", - "target": "${:fasm[noext]}.bit" - } - }, - "inputs": { - "#1": "${:fasm}", - "#2": "${:fasm[noext]}.bit", - "db-root": "${shareDir}/fasm_database/qlf_k4n8", - "format": "4byte", - "assemble": true - } - } - } - } -} \ No newline at end of file diff --git a/f4pga/platforms/xc7a100t.json b/f4pga/platforms/xc7a100t.json deleted file mode 100644 index 9e95841..0000000 --- a/f4pga/platforms/xc7a100t.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "values": { - "device": "xc7a100t_test", - "bitstream_device": "artix7", - "pinmap": "${shareDir}/arch/xc7a100t_test/vpr_grid_map.csv", - "arch_def": "${shareDir}/arch/xc7a100t_test/arch.timing.xml", - "rr_graph_lookahead_bin": "${shareDir}/arch/xc7a100t_test/rr_graph_xc7a100t_test.lookahead.bin", - "rr_graph_real_bin": "${shareDir}/arch/xc7a100t_test/rr_graph_xc7a100t_test.rr_graph.real.bin", - "vpr_place_delay": "${shareDir}/arch/xc7a100t_test/rr_graph_xc7a100t_test.place_delay.bin", - "vpr_grid_layout_name": "xc7a100t-test", - "vpr_options": { - "max_router_iterations": 500, - "routing_failure_predictor": "off", - "router_high_fanout_threshold": -1, - "constant_net_method": "route", - "route_chan_width": 500, - "router_heap": "bucket", - "clock_modeling": "route", - "place_delta_delay_matrix_calculation_method": "dijkstra", - "place_delay_model": "delta", - "router_lookahead": "extended_map", - "check_route": "quick", - "strict_checks": "off", - "allow_dangling_combinational_nodes": "on", - "disable_errors": "check_unbuffered_edges:check_route", - "congested_routing_iteration_threshold": "0.8", - "incremental_reroute_delay_ripup": "off", - "base_cost_type": "delay_normalized_length_bounded", - "bb_factor": 10, - "acc_fac": "0.7", - "astar_fac": "1.8", - "initial_pres_fac": "2.828", - "pres_fac_mult": "1.2", - "check_rr_graph": "off", - "suppress_warnings": "${noisyWarnings},sum_pin_class:check_unbuffered_edges:load_rr_indexed_data_T_values:check_rr_node:trans_per_R:check_route:set_rr_graph_tool_comment:calculate_average_switch" - } - }, - - "stages": { - "mk_build_dir": { - "module": "common:mkdirs", - "params": { - "build_dir": "build/${device}" - } - }, - - "synth": { - "module": "common:synth", - "params": { - "takes": [ "xdc?" ], - "produces": [ - "sdc", - "synth_v" - ], - "prod_meta": { - "sdc": "Standard Design Constraints file for X7 series." - } - }, - "values": { - "tcl_scripts": "${shareDir}/scripts/xc7", - "yosys_tcl_env": { - "USE_ROI": "FALSE", - "TOP": "${top}", - "OUT_JSON": "${:json}", - "OUT_SDC": "${:sdc}", - "PART_JSON": "${prjxray_db}/${bitstream_device}/${part_name}/part.json", - "OUT_FASM_EXTRA": "${:fasm_extra}", - "TECHMAP_PATH": "${shareDir}/techmaps/xc7_vpr/techmap", - "OUT_SYNTH_V": "${:synth_v}", - "SYNTH_JSON": "${:synth_json}", - "OUT_EBLIF": "${:eblif}", - "PYTHON3": "${python3}", - "UTILS_PATH": "${shareDir}/scripts", - "INPUT_XDC_FILES": "${:xdc}" - } - } - }, - - "pack": { - "module": "common:pack" - }, - - "ioplace": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "ioplace", - "interpreter": "${python3}", - "script": "${shareDir}/scripts/prjxray_create_ioplace.py", - "outputs": { - "io_place": { - "mode": "stdout", - "target": "${:net[noext]}.ioplace" - } - }, - "inputs": { - "blif": "${:eblif}", - "map": "${shareDir}/arch/${device}/${part_name}/pinmap.csv", - "net": "${:net}", - "pcf": "${:pcf?}", - "$PYTHONPATH": "${binDir}/python/" - } - } - }, - - "place_constraints": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "place_constraints", - "interpreter": "${python3}", - "script": "${shareDir}/scripts/prjxray_create_place_constraints.py", - "outputs": { - "place_constraints": { - "mode": "stdout", - "target": "${:net[noext]}.preplace" - } - }, - "inputs": { - "net": "${:net}", - "arch": "${shareDir}/arch/${device}/arch.timing.xml", - "blif": "${:eblif}", - "input": "${:io_place}", - "db_root": "${prjxray_db}", - "part": "${part_name}", - "vpr_grid_map": "${shareDir}/arch/${device}/vpr_grid_map.csv", - "$PYTHONPATH": "${binDir}/python/" - } - } - }, - - "place": { - "module": "common:place" - }, - - "route": { - "module": "common:route" - }, - - "fasm": { - "module": "common:fasm" - }, - - "bitstream": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "bitstream", - "script": "xcfasm", - "outputs": { - "bitstream": { - "mode": "file", - "file": "${:fasm[noext]}.bit", - "target": "${:fasm[noext]}.bit" - } - }, - "inputs": { - "db-root": "${prjxray_db}/${bitstream_device}", - "part": "${part_name}", - "part_file": "${prjxray_db}/${bitstream_device}/${part_name}/part.yaml", - "sparse": true, - "emit_pudc_b_pullup": true, - "fn_in": "${:fasm}", - "frm2bit": "xc7frames2bit", - "bit_out": "${:fasm[noext]}.bit" - } - } - } - } -} \ No newline at end of file diff --git a/f4pga/platforms/xc7a200t.json b/f4pga/platforms/xc7a200t.json deleted file mode 100644 index fcf3d63..0000000 --- a/f4pga/platforms/xc7a200t.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "values": { - "device": "xc7a200t_test", - "bitstream_device": "artix7", - "pinmap": "${shareDir}/arch/xc7a200t_test/vpr_grid_map.csv", - "arch_def": "${shareDir}/arch/xc7a200t_test/arch.timing.xml", - "rr_graph_lookahead_bin": "${shareDir}/arch/xc7a200t_test/rr_graph_xc7a200t_test.lookahead.bin", - "rr_graph_real_bin": "${shareDir}/arch/xc7a200t_test/rr_graph_xc7a200t_test.rr_graph.real.bin", - "vpr_place_delay": "${shareDir}/arch/xc7a200t_test/rr_graph_xc7a200t_test.place_delay.bin", - "vpr_grid_layout_name": "xc7a200t-test", - "vpr_options": { - "max_router_iterations": 500, - "routing_failure_predictor": "off", - "router_high_fanout_threshold": -1, - "constant_net_method": "route", - "route_chan_width": 500, - "router_heap": "bucket", - "clock_modeling": "route", - "place_delta_delay_matrix_calculation_method": "dijkstra", - "place_delay_model": "delta", - "router_lookahead": "extended_map", - "check_route": "quick", - "strict_checks": "off", - "allow_dangling_combinational_nodes": "on", - "disable_errors": "check_unbuffered_edges:check_route", - "congested_routing_iteration_threshold": "0.8", - "incremental_reroute_delay_ripup": "off", - "base_cost_type": "delay_normalized_length_bounded", - "bb_factor": 10, - "acc_fac": "0.7", - "astar_fac": "1.8", - "initial_pres_fac": "2.828", - "pres_fac_mult": "1.2", - "check_rr_graph": "off", - "suppress_warnings": "${noisyWarnings},sum_pin_class:check_unbuffered_edges:load_rr_indexed_data_T_values:check_rr_node:trans_per_R:check_route:set_rr_graph_tool_comment:calculate_average_switch" - } - }, - - "stages": { - "mk_build_dir": { - "module": "common:mkdirs", - "params": { - "build_dir": "build/${device}" - } - }, - - "synth": { - "module": "common:synth", - "params": { - "takes": [ "xdc?" ], - "produces": [ - "sdc", - "synth_v" - ], - "prod_meta": { - "sdc": "Standard Design Constraints file for X7 series." - } - }, - "values": { - "tcl_scripts": "${shareDir}/scripts/xc7", - "yosys_tcl_env": { - "USE_ROI": "FALSE", - "TOP": "${top}", - "OUT_JSON": "${:json}", - "OUT_SDC": "${:sdc}", - "PART_JSON": "${prjxray_db}/${bitstream_device}/${part_name}/part.json", - "OUT_FASM_EXTRA": "${:fasm_extra}", - "TECHMAP_PATH": "${shareDir}/techmaps/xc7_vpr/techmap", - "OUT_SYNTH_V": "${:synth_v}", - "SYNTH_JSON": "${:synth_json}", - "OUT_EBLIF": "${:eblif}", - "PYTHON3": "${python3}", - "UTILS_PATH": "${shareDir}/scripts", - "INPUT_XDC_FILES": "${:xdc}" - } - } - }, - - "pack": { - "module": "common:pack" - }, - - "ioplace": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "ioplace", - "interpreter": "${python3}", - "script": "${shareDir}/scripts/prjxray_create_ioplace.py", - "outputs": { - "io_place": { - "mode": "stdout", - "target": "${:net[noext]}.ioplace" - } - }, - "inputs": { - "blif": "${:eblif}", - "map": "${shareDir}/arch/${device}/${part_name}/pinmap.csv", - "net": "${:net}", - "pcf": "${:pcf?}", - "$PYTHONPATH": "${binDir}/python/" - } - } - }, - - "place_constraints": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "place_constraints", - "interpreter": "${python3}", - "script": "${shareDir}/scripts/prjxray_create_place_constraints.py", - "outputs": { - "place_constraints": { - "mode": "stdout", - "target": "${:net[noext]}.preplace" - } - }, - "inputs": { - "net": "${:net}", - "arch": "${shareDir}/arch/${device}/arch.timing.xml", - "blif": "${:eblif}", - "input": "${:io_place}", - "db_root": "${prjxray_db}", - "part": "${part_name}", - "vpr_grid_map": "${shareDir}/arch/${device}/vpr_grid_map.csv", - "$PYTHONPATH": "${binDir}/python/" - } - } - }, - - "place": { - "module": "common:place" - }, - - "route": { - "module": "common:route" - }, - - "fasm": { - "module": "common:fasm" - }, - - "bitstream": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "bitstream", - "script": "xcfasm", - "outputs": { - "bitstream": { - "mode": "file", - "file": "${:fasm[noext]}.bit", - "target": "${:fasm[noext]}.bit" - } - }, - "inputs": { - "db-root": "${prjxray_db}/${bitstream_device}", - "part": "${part_name}", - "part_file": "${prjxray_db}/${bitstream_device}/${part_name}/part.yaml", - "sparse": true, - "emit_pudc_b_pullup": true, - "fn_in": "${:fasm}", - "frm2bit": "xc7frames2bit", - "bit_out": "${:fasm[noext]}.bit" - } - } - } - } -} \ No newline at end of file diff --git a/f4pga/platforms/xc7a50t.json b/f4pga/platforms/xc7a50t.json deleted file mode 100644 index ba7bb01..0000000 --- a/f4pga/platforms/xc7a50t.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "values": { - "device": "xc7a50t_test", - "bitstream_device": "artix7", - "pinmap": "${shareDir}/arch/xc7a50t_test/vpr_grid_map.csv", - "arch_def": "${shareDir}/arch/xc7a50t_test/arch.timing.xml", - "rr_graph_lookahead_bin": "${shareDir}/arch/xc7a50t_test/rr_graph_xc7a50t_test.lookahead.bin", - "rr_graph_real_bin": "${shareDir}/arch/xc7a50t_test/rr_graph_xc7a50t_test.rr_graph.real.bin", - "vpr_place_delay": "${shareDir}/arch/xc7a50t_test/rr_graph_xc7a50t_test.place_delay.bin", - "vpr_grid_layout_name": "xc7a50t-test", - "vpr_options": { - "max_router_iterations": 500, - "routing_failure_predictor": "off", - "router_high_fanout_threshold": -1, - "constant_net_method": "route", - "route_chan_width": 500, - "router_heap": "bucket", - "clock_modeling": "route", - "place_delta_delay_matrix_calculation_method": "dijkstra", - "place_delay_model": "delta", - "router_lookahead": "extended_map", - "check_route": "quick", - "strict_checks": "off", - "allow_dangling_combinational_nodes": "on", - "disable_errors": "check_unbuffered_edges:check_route", - "congested_routing_iteration_threshold": "0.8", - "incremental_reroute_delay_ripup": "off", - "base_cost_type": "delay_normalized_length_bounded", - "bb_factor": 10, - "acc_fac": "0.7", - "astar_fac": "1.8", - "initial_pres_fac": "2.828", - "pres_fac_mult": "1.2", - "check_rr_graph": "off", - "suppress_warnings": "${noisyWarnings},sum_pin_class:check_unbuffered_edges:load_rr_indexed_data_T_values:check_rr_node:trans_per_R:check_route:set_rr_graph_tool_comment:calculate_average_switch" - } - }, - - "stages": { - "mk_build_dir": { - "module": "common:mkdirs", - "params": { - "build_dir": "build/${device}" - } - }, - - "synth": { - "module": "common:synth", - "params": { - "takes": [ "xdc?" ], - "produces": [ - "sdc", - "synth_v" - ], - "prod_meta": { - "sdc": "Standard Design Constraints file for X7 series." - } - }, - "values": { - "tcl_scripts": "${shareDir}/scripts/xc7", - "yosys_tcl_env": { - "USE_ROI": "FALSE", - "TOP": "${top}", - "OUT_JSON": "${:json}", - "OUT_SDC": "${:sdc}", - "PART_JSON": "${prjxray_db}/${bitstream_device}/${part_name}/part.json", - "OUT_FASM_EXTRA": "${:fasm_extra}", - "TECHMAP_PATH": "${shareDir}/techmaps/xc7_vpr/techmap", - "OUT_SYNTH_V": "${:synth_v}", - "SYNTH_JSON": "${:synth_json}", - "OUT_EBLIF": "${:eblif}", - "PYTHON3": "${python3}", - "UTILS_PATH": "${shareDir}/scripts", - "INPUT_XDC_FILES": "${:xdc}" - } - } - }, - - "pack": { - "module": "common:pack" - }, - - "ioplace": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "ioplace", - "interpreter": "${python3}", - "script": "${shareDir}/scripts/prjxray_create_ioplace.py", - "outputs": { - "io_place": { - "mode": "stdout", - "target": "${:net[noext]}.ioplace" - } - }, - "inputs": { - "blif": "${:eblif}", - "map": "${shareDir}/arch/${device}/${part_name}/pinmap.csv", - "net": "${:net}", - "pcf": "${:pcf?}", - "$PYTHONPATH": "${binDir}/python/" - } - } - }, - - "place_constraints": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "place_constraints", - "interpreter": "${python3}", - "script": "${shareDir}/scripts/prjxray_create_place_constraints.py", - "outputs": { - "place_constraints": { - "mode": "stdout", - "target": "${:net[noext]}.preplace" - } - }, - "inputs": { - "net": "${:net}", - "arch": "${shareDir}/arch/${device}/arch.timing.xml", - "blif": "${:eblif}", - "input": "${:io_place}", - "db_root": "${prjxray_db}", - "part": "${part_name}", - "vpr_grid_map": "${shareDir}/arch/${device}/vpr_grid_map.csv", - "$PYTHONPATH": "${binDir}/python/" - } - } - }, - - "place": { - "module": "common:place" - }, - - "route": { - "module": "common:route" - }, - - "fasm": { - "module": "common:fasm" - }, - - "bitstream": { - "module": "common:generic_script_wrapper", - "params": { - "stage_name": "bitstream", - "script": "xcfasm", - "outputs": { - "bitstream": { - "mode": "file", - "file": "${:fasm[noext]}.bit", - "target": "${:fasm[noext]}.bit" - } - }, - "inputs": { - "db-root": "${prjxray_db}/${bitstream_device}", - "part": "${part_name}", - "part_file": "${prjxray_db}/${bitstream_device}/${part_name}/part.yaml", - "sparse": true, - "emit_pudc_b_pullup": true, - "fn_in": "${:fasm}", - "frm2bit": "xc7frames2bit", - "bit_out": "${:fasm[noext]}.bit" - } - } - } - } -} \ No newline at end of file diff --git a/f4pga/requirements.txt b/f4pga/requirements.txt index 3fcfb51..552c616 100644 --- a/f4pga/requirements.txt +++ b/f4pga/requirements.txt @@ -1 +1,2 @@ colorama +pyyaml diff --git a/f4pga/setup.py b/f4pga/setup.py index 99dd82c..0b1e9c8 100644 --- a/f4pga/setup.py +++ b/f4pga/setup.py @@ -88,8 +88,7 @@ setuptools_setup( package_dir={"f4pga": "."}, package_data={ 'f4pga': [ - '*.json', - 'platforms/*.json' + '*.yml', ], 'f4pga.wrappers.sh': [ 'xc7/*.f4pga.sh',