From 5003647c177cd5e09f80673b94d8df5d9dc2ae1a Mon Sep 17 00:00:00 2001 From: Yaman Umuroglu Date: Fri, 10 Jan 2025 12:14:25 +0100 Subject: [PATCH] [XSICPP] assert timeout --- src/finn/core/rtlsim_exec.py | 5 ++++- src/finn/qnn-data/cpp/xsi_simdriver.cpp | 8 +++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/finn/core/rtlsim_exec.py b/src/finn/core/rtlsim_exec.py index ec2a4a4269..e497bac94e 100644 --- a/src/finn/core/rtlsim_exec.py +++ b/src/finn/core/rtlsim_exec.py @@ -284,12 +284,15 @@ def rtlsim_exec_cppxsi(model, execution_context, dummy_data_mode=False, postproc launch_process_helper(runsim_cmd, proc_env=runsim_env, cwd=sim_base) # parse results file and return dict - with open(sim_base + "/results.txt", "r") as f: + results_filename = sim_base + "/results.txt" + with open(results_filename, "r") as f: results = f.read().strip().split("\n") ret_dict = {} for result_line in results: key, val = result_line.split("\t") ret_dict[key] = int(val) + if "TIMEOUT" in ret_dict.keys(): + assert ret_dict["TIMEOUT"] == 0, f"XSI C++ simulation timed out, see {results_filename}" return ret_dict diff --git a/src/finn/qnn-data/cpp/xsi_simdriver.cpp b/src/finn/qnn-data/cpp/xsi_simdriver.cpp index 6d3e38fffe..94537f6e9e 100644 --- a/src/finn/qnn-data/cpp/xsi_simdriver.cpp +++ b/src/finn/qnn-data/cpp/xsi_simdriver.cpp @@ -375,7 +375,10 @@ int main(int argc, char *argv[]) { for(size_t i = 0; i < outstream_names.size(); i++) { if(n_out_txns[i] == n_iters_per_output[i]) n_outputs_with_one_completion++; } - if(n_outputs_with_one_completion == outstream_names.size()) latency = iters; + if(n_outputs_with_one_completion == outstream_names.size()) { + cout << "All outputs have now produced a sample, latency = " << iters << " cycles" << endl; + latency = iters; + } } } @@ -395,6 +398,9 @@ int main(int argc, char *argv[]) { results_file << "cycles" << "\t" << iters << endl; results_file << "N" << "\t" << n_inferences << endl; results_file << "latency_cycles" << "\t" << latency << endl; + results_file << "TIMEOUT" << "\t" << timeout ? 1 : 0<< endl; + results_file << "INPUT_DONE" << "\t" << input_done ? 1 : 0 << endl; + results_file << "OUTPUT_DONE" << "\t" << output_done ? 1 : 0 << endl; // optionally, extract more data from final status @POSTPROC_CPP@ results_file.close();