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