f4pga: unify stage declarations with stage options (#610)

This commit is contained in:
Unai Martinez-Corral 2022-08-15 05:10:22 +02:00 committed by GitHub
commit eb6b0e5c78
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 177 additions and 103 deletions

View File

@ -82,13 +82,9 @@ class FlowDefinition:
self.r_env.add_values(global_vals)
stages_d = flow_def['stages']
modopts_d = flow_def.get('stage_options')
if modopts_d is None:
modopts_d = {}
for stage_name, modstr in stages_d.items():
opts = modopts_d.get(stage_name)
self.stages[stage_name] = Stage(stage_name, modstr, opts)
for stage_name, stage_def in stages_d.items():
self.stages[stage_name] = Stage(stage_name, stage_def)
def stage_names(self):
return self.stages.keys()

View File

@ -1,26 +1,4 @@
{
"stages": {
"mk_build_dir": "common:mkdirs",
"synth": "common:synth",
"prepare_sdc": "common:generic_script_wrapper",
"pack": "common:pack",
"ioplace": "common:generic_script_wrapper",
"place_constraints": "common:generic_script_wrapper",
"iomux_jlink": "common:generic_script_wrapper",
"iomux_openocd": "common:generic_script_wrapper",
"iomux_binary": "common:generic_script_wrapper",
"place": "common:place",
"route": "common:route",
"analysis": "common:analysis",
"fasm": "common:fasm",
"bitstream": "common:generic_script_wrapper",
"bitstream_bitheader": "common:generic_script_wrapper",
"bitstream_binary": "common:generic_script_wrapper",
"bitstream_jlink": "common:generic_script_wrapper",
"bitstream_openocd": "common:generic_script_wrapper",
"fasm2bels": "common:generic_script_wrapper"
},
"values": {
"device": "ql-eos-s3",
"device_alt": "ql-eos-s3_wlcsp",
@ -54,13 +32,16 @@
}
},
"stage_options": {
"stages": {
"mk_build_dir": {
"module": "common:mkdirs",
"params": {
"build_dir": "build/${device}"
}
},
"synth": {
"module": "common:synth",
"params": {
"takes": [ "pcf?" ],
"produces": [
@ -85,7 +66,9 @@
}
}
},
"prepare_sdc": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "prepare_sdc",
"interpreter": "${python3}",
@ -107,7 +90,9 @@
}
}
},
"pack": {
"module": "common:pack",
"values": {
"device": "ql-eos-s3",
"device_alt": "ql-eos-s3_wlcsp",
@ -142,7 +127,9 @@
}
}
},
"ioplace": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "ioplace",
"interpreter": "${python3}",
@ -162,7 +149,9 @@
}
}
},
"place_constraints": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "place_constraints",
"interpreter": "${python3}",
@ -181,7 +170,13 @@
}
}
},
"place": {
"module": "common:place"
},
"iomux_jlink": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "iomux_jlink",
"interpreter": "${python3}",
@ -201,7 +196,9 @@
}
}
},
"iomux_openocd": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "iomux_openocd",
"interpreter": "${python3}",
@ -221,7 +218,9 @@
}
}
},
"iomux_binary": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "iomux_binary",
"interpreter": "${python3}",
@ -241,7 +240,9 @@
}
}
},
"route": {
"module": "common:route",
"values": {
"device": "ql-eos-s3",
"device_alt": "ql-eos-s3_wlcsp",
@ -276,7 +277,9 @@
}
}
},
"analysis": {
"module": "common:analysis",
"values": {
"device": "ql-eos-s3",
"device_alt": "ql-eos-s3_wlcsp",
@ -315,7 +318,13 @@
}
}
},
"fasm": {
"module": "common:fasm"
},
"bitstream": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "bitstream",
"script": "qlfasm",
@ -340,7 +349,9 @@
"build_dir": "."
}
},
"bitstream_bitheader": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "bitstream_bitheader",
"script": "symbiflow_write_bitheader",
@ -362,7 +373,9 @@
}
}
},
"bitstream_jlink": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "bitstream_jlink",
"script": "symbiflow_write_jlink",
@ -384,7 +397,9 @@
}
}
},
"bitstream_openocd": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "bitstream_openocd",
"script": "symbiflow_write_openocd",
@ -406,7 +421,9 @@
}
}
},
"bitstream_binary": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "bitstream_binary",
"script": "symbiflow_write_binary",
@ -428,7 +445,9 @@
}
}
},
"fasm2bels": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "fasm2bels",
"script": "symbiflow_fasm2bels",

View File

@ -1,16 +1,4 @@
{
"stages": {
"mk_build_dir": "common:mkdirs",
"synth": "common:synth",
"pack": "common:pack",
"ioplace": "common:generic_script_wrapper",
"place": "common:place",
"repack": "common:generic_script_wrapper",
"route": "common:io_rename",
"fasm": "common:io_rename",
"bitstream": "common:generic_script_wrapper"
},
"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",
@ -33,13 +21,16 @@
}
},
"stage_options": {
"stages": {
"mk_build_dir": {
"module": "common:mkdirs",
"params": {
"build_dir": "build/${device}"
}
},
"synth": {
"module": "common:synth",
"params": {
"produces": [ "synth_v" ]
},
@ -56,7 +47,13 @@
}
}
},
"pack": {
"module": "common:pack"
},
"ioplace": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "ioplace",
"interpreter": "${python3}",
@ -77,10 +74,9 @@
}
}
},
"repack": {
"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"
},
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "repack",
"interpreter": "${python3}",
@ -120,9 +116,18 @@
"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": {
@ -132,7 +137,9 @@
}
}
},
"fasm": {
"module": "common:io_rename",
"params": {
"module": "common:fasm",
"rename_takes": {
@ -142,7 +149,9 @@
}
}
},
"bitstream": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "bitstream",
"script": "qlf_fasm",

View File

@ -1,16 +1,4 @@
{
"stages": {
"mk_build_dir": "common:mkdirs",
"synth": "common:synth",
"pack": "common:pack",
"ioplace": "common:generic_script_wrapper",
"place": "common:place",
"repack": "common:generic_script_wrapper",
"route": "common:io_rename",
"fasm": "common:io_rename",
"bitstream": "common:generic_script_wrapper"
},
"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",
@ -33,13 +21,16 @@
}
},
"stage_options": {
"stages": {
"mk_build_dir": {
"module": "common:mkdirs",
"params": {
"build_dir": "build/${device}"
}
},
"synth": {
"common": "synth",
"params": {
"produces": [ "synth_v" ]
},
@ -56,7 +47,13 @@
}
}
},
"pack": {
"module": "common:pack"
},
"ioplace": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "ioplace",
"interpreter": "${python3}",
@ -77,10 +74,9 @@
}
}
},
"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"
},
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "repack",
"interpreter": "${python3}",
@ -120,9 +116,18 @@
"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": {
@ -132,7 +137,9 @@
}
}
},
"fasm": {
"module": "common:io_rename",
"params": {
"module": "common:fasm",
"rename_takes": {
@ -142,7 +149,9 @@
}
}
},
"bitstream": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "bitstream",
"script": "qlf_fasm",

View File

@ -37,24 +37,15 @@
},
"stages": {
"mk_build_dir": "common:mkdirs",
"synth": "common:synth",
"pack": "common:pack",
"ioplace": "common:generic_script_wrapper",
"place_constraints": "common:generic_script_wrapper",
"place": "common:place",
"route": "common:route",
"fasm": "common:fasm",
"bitstream": "common:generic_script_wrapper"
},
"stage_options": {
"mk_build_dir": {
"module": "common:mkdirs",
"params": {
"build_dir": "build/${device}"
}
},
"synth": {
"module": "common:synth",
"params": {
"takes": [ "xdc?" ],
"produces": [
@ -84,7 +75,13 @@
}
}
},
"pack": {
"module": "common:pack"
},
"ioplace": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "ioplace",
"interpreter": "${python3}",
@ -104,7 +101,9 @@
}
}
},
"place_constraints": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "place_constraints",
"interpreter": "${python3}",
@ -127,7 +126,21 @@
}
}
},
"place": {
"module": "common:place"
},
"route": {
"module": "common:route"
},
"fasm": {
"module": "common:fasm"
},
"bitstream": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "bitstream",
"script": "xcfasm",

View File

@ -37,24 +37,15 @@
},
"stages": {
"mk_build_dir": "common:mkdirs",
"synth": "common:synth",
"pack": "common:pack",
"ioplace": "common:generic_script_wrapper",
"place_constraints": "common:generic_script_wrapper",
"place": "common:place",
"route": "common:route",
"fasm": "common:fasm",
"bitstream": "common:generic_script_wrapper"
},
"stage_options": {
"mk_build_dir": {
"module": "common:mkdirs",
"params": {
"build_dir": "build/${device}"
}
},
"synth": {
"module": "common:synth",
"params": {
"takes": [ "xdc?" ],
"produces": [
@ -84,7 +75,13 @@
}
}
},
"pack": {
"module": "common:pack"
},
"ioplace": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "ioplace",
"interpreter": "${python3}",
@ -104,7 +101,9 @@
}
}
},
"place_constraints": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "place_constraints",
"interpreter": "${python3}",
@ -127,7 +126,21 @@
}
}
},
"place": {
"module": "common:place"
},
"route": {
"module": "common:route"
},
"fasm": {
"module": "common:fasm"
},
"bitstream": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "bitstream",
"script": "xcfasm",

View File

@ -1,16 +1,4 @@
{
"stages": {
"mk_build_dir": "common:mkdirs",
"synth": "common:synth",
"pack": "common:pack",
"ioplace": "common:generic_script_wrapper",
"place_constraints": "common:generic_script_wrapper",
"place": "common:place",
"route": "common:route",
"fasm": "common:fasm",
"bitstream": "common:generic_script_wrapper"
},
"values": {
"device": "xc7a50t_test",
"bitstream_device": "artix7",
@ -48,13 +36,16 @@
}
},
"stage_options": {
"stages": {
"mk_build_dir": {
"module": "common:mkdirs",
"params": {
"build_dir": "build/${device}"
}
},
"synth": {
"module": "common:synth",
"params": {
"takes": [ "xdc?" ],
"produces": [
@ -84,7 +75,13 @@
}
}
},
"pack": {
"module": "common:pack"
},
"ioplace": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "ioplace",
"interpreter": "${python3}",
@ -104,7 +101,9 @@
}
}
},
"place_constraints": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "place_constraints",
"interpreter": "${python3}",
@ -127,7 +126,21 @@
}
}
},
"place": {
"module": "common:place"
},
"route": {
"module": "common:route"
},
"fasm": {
"module": "common:fasm"
},
"bitstream": {
"module": "common:generic_script_wrapper",
"params": {
"stage_name": "bitstream",
"script": "xcfasm",

View File

@ -60,15 +60,17 @@ class Stage:
meta: 'dict[str, str]' # Stage's metadata extracted from module's
# output.
def __init__(self, name: str, modstr: str, mod_opts: 'dict[str, ] | None'):
if mod_opts is None:
mod_opts = {}
def __init__(self, name: str, stage_def: 'dict[str, ]'):
if stage_def is None:
stage_def = {}
modstr = stage_def['module']
module_path = resolve_modstr(modstr)
ModuleClass = get_module(module_path)
self.module = ModuleClass(mod_opts.get('params'))
self.module = ModuleClass(stage_def.get('params'))
values = mod_opts.get('values')
values = stage_def.get('values')
if values is not None:
self.value_overrides = values
else: