From 43bd5c32531cc220442d1337310f4b873272cb22 Mon Sep 17 00:00:00 2001 From: mohammad Date: Wed, 20 Jul 2022 20:46:07 +0430 Subject: [PATCH 01/12] add zipU --- src/forsyde/ut_helpers.hpp | 22 +++++++ src/forsyde/ut_process_constructors.hpp | 79 +++++++++++++++++++++++++ 2 files changed, 101 insertions(+) diff --git a/src/forsyde/ut_helpers.hpp b/src/forsyde/ut_helpers.hpp index 15b6106..a24661d 100644 --- a/src/forsyde/ut_helpers.hpp +++ b/src/forsyde/ut_helpers.hpp @@ -496,6 +496,28 @@ inline fanout* make_fanout(const std::string& pName, return p; } +template class I1If, + class T2, template class I2If, + class TCS, template class I3If, + template class OIf> +inline zipU* make_zipU(const std::string& pName, + const typename zipU::gamma_functype& _gamma_func_a, + const typename zipU::gamma_functype& _gamma_func_b, + OIf,std::vector>>& outS, + I1If& inp1S, + I2If& inp2S, + I3If& inp3S + ) +{ + auto p = new zipU(pName.c_str(), _gamma_func_a, _gamma_func_b); + + (*p).iport1(inp1S); + (*p).iport2(inp2S); + (*p).controlport(inp3S); + (*p).oport1(outS); + + return p; +} } } diff --git a/src/forsyde/ut_process_constructors.hpp b/src/forsyde/ut_process_constructors.hpp index e059433..577ff23 100644 --- a/src/forsyde/ut_process_constructors.hpp +++ b/src/forsyde/ut_process_constructors.hpp @@ -1741,6 +1741,85 @@ class fanout : public ut_process #endif }; +<<<<<<< HEAD +======= +template +class zipU : public ut_process +{ +public: + UT_in iport1; ///< port for the input channel 1 + UT_in iport2; ///< port for the input channel 2 + UT_in controlport; ///< port for the control signal + UT_out,std::vector>> oport1;///< port for the output channel + + typedef std::function gamma_functype; + + + //! The constructor requires the module name + /*! It creates an SC_THREAD which reads data from its input port, + * zips them together and writes the results using the output port + */ + zipU(const sc_module_name& _name, + const gamma_functype& _gamma_func_a, + const gamma_functype& _gamma_func_b + ) : ut_process(_name), iport1("iport1"), iport2("iport2"), controlport("controlport"), oport1("oport1"), + _gamma_func_a(_gamma_func_a), _gamma_func_b(_gamma_func_b) + { } + + //! Specifying from which process constructor is the module built + std::string forsyde_kind() const {return "UT::zipU";} + +private: + + gamma_functype _gamma_func_a, _gamma_func_b; + + // intermediate values + std::vector i1vals; + std::vector i2vals; + TCS control_tkn; + + void init() + { + + } + + void prep() + { + control_tkn = controlport.read(); + unsigned int c1 = _gamma_func_a(control_tkn); + unsigned int c2 = _gamma_func_b(control_tkn); + + i1vals.resize(c1); + i2vals.resize(c2); + + for (auto it=i1vals.begin();it!=i1vals.end();it++) + *it = iport1.read(); + for (auto it=i2vals.begin();it!=i2vals.end();it++) + *it = iport2.read(); + } + + void exec() {} + + void prod() + { + WRITE_MULTIPORT(oport1,std::make_tuple(i1vals,i2vals)) // write to the output + } + + void clean() {} + +#ifdef FORSYDE_INTROSPECTION + void bindInfo() + { + boundInChans.resize(2); // two input ports + boundInChans[0].port = &iport1; + boundInChans[1].port = &iport2; + boundOutChans.resize(1); // only one output port + boundOutChans[0].port = &oport1; + } +#endif +}; + +>>>>>>> 754c7d6... add zipU } } From d9c0ade118fb0b4063eaeda27f6d4c938f159839 Mon Sep 17 00:00:00 2001 From: mohammad Date: Wed, 20 Jul 2022 20:47:09 +0430 Subject: [PATCH 02/12] example to test two scenario in UT --- examples/ut/two_scenario/controller.hpp | 74 +++++++++++++++++++++++++ examples/ut/two_scenario/main.cpp | 12 ++++ examples/ut/two_scenario/ramp.hpp | 27 +++++++++ examples/ut/two_scenario/report.hpp | 27 +++++++++ examples/ut/two_scenario/top.hpp | 57 +++++++++++++++++++ 5 files changed, 197 insertions(+) create mode 100644 examples/ut/two_scenario/controller.hpp create mode 100644 examples/ut/two_scenario/main.cpp create mode 100644 examples/ut/two_scenario/ramp.hpp create mode 100644 examples/ut/two_scenario/report.hpp create mode 100644 examples/ut/two_scenario/top.hpp diff --git a/examples/ut/two_scenario/controller.hpp b/examples/ut/two_scenario/controller.hpp new file mode 100644 index 0000000..daaa0d3 --- /dev/null +++ b/examples/ut/two_scenario/controller.hpp @@ -0,0 +1,74 @@ +#ifndef CONTROLLER_HPP +#define CONTROLLER_HPP + +#include + +typedef std::function (const std::vector&)> scenrio_func; + +///!< gamma function for the zipU process of the top module +unsigned int gamma_func_zipa (const unsigned int &ca) +{ + return ca; +} + +unsigned int gamma_func_zipb (const unsigned int &ca) +{ + return 1; +} + + +///& inp) +{ + + if (cur_state == 0) + next_state = 1; + else + next_state = 0; + +} + +void output_decode_detector_func( + std::vector< + std::tuple< + unsigned int, unsigned int, scenrio_func + > + >& out, const int& cur_state, const std::vector& inp +) +{ + out.resize(1); + if (cur_state == 0) + { + out[0] = std::make_tuple(3, 1, [=] (const std::vector& inp){ + std::vector out(1); + out[0] =inp[0] + inp[1] + inp[2]; + return out; + }); + } + else + { + out[0] = std::make_tuple(2, 1, [=] (const std::vector& inp){ + std::vector out(1); + out[0] =inp[1]-inp[0]; + return out; + }); + } + +} + +///& out, const std::vector,std::vector>>>& inp) +{ + out = std::get<2>(std::get<1>(inp[0])[0])(std::get<0>(inp[0])); + std::cout<<"Kernel: "<(inp[0])<<", "< + +using namespace ForSyDe; + + +void ramp_func(int& out1, const int& inp1) +{ + out1 = inp1 + 1; +} + +#endif diff --git a/examples/ut/two_scenario/report.hpp b/examples/ut/two_scenario/report.hpp new file mode 100644 index 0000000..5931740 --- /dev/null +++ b/examples/ut/two_scenario/report.hpp @@ -0,0 +1,27 @@ +/********************************************************************** + * report.hpp -- prints the output to console * + * * + * Author: Hosein Attarzadeh (shan2@kth.se) * + * * + * Purpose: Demonstration of a simple example in the untimed MoC. * + * * + * Usage: amplifier example * + * * + * License: BSD3 * + *******************************************************************/ + + +#ifndef REPORT_HPP +#define REPORT_HPP + +#include +#include + +using namespace ForSyDe; + +void report_func(const int& inp1) +{ + std::cout << "output value: " << inp1 << std::endl; +} + +#endif diff --git a/examples/ut/two_scenario/top.hpp b/examples/ut/two_scenario/top.hpp new file mode 100644 index 0000000..50a37b2 --- /dev/null +++ b/examples/ut/two_scenario/top.hpp @@ -0,0 +1,57 @@ +#include +#include "report.hpp" +#include "ramp.hpp" +#include "controller.hpp" + +using namespace sc_core; +using namespace ForSyDe; + + +SC_MODULE(top) +{ + UT::signal from_source, from_constant, from_kernels; + UT::signal zip_control; + UT::signal,std::vector>>> from_zip; + UT::signal> from_detector, from_detector2; + + SC_CTOR(top) + { + + UT::make_source("ramp1", ramp_func, 1, 20, from_source); + + UT::make_constant("constant1", 1, 0, from_constant); + auto detector = UT::make_mealy("detector", + gamma_detector_func, + next_state_detector_func, + output_decode_detector_func, + 0, + from_detector, + from_constant + ); + + detector->oport1(from_detector2); + + UT::make_comb("cextract",[](std::vector& out,const std::vector>& inp){ + out.resize(1); + out[0] = std::get<0>(inp[0]); + }, 1, zip_control, from_detector2); + + // auto zipU1 = new UT::zipU , unsigned int>("zipU1", gamma_func_zipa, gamma_func_zipb); + // zipU1->iport1 (from_source); + // zipU1->iport2 (from_detector); + // zipU1->controlport (zip_control); + // zipU1->oport1 (from_zip); + UT::make_zipU("zipU1", gamma_func_zipa, gamma_func_zipb, from_zip, from_source, from_detector, zip_control); + UT::make_comb ("kernels", + kernel_func, + 1, + from_kernels, + from_zip + ); + + UT::make_sink("sink", report_func, from_kernels); + + } + +}; + From fd5c5eb4bbff12456c07476c93673a92655855d2 Mon Sep 17 00:00:00 2001 From: Mohammad Vazirpanah <60341840+mohammadvazirpanah@users.noreply.github.com> Date: Tue, 26 Jul 2022 17:41:32 +0430 Subject: [PATCH 03/12] Update ramp.hpp --- examples/ut/two_scenario/ramp.hpp | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/examples/ut/two_scenario/ramp.hpp b/examples/ut/two_scenario/ramp.hpp index d65e736..f1cae9a 100644 --- a/examples/ut/two_scenario/ramp.hpp +++ b/examples/ut/two_scenario/ramp.hpp @@ -1,15 +1,3 @@ -/********************************************************************** - * ramp.hpp -- function used to create a ramp input * - * * - * Author: Hosein Attarzadeh (shan2@kth.se) * - * * - * Purpose: Demonstration of a simple example in the untimed MoC. * - * * - * Usage: amplifier example * - * * - * License: BSD3 * - *******************************************************************/ - #ifndef RAMP_HPP #define RAMP_HPP @@ -18,7 +6,6 @@ using namespace ForSyDe; - void ramp_func(int& out1, const int& inp1) { out1 = inp1 + 1; From 1611afeda417b9d6197719f55b46ee7599a69e9c Mon Sep 17 00:00:00 2001 From: Mohammad Vazirpanah <60341840+mohammadvazirpanah@users.noreply.github.com> Date: Tue, 26 Jul 2022 17:42:04 +0430 Subject: [PATCH 04/12] Update report.hpp --- examples/ut/two_scenario/report.hpp | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/examples/ut/two_scenario/report.hpp b/examples/ut/two_scenario/report.hpp index 5931740..7aa4c18 100644 --- a/examples/ut/two_scenario/report.hpp +++ b/examples/ut/two_scenario/report.hpp @@ -1,16 +1,3 @@ -/********************************************************************** - * report.hpp -- prints the output to console * - * * - * Author: Hosein Attarzadeh (shan2@kth.se) * - * * - * Purpose: Demonstration of a simple example in the untimed MoC. * - * * - * Usage: amplifier example * - * * - * License: BSD3 * - *******************************************************************/ - - #ifndef REPORT_HPP #define REPORT_HPP From 2546bc149fa41f3a427a2e5cda8be4bacd68e539 Mon Sep 17 00:00:00 2001 From: Mohammad Vazirpanah <60341840+mohammadvazirpanah@users.noreply.github.com> Date: Tue, 26 Jul 2022 17:43:23 +0430 Subject: [PATCH 05/12] Update top.hpp --- examples/ut/two_scenario/top.hpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/examples/ut/two_scenario/top.hpp b/examples/ut/two_scenario/top.hpp index 50a37b2..6396ebe 100644 --- a/examples/ut/two_scenario/top.hpp +++ b/examples/ut/two_scenario/top.hpp @@ -36,11 +36,17 @@ SC_MODULE(top) out[0] = std::get<0>(inp[0]); }, 1, zip_control, from_detector2); - // auto zipU1 = new UT::zipU , unsigned int>("zipU1", gamma_func_zipa, gamma_func_zipb); + /// -> without helper + + /* auto zipU1 = new UT::zipU , unsigned int>("zipU1", gamma_func_zipa, gamma_func_zipb); // zipU1->iport1 (from_source); // zipU1->iport2 (from_detector); // zipU1->controlport (zip_control); - // zipU1->oport1 (from_zip); + zipU1->oport1 (from_zip); + */ + + // -> Using helper + UT::make_zipU("zipU1", gamma_func_zipa, gamma_func_zipb, from_zip, from_source, from_detector, zip_control); UT::make_comb ("kernels", kernel_func, From 0605ecd3ef3c26837cd79177ef6e0207e74ef6c5 Mon Sep 17 00:00:00 2001 From: Mohammad Vazirpanah <60341840+mohammadvazirpanah@users.noreply.github.com> Date: Tue, 26 Jul 2022 21:38:08 +0430 Subject: [PATCH 06/12] Approved comments --- examples/ut/two_scenario/controller.hpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/examples/ut/two_scenario/controller.hpp b/examples/ut/two_scenario/controller.hpp index daaa0d3..87fc059 100644 --- a/examples/ut/two_scenario/controller.hpp +++ b/examples/ut/two_scenario/controller.hpp @@ -6,17 +6,16 @@ typedef std::function (const std::vector&)> scenrio_func; ///!< gamma function for the zipU process of the top module -unsigned int gamma_func_zipa (const unsigned int &ca) +size_t gamma_func_zipa (const size_t &ca) { return ca; } -unsigned int gamma_func_zipb (const unsigned int &ca) +size_t gamma_func_zipb (const size_t &ca) { return 1; } - /// >& out, const int& cur_state, const std::vector& inp ) @@ -63,12 +62,10 @@ void output_decode_detector_func( } ///& out, const std::vector,std::vector>>>& inp) +void kernel_func(std::vector& out, const std::vector,std::vector>>>& inp) { out = std::get<2>(std::get<1>(inp[0])[0])(std::get<0>(inp[0])); - std::cout<<"Kernel: "<(inp[0])<<", "< Date: Tue, 26 Jul 2022 21:38:48 +0430 Subject: [PATCH 07/12] Approved comments --- examples/ut/two_scenario/top.hpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/examples/ut/two_scenario/top.hpp b/examples/ut/two_scenario/top.hpp index 6396ebe..35330ba 100644 --- a/examples/ut/two_scenario/top.hpp +++ b/examples/ut/two_scenario/top.hpp @@ -10,9 +10,9 @@ using namespace ForSyDe; SC_MODULE(top) { UT::signal from_source, from_constant, from_kernels; - UT::signal zip_control; - UT::signal,std::vector>>> from_zip; - UT::signal> from_detector, from_detector2; + UT::signal zip_control; + UT::signal,std::vector>>> from_zip; + UT::signal> from_detector, from_detector2; SC_CTOR(top) { @@ -31,21 +31,21 @@ SC_MODULE(top) detector->oport1(from_detector2); - UT::make_comb("cextract",[](std::vector& out,const std::vector>& inp){ + UT::make_comb("cextract",[](std::vector& out,const std::vector>& inp){ out.resize(1); out[0] = std::get<0>(inp[0]); }, 1, zip_control, from_detector2); - /// -> without helper + /// -> Without using helper - /* auto zipU1 = new UT::zipU , unsigned int>("zipU1", gamma_func_zipa, gamma_func_zipb); + // auto zipU1 = new UT::zipU , size_t>("zipU1", gamma_func_zipa, gamma_func_zipb); // zipU1->iport1 (from_source); // zipU1->iport2 (from_detector); // zipU1->controlport (zip_control); - zipU1->oport1 (from_zip); - */ + // zipU1->oport1 (from_zip); + - // -> Using helper + // -> using helper UT::make_zipU("zipU1", gamma_func_zipa, gamma_func_zipb, from_zip, from_source, from_detector, zip_control); UT::make_comb ("kernels", @@ -56,7 +56,6 @@ SC_MODULE(top) ); UT::make_sink("sink", report_func, from_kernels); - } }; From 5d7678e5e7dbe75ece34a6ff6731dec81f8a4bdc Mon Sep 17 00:00:00 2001 From: Mohammad Vazirpanah <60341840+mohammadvazirpanah@users.noreply.github.com> Date: Tue, 26 Jul 2022 21:41:14 +0430 Subject: [PATCH 08/12] Approved comments --- src/forsyde/ut_helpers.hpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/forsyde/ut_helpers.hpp b/src/forsyde/ut_helpers.hpp index a24661d..28556ff 100644 --- a/src/forsyde/ut_helpers.hpp +++ b/src/forsyde/ut_helpers.hpp @@ -496,6 +496,14 @@ inline fanout* make_fanout(const std::string& pName, return p; } +//! Helper function to construct a zipU process +/*! This function is used to construct a zipU process (SystemC module) and + * connect its output and output signals. + * It provides a more functional style definition of a ForSyDe process. + * It also removes bilerplate code by using type-inference feature of + * C++ and automatic binding to the input FIFOs. + */ + template class I1If, class T2, template class I2If, class TCS, template class I3If, From 6a536035fe134820371ac2a368884641afe1030f Mon Sep 17 00:00:00 2001 From: Mohammad Vazirpanah <60341840+mohammadvazirpanah@users.noreply.github.com> Date: Tue, 26 Jul 2022 21:45:16 +0430 Subject: [PATCH 09/12] Approved comments --- src/forsyde/ut_process_constructors.hpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/forsyde/ut_process_constructors.hpp b/src/forsyde/ut_process_constructors.hpp index 577ff23..d9fd59d 100644 --- a/src/forsyde/ut_process_constructors.hpp +++ b/src/forsyde/ut_process_constructors.hpp @@ -1741,18 +1741,20 @@ class fanout : public ut_process #endif }; -<<<<<<< HEAD -======= +//! The zipU process with two inputs and one output +/*! This process "zips" the incoming two signals into one signal of tuples with using control signal + */ + template class zipU : public ut_process { public: - UT_in iport1; ///< port for the input channel 1 - UT_in iport2; ///< port for the input channel 2 - UT_in controlport; ///< port for the control signal - UT_out,std::vector>> oport1;///< port for the output channel + UT_in iport1; ///< port for the input channel 1 + UT_in iport2; ///< port for the input channel 2 + UT_in controlport; ///< port for the control signal + UT_out,std::vector>> oport1; ///< port for the output channel - typedef std::function gamma_functype; + typedef std::function gamma_functype; //! The constructor requires the module name @@ -1786,8 +1788,8 @@ class zipU : public ut_process void prep() { control_tkn = controlport.read(); - unsigned int c1 = _gamma_func_a(control_tkn); - unsigned int c2 = _gamma_func_b(control_tkn); + size_t c1 = _gamma_func_a(control_tkn); + size_t c2 = _gamma_func_b(control_tkn); i1vals.resize(c1); i2vals.resize(c2); @@ -1819,7 +1821,7 @@ class zipU : public ut_process #endif }; ->>>>>>> 754c7d6... add zipU + } } From 33b2f0f9698afe7f042c11b09a4dd5a23bc14e6d Mon Sep 17 00:00:00 2001 From: mohammad Date: Tue, 26 Jul 2022 22:43:48 +0430 Subject: [PATCH 10/12] add SY::signalabst (Signal Abstraction) --- src/forsyde/sy_process_constructors.hpp | 90 +++++++++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/src/forsyde/sy_process_constructors.hpp b/src/forsyde/sy_process_constructors.hpp index 6afb2e3..dd3d2c6 100644 --- a/src/forsyde/sy_process_constructors.hpp +++ b/src/forsyde/sy_process_constructors.hpp @@ -2112,6 +2112,96 @@ class fanout : public sy_process #endif }; +template +class signalabst : public sy_process +{ +public: + typedef std::function&, const unsigned long&, const std::vector>&)> functype; + + SY_in iport1; ///< port for the input channel + SY_out oport1; ///< port for the output channel + + signalabst(const sc_module_name& _name, + const unsigned long& take_samples, functype _func + ) : sy_process(_name), take_samples(take_samples), _func(_func) + { +#ifdef FORSYDE_INTROSPECTION + + +#endif + } + + //! Specifying from which process constructor is the module built + std::string forsyde_kind() const {return "SY::signalabst";} + +private: + + abst_ext* ival1; + abst_ext* oval1; + std::vector>* ivals; + unsigned long take_samples; + functype _func; + int tok_cnt; + + + //Implementing the abstract semantics + void init() + { + ival1 = new abst_ext; + oval1 = new abst_ext; + ivals = new std::vector>; + tok_cnt = 0; + + + } + + void prep() + { + + *ival1 = iport1.read(); + ivals->push_back(*ival1); + tok_cnt ++; + } + + void exec() + { + if (tok_cnt == take_samples) + { + _func(*oval1, take_samples, *ivals); + tok_cnt = 0; + ivals->clear(); + } + + else + { + oval1->set_abst(); + } + + } + + void prod() + { + WRITE_MULTIPORT(oport1, abst_ext(*oval1)) + } + + void clean() + { + delete oval1; + delete ival1; + delete ivals; + } + +#ifdef FORSYDE_INTROSPECTION + void bindInfo() + { + boundInChans.resize(1); // only one input port + boundInChans[0].port = &iport1; + boundOutChans.resize(1); // only one output port + boundOutChans[0].port = &oport1; + } +#endif +}; + } } From 0148dce97ea95c3ac020a5ca9533ee49eb4ba5fd Mon Sep 17 00:00:00 2001 From: mohammad Date: Tue, 26 Jul 2022 22:44:10 +0430 Subject: [PATCH 11/12] add example to test SY::signalabst --- examples/sy/signal_abstraction/main.cpp | 10 ++++++ examples/sy/signal_abstraction/top.hpp | 47 +++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 examples/sy/signal_abstraction/main.cpp create mode 100644 examples/sy/signal_abstraction/top.hpp diff --git a/examples/sy/signal_abstraction/main.cpp b/examples/sy/signal_abstraction/main.cpp new file mode 100644 index 0000000..424a6c1 --- /dev/null +++ b/examples/sy/signal_abstraction/main.cpp @@ -0,0 +1,10 @@ +#include "top.hpp" + +int sc_main(int argc, char **argv) +{ + top top1("top1"); + + sc_start(); + + return 0; +} diff --git a/examples/sy/signal_abstraction/top.hpp b/examples/sy/signal_abstraction/top.hpp new file mode 100644 index 0000000..ba8fe79 --- /dev/null +++ b/examples/sy/signal_abstraction/top.hpp @@ -0,0 +1,47 @@ +#include + +using namespace sc_core; +using namespace ForSyDe; + + +void report_func(abst_ext inp1) +{ + if (inp1.is_present()) + std::cout << "Input value: " << inp1.unsafe_from_abst_ext() << std::endl; + else + std::cout << "Input value: absent" << std::endl; +} + +void signalabst_func(abst_ext& out, const unsigned long& take, const std::vector>& inp) +{ + + + float sum = 0; + for (unsigned long i = 0; i < inp.size(); i++) + { + sum += unsafe_from_abst_ext(inp[i]); + } + out.set_val(sum/take); +} + +SC_MODULE(top) + +{ + SY::signal out_source; + SY::signal out_signalabst; + + std::vector> s1 = {36.7, 36.8, 36.7, 36.8, 36.9, 36.9, 37.0, 37.0, 37.1, 37.2, 37.3, 37.2, 37.3, 37.3, 37.4, 37.5, 37.6, 36.6}; + std::vector> s2 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}; + + + SC_CTOR(top) + { + std::cout< ("signalabst", 4, signalabst_func); + abstsig-> iport1 (out_source); + abstsig-> oport1(out_signalabst); + SY::make_sink("report1", report_func, out_signalabst); + } +}; + From bc09f3dcedcbbc00a724171deb6006521f3333a1 Mon Sep 17 00:00:00 2001 From: Mohammad Vazirpanah <60341840+mohammadvazirpanah@users.noreply.github.com> Date: Wed, 27 Jul 2022 15:22:30 +0430 Subject: [PATCH 12/12] Update gamma_functype --> fix problem --- src/forsyde/ut_process_constructors.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/forsyde/ut_process_constructors.hpp b/src/forsyde/ut_process_constructors.hpp index d9fd59d..834055a 100644 --- a/src/forsyde/ut_process_constructors.hpp +++ b/src/forsyde/ut_process_constructors.hpp @@ -1754,7 +1754,7 @@ class zipU : public ut_process UT_in controlport; ///< port for the control signal UT_out,std::vector>> oport1; ///< port for the output channel - typedef std::function gamma_functype; + typedef std::function gamma_functype; //! The constructor requires the module name