KiCad PCB EDA Suite
SPICE_GENERATOR Class Reference

#include <spice_generator.h>

Inheritance diagram for SPICE_GENERATOR:
SPICE_GENERATOR_BEHAVIORAL SPICE_GENERATOR_IDEAL SPICE_GENERATOR_KIBIS SPICE_GENERATOR_L_MUTUAL SPICE_GENERATOR_RAW_SPICE SPICE_GENERATOR_R_POT SPICE_GENERATOR_SOURCE SPICE_GENERATOR_SPICE SPICE_GENERATOR_SUBCKT SPICE_GENERATOR_SWITCH SPICE_GENERATOR_TLINE

Public Member Functions

 SPICE_GENERATOR (const SIM_MODEL &aModel)
 
virtual ~SPICE_GENERATOR ()=default
 
virtual std::string ModelName (const SPICE_ITEM &aItem) const
 
virtual std::string ModelLine (const SPICE_ITEM &aItem) const
 
virtual std::string ItemLine (const SPICE_ITEM &aItem) const
 
virtual std::string ItemName (const SPICE_ITEM &aItem) const
 
virtual std::string ItemPins (const SPICE_ITEM &aItem) const
 
virtual std::string ItemModelName (const SPICE_ITEM &aItem) const
 
virtual std::string ItemParams () const
 
virtual std::string TunerCommand (const SPICE_ITEM &aItem, double aValue) const
 
virtual std::vector< std::string > CurrentNames (const SPICE_ITEM &aItem) const
 
virtual std::string Preview (const SPICE_ITEM &aItem) const
 

Protected Member Functions

virtual std::vector< std::reference_wrapper< const SIM_MODEL::PIN > > GetPins () const
 
virtual std::vector< std::reference_wrapper< const SIM_MODEL::PARAM > > GetInstanceParams () const
 

Protected Attributes

const SIM_MODELm_model
 

Detailed Description

Definition at line 45 of file spice_generator.h.

Constructor & Destructor Documentation

◆ SPICE_GENERATOR()

SPICE_GENERATOR::SPICE_GENERATOR ( const SIM_MODEL aModel)
inline

Definition at line 49 of file spice_generator.h.

49: m_model( aModel ) {}
const SIM_MODEL & m_model

◆ ~SPICE_GENERATOR()

virtual SPICE_GENERATOR::~SPICE_GENERATOR ( )
virtualdefault

Member Function Documentation

◆ CurrentNames()

std::vector< std::string > SPICE_GENERATOR::CurrentNames ( const SPICE_ITEM aItem) const
virtual

Reimplemented in SPICE_GENERATOR_KIBIS, SPICE_GENERATOR_NGSPICE, and SPICE_GENERATOR_SUBCKT.

Definition at line 193 of file spice_generator.cpp.

194{
195 return { fmt::format( "I({})", ItemName( aItem ) ) };
196}
virtual std::string ItemName(const SPICE_ITEM &aItem) const

References ItemName().

Referenced by SPICE_GENERATOR_NGSPICE::CurrentNames().

◆ GetInstanceParams()

std::vector< std::reference_wrapper< const SIM_MODEL::PARAM > > SPICE_GENERATOR::GetInstanceParams ( ) const
protectedvirtual

Reimplemented in SPICE_GENERATOR_KIBIS.

Definition at line 213 of file spice_generator.cpp.

214{
215 std::vector<std::reference_wrapper<const SIM_MODEL::PARAM>> instanceParams;
216
217 for( const SIM_MODEL::PARAM& param : m_model.GetParams() )
218 {
219 if( param.info.isSpiceInstanceParam )
220 instanceParams.emplace_back( param );
221 }
222
223 return instanceParams;
224}
std::vector< std::reference_wrapper< const PARAM > > GetParams() const
Definition: sim_model.cpp:822

References SIM_MODEL::GetParams(), and m_model.

Referenced by ItemParams(), SPICE_GENERATOR_L_MUTUAL::ItemParams(), SPICE_GENERATOR_RAW_SPICE::ItemParams(), and SPICE_GENERATOR_SWITCH::ItemParams().

◆ GetPins()

virtual std::vector< std::reference_wrapper< const SIM_MODEL::PIN > > SPICE_GENERATOR::GetPins ( ) const
inlineprotectedvirtual

Reimplemented in SPICE_GENERATOR_SWITCH.

Definition at line 68 of file spice_generator.h.

69 {
70 return m_model.GetPins();
71 }
std::vector< std::reference_wrapper< const PIN > > GetPins() const
Definition: sim_model.cpp:749

References SIM_MODEL::GetPins(), and m_model.

Referenced by SPICE_GENERATOR_KIBIS::CurrentNames(), SPICE_GENERATOR_SUBCKT::CurrentNames(), ItemLine(), ItemPins(), and SPICE_GENERATOR_RAW_SPICE::ItemPins().

◆ ItemLine()

std::string SPICE_GENERATOR::ItemLine ( const SPICE_ITEM aItem) const
virtual

Reimplemented in SPICE_GENERATOR_BEHAVIORAL, SPICE_GENERATOR_IDEAL, SPICE_GENERATOR_SOURCE, and SPICE_GENERATOR_SWITCH.

Definition at line 102 of file spice_generator.cpp.

103{
104 SPICE_ITEM item = aItem;
105
106 if( item.pinNumbers.empty() )
107 {
108 for( int i = 0; i < m_model.GetPinCount(); ++i )
109 item.pinNumbers.push_back( fmt::format( "{}", i + 1 ) );
110 }
111
112 if( item.pinNetNames.empty() )
113 {
114 for( const SIM_MODEL::PIN& pin : GetPins() )
115 item.pinNetNames.push_back( pin.name );
116 }
117
118 std::string result;
119 result.append( ItemName( aItem ) );
120 result.append( ItemPins( aItem ) );
121 result.append( ItemModelName( aItem ) );
122 result.append( ItemParams() );
123 result.append( "\n" );
124 return result;
125}
int GetPinCount() const
Definition: sim_model.h:456
virtual std::string ItemPins(const SPICE_ITEM &aItem) const
virtual std::vector< std::reference_wrapper< const SIM_MODEL::PIN > > GetPins() const
virtual std::string ItemParams() const
virtual std::string ItemModelName(const SPICE_ITEM &aItem) const
std::vector< std::string > pinNetNames
std::vector< std::string > pinNumbers

References SIM_MODEL::GetPinCount(), GetPins(), ItemModelName(), ItemName(), ItemParams(), ItemPins(), m_model, pin, SPICE_ITEM::pinNetNames, and SPICE_ITEM::pinNumbers.

Referenced by SPICE_GENERATOR_BEHAVIORAL::ItemLine(), SPICE_GENERATOR_IDEAL::ItemLine(), SPICE_GENERATOR_SOURCE::ItemLine(), SPICE_GENERATOR_SWITCH::ItemLine(), Preview(), SPICE_GENERATOR_RAW_SPICE::Preview(), and SPICE_GENERATOR_SPICE::Preview().

◆ ItemModelName()

std::string SPICE_GENERATOR::ItemModelName ( const SPICE_ITEM aItem) const
virtual

Reimplemented in SPICE_GENERATOR_RAW_SPICE.

Definition at line 162 of file spice_generator.cpp.

163{
164 return fmt::format( " {}", aItem.modelName );
165}
std::string modelName

References SPICE_ITEM::modelName.

Referenced by ItemLine().

◆ ItemName()

std::string SPICE_GENERATOR::ItemName ( const SPICE_ITEM aItem) const
virtual

◆ ItemParams()

std::string SPICE_GENERATOR::ItemParams ( ) const
virtual

Reimplemented in SPICE_GENERATOR_L_MUTUAL, SPICE_GENERATOR_RAW_SPICE, and SPICE_GENERATOR_SWITCH.

Definition at line 168 of file spice_generator.cpp.

169{
170 std::string result;
171
172 for( const SIM_MODEL::PARAM& param : GetInstanceParams() )
173 {
174 std::string name = param.info.spiceInstanceName.empty() ? param.info.name
175 : param.info.spiceInstanceName;
176 std::string value = SIM_VALUE::ToSpice( param.value );
177
178 if( value != "" )
179 result.append( fmt::format( " {}={}", name, value ) );
180 }
181
182 return result;
183}
const char * name
Definition: DXF_plotter.cpp:56
static std::string ToSpice(const std::string &aString)
Definition: sim_value.h:84
virtual std::vector< std::reference_wrapper< const SIM_MODEL::PARAM > > GetInstanceParams() const

References GetInstanceParams(), name, and SIM_VALUE::ToSpice().

Referenced by ItemLine().

◆ ItemPins()

std::string SPICE_GENERATOR::ItemPins ( const SPICE_ITEM aItem) const
virtual

Reimplemented in SPICE_GENERATOR_RAW_SPICE.

Definition at line 137 of file spice_generator.cpp.

138{
139 std::string result;
140 int ncCounter = 0;
141
142 for( const SIM_MODEL::PIN& pin : GetPins() )
143 {
144 auto it = std::find( aItem.pinNumbers.begin(), aItem.pinNumbers.end(),
145 pin.symbolPinNumber );
146
147 if( it == aItem.pinNumbers.end() )
148 {
149 result.append( fmt::format( " NC-{}-{}", aItem.refName, ncCounter++ ) );
150 }
151 else
152 {
153 long symbolPinIndex = std::distance( aItem.pinNumbers.begin(), it );
154 result.append( fmt::format( " {}", aItem.pinNetNames.at( symbolPinIndex ) ) );
155 }
156 }
157
158 return result;
159}
static float distance(const SFVEC2UI &a, const SFVEC2UI &b)

References distance(), GetPins(), pin, SPICE_ITEM::pinNetNames, SPICE_ITEM::pinNumbers, and SPICE_ITEM::refName.

Referenced by ItemLine().

◆ ModelLine()

std::string SPICE_GENERATOR::ModelLine ( const SPICE_ITEM aItem) const
virtual

Reimplemented in SPICE_GENERATOR_BEHAVIORAL, SPICE_GENERATOR_IDEAL, SPICE_GENERATOR_KIBIS, SPICE_GENERATOR_R_POT, SPICE_GENERATOR_RAW_SPICE, SPICE_GENERATOR_SOURCE, SPICE_GENERATOR_SUBCKT, and SPICE_GENERATOR_TLINE.

Definition at line 44 of file spice_generator.cpp.

45{
46 if( !m_model.requiresSpiceModelLine( aItem ) )
47 return "";
48
49 std::string result;
50
51 result.append( fmt::format( ".model {} ", aItem.modelName ) );
52 size_t indentLength = result.length();
53
54 const SIM_MODEL::SPICE_INFO& spiceInfo = m_model.GetSpiceInfo();
55 result.append( spiceInfo.modelType );
56
57 if ( !spiceInfo.isDefaultLevel && !spiceInfo.level.empty() )
58 result.append( fmt::format( " level={}", spiceInfo.level ) );
59
60 if ( !spiceInfo.version.empty() )
61 result.append( fmt::format( " version={}", spiceInfo.version ) );
62
63 result.append( "\n" );
64
65 for( const SIM_MODEL::PARAM& param : m_model.GetParams() )
66 {
67 if( param.info.isSpiceInstanceParam )
68 continue;
69
70 std::string name;
71 std::string value;
72
73 if( !param.info.spiceModelName.empty() )
74 {
75 name = param.info.spiceModelName;
76 }
77 else
78 {
79 // Because of collisions with instance parameters, we append some model parameters
80 // with "_".
81 if( boost::ends_with( param.info.name, "_" ) )
82 name = param.info.name.substr( 0, param.info.name.length() - 1 );
83 else
84 name = param.info.name;
85 }
86
87 value = SIM_VALUE::ToSpice( param.value );
88
89 if( value == "" )
90 continue;
91
92 result.append( fmt::format( "+{}{}={}\n",
93 std::string( indentLength - 1, ' ' ),
94 name,
95 value ) );
96 }
97
98 return result;
99}
virtual bool requiresSpiceModelLine(const SPICE_ITEM &aItem) const
Definition: sim_model.cpp:1055
std::string modelType
Definition: sim_model.h:280
std::string level
Definition: sim_model.h:282
std::string version
Definition: sim_model.h:285

References SIM_MODEL::GetParams(), SIM_MODEL::GetSpiceInfo(), SIM_MODEL::SPICE_INFO::isDefaultLevel, SIM_MODEL::SPICE_INFO::level, m_model, SPICE_ITEM::modelName, SIM_MODEL::SPICE_INFO::modelType, name, SIM_MODEL::requiresSpiceModelLine(), SIM_VALUE::ToSpice(), and SIM_MODEL::SPICE_INFO::version.

Referenced by Preview(), and SPICE_GENERATOR_SPICE::Preview().

◆ ModelName()

std::string SPICE_GENERATOR::ModelName ( const SPICE_ITEM aItem) const
virtual

Reimplemented in SPICE_GENERATOR_KIBIS.

Definition at line 32 of file spice_generator.cpp.

33{
34 if( aItem.baseModelName == "" )
35 return fmt::format( "__{}", aItem.refName );
36
37 if( m_model.requiresSpiceModelLine( aItem ) )
38 return fmt::format( "{}.{}", aItem.refName, aItem.baseModelName );
39
40 return aItem.baseModelName;
41}
std::string baseModelName

References SPICE_ITEM::baseModelName, m_model, SPICE_ITEM::refName, and SIM_MODEL::requiresSpiceModelLine().

Referenced by NETLIST_EXPORTER_SPICE::readModel().

◆ Preview()

std::string SPICE_GENERATOR::Preview ( const SPICE_ITEM aItem) const
virtual

Reimplemented in SPICE_GENERATOR_RAW_SPICE, and SPICE_GENERATOR_SPICE.

Definition at line 199 of file spice_generator.cpp.

200{
201 std::string spiceCode = ModelLine( aItem );
202
203 std::string itemLine = ItemLine( aItem );
204
205 if( spiceCode != "" )
206 spiceCode.append( "\n" );
207
208 spiceCode.append( itemLine );
209 return boost::trim_copy( spiceCode );
210}
virtual std::string ItemLine(const SPICE_ITEM &aItem) const
virtual std::string ModelLine(const SPICE_ITEM &aItem) const

References ItemLine(), and ModelLine().

Referenced by DIALOG_SIM_MODEL< T_symbol, T_field >::updateModelCodeTab().

◆ TunerCommand()

std::string SPICE_GENERATOR::TunerCommand ( const SPICE_ITEM aItem,
double  aValue 
) const
virtual

Reimplemented in SPICE_GENERATOR_IDEAL, and SPICE_GENERATOR_R_POT.

Definition at line 186 of file spice_generator.cpp.

187{
188 // No tuning available by default.
189 return "";
190}

Referenced by SIMULATOR_FRAME::applyTuners().

Member Data Documentation

◆ m_model


The documentation for this class was generated from the following files: