From 8450f85c9388a46d6ec3df06b6b7556405d66ca9 Mon Sep 17 00:00:00 2001 From: Johannes Wirth Date: Thu, 10 Mar 2022 13:11:10 +0100 Subject: [PATCH] raven_spn: add check if input-/ref-data fits into memory --- raven_spn/raven_spn | Bin 124136 -> 124348 bytes raven_spn/src/raven_spn.cpp | 50 ++++++++++++++++++++++++------------ 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/raven_spn/raven_spn b/raven_spn/raven_spn index aac31fe54bb4c3187896b6377b9ecff86ba9f926..b88c3e1aa21d48e2c0071b3c9168d05c86a6c152 100755 GIT binary patch delta 43326 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 ^;78lpMbEkLC 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 delta 42429 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 z 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 (out_addr1 - in_addr)) { + printf("ERROR: input data requires %d bytes, only %d bytes available\n", total_in, out_addr1 - in_addr); + return 1; + } + if (out_bytes > (out_addr2 - out_addr1)) { + printf("ERROR: output data requires %d bytes, only %d bytes available\n", out_bytes, out_addr2 - out_addr1); + return 1; + } + - uint32_t in_beats = (step * sample_bytes) / axi_bytes; + uint32_t in_beats = in_bytes / axi_bytes; if (in_beats * axi_bytes < step * sample_bytes) in_beats++; - uint32_t out_beats = (step * result_bytes) / axi_bytes; + uint32_t out_beats = out_bytes / axi_bytes; if (out_beats * axi_bytes < step * result_bytes) out_beats++; - int in_addr = 0x20010000; // place input samples in the SPI memory - int out_addr1 = 0x20510000; - int out_addr2 = 0x205F0000; - + uint32_t current_in_addr = in_addr; + // inject SPN input data - spn_checker::input_addr_reg() = in_addr; + spn_checker::input_addr_reg() = current_in_addr; spn_checker::num_input_samples_reg() = sample_bytes * step * iterations; spn_checker::start_data_trans_reg() = 1; - spn_checker::output_addr_reg() = out_addr1; spn_checker::output_addr2_reg() = out_addr2; for (int k = 0; k < iterations*step; k+=step) { - run_xspn1(in_addr, out_addr1, step, in_beats, out_beats); - run_xspn2(in_addr, out_addr2, step, in_beats, out_beats); + run_xspn1(current_in_addr, out_addr1, step, in_beats, out_beats); + run_xspn2(current_in_addr, out_addr2, step, in_beats, out_beats); wait_for_spn_interrupts(); printf("XSPN finished\n"); spn_checker::offset_reg() = k; spn_checker::length_reg() = step; spn_checker::start_result_check_reg() = 1; - in_addr += step * sample_bytes; // 5 bytes in each sample - if (k == amount_of_input_samples) { - in_addr = 0x20010000; - } + current_in_addr += step * sample_bytes; // 5 bytes in each sample (NIPS5) } return 0;