fq_sim/inc/devices.hpp

130 lines
3.0 KiB
C++
Raw Normal View History

#ifndef DEVICES_HPP
#define DEVICES_HPP
struct Resistor
{
int node1, node2;
double resistance;
Resistor(int n1, int n2, double r)
: node1(n1), node2(n2), resistance(r) {}
};
struct CurrentSource
{
int node1, node2;
double current;
CurrentSource(int n1, int n2, double c)
: node1(n1), node2(n2), current(c) {}
};
struct Capacitor
{
int node1, node2;
double capacitance;
double voltage;
double last_rhs;
Capacitor(int n1, int n2, double c, double v, double last_rhs)
: node1(n1), node2(n2), capacitance(c), voltage(v), last_rhs(last_rhs) {}
};
struct Inductor
{
int node1, node2;
double inductance;
double current;
double last_rhs;
Inductor(int n1, int n2, double l, double i, double last_rhs)
: node1(n1), node2(n2), inductance(l), current(i), last_rhs(last_rhs) {}
};
struct VoltageSource
{
int nodePos;
int nodeNeg;
double voltage;
double last_voltage;
VoltageSource(int pos, int neg, double v)
: nodePos(pos), nodeNeg(neg), voltage(v), last_voltage(v) {}
};
struct VCCS
{
int controlNodePos;
int controlNodeNeg;
int outputNodePos;
int outputNodeNeg;
double transconductance;
VCCS(int cnPos, int cnNeg, int onPos, int onNeg, double gm)
: controlNodePos(cnPos), controlNodeNeg(cnNeg), outputNodePos(onPos), outputNodeNeg(onNeg), transconductance(gm) {}
};
struct VCVS
{
int controlNodePos;
int controlNodeNeg;
int outputNodePos;
int outputNodeNeg;
double gain;
VCVS(int cnPos, int cnNeg, int onPos, int onNeg, double g)
: controlNodePos(cnPos), controlNodeNeg(cnNeg), outputNodePos(onPos), outputNodeNeg(onNeg), gain(g) {}
};
struct CCCS
{
int controlNodePos;
int controlNodeNeg;
int outputNodePos;
int outputNodeNeg;
double gain;
double voltage;
CCCS(int cnPos, int cnNeg, int onPos, int onNeg, double g,double v)
: controlNodePos(cnPos), controlNodeNeg(cnNeg), outputNodePos(onPos), outputNodeNeg(onNeg), gain(g) , voltage(v){}
};
struct CCVS
{
int controlNodePos;
int controlNodeNeg;
int outputNodePos;
int outputNodeNeg;
double gain;
double voltage;
CCVS(int cnPos, int cnNeg, int onPos, int onNeg, double g, double v)
: controlNodePos(cnPos), controlNodeNeg(cnNeg), outputNodePos(onPos), outputNodeNeg(onNeg), gain(g) , voltage(v){}
};
struct Diode
{
int nodeP;
int nodeN;
double Is;
double n;
Diode(int p, int n, double Is_, double n_) : nodeP(p), nodeN(n), Is(Is_), n(n_) {}
};
enum MosType
{
NMOS,
PMOS
};
struct Mosfet
{
int gate;
int source;
int drain;
double Vth;
double K;
MosType type;
Mosfet(int g, int s, int d, double Vth_, double K_, MosType type_)
: gate(g), source(s), drain(d), Vth(Vth_), K(K_), type(type_) {}
};
#endif // DEVICES_HPP