aboutsummaryrefslogtreecommitdiff
path: root/scripts/run_platform.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/run_platform.py')
-rwxr-xr-xscripts/run_platform.py78
1 files changed, 74 insertions, 4 deletions
diff --git a/scripts/run_platform.py b/scripts/run_platform.py
index bb2f06f..a39de8b 100755
--- a/scripts/run_platform.py
+++ b/scripts/run_platform.py
@@ -39,19 +39,73 @@ def run_cmd(cmd, **kwargs):
print(f"Running command: {cmd_str}")
return subprocess.run(cmd, check=True, **kwargs)
-def build_core_platform(output_folder, target, toolchain, memory_model, memory_arena, pmu):
+def ta_parse_raw(ta_raw):
+ ta_parsed = [-1, -1]
+ if ta_raw:
+ for v in ta_raw:
+ index = v[0]
+ value = v[1]
+ if (index > 1):
+ raise Exception("Illegal index value - Should be '0' or '1'")
+ (ta_parsed)[index] = value
+
+ return ta_parsed
+
+def build_core_platform(output_folder, target, toolchain, memory_model, memory_arena, pmu,
+ ta_maxr, ta_maxw, ta_maxrw, ta_rlatency, ta_wlatency,
+ ta_pulse_on, ta_pulse_off, ta_bwcap, ta_perfctrl, ta_perfcnt,
+ ta_mode, ta_histbin, ta_histcnt):
build_folder = output_folder/"model"/"build"
+ maxr = ta_parse_raw(ta_maxr)
+ maxw = ta_parse_raw(ta_maxw)
+ maxrw = ta_parse_raw(ta_maxrw)
+ rlatency = ta_parse_raw(ta_rlatency)
+ wlatency = ta_parse_raw(ta_wlatency)
+ pulse_on = ta_parse_raw(ta_pulse_on)
+ pulse_off = ta_parse_raw(ta_pulse_off)
+ bwcap = ta_parse_raw(ta_bwcap)
+ perfctrl = ta_parse_raw(ta_perfctrl)
+ perfcnt = ta_parse_raw(ta_perfcnt)
+ mode = ta_parse_raw(ta_mode)
+ histbin = ta_parse_raw(ta_histbin)
+ histcnt = ta_parse_raw(ta_histcnt)
cmake_cmd = ["cmake",
CORE_PLATFORM_PATH/"targets"/target,
f"-B{build_folder}",
f"-DCMAKE_TOOLCHAIN_FILE={CORE_PLATFORM_PATH/'cmake'/'toolchain'/(toolchain + '.cmake')}",
f"-DBAREMETAL_PATH={output_folder}",
f"-DMEMORY_MODEL={memory_model}",
- f"-DMEMORY_ARENA={memory_arena}"]
+ f"-DMEMORY_ARENA={memory_arena}",
+ f"-DETHOSU_TA_MAXR_0={maxr[0]}",
+ f"-DETHOSU_TA_MAXR_1={maxr[1]}",
+ f"-DETHOSU_TA_MAXW_0={maxw[0]}",
+ f"-DETHOSU_TA_MAXW_1={maxw[1]}",
+ f"-DETHOSU_TA_MAXRW_0={maxrw[0]}",
+ f"-DETHOSU_TA_MAXRW_1={maxrw[1]}",
+ f"-DETHOSU_TA_RLATENCY_0={rlatency[0]}",
+ f"-DETHOSU_TA_RLATENCY_1={rlatency[1]}",
+ f"-DETHOSU_TA_WLATENCY_0={wlatency[0]}",
+ f"-DETHOSU_TA_WLATENCY_1={wlatency[1]}",
+ f"-DETHOSU_TA_PULSE_ON_0={pulse_on[0]}",
+ f"-DETHOSU_TA_PULSE_ON_1={pulse_on[1]}",
+ f"-DETHOSU_TA_PULSE_OFF_0={pulse_off[0]}",
+ f"-DETHOSU_TA_PULSE_OFF_1={pulse_off[1]}",
+ f"-DETHOSU_TA_BWCAP_0={bwcap[0]}",
+ f"-DETHOSU_TA_BWCAP_1={bwcap[1]}",
+ f"-DETHOSU_TA_PERFCTRL_0={perfctrl[0]}",
+ f"-DETHOSU_TA_PERFCTRL_1={perfctrl[1]}",
+ f"-DETHOSU_TA_PERFCNT_0={perfcnt[0]}",
+ f"-DETHOSU_TA_PERFCNT_1={perfcnt[1]}",
+ f"-DETHOSU_TA_MODE_0={mode[0]}",
+ f"-DETHOSU_TA_MODE_1={mode[1]}",
+ f"-DETHOSU_TA_HISTBIN_0={histbin[0]}",
+ f"-DETHOSU_TA_HISTBIN_1={histbin[1]}",
+ f"-DETHOSU_TA_HISTCNT_0={histcnt[0]}",
+ f"-DETHOSU_TA_HISTCNT_1={histcnt[1]}"]
+
if pmu:
for i in range(len(pmu)):
cmake_cmd += [f"-DETHOSU_PMU_EVENT_{i}={pmu[i]}"]
-
run_cmd(cmake_cmd)
make_cmd = ["make", "-C", build_folder, f"-j{multiprocessing.cpu_count()}", "baremetal_custom"]
@@ -150,6 +204,19 @@ def main():
parser.add_argument("--pmu", type=int, action='append', help="PMU Event Counters")
parser.add_argument("--custom-input", type=pathlib.Path, help="Custom input to network")
parser.add_argument("--custom-output", type=pathlib.Path, help="Custom expected output data for network")
+ parser.add_argument("--ta-maxr", type=int, nargs=2, action='append', help="Max no. of pending reads")
+ parser.add_argument("--ta-maxw", type=int, nargs=2, action='append', help="Max no. of pending writes")
+ parser.add_argument("--ta-maxrw", type=int, nargs=2, action='append', help="Max no. of pending reads+writes")
+ parser.add_argument("--ta-rlatency", type=int, nargs=2, action='append', help="Minimum latency (clock cycles) from AVALID to RVALID")
+ parser.add_argument("--ta-wlatency", type=int, nargs=2, action='append', help="Minimum latency (clock cycles) from WVALID&WLAST to BVALID")
+ parser.add_argument("--ta-pulse_on", type=int, nargs=2, action='append', help="No. of cycles addresses let through (0-65535)")
+ parser.add_argument("--ta-pulse_off", type=int, nargs=2, action='append', help="No. of cycles addresses blocked (0-65535)")
+ parser.add_argument("--ta-bwcap", type=int, nargs=2, action='append', help="Max no. of 64-bit words transfered per pulse cycle 0=infinite")
+ parser.add_argument("--ta-perfctrl", type=int, nargs=2, action='append', help="selecting an event for event counter 0=default")
+ parser.add_argument("--ta-perfcnt", type=int, nargs=2, action='append', help="event counter")
+ parser.add_argument("--ta-mode", type=int, nargs=2, action='append', help="Max no. of pending reads")
+ parser.add_argument("--ta-histbin", type=int, nargs=2, action='append', help="Controlls which histogram bin (0-15) that should be accessed by HISTCNT")
+ parser.add_argument("--ta-histcnt", type=int, nargs=2, action='append', help="Read/write the selected histogram bin")
args = parser.parse_args()
args.output_folder.mkdir(exist_ok=True)
@@ -157,7 +224,10 @@ def main():
try:
optimize_network(args.output_folder, args.network_path, target_mapping[args.target])
generate_reference_data(args.output_folder, args.network_path, args.custom_input, args.custom_output)
- build_core_platform(args.output_folder, args.target, args.toolchain, args.memory_model, args.memory_arena, args.pmu)
+ build_core_platform(args.output_folder, args.target, args.toolchain, args.memory_model, args.memory_arena, args.pmu,
+ args.ta_maxr, args.ta_maxw, args.ta_maxrw, args.ta_rlatency, args.ta_wlatency,
+ args.ta_pulse_on, args.ta_pulse_off, args.ta_bwcap, args.ta_perfctrl, args.ta_perfcnt,
+ args.ta_mode, args.ta_histbin, args.ta_histcnt)
run_model(args.output_folder)
except subprocess.CalledProcessError as err:
print(f"Command: '{err.cmd}' failed", file=sys.stderr)