From 79c5a1706ecd6f8c70bac4400c526c405f6881a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivar=20H=C3=A4rnqvist?= <ivarhar@outlook.com> Date: Tue, 19 May 2020 19:08:09 +0200 Subject: [PATCH] fix incorrect bit mask --- src/simulation/compile.cpp | 4 ++-- src/simulation/run.cpp | 2 +- test/test_fast_simulation.py | 6 ++++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/simulation/compile.cpp b/src/simulation/compile.cpp index 1f93b921..7fa7ac67 100644 --- a/src/simulation/compile.cpp +++ b/src/simulation/compile.cpp @@ -204,8 +204,8 @@ private: if (bits > 64) { throw py::value_error{"Cannot truncate to more than 64 bits"}; } - this->add_instruction(instruction_type::truncate, no_result_index, 0).bit_mask = static_cast<std::int64_t>(std::int64_t{1} - << bits); + this->add_instruction(instruction_type::truncate, no_result_index, 0).bit_mask = static_cast<std::int64_t>( + (std::int64_t{1} << bits) - 1); } } diff --git a/src/simulation/run.cpp b/src/simulation/run.cpp index 1f27b0c7..c14fa192 100644 --- a/src/simulation/run.cpp +++ b/src/simulation/run.cpp @@ -31,7 +31,7 @@ namespace asic { if (*bits_override > 64) { throw py::value_error{"Cannot truncate to more than 64 bits"}; } - return static_cast<std::int64_t>(std::int64_t{1} << *bits_override); // Return the bit mask override to use. + return static_cast<std::int64_t>((std::int64_t{1} << *bits_override) - 1); // Return the bit mask override to use. } bits_override.reset(); // Don't use bits_override if truncate is false. return std::int64_t{}; diff --git a/test/test_fast_simulation.py b/test/test_fast_simulation.py index 6eb3b251..acdea48d 100644 --- a/test/test_fast_simulation.py +++ b/test/test_fast_simulation.py @@ -122,6 +122,12 @@ class TestRunFor: assert simulation.results["0"][4] == -6 assert simulation.results["0"][5] == 7 + def test_find_result_key(self, precedence_sfg_delays): + sim = FastSimulation(precedence_sfg_delays, [[0, 4, 542, 42, 31.314, 534.123, -453415, 5431]]) + sim.run() + assert sim.results[precedence_sfg_delays.find_result_keys_by_name("ADD2")[0]][4] == 31220 + assert sim.results[precedence_sfg_delays.find_result_keys_by_name("A1")[0]][2] == 80 + class TestRun: def test_save_results(self, sfg_two_inputs_two_outputs): simulation = FastSimulation(sfg_two_inputs_two_outputs, [2, 3]) -- GitLab