Back-ported DVCon turorial changes
This commit is contained in:
@ -1,9 +1,34 @@
|
||||
/*
|
||||
* BLDC.h
|
||||
/*******************************************************************************
|
||||
* Copyright (C) 2018 MINRES Technologies GmbH
|
||||
* All rights reserved.
|
||||
*
|
||||
* Created on: 26.06.2018
|
||||
* Author: eyck
|
||||
*/
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef BLDC_H_
|
||||
#define BLDC_H_
|
||||
@ -11,43 +36,47 @@
|
||||
#include <boost/numeric/odeint.hpp>
|
||||
namespace odeint = boost::numeric::odeint;
|
||||
|
||||
inline
|
||||
double norm_angle(double alpha){
|
||||
double alpha_n = fmod(alpha, M_PI * 2);
|
||||
if (alpha_n < 0.) alpha_n += (M_PI * 2);
|
||||
return alpha_n;
|
||||
inline double norm_angle(double alpha) {
|
||||
double alpha_n = fmod(alpha, M_PI * 2);
|
||||
while (alpha_n < 0.) alpha_n += (M_PI * 2);
|
||||
return alpha_n;
|
||||
}
|
||||
|
||||
|
||||
class BLDC {
|
||||
public:
|
||||
struct Config {
|
||||
double inertia = 0.0005; /* aka 'J' in kg/(m^2) */
|
||||
double damping = 0.000089; /* aka 'B' in Nm/(rad/s) */
|
||||
double static_friction = 0.0; /* in Nm */
|
||||
//double Kv = 0.0042; /* motor constant in RPM/V */
|
||||
double Ke = 0.0042; /* back emf constant in V/rad/s*/
|
||||
double L = 0.0027; /* Coil inductance in H */
|
||||
double M = -0.000069; /* Mutual coil inductance in H */
|
||||
double R = 2.875; /* Coil resistence in Ohm */
|
||||
int NbPoles = 2; /* NbPoles / 2 = Number of pole pairs (you count the permanent magnets on the rotor to get NbPoles) */
|
||||
double inertia = 0.0005; /* aka 'J' in kg/(m^2) */
|
||||
double damping = 0.000089; /* aka 'B' in Nm/(rad/s) */
|
||||
double static_friction = 0.0; /* in Nm */
|
||||
// double Kv = 0.0042; /* motor constant in RPM/V */
|
||||
double Ke = 0.0042; /* back emf constant in V/rad/s*/
|
||||
double L = 0.0027; /* Coil inductance in H */
|
||||
double M = -0.000069; /* Mutual coil inductance in H */
|
||||
double R = 2.875; /* Coil resistence in Ohm */
|
||||
int NbPoles =
|
||||
2; /* NbPoles / 2 = Number of pole pairs (you count the permanent magnets on the rotor to get NbPoles) */
|
||||
};
|
||||
|
||||
using StateVector = std::array<double, 5>;
|
||||
|
||||
struct State{
|
||||
double& theta; /* angle of the rotor */
|
||||
double& omega; /* angular speed of the rotor */
|
||||
double& ia; /* phase a current */
|
||||
double& ib; /* phase b current */
|
||||
double& ic; /* phase c current */
|
||||
explicit State(StateVector& v):theta(v[0]), omega(v[1]), ia(v[2]), ib(v[3]), ic(v[4]){}
|
||||
State(State&&) = delete;
|
||||
State(const State&) = delete;
|
||||
State& operator=(const State&) = delete; // Copy assignment operator
|
||||
State& operator=(const State&&) = delete; // Move assignment operator
|
||||
~State(){}
|
||||
void init(){
|
||||
struct State {
|
||||
double θ /* angle of the rotor */
|
||||
double ω /* angular speed of the rotor */
|
||||
double &ia; /* phase a current */
|
||||
double &ib; /* phase b current */
|
||||
double ⁣ /* phase c current */
|
||||
explicit State(StateVector &v)
|
||||
: theta(v[0])
|
||||
, omega(v[1])
|
||||
, ia(v[2])
|
||||
, ib(v[3])
|
||||
, ic(v[4]) {}
|
||||
State(State &&) = delete;
|
||||
State(const State &) = delete;
|
||||
State &operator=(const State &) = delete; // Copy assignment operator
|
||||
State &operator=(const State &&) = delete; // Move assignment operator
|
||||
~State() {}
|
||||
void init() {
|
||||
theta = ia = ib = ic = 0;
|
||||
omega = 0.;
|
||||
}
|
||||
@ -57,49 +86,46 @@ public:
|
||||
|
||||
virtual ~BLDC();
|
||||
|
||||
void set_input(std::array<double, 3> vin){
|
||||
this->vin=vin;
|
||||
}
|
||||
void set_input(std::array<double, 3> vin) { this->vin = vin; }
|
||||
|
||||
void run(double dt);
|
||||
|
||||
void printToStream(std::ostream&) const;
|
||||
void printToStream(std::ostream &) const;
|
||||
|
||||
double get_current_time(){return current_time;}
|
||||
double get_current_time() { return current_time; }
|
||||
|
||||
std::tuple<double, double, double> get_voltages(){
|
||||
return std::tuple<double, double, double>(
|
||||
voltages[VA]+voltages[EA]+state.ia*config.R,
|
||||
voltages[VB]+voltages[EB]+state.ib*config.R,
|
||||
voltages[VC]+voltages[EC]+state.ic*config.R
|
||||
);
|
||||
std::array<double, 7> get_voltages() {
|
||||
return std::array<double, 7>{voltages[VA], voltages[VB], voltages[VC], voltages[VCENTER],
|
||||
voltages[EA], voltages[EB], voltages[EC]};
|
||||
}
|
||||
const State& getState(){ return state;}
|
||||
const State &getState() { return state; }
|
||||
|
||||
void setLoad(double torque) { torque_load = torque; }
|
||||
|
||||
const double dt = 0.00000001;
|
||||
|
||||
void setLoad(double torque){torque_load=torque;}
|
||||
protected:
|
||||
Config config;
|
||||
StateVector stateVector;
|
||||
State state;
|
||||
std::array<double, 3> vin;
|
||||
double current_time = 0.0;
|
||||
double torque_load=0.0;
|
||||
double etorque=0.0, mtorque=0.0;
|
||||
const double dt = 0.000001;
|
||||
double torque_load = 0.0001;
|
||||
double etorque = 0.0, mtorque = 0.0;
|
||||
std::array<double, 7> voltages;
|
||||
enum VoltageNames {EA=0, EB=1, EC=2, VA=3, VB=4, VC=5, VCENTER=6};
|
||||
double calc_bemf_factor(const State& state, double theta );
|
||||
void calc_back_emf(const State& state, double theta_e );
|
||||
enum VoltageNames { EA = 0, EB = 1, EC = 2, VA = 3, VB = 4, VC = 5, VCENTER = 6 };
|
||||
double calc_bemf_factor(const State &state, double theta);
|
||||
void calc_back_emf(const State &state, double theta_e);
|
||||
void calc_voltages();
|
||||
// ODE part
|
||||
//boost::numeric::odeint::runge_kutta4< StateVector > stepper;
|
||||
//boost::numeric::odeint::runge_kutta_cash_karp54<StateVector > stepper;
|
||||
//using stepper_type = odeint::runge_kutta_dopri5<StateVector>;
|
||||
//using stepper_type = odeint::runge_kutta_cash_karp54< StateVector>;
|
||||
using stepper_type = odeint::runge_kutta_fehlberg78< StateVector>;
|
||||
void rotor_dyn( const StateVector& x , StateVector& dxdt , const double t );
|
||||
// boost::numeric::odeint::runge_kutta4< StateVector > stepper;
|
||||
// boost::numeric::odeint::runge_kutta_cash_karp54<StateVector > stepper;
|
||||
// using stepper_type = odeint::runge_kutta_dopri5<StateVector>;
|
||||
// using stepper_type = odeint::runge_kutta_cash_karp54< StateVector>;
|
||||
using stepper_type = odeint::runge_kutta_fehlberg78<StateVector>;
|
||||
void rotor_dyn(const StateVector &x, StateVector &dxdt, const double t);
|
||||
};
|
||||
|
||||
std::ostream& operator<<(std::ostream& os, const BLDC& bldc);
|
||||
std::ostream &operator<<(std::ostream &os, const BLDC &bldc);
|
||||
|
||||
#endif /* BLDC_H_ */
|
||||
|
@ -1,36 +1,66 @@
|
||||
/*
|
||||
* dcmotor.h
|
||||
/*******************************************************************************
|
||||
* Copyright (C) 2018 MINRES Technologies GmbH
|
||||
* All rights reserved.
|
||||
*
|
||||
* Created on: 25.07.2018
|
||||
* Author: eyck
|
||||
*/
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef _SYSC_TOP_DCMOTOR_H_
|
||||
#define _SYSC_TOP_DCMOTOR_H_
|
||||
|
||||
#include "BLDC.h"
|
||||
#include "cci_configuration"
|
||||
#include "scc/traceable.h"
|
||||
#include <systemc>
|
||||
|
||||
namespace sysc {
|
||||
|
||||
class dc_motor: public sc_core::sc_module, public scc::traceable {
|
||||
class dc_motor : public sc_core::sc_module, public scc::traceable {
|
||||
public:
|
||||
SC_HAS_PROCESS(dc_motor);
|
||||
SC_HAS_PROCESS(dc_motor);// NOLINT
|
||||
|
||||
sc_core::sc_in<double> va_i, vb_i, vc_i;
|
||||
sc_core::sc_out<double> va_o, vb_o, vc_o;
|
||||
sc_core::sc_out<double> va_o, vb_o, vc_o, vcenter_o;
|
||||
|
||||
dc_motor(const sc_core::sc_module_name& nm );
|
||||
dc_motor(const sc_core::sc_module_name &nm);
|
||||
|
||||
virtual ~dc_motor();
|
||||
|
||||
void trace(sc_core::sc_trace_file *trf) override;
|
||||
void trace(sc_core::sc_trace_file *trf) const override;
|
||||
|
||||
cci::cci_param<sc_core::sc_time> max_integ_step;
|
||||
cci::cci_param<double> load;
|
||||
|
||||
private:
|
||||
void thread(void);
|
||||
BLDC bldc_model;
|
||||
const BLDC::State& bldc_state;
|
||||
const BLDC::State &bldc_state;
|
||||
std::array<double, 7> vout;
|
||||
};
|
||||
|
||||
} /* namespace sysc */
|
||||
|
@ -1,9 +1,34 @@
|
||||
/*
|
||||
* h_bridge.h
|
||||
/*******************************************************************************
|
||||
* Copyright (C) 2018 MINRES Technologies GmbH
|
||||
* All rights reserved.
|
||||
*
|
||||
* Created on: 25.07.2018
|
||||
* Author: eyck
|
||||
*/
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef RISCV_SC_INCL_SYSC_TOP_H_BRIDGE_H_
|
||||
#define RISCV_SC_INCL_SYSC_TOP_H_BRIDGE_H_
|
||||
@ -13,9 +38,9 @@
|
||||
|
||||
namespace sysc {
|
||||
|
||||
class h_bridge: public sc_core::sc_module {
|
||||
class h_bridge : public sc_core::sc_module {
|
||||
public:
|
||||
SC_HAS_PROCESS(h_bridge);
|
||||
SC_HAS_PROCESS(h_bridge);// NOLINT
|
||||
|
||||
sc_core::sc_in<sc_dt::sc_logic> ha_i, la_i;
|
||||
sc_core::sc_in<sc_dt::sc_logic> hb_i, lb_i;
|
||||
@ -25,13 +50,15 @@ public:
|
||||
|
||||
cci::cci_param<double> vcc;
|
||||
|
||||
h_bridge(const sc_core::sc_module_name& nm);
|
||||
h_bridge(const sc_core::sc_module_name &nm);
|
||||
|
||||
virtual ~h_bridge();
|
||||
|
||||
private:
|
||||
void ain_cb();
|
||||
void bin_cb();
|
||||
void cin_cb();
|
||||
void write_output(sc_dt::sc_logic h_i, sc_dt::sc_logic l_i, sc_core::sc_out<double> &v_o);
|
||||
};
|
||||
|
||||
} /* namespace sysc */
|
||||
|
68
platform/incl/sysc/top/hifive1.h
Normal file
68
platform/incl/sysc/top/hifive1.h
Normal file
@ -0,0 +1,68 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (C) 2018 MINRES Technologies GmbH
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef _SIFIVE_HIFIVE1_H_
|
||||
#define _SIFIVE_HIFIVE1_H_
|
||||
|
||||
#include <sysc/top/terminal.h>
|
||||
#include <sysc/top/mcp_adc.h>
|
||||
#include "tlm/tlm_signal_sockets.h"
|
||||
#include <boost/preprocessor.hpp>
|
||||
#include <systemc>
|
||||
#include <sysc/SiFive/fe310.h>
|
||||
|
||||
namespace sysc {
|
||||
|
||||
struct hifive1 : public sc_core::sc_module {
|
||||
|
||||
SC_HAS_PROCESS(hifive1);
|
||||
|
||||
sc_core::sc_in<bool> erst_n;
|
||||
sc_core::sc_in<double> vref_i;
|
||||
#define PORT_DECL(z, n, _) sc_core::sc_in<double> adc_ch##n##_i;
|
||||
BOOST_PP_REPEAT(8, PORT_DECL, _);
|
||||
#undef PORT_DECL
|
||||
sc_core::sc_out<sc_dt::sc_logic> ha_o, la_o, hb_o, lb_o,hc_o, lc_o;
|
||||
|
||||
hifive1(sc_core::sc_module_name nm);
|
||||
|
||||
protected:
|
||||
sc_core::sc_vector<tlm::tlm_signal<sc_dt::sc_logic>> s_gpio;
|
||||
sc_core::sc_vector<scc::tlm_signal_logic_in> h_bridge;
|
||||
fe310 i_fe310;
|
||||
terminal i_terminal;
|
||||
mcp_3208 i_adc;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif /* _SYSC_SIFIVE_HIFIVE1_H_ */
|
@ -1,47 +0,0 @@
|
||||
/*
|
||||
* mcp3008.h
|
||||
*
|
||||
* Created on: 17.07.2018
|
||||
* Author: eyck
|
||||
*/
|
||||
|
||||
#ifndef _SYSC_TOP_MCP3008_H_
|
||||
#define _SYSC_TOP_MCP3008_H_
|
||||
|
||||
#include "scc/signal_target_mixin.h"
|
||||
#include "scc/signal_initiator_mixin.h"
|
||||
#include "sysc/tlm_extensions.h"
|
||||
#include <tlm/tlm_signal.h>
|
||||
#include "cci_configuration"
|
||||
#include <sysc/utils/sc_vector.h>
|
||||
#include <sysc/kernel/sc_module.h>
|
||||
|
||||
namespace sysc {
|
||||
|
||||
class mcp3008: public sc_core::sc_module {
|
||||
public:
|
||||
SC_HAS_PROCESS(mcp3008);
|
||||
scc::tlm_signal_logic_in sck_i;
|
||||
scc::tlm_signal_logic_out miso_o;
|
||||
scc::tlm_signal_logic_in mosi_i;
|
||||
scc::tlm_signal_logic_in cs_i;
|
||||
|
||||
sc_core::sc_in<double> vref_i;
|
||||
sc_core::sc_vector<sc_core::sc_in<double>> ch_i;
|
||||
|
||||
mcp3008(sc_core::sc_module_name nm);
|
||||
virtual ~mcp3008();
|
||||
|
||||
private:
|
||||
tlm::tlm_sync_enum receive(tlm::tlm_signal_gp<sc_dt::sc_logic> &, tlm::tlm_phase &, sc_core::sc_time &);
|
||||
void do_conversion();
|
||||
unsigned idx, rx_bits;
|
||||
std::array<uint8_t, 3> rx_bytes, tx_bytes;
|
||||
sc_dt::sc_logic mosi_v, miso_v, cs_v;
|
||||
sysc::tlm_signal_spi_extension* ext, tx_ext;
|
||||
sc_core::sc_time last_tx_start;
|
||||
};
|
||||
|
||||
} /* namespace sysc */
|
||||
|
||||
#endif /* _SYSC_TOP_MCP3008_H_ */
|
120
platform/incl/sysc/top/mcp_adc.h
Normal file
120
platform/incl/sysc/top/mcp_adc.h
Normal file
@ -0,0 +1,120 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (C) 2018 MINRES Technologies GmbH
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef _SYSC_TOP_MCP3008_H_
|
||||
#define _SYSC_TOP_MCP3008_H_
|
||||
|
||||
#include "cci_configuration"
|
||||
#include "scc/signal_initiator_mixin.h"
|
||||
#include "scc/signal_target_mixin.h"
|
||||
#include "sysc/tlm_extensions.h"
|
||||
#include <sysc/kernel/sc_module.h>
|
||||
#include <sysc/utils/sc_vector.h>
|
||||
#include <tlm/tlm_signal.h>
|
||||
|
||||
namespace sysc {
|
||||
|
||||
class mcp_adc : public sc_core::sc_module {
|
||||
public:
|
||||
|
||||
template <typename TYPE>
|
||||
static std::unique_ptr<mcp_adc> create(sc_core::sc_module_name nm);
|
||||
|
||||
scc::tlm_signal_logic_in sck_i;
|
||||
scc::tlm_signal_logic_out miso_o;
|
||||
scc::tlm_signal_logic_in mosi_i;
|
||||
scc::tlm_signal_logic_in cs_i;
|
||||
|
||||
sc_core::sc_in<double> vref_i;
|
||||
sc_core::sc_vector<sc_core::sc_in<double>> ch_i;
|
||||
|
||||
mcp_adc(mcp_adc &other) = delete;
|
||||
|
||||
mcp_adc(mcp_adc &&other) = delete;
|
||||
|
||||
mcp_adc &operator=(mcp_adc &other) = delete;
|
||||
|
||||
mcp_adc &operator=(mcp_adc &&other) = delete;
|
||||
|
||||
~mcp_adc() override = default;
|
||||
|
||||
protected:
|
||||
mcp_adc(sc_core::sc_module_name nm, size_t channel_no)
|
||||
: sc_core::sc_module(nm)
|
||||
, NAMED(sck_i)
|
||||
, NAMED(miso_o)
|
||||
, NAMED(mosi_i)
|
||||
, NAMED(cs_i)
|
||||
, NAMED(vref_i)
|
||||
, NAMED(ch_i, channel_no) {}
|
||||
};
|
||||
|
||||
class mcp_3008 : public mcp_adc {
|
||||
public:
|
||||
SC_HAS_PROCESS(mcp_3008);// NOLINT
|
||||
|
||||
mcp_3008(sc_core::sc_module_name nm);
|
||||
~mcp_3008() override = default;
|
||||
|
||||
private:
|
||||
tlm::tlm_sync_enum receive(tlm::tlm_signal_gp<sc_dt::sc_logic> &, tlm::tlm_phase &, sc_core::sc_time &);
|
||||
void do_conversion();
|
||||
unsigned idx, rx_bits;
|
||||
std::array<uint8_t, 3> rx_bytes, tx_bytes;
|
||||
sc_dt::sc_logic mosi_v, miso_v, cs_v;
|
||||
sysc::tlm_signal_spi_extension *ext, tx_ext;
|
||||
sc_core::sc_time last_tx_start;
|
||||
};
|
||||
|
||||
class mcp_3208 : public mcp_adc {
|
||||
public:
|
||||
SC_HAS_PROCESS(mcp_3208);// NOLINT
|
||||
|
||||
mcp_3208(sc_core::sc_module_name nm);
|
||||
~mcp_3208() override = default;
|
||||
|
||||
private:
|
||||
tlm::tlm_sync_enum receive(tlm::tlm_signal_gp<sc_dt::sc_logic> &, tlm::tlm_phase &, sc_core::sc_time &);
|
||||
void sample_inputs();
|
||||
void do_conversion();
|
||||
unsigned idx, rx_bits, byte_offs, bit_offs;
|
||||
std::array<uint8_t, 3> rx_bytes, tx_bytes;
|
||||
sc_dt::sc_logic mosi_v, sck_v, cs_v;
|
||||
sysc::tlm_signal_spi_extension *ext, tx_ext;
|
||||
sc_core::sc_time last_tx_start;
|
||||
sc_core::sc_event clk_sample_evt;
|
||||
};
|
||||
|
||||
|
||||
} /* namespace sysc */
|
||||
|
||||
#endif /* _SYSC_TOP_MCP3008_H_ */
|
@ -1,42 +1,62 @@
|
||||
/*
|
||||
* system.h
|
||||
/*******************************************************************************
|
||||
* Copyright (C) 2018 MINRES Technologies GmbH
|
||||
* All rights reserved.
|
||||
*
|
||||
* Created on: 11.07.2018
|
||||
* Author: eyck
|
||||
*/
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __SYSC_GENERAL_SYSTEM_H_
|
||||
#define __SYSC_GENERAL_SYSTEM_H_
|
||||
|
||||
#include <systemc>
|
||||
#include "sysc/SiFive/hifive1.h"
|
||||
#include "mcp3008.h"
|
||||
#include "terminal.h"
|
||||
#include "h_bridge.h"
|
||||
#include "dcmotor.h"
|
||||
#include "h_bridge.h"
|
||||
#include <memory>
|
||||
#include <systemc>
|
||||
#include "hifive1.h"
|
||||
|
||||
namespace sysc {
|
||||
|
||||
class system: sc_core::sc_module {
|
||||
class system : sc_core::sc_module {
|
||||
public:
|
||||
SC_HAS_PROCESS(system);
|
||||
SC_HAS_PROCESS(system);// NOLINT
|
||||
|
||||
system(sc_core::sc_module_name nm);
|
||||
virtual ~system();
|
||||
|
||||
|
||||
private:
|
||||
sc_core::sc_vector<tlm::tlm_signal<sc_dt::sc_logic>> s_gpio;
|
||||
sc_core::sc_signal<sc_dt::sc_logic> s_ha, s_la, s_hb, s_lb, s_hc, s_lc;
|
||||
sc_core::sc_signal<bool> s_rst_n;
|
||||
sc_core::sc_signal<double> s_vref, s_va, s_vb, s_vc, s_vasens, s_vbsens, s_vcsens;
|
||||
sc_core::sc_signal<double> s_vref, s_va, s_vb, s_vc, s_vasens, s_vbsens, s_vcsens, s_vcentersens;
|
||||
sc_core::sc_vector<sc_core::sc_signal<double>> s_ana;
|
||||
sysc::hifive1 i_platform;
|
||||
sysc::terminal i_terminal;
|
||||
sysc::mcp3008 i_adc;
|
||||
sysc::hifive1 i_hifive1;
|
||||
sysc::h_bridge i_h_bridge;
|
||||
sysc::dc_motor i_motor;
|
||||
void gen_por();
|
||||
};
|
||||
|
||||
}
|
||||
#endif /* __SYSC_GENERAL_SYSTEM_H_ */
|
||||
|
@ -1,31 +1,56 @@
|
||||
/*
|
||||
* terminal.h
|
||||
/*******************************************************************************
|
||||
* Copyright (C) 2018 MINRES Technologies GmbH
|
||||
* All rights reserved.
|
||||
*
|
||||
* Created on: 07.07.2018
|
||||
* Author: eyck
|
||||
*/
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef _SYSC_TOP_TERMINAL_H_
|
||||
#define _SYSC_TOP_TERMINAL_H_
|
||||
|
||||
#include "scc/signal_target_mixin.h"
|
||||
#include "scc/signal_initiator_mixin.h"
|
||||
#include "tlm/tlm_signal.h"
|
||||
#include "cci_configuration"
|
||||
#include <sysc/kernel/sc_module.h>
|
||||
#include "scc/signal_initiator_mixin.h"
|
||||
#include "scc/signal_target_mixin.h"
|
||||
#include "tlm/tlm_signal.h"
|
||||
#include <memory>
|
||||
#include <sysc/kernel/sc_module.h>
|
||||
|
||||
namespace sysc {
|
||||
class WsHandler;
|
||||
|
||||
class terminal: public sc_core::sc_module {
|
||||
class terminal : public sc_core::sc_module {
|
||||
public:
|
||||
scc::tlm_signal_logic_out tx_o;
|
||||
scc::tlm_signal_logic_in rx_i;
|
||||
scc::tlm_signal_logic_in rx_i;
|
||||
|
||||
terminal();
|
||||
|
||||
terminal(const sc_core::sc_module_name& nm);
|
||||
terminal(const sc_core::sc_module_name &nm);
|
||||
|
||||
virtual ~terminal();
|
||||
|
||||
@ -33,11 +58,11 @@ public:
|
||||
|
||||
protected:
|
||||
void before_end_of_elaboration();
|
||||
void receive(tlm::tlm_signal_gp<sc_dt::sc_logic>& gp, sc_core::sc_time& delay);
|
||||
void receive(tlm::tlm_signal_gp<sc_dt::sc_logic> &gp, sc_core::sc_time &delay);
|
||||
|
||||
std::vector<uint8_t> queue;
|
||||
std::shared_ptr<sysc::WsHandler> handler;
|
||||
sc_core::sc_time last_tx_start=sc_core::SC_ZERO_TIME;
|
||||
sc_core::sc_time last_tx_start = sc_core::SC_ZERO_TIME;
|
||||
};
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user