mirror of
https://github.com/holub/mame
synced 2025-06-15 00:47:03 +03:00
Added Voltage source and Current source to netlist. [Couriersud]
This commit is contained in:
parent
876d364e0f
commit
045ffafb42
50
nl_examples/vs_cs.c
Normal file
50
nl_examples/vs_cs.c
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* vs_cs.c
|
||||||
|
*
|
||||||
|
* Voltage and current source test
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "netlist/devices/net_lib.h"
|
||||||
|
|
||||||
|
NETLIST_START(rc)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* delay circuit
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Standard stuff */
|
||||||
|
|
||||||
|
SOLVER(Solver, 48000)
|
||||||
|
PARAM(Solver.ACCURACY, 1e-6)
|
||||||
|
CLOCK(clk, 20000)
|
||||||
|
|
||||||
|
/* Voltage source. Inner resistance will make clock visible */
|
||||||
|
|
||||||
|
RES(R1, 1000)
|
||||||
|
VS(VS1, 1)
|
||||||
|
NET_C(R1.1, clk)
|
||||||
|
NET_C(R1.2, VS1.P)
|
||||||
|
NET_C(GND, VS1.N)
|
||||||
|
|
||||||
|
/* Current source. Current flows from "+" to "-", thus for a source we
|
||||||
|
* need negative current
|
||||||
|
*/
|
||||||
|
|
||||||
|
RES(R2, 1000)
|
||||||
|
RES(R3, 1000)
|
||||||
|
CS(CS1, -0.001)
|
||||||
|
NET_C(CS1.P, R2.1)
|
||||||
|
NET_C(R2.2, R3.1)
|
||||||
|
NET_C(GND, CS1.N, R3.2)
|
||||||
|
|
||||||
|
CAP(C1, CAP_U(1))
|
||||||
|
NET_C(C1.1, R3.1)
|
||||||
|
NET_C(C1.2, R3.2)
|
||||||
|
|
||||||
|
|
||||||
|
LOG(tt, VS1.P)
|
||||||
|
LOG(tx, R2.2)
|
||||||
|
|
||||||
|
NETLIST_END()
|
@ -281,4 +281,56 @@ NETLIB_UPDATE_TERMINALS(D)
|
|||||||
set(m_D.G(), 0.0, m_D.Ieq());
|
set(m_D.G(), 0.0, m_D.Ieq());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------------------
|
||||||
|
// nld_VS
|
||||||
|
// ----------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
NETLIB_START(VS)
|
||||||
|
{
|
||||||
|
NETLIB_NAME(twoterm)::start();
|
||||||
|
|
||||||
|
register_param("R", m_R, 0.1);
|
||||||
|
register_param("V", m_V, 0.0);
|
||||||
|
|
||||||
|
register_terminal("P", m_P);
|
||||||
|
register_terminal("N", m_N);
|
||||||
|
}
|
||||||
|
|
||||||
|
NETLIB_RESET(VS)
|
||||||
|
{
|
||||||
|
NETLIB_NAME(twoterm)::reset();
|
||||||
|
this->set(1.0 / m_R, m_V, 0.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
NETLIB_UPDATE(VS)
|
||||||
|
{
|
||||||
|
NETLIB_NAME(twoterm)::update();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------------------
|
||||||
|
// nld_CS
|
||||||
|
// ----------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
NETLIB_START(CS)
|
||||||
|
{
|
||||||
|
NETLIB_NAME(twoterm)::start();
|
||||||
|
|
||||||
|
register_param("I", m_I, 1.0);
|
||||||
|
|
||||||
|
register_terminal("P", m_P);
|
||||||
|
register_terminal("N", m_N);
|
||||||
|
}
|
||||||
|
|
||||||
|
NETLIB_RESET(CS)
|
||||||
|
{
|
||||||
|
NETLIB_NAME(twoterm)::reset();
|
||||||
|
printf("m_I %f\n", m_I.Value());
|
||||||
|
this->set(0.0, 0.0, m_I);
|
||||||
|
}
|
||||||
|
|
||||||
|
NETLIB_UPDATE(CS)
|
||||||
|
{
|
||||||
|
NETLIB_NAME(twoterm)::update();
|
||||||
|
}
|
||||||
|
|
||||||
NETLIB_NAMESPACE_DEVICES_END()
|
NETLIB_NAMESPACE_DEVICES_END()
|
||||||
|
@ -62,6 +62,14 @@
|
|||||||
NET_REGISTER_DEV(D, _name) \
|
NET_REGISTER_DEV(D, _name) \
|
||||||
NETDEV_PARAMI(_name, model, _model)
|
NETDEV_PARAMI(_name, model, _model)
|
||||||
|
|
||||||
|
#define VS(_name, _V) \
|
||||||
|
NET_REGISTER_DEV(VS, _name) \
|
||||||
|
NETDEV_PARAMI(_name, V, _V)
|
||||||
|
|
||||||
|
#define CS(_name, _I) \
|
||||||
|
NET_REGISTER_DEV(CS, _name) \
|
||||||
|
NETDEV_PARAMI(_name, I, _I)
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
// Generic macros
|
// Generic macros
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
@ -290,6 +298,43 @@ protected:
|
|||||||
generic_diode m_D;
|
generic_diode m_D;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------------------
|
||||||
|
// nld_VS - Voltage source
|
||||||
|
//
|
||||||
|
// netlist voltage source must have inner resistance
|
||||||
|
// ----------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class NETLIB_NAME(VS) : public NETLIB_NAME(twoterm)
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ATTR_COLD NETLIB_NAME(VS)() : NETLIB_NAME(twoterm)(VS) { }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void start();
|
||||||
|
virtual void reset();
|
||||||
|
ATTR_HOT void update();
|
||||||
|
|
||||||
|
param_double_t m_R;
|
||||||
|
param_double_t m_V;
|
||||||
|
};
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------------------
|
||||||
|
// nld_CS - Current source
|
||||||
|
// ----------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class NETLIB_NAME(CS) : public NETLIB_NAME(twoterm)
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ATTR_COLD NETLIB_NAME(CS)() : NETLIB_NAME(twoterm)(CS) { }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void start();
|
||||||
|
virtual void reset();
|
||||||
|
ATTR_HOT void update();
|
||||||
|
|
||||||
|
param_double_t m_I;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
NETLIB_NAMESPACE_DEVICES_END()
|
NETLIB_NAMESPACE_DEVICES_END()
|
||||||
|
|
||||||
|
@ -53,6 +53,8 @@ void initialize_factory(factory_list_t &factory)
|
|||||||
ENTRY(VCVS, VCVS, "-")
|
ENTRY(VCVS, VCVS, "-")
|
||||||
ENTRY(VCCS, VCCS, "-")
|
ENTRY(VCCS, VCCS, "-")
|
||||||
ENTRY(CCCS, CCCS, "-")
|
ENTRY(CCCS, CCCS, "-")
|
||||||
|
ENTRY(VS, VS, "V")
|
||||||
|
ENTRY(CS, CS, "I")
|
||||||
ENTRY(dummy_input, DUMMY_INPUT, "-")
|
ENTRY(dummy_input, DUMMY_INPUT, "-")
|
||||||
ENTRY(frontier, FRONTIER_DEV, "+I,G,Q") // not intended to be used directly
|
ENTRY(frontier, FRONTIER_DEV, "+I,G,Q") // not intended to be used directly
|
||||||
ENTRY(QBJT_EB, QBJT_EB, "model")
|
ENTRY(QBJT_EB, QBJT_EB, "model")
|
||||||
|
@ -389,6 +389,8 @@ namespace netlist
|
|||||||
VCVS, // Voltage controlled voltage source
|
VCVS, // Voltage controlled voltage source
|
||||||
VCCS, // Voltage controlled current source
|
VCCS, // Voltage controlled current source
|
||||||
CCCS, // Current controlled current source
|
CCCS, // Current controlled current source
|
||||||
|
VS, // Voltage Source
|
||||||
|
CS, // Current Source
|
||||||
GND // GND device
|
GND // GND device
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user