From 86f281349f702cf4d9739e661c1d4c0986e2f0f1 Mon Sep 17 00:00:00 2001 From: Unai Martinez-Corral Date: Mon, 15 Aug 2022 03:31:39 +0200 Subject: [PATCH 1/5] f4pga: cleanup Signed-off-by: Unai Martinez-Corral --- f4pga/__init__.py | 90 ++++++++++++++++++++++++++++++----------------- 1 file changed, 58 insertions(+), 32 deletions(-) diff --git a/f4pga/__init__.py b/f4pga/__init__.py index fa63294..6662a2f 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 json import load as json_load 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: + with (ROOT / 'part_db.json').open('r') as rfptr: for key, val in json_load(rfptr).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,20 @@ 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 _: + platform_path = ROOT / f'platforms/{platform}.json' + if not platform_path.exists(): raise F4PGAException( message=f'The platform flow definition file {platform_path} for the platform ' \ f'{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) + with platform_path.open('r') as rfptr: + flow_cfg = FlowConfig( + project_flow_cfg, + FlowDefinition(json_load(rfptr), r_env), + part_name + ) if len(flow_cfg.stages) == 0: raise F4PGAException(message = 'Platform flow does not define any stage') @@ -638,11 +661,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 +686,7 @@ def cmd_build(args: Namespace): sfprint(dep_print_verbosity, '') if args.pretend: - sfbuild_done() + f4pga_done() try: flow.execute() @@ -671,18 +694,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 +735,7 @@ def cmd_show_dependencies(args: Namespace): set_verbosity_level(-1) + def main(): parser = setup_argparser() args = parser.parse_args() @@ -719,14 +744,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() From 17908522711ebb8a8cbe34e530101fdaf9eae4f0 Mon Sep 17 00:00:00 2001 From: Unai Martinez-Corral Date: Mon, 15 Aug 2022 03:42:56 +0200 Subject: [PATCH 2/5] f4pga: convert part_db from JSON to YAML Signed-off-by: Unai Martinez-Corral --- f4pga/__init__.py | 5 +++-- f4pga/part_db.json | 34 ------------------------------ f4pga/part_db.yml | 47 ++++++++++++++++++++++++++++++++++++++++++ f4pga/requirements.txt | 1 + f4pga/setup.py | 2 +- 5 files changed, 52 insertions(+), 37 deletions(-) delete mode 100644 f4pga/part_db.json create mode 100644 f4pga/part_db.yml diff --git a/f4pga/__init__.py b/f4pga/__init__.py index 6662a2f..37d85f6 100755 --- a/f4pga/__init__.py +++ b/f4pga/__init__.py @@ -41,6 +41,7 @@ from pathlib import Path from argparse import Namespace from sys import argv as sys_argv from os import environ +from yaml import load as yaml_load, Loader as yaml_loader from json import load as json_load from typing import Iterable from colorama import Fore, Style @@ -593,8 +594,8 @@ def get_platform_name_for_part(part_name: str): The reason for such distinction is that plenty of chips with different names differ only in a type of package they use. """ - with (ROOT / '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}>!") 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/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..baf6641 100644 --- a/f4pga/setup.py +++ b/f4pga/setup.py @@ -88,7 +88,7 @@ setuptools_setup( package_dir={"f4pga": "."}, package_data={ 'f4pga': [ - '*.json', + '*.yml', 'platforms/*.json' ], 'f4pga.wrappers.sh': [ From 6c6bb68841e269b463d3a89ad51e7e2bd3a6279c Mon Sep 17 00:00:00 2001 From: Unai Martinez-Corral Date: Mon, 15 Aug 2022 03:53:15 +0200 Subject: [PATCH 3/5] f4pga: convert platforms from JSON to YAML Signed-off-by: Unai Martinez-Corral --- f4pga/__init__.py | 5 +- f4pga/platforms/ql-eos-s3.json | 491 ------------------------------ f4pga/platforms/ql-eos-s3.yml | 408 +++++++++++++++++++++++++ f4pga/platforms/ql-k4n8_fast.json | 175 ----------- f4pga/platforms/ql-k4n8_fast.yml | 152 +++++++++ f4pga/platforms/ql-k4n8_slow.json | 175 ----------- f4pga/platforms/ql-k4n8_slow.yml | 152 +++++++++ f4pga/platforms/xc7a100t.json | 167 ---------- f4pga/platforms/xc7a100t.yml | 144 +++++++++ f4pga/platforms/xc7a200t.json | 167 ---------- f4pga/platforms/xc7a200t.yml | 144 +++++++++ f4pga/platforms/xc7a50t.json | 167 ---------- f4pga/platforms/xc7a50t.yml | 144 +++++++++ f4pga/setup.py | 2 +- 14 files changed, 1147 insertions(+), 1346 deletions(-) delete mode 100644 f4pga/platforms/ql-eos-s3.json create mode 100644 f4pga/platforms/ql-eos-s3.yml delete mode 100644 f4pga/platforms/ql-k4n8_fast.json create mode 100644 f4pga/platforms/ql-k4n8_fast.yml delete mode 100644 f4pga/platforms/ql-k4n8_slow.json create mode 100644 f4pga/platforms/ql-k4n8_slow.yml delete mode 100644 f4pga/platforms/xc7a100t.json create mode 100644 f4pga/platforms/xc7a100t.yml delete mode 100644 f4pga/platforms/xc7a200t.json create mode 100644 f4pga/platforms/xc7a200t.yml delete mode 100644 f4pga/platforms/xc7a50t.json create mode 100644 f4pga/platforms/xc7a50t.yml diff --git a/f4pga/__init__.py b/f4pga/__init__.py index 37d85f6..6e90202 100755 --- a/f4pga/__init__.py +++ b/f4pga/__init__.py @@ -42,7 +42,6 @@ from argparse import Namespace from sys import argv as sys_argv from os import environ from yaml import load as yaml_load, Loader as yaml_loader -from json import load as json_load from typing import Iterable from colorama import Fore, Style @@ -620,7 +619,7 @@ def make_flow_config(project_flow_cfg: ProjectFlowConfig, part_name: str) -> Flo scan_modules(str(ROOT)) - platform_path = ROOT / f'platforms/{platform}.json' + platform_path = ROOT / f'platforms/{platform}.yml' if not platform_path.exists(): raise F4PGAException( message=f'The platform flow definition file {platform_path} for the platform ' \ @@ -629,7 +628,7 @@ def make_flow_config(project_flow_cfg: ProjectFlowConfig, part_name: str) -> Flo with platform_path.open('r') as rfptr: flow_cfg = FlowConfig( project_flow_cfg, - FlowDefinition(json_load(rfptr), r_env), + FlowDefinition(yaml_load(rfptr, yaml_loader), r_env), part_name ) 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-eos-s3.yml b/f4pga/platforms/ql-eos-s3.yml new file mode 100644 index 0000000..39d9c2c --- /dev/null +++ b/f4pga/platforms/ql-eos-s3.yml @@ -0,0 +1,408 @@ +# 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 + +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_fast.yml b/f4pga/platforms/ql-k4n8_fast.yml new file mode 100644 index 0000000..4c0eea4 --- /dev/null +++ b/f4pga/platforms/ql-k4n8_fast.yml @@ -0,0 +1,152 @@ +# 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 + +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 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/ql-k4n8_slow.yml b/f4pga/platforms/ql-k4n8_slow.yml new file mode 100644 index 0000000..9c77583 --- /dev/null +++ b/f4pga/platforms/ql-k4n8_slow.yml @@ -0,0 +1,152 @@ +# 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 + +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 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/xc7a100t.yml b/f4pga/platforms/xc7a100t.yml new file mode 100644 index 0000000..72a4648 --- /dev/null +++ b/f4pga/platforms/xc7a100t.yml @@ -0,0 +1,144 @@ +# 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 + +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' 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/xc7a200t.yml b/f4pga/platforms/xc7a200t.yml new file mode 100644 index 0000000..94d3292 --- /dev/null +++ b/f4pga/platforms/xc7a200t.yml @@ -0,0 +1,144 @@ +# 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 + +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' 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/platforms/xc7a50t.yml b/f4pga/platforms/xc7a50t.yml new file mode 100644 index 0000000..4f021cb --- /dev/null +++ b/f4pga/platforms/xc7a50t.yml @@ -0,0 +1,144 @@ +# 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 + +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' diff --git a/f4pga/setup.py b/f4pga/setup.py index baf6641..8af115b 100644 --- a/f4pga/setup.py +++ b/f4pga/setup.py @@ -89,7 +89,7 @@ setuptools_setup( package_data={ 'f4pga': [ '*.yml', - 'platforms/*.json' + 'platforms/*.yml' ], 'f4pga.wrappers.sh': [ 'xc7/*.f4pga.sh', From 125245ab088db02d654f3ebcda04c3b9ef6cdb88 Mon Sep 17 00:00:00 2001 From: Unai Martinez-Corral Date: Mon, 15 Aug 2022 04:10:57 +0200 Subject: [PATCH 4/5] f4pga: merge platform flow definitions into a single file Signed-off-by: Unai Martinez-Corral --- f4pga/__init__.py | 22 +- f4pga/platforms.yml | 1093 ++++++++++++++++++++++++++++++ f4pga/platforms/ql-eos-s3.yml | 408 ----------- f4pga/platforms/ql-k4n8_fast.yml | 152 ----- f4pga/platforms/ql-k4n8_slow.yml | 152 ----- f4pga/platforms/xc7a100t.yml | 144 ---- f4pga/platforms/xc7a200t.yml | 144 ---- f4pga/platforms/xc7a50t.yml | 144 ---- f4pga/setup.py | 1 - 9 files changed, 1103 insertions(+), 1157 deletions(-) create mode 100644 f4pga/platforms.yml delete mode 100644 f4pga/platforms/ql-eos-s3.yml delete mode 100644 f4pga/platforms/ql-k4n8_fast.yml delete mode 100644 f4pga/platforms/ql-k4n8_slow.yml delete mode 100644 f4pga/platforms/xc7a100t.yml delete mode 100644 f4pga/platforms/xc7a200t.yml delete mode 100644 f4pga/platforms/xc7a50t.yml diff --git a/f4pga/__init__.py b/f4pga/__init__.py index 6e90202..cc217e7 100755 --- a/f4pga/__init__.py +++ b/f4pga/__init__.py @@ -619,18 +619,16 @@ def make_flow_config(project_flow_cfg: ProjectFlowConfig, part_name: str) -> Flo scan_modules(str(ROOT)) - platform_path = ROOT / f'platforms/{platform}.yml' - if not platform_path.exists(): - raise F4PGAException( - message=f'The platform flow definition file {platform_path} for the platform ' \ - f'{platform} cannot be found.' - ) - with platform_path.open('r') as rfptr: - flow_cfg = FlowConfig( - project_flow_cfg, - FlowDefinition(yaml_load(rfptr, yaml_loader), r_env), - part_name - ) + 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_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') diff --git a/f4pga/platforms.yml b/f4pga/platforms.yml new file mode 100644 index 0000000..4a21494 --- /dev/null +++ b/f4pga/platforms.yml @@ -0,0 +1,1093 @@ +# 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: + + 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' + + +xc7a100t: + + 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' + + +xc7a200t: + + 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' + + +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: + + 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 + + +ql-k4n8_slow: + + 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: + 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_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 diff --git a/f4pga/platforms/ql-eos-s3.yml b/f4pga/platforms/ql-eos-s3.yml deleted file mode 100644 index 39d9c2c..0000000 --- a/f4pga/platforms/ql-eos-s3.yml +++ /dev/null @@ -1,408 +0,0 @@ -# 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 - -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.yml b/f4pga/platforms/ql-k4n8_fast.yml deleted file mode 100644 index 4c0eea4..0000000 --- a/f4pga/platforms/ql-k4n8_fast.yml +++ /dev/null @@ -1,152 +0,0 @@ -# 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 - -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 diff --git a/f4pga/platforms/ql-k4n8_slow.yml b/f4pga/platforms/ql-k4n8_slow.yml deleted file mode 100644 index 9c77583..0000000 --- a/f4pga/platforms/ql-k4n8_slow.yml +++ /dev/null @@ -1,152 +0,0 @@ -# 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 - -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 diff --git a/f4pga/platforms/xc7a100t.yml b/f4pga/platforms/xc7a100t.yml deleted file mode 100644 index 72a4648..0000000 --- a/f4pga/platforms/xc7a100t.yml +++ /dev/null @@ -1,144 +0,0 @@ -# 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 - -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' diff --git a/f4pga/platforms/xc7a200t.yml b/f4pga/platforms/xc7a200t.yml deleted file mode 100644 index 94d3292..0000000 --- a/f4pga/platforms/xc7a200t.yml +++ /dev/null @@ -1,144 +0,0 @@ -# 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 - -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' diff --git a/f4pga/platforms/xc7a50t.yml b/f4pga/platforms/xc7a50t.yml deleted file mode 100644 index 4f021cb..0000000 --- a/f4pga/platforms/xc7a50t.yml +++ /dev/null @@ -1,144 +0,0 @@ -# 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 - -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' diff --git a/f4pga/setup.py b/f4pga/setup.py index 8af115b..0b1e9c8 100644 --- a/f4pga/setup.py +++ b/f4pga/setup.py @@ -89,7 +89,6 @@ setuptools_setup( package_data={ 'f4pga': [ '*.yml', - 'platforms/*.yml' ], 'f4pga.wrappers.sh': [ 'xc7/*.f4pga.sh', From cbead488ac27e05cfb2c478a272c50b9155ceacf Mon Sep 17 00:00:00 2001 From: Unai Martinez-Corral Date: Mon, 15 Aug 2022 04:21:55 +0200 Subject: [PATCH 5/5] f4pga/platforms: use anchors Signed-off-by: Unai Martinez-Corral --- f4pga/platforms.yml | 364 +++----------------------------------------- 1 file changed, 17 insertions(+), 347 deletions(-) diff --git a/f4pga/platforms.yml b/f4pga/platforms.yml index 4a21494..f44299d 100644 --- a/f4pga/platforms.yml +++ b/f4pga/platforms.yml @@ -15,7 +15,7 @@ # SPDX-License-Identifier: Apache-2.0 -xc7a50t: +xc7a50t: &xc7 values: device: xc7a50t_test @@ -26,7 +26,7 @@ xc7a50t: 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: + vpr_options: &xc7-vpr_options max_router_iterations: 500 routing_failure_predictor: 'off' router_high_fanout_threshold: -1 @@ -150,6 +150,8 @@ xc7a50t: xc7a100t: + <<: *xc7 + values: device: xc7a100t_test bitstream_device: artix7 @@ -159,130 +161,13 @@ xc7a100t: 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' + vpr_options: *xc7-vpr_options xc7a200t: + <<: *xc7 + values: device: xc7a200t_test bitstream_device: artix7 @@ -292,126 +177,7 @@ xc7a200t: 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' + vpr_options: *xc7-vpr_options ql-eos-s3: @@ -811,7 +577,7 @@ ql-eos-s3: $BIN_DIR_PATH: '${binDir}' -ql-k4n8_fast: +ql-k4n8_fast: &ql-k4n8 values: device: qlf_k4n8_umc22 @@ -824,7 +590,7 @@ ql-k4n8_fast: 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: + vpr_options: &ql-k4n8-vpr_options max_router_iterations: 500 routing_failure_predictor: 'off' router_high_fanout_threshold: -1 @@ -837,7 +603,7 @@ ql-k4n8_fast: allow_dangling_combinational_nodes: 'on' absorb_buffer_luts: 'off' - stages: + stages: &ql-k4n8-stages mk_build_dir: module: 'common:mkdirs' params: @@ -878,7 +644,7 @@ ql-k4n8_fast: 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: + repack: &ql-k4n8-stages-repack module: 'common:generic_script_wrapper' params: stage_name: repack @@ -954,6 +720,8 @@ ql-k4n8_fast: ql-k4n8_slow: + <<: *ql-k4n8 + values: device: qlf_k4n8_umc22 rr_graph_lookahead_bin: >- @@ -965,41 +733,10 @@ ql-k4n8_slow: 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' + vpr_options: *ql-k4n8-vpr_options 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' + <<: *ql-k4n8-stages ioplace: module: 'common:generic_script_wrapper' params: @@ -1020,74 +757,7 @@ ql-k4n8_slow: ${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/' + <<: *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 - 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