diff --git a/sources/CCordicRotateHalfPiRom/CCordicRotateHalfPiRom.hpp b/sources/CCordicRotateHalfPiRom/CCordicRotateHalfPiRom.hpp index 10c1af1..1a098ba 100644 --- a/sources/CCordicRotateHalfPiRom/CCordicRotateHalfPiRom.hpp +++ b/sources/CCordicRotateHalfPiRom/CCordicRotateHalfPiRom.hpp @@ -41,8 +41,8 @@ public: return in * kn_i / 8U; } - constexpr std::complex cordic(std::complex x_in, - uint8_t counter) const { + static constexpr std::complex cordic(std::complex x_in, + uint8_t counter) { int64_t A = x_in.real(); int64_t B = x_in.imag(); @@ -72,8 +72,8 @@ public: return in * kn_values[NStages - 1]; } - constexpr std::complex cordic(std::complex x_in, - uint8_t counter) const { + static constexpr std::complex cordic(std::complex x_in, + uint8_t counter) { const std::complex fx_x_in(int64_t(x_in.real() * double(in_scale_factor)), int64_t(x_in.imag() * double(in_scale_factor))); @@ -89,9 +89,9 @@ public: return ap_int(tmp >> 3); } - void cordic(const ap_int & re_in, const ap_int & im_in, + static void cordic(const ap_int & re_in, const ap_int & im_in, const ap_uint<8> & counter, - ap_int & re_out, ap_int & im_out) const { + ap_int & re_out, ap_int & im_out) { const ap_uint<6 + 1> R = (rom_cordic.rom[counter] >> (7 - NStages)); diff --git a/sources/tb/cordic_tb.cpp b/sources/tb/cordic_tb.cpp index d275d5f..8e48881 100644 --- a/sources/tb/cordic_tb.cpp +++ b/sources/tb/cordic_tb.cpp @@ -119,7 +119,7 @@ TEST_CASE("ROM-based Cordic works with C-Types", "[CORDIC]") { for (unsigned iter = 0; iter < n_lines; iter++) { // Execute - values_out[iter] = cordic.cordic(values_in[iter], (iter & 255)); + values_out[iter] = cordic_rom::cordic(values_in[iter], (iter & 255)); // Display the results // cout << "Series " << iter; @@ -196,7 +196,7 @@ TEST_CASE("ROM-based Cordic works with AP-Types", "[CORDIC]") { // if (iter < cnt_mask + 1) // fprintf(romf, "%03d\n", (uint16_t) cordic.rom_cordic.rom[counter]); - cordic.cordic( + cordic_rom::cordic( values_re_in[iter], values_im_in[iter], counter, values_re_out[iter], values_im_out[iter]); @@ -273,7 +273,7 @@ TEST_CASE("ROM-based Cordic works with AP-Types", "[CORDIC]") { // if (iter < cnt_mask + 1) // fprintf(romf, "%03d\n", (uint16_t) cordic.rom_cordic.rom[counter]); - cordic.cordic( + cordic_rom::cordic( values_re_in[iter], values_im_in[iter], counter, values_re_out[iter], values_im_out[iter]); @@ -303,15 +303,13 @@ TEST_CASE("ROM-based Cordic works with AP-Types", "[CORDIC]") { TEST_CASE("ROM-based Cordic constexpr are evaluated during compilation.", "[CORDIC]") { SECTION("W:16 - I:4 - Stages:6 - q:64 - C-Types") { - static constexpr cordic_rom cordic {}; - constexpr complex value_in = (1U << 12) * 97; constexpr uint8_t angle = 169; - constexpr complex res1 = cordic.cordic(value_in, angle); - constexpr complex res2 = cordic.cordic(value_in, angle); + constexpr complex res1 = cordic_rom::cordic(value_in, angle); + constexpr complex res2 = cordic_rom::cordic(value_in, angle); static_assert(res1 == res2, "Test"); - REQUIRE_FALSE(res1 == cordic.cordic(complex(1, 0), angle)); - REQUIRE(res1 == cordic.cordic(value_in, angle)); + REQUIRE_FALSE(res1 == cordic_rom::cordic(complex(1, 0), angle)); + REQUIRE(res1 == cordic_rom::cordic(value_in, angle)); } }