Configure timing adapter in run_platform.py

Change-Id: Ib108298417980a586bed8c8b4e0bb5e57f238316
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 @@
     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 @@
     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 @@
     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)