This commit is contained in:
Jeff Young 2024-06-10 20:16:30 +01:00
parent a02cb75656
commit 4e133ae83b
10 changed files with 93 additions and 92 deletions

View File

@ -205,7 +205,7 @@ set( EESCHEMA_SIM_SRCS
sim/sim_library.cpp sim/sim_library.cpp
sim/sim_library_spice.cpp sim/sim_library_spice.cpp
sim/sim_library_kibis.cpp sim/sim_library_ibis.cpp
sim/sim_lib_mgr.cpp sim/sim_lib_mgr.cpp
sim/sim_model_serializer.cpp sim/sim_model_serializer.cpp
@ -213,7 +213,7 @@ set( EESCHEMA_SIM_SRCS
sim/sim_model_behavioral.cpp sim/sim_model_behavioral.cpp
sim/sim_model_ideal.cpp sim/sim_model_ideal.cpp
sim/sim_model_l_mutual.cpp sim/sim_model_l_mutual.cpp
sim/sim_model_kibis.cpp sim/sim_model_ibis.cpp
sim/sim_model_ngspice.cpp sim/sim_model_ngspice.cpp
sim/sim_model_ngspice_data_bjt.cpp sim/sim_model_ngspice_data_bjt.cpp
sim/sim_model_ngspice_data_bsim1.cpp sim/sim_model_ngspice_data_bsim1.cpp

View File

@ -26,9 +26,9 @@
#include <dialog_ibis_parser_reporter.h> #include <dialog_ibis_parser_reporter.h>
#include <dialog_sim_model.h> #include <dialog_sim_model.h>
#include <sim/sim_property.h> #include <sim/sim_property.h>
#include <sim/sim_library_kibis.h> #include <sim/sim_library_ibis.h>
#include <sim/sim_model.h> #include <sim/sim_model.h>
#include <sim/sim_model_kibis.h> #include <sim/sim_model_ibis.h>
#include <sim/sim_model_raw_spice.h> #include <sim/sim_model_raw_spice.h>
#include <sim/sim_model_spice_fallback.h> #include <sim/sim_model_spice_fallback.h>
#include <sim/sim_model_subckt.h> #include <sim/sim_model_subckt.h>
@ -251,43 +251,43 @@ bool DIALOG_SIM_MODEL<T>::TransferDataToWindow()
if( isIbisLoaded() && ( m_modelNameChoice->GetSelection() >= 0 ) ) if( isIbisLoaded() && ( m_modelNameChoice->GetSelection() >= 0 ) )
{ {
int idx = m_modelNameChoice->GetSelection(); int idx = m_modelNameChoice->GetSelection();
auto kibismodel = dynamic_cast<SIM_MODEL_KIBIS*>( &m_libraryModelsMgr.GetModels()[idx].get() ); auto ibismodel = dynamic_cast<SIM_MODEL_IBIS*>( &m_libraryModelsMgr.GetModels()[idx].get() );
if( kibismodel ) if( ibismodel )
{ {
onModelNameChoice( dummyEvent ); // refresh list of pins onModelNameChoice( dummyEvent ); // refresh list of pins
int i = 0; int i = 0;
for( const std::pair<std::string, std::string>& strs : kibismodel->GetIbisPins() ) for( const std::pair<std::string, std::string>& strs : ibismodel->GetIbisPins() )
{ {
if( strs.first == SIM_MODEL::GetFieldValue( &m_fields, SIM_LIBRARY_KIBIS::PIN_FIELD ) ) if( strs.first == SIM_MODEL::GetFieldValue( &m_fields, SIM_LIBRARY_IBIS::PIN_FIELD ) )
{ {
auto kibisLibrary = static_cast<const SIM_LIBRARY_KIBIS*>( library() ); auto ibisLibrary = static_cast<const SIM_LIBRARY_IBIS*>( library() );
kibismodel->ChangePin( *kibisLibrary, strs.first ); ibismodel->ChangePin( *ibisLibrary, strs.first );
m_pinCombobox->SetSelection( static_cast<int>( i ) ); m_pinCombobox->SetSelection( static_cast<int>( i ) );
break; break;
} }
i++; i++;
} }
if( i < static_cast<int>( kibismodel->GetIbisPins().size() ) ) if( i < static_cast<int>( ibismodel->GetIbisPins().size() ) )
{ {
onPinCombobox( dummyEvent ); // refresh list of models onPinCombobox( dummyEvent ); // refresh list of models
m_pinModelCombobox->SetStringSelection( m_pinModelCombobox->SetStringSelection(
SIM_MODEL::GetFieldValue( &m_fields, SIM_LIBRARY_KIBIS::MODEL_FIELD ) ); SIM_MODEL::GetFieldValue( &m_fields, SIM_LIBRARY_IBIS::MODEL_FIELD ) );
} }
if( SIM_MODEL::GetFieldValue( &m_fields, SIM_LIBRARY_KIBIS::DIFF_FIELD ) == "1" ) if( SIM_MODEL::GetFieldValue( &m_fields, SIM_LIBRARY_IBIS::DIFF_FIELD ) == "1" )
{ {
kibismodel->SwitchSingleEndedDiff( true ); ibismodel->SwitchSingleEndedDiff( true );
m_differentialCheckbox->SetValue( true ); m_differentialCheckbox->SetValue( true );
} }
else else
{ {
kibismodel->SwitchSingleEndedDiff( false ); ibismodel->SwitchSingleEndedDiff( false );
m_differentialCheckbox->SetValue( false ); m_differentialCheckbox->SetValue( false );
} }
} }
@ -372,7 +372,7 @@ bool DIALOG_SIM_MODEL<T>::TransferDataFromWindow()
if( isIbisLoaded() ) if( isIbisLoaded() )
{ {
SIM_MODEL_KIBIS* ibismodel = static_cast<SIM_MODEL_KIBIS*>( SIM_MODEL_IBIS* ibismodel = static_cast<SIM_MODEL_IBIS*>(
&m_libraryModelsMgr.GetModels().at( m_modelNameChoice->GetSelection() ).get() ); &m_libraryModelsMgr.GetModels().at( m_modelNameChoice->GetSelection() ).get() );
if( ibismodel ) if( ibismodel )
@ -387,9 +387,9 @@ bool DIALOG_SIM_MODEL<T>::TransferDataFromWindow()
if( ibismodel->CanDifferential() && m_differentialCheckbox->GetValue() ) if( ibismodel->CanDifferential() && m_differentialCheckbox->GetValue() )
differential = "1"; differential = "1";
SIM_MODEL::SetFieldValue( m_fields, SIM_LIBRARY_KIBIS::PIN_FIELD, pins ); SIM_MODEL::SetFieldValue( m_fields, SIM_LIBRARY_IBIS::PIN_FIELD, pins );
SIM_MODEL::SetFieldValue( m_fields, SIM_LIBRARY_KIBIS::MODEL_FIELD, modelName ); SIM_MODEL::SetFieldValue( m_fields, SIM_LIBRARY_IBIS::MODEL_FIELD, modelName );
SIM_MODEL::SetFieldValue( m_fields, SIM_LIBRARY_KIBIS::DIFF_FIELD, differential ); SIM_MODEL::SetFieldValue( m_fields, SIM_LIBRARY_IBIS::DIFF_FIELD, differential );
} }
} }
@ -474,8 +474,8 @@ void DIALOG_SIM_MODEL<T>::updateWidgets()
template <typename T> template <typename T>
void DIALOG_SIM_MODEL<T>::updateIbisWidgets( SIM_MODEL* aModel ) void DIALOG_SIM_MODEL<T>::updateIbisWidgets( SIM_MODEL* aModel )
{ {
SIM_MODEL_KIBIS* modelkibis = isIbisLoaded() ? dynamic_cast<SIM_MODEL_KIBIS*>( aModel ) SIM_MODEL_IBIS* modelibis = isIbisLoaded() ? dynamic_cast<SIM_MODEL_IBIS*>( aModel )
: nullptr; : nullptr;
m_pinLabel->Show( isIbisLoaded() ); m_pinLabel->Show( isIbisLoaded() );
m_pinCombobox->Show( isIbisLoaded() ); m_pinCombobox->Show( isIbisLoaded() );
@ -510,7 +510,7 @@ void DIALOG_SIM_MODEL<T>::updateIbisWidgets( SIM_MODEL* aModel )
} }
} }
m_differentialCheckbox->Show( isIbisLoaded() && modelkibis && modelkibis->CanDifferential() ); m_differentialCheckbox->Show( isIbisLoaded() && modelibis && modelibis->CanDifferential() );
m_modelNameLabel->SetLabel( isIbisLoaded() ? _( "Component:" ) : _( "Model:" ) ); m_modelNameLabel->SetLabel( isIbisLoaded() ? _( "Component:" ) : _( "Model:" ) );
} }
@ -1244,7 +1244,7 @@ void DIALOG_SIM_MODEL<T>::onModelNameChoice( wxCommandEvent& aEvent )
if( isIbisLoaded() ) if( isIbisLoaded() )
{ {
wxArrayString pinLabels; wxArrayString pinLabels;
SIM_MODEL_KIBIS* modelkibis = dynamic_cast<SIM_MODEL_KIBIS*>( &curModel() ); SIM_MODEL_IBIS* modelkibis = dynamic_cast<SIM_MODEL_IBIS*>( &curModel() );
wxCHECK2( modelkibis, return ); wxCHECK2( modelkibis, return );
@ -1267,12 +1267,12 @@ void DIALOG_SIM_MODEL<T>::onPinCombobox( wxCommandEvent& aEvent )
{ {
wxArrayString modelLabels; wxArrayString modelLabels;
SIM_MODEL_KIBIS& ibisModel = static_cast<SIM_MODEL_KIBIS&>( curModel() ); SIM_MODEL_IBIS& ibisModel = static_cast<SIM_MODEL_IBIS&>( curModel() );
std::vector<std::pair<std::string, std::string>> strs = ibisModel.GetIbisPins(); std::vector<std::pair<std::string, std::string>> strs = ibisModel.GetIbisPins();
std::string pinNumber = strs.at( m_pinCombobox->GetSelection() ).first; std::string pinNumber = strs.at( m_pinCombobox->GetSelection() ).first;
const SIM_LIBRARY_KIBIS* ibisLibrary = dynamic_cast<const SIM_LIBRARY_KIBIS*>( library() ); const SIM_LIBRARY_IBIS* ibisLibrary = dynamic_cast<const SIM_LIBRARY_IBIS*>( library() );
ibisModel.ChangePin( *ibisLibrary, pinNumber ); ibisModel.ChangePin( *ibisLibrary, pinNumber );
@ -1317,12 +1317,12 @@ void DIALOG_SIM_MODEL<T>::onPinModelComboboxTextEnter( wxCommandEvent& aEvent )
template <typename T> template <typename T>
void DIALOG_SIM_MODEL<T>::onDifferentialCheckbox( wxCommandEvent& aEvent ) void DIALOG_SIM_MODEL<T>::onDifferentialCheckbox( wxCommandEvent& aEvent )
{ {
SIM_MODEL_KIBIS* modelkibis = dynamic_cast<SIM_MODEL_KIBIS*>( &curModel() ); SIM_MODEL_IBIS* modelibis = dynamic_cast<SIM_MODEL_IBIS*>( &curModel() );
wxCHECK( modelkibis, /* void */ ); wxCHECK( modelibis, /* void */ );
bool diff = m_differentialCheckbox->GetValue() && modelkibis->CanDifferential(); bool diff = m_differentialCheckbox->GetValue() && modelibis->CanDifferential();
modelkibis->SwitchSingleEndedDiff( diff ); modelibis->SwitchSingleEndedDiff( diff );
updateWidgets(); updateWidgets();
} }
@ -1362,9 +1362,9 @@ void DIALOG_SIM_MODEL<T>::onWaveformChoice( wxCommandEvent& aEvent )
{ {
int idx = m_modelNameChoice->GetSelection(); int idx = m_modelNameChoice->GetSelection();
auto& baseModel = static_cast<SIM_MODEL_KIBIS&>( m_libraryModelsMgr.GetModels()[idx].get() ); auto& baseModel = static_cast<SIM_MODEL_IBIS&>( m_libraryModelsMgr.GetModels()[idx].get() );
m_libraryModelsMgr.SetModel( idx, std::make_unique<SIM_MODEL_KIBIS>( type, baseModel ) ); m_libraryModelsMgr.SetModel( idx, std::make_unique<SIM_MODEL_IBIS>( type, baseModel ) );
try try
{ {

View File

@ -32,7 +32,7 @@
#include <sim/sim_model.h> #include <sim/sim_model.h>
#include <sim/sim_library.h> #include <sim/sim_library.h>
#include <sim/sim_library_kibis.h> #include <sim/sim_library_ibis.h>
#include <sch_symbol.h> #include <sch_symbol.h>
@ -118,7 +118,7 @@ private:
void adjustParamGridColumns( int aWidth, bool aForce ); void adjustParamGridColumns( int aWidth, bool aForce );
bool isIbisLoaded() { return dynamic_cast<const SIM_LIBRARY_KIBIS*>( library() ); } bool isIbisLoaded() { return dynamic_cast<const SIM_LIBRARY_IBIS*>( library() ); }
private: private:
EDA_BASE_FRAME* m_frame; EDA_BASE_FRAME* m_frame;

View File

@ -32,7 +32,7 @@
#include <confirm.h> #include <confirm.h>
#include <pgm_base.h> #include <pgm_base.h>
#include <env_paths.h> #include <env_paths.h>
#include <sim/sim_library_kibis.h> #include <sim/sim_library_ibis.h>
#include <sim/sim_xspice_parser.h> #include <sim/sim_xspice_parser.h>
#include <sch_screen.h> #include <sch_screen.h>
#include <sch_textbox.h> #include <sch_textbox.h>
@ -428,7 +428,7 @@ void NETLIST_EXPORTER_SPICE::readModel( SCH_SHEET_PATH& aSheet, SCH_SYMBOL& aSym
if( !path.IsEmpty() ) if( !path.IsEmpty() )
m_rawIncludes.insert( path ); m_rawIncludes.insert( path );
} }
else if( auto kibisModel = dynamic_cast<const SIM_MODEL_KIBIS*>( aItem.model ) ) else if( auto ibisModel = dynamic_cast<const SIM_MODEL_IBIS*>( aItem.model ) )
{ {
wxFileName cacheFn; wxFileName cacheFn;
cacheFn.AssignDir( PATHS::GetUserCachePath() ); cacheFn.AssignDir( PATHS::GetUserCachePath() );
@ -443,10 +443,11 @@ void NETLIST_EXPORTER_SPICE::readModel( SCH_SHEET_PATH& aSheet, SCH_SYMBOL& aSym
cacheFn.GetFullPath() ); cacheFn.GetFullPath() );
} }
auto spiceGenerator = static_cast<const SPICE_GENERATOR_KIBIS&>( kibisModel->SpiceGenerator() ); auto spiceGenerator = static_cast<const SPICE_GENERATOR_IBIS&>( ibisModel->SpiceGenerator() );
std::string modelData = spiceGenerator.IbisDevice(
aItem, m_schematic->Prj(), wxString cacheFilepath = cacheFn.GetPath( wxPATH_GET_VOLUME | wxPATH_GET_SEPARATOR );
cacheFn.GetPath( wxPATH_GET_VOLUME | wxPATH_GET_SEPARATOR ), aReporter ); std::string modelData = spiceGenerator.IbisDevice( aItem, m_schematic->Prj(),
cacheFilepath, aReporter );
cacheFile.Write( wxString( modelData ) ); cacheFile.Write( wxString( modelData ) );
m_rawIncludes.insert( cacheFn.GetFullPath() ); m_rawIncludes.insert( cacheFn.GetFullPath() );

View File

@ -22,7 +22,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/ */
#include <sim/sim_library_kibis.h> #include <sim/sim_library_ibis.h>
#include <sim/sim_library.h> #include <sim/sim_library.h>
#include <sim/sim_library_spice.h> #include <sim/sim_library_spice.h>
#include <boost/algorithm/string/case_conv.hpp> #include <boost/algorithm/string/case_conv.hpp>
@ -36,7 +36,7 @@ SIM_LIBRARY::Create( const wxString& aFilePath, bool aForceFullParse, REPORTER&
std::unique_ptr<SIM_LIBRARY> library; std::unique_ptr<SIM_LIBRARY> library;
if( aFilePath.EndsWith( ".ibs" ) ) if( aFilePath.EndsWith( ".ibs" ) )
library = std::make_unique<SIM_LIBRARY_KIBIS>(); library = std::make_unique<SIM_LIBRARY_IBIS>();
else else
library = std::make_unique<SIM_LIBRARY_SPICE>( aForceFullParse ); library = std::make_unique<SIM_LIBRARY_SPICE>( aForceFullParse );

View File

@ -21,15 +21,15 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/ */
#include <sim/sim_library_kibis.h> #include <sim/sim_library_ibis.h>
#include <sim/sim_model_kibis.h> #include <sim/sim_model_ibis.h>
#include <ki_exception.h> #include <ki_exception.h>
#include <locale_io.h> #include <locale_io.h>
#include <pegtl/contrib/parse_tree.hpp> #include <pegtl/contrib/parse_tree.hpp>
#include <sch_pin.h> #include <sch_pin.h>
void SIM_LIBRARY_KIBIS::ReadFile( const wxString& aFilePath, REPORTER& aReporter ) void SIM_LIBRARY_IBIS::ReadFile( const wxString& aFilePath, REPORTER& aReporter )
{ {
SIM_LIBRARY::ReadFile( aFilePath, aReporter ); SIM_LIBRARY::ReadFile( aFilePath, aReporter );
m_kibis = KIBIS( aFilePath.ToStdString(), &aReporter ); m_kibis = KIBIS( aFilePath.ToStdString(), &aReporter );
@ -52,7 +52,7 @@ void SIM_LIBRARY_KIBIS::ReadFile( const wxString& aFilePath, REPORTER& aReporter
m_models.push_back( SIM_MODEL::Create( SIM_MODEL::TYPE::KIBIS_DEVICE, pins, aReporter ) ); m_models.push_back( SIM_MODEL::Create( SIM_MODEL::TYPE::KIBIS_DEVICE, pins, aReporter ) );
m_modelNames.emplace_back( kcomp.m_name ); m_modelNames.emplace_back( kcomp.m_name );
SIM_MODEL_KIBIS* libcomp = dynamic_cast<SIM_MODEL_KIBIS*>( m_models.back().get() ); SIM_MODEL_IBIS* libcomp = dynamic_cast<SIM_MODEL_IBIS*>( m_models.back().get() );
if ( libcomp ) if ( libcomp )
InitModel( *libcomp, kcomp.m_name ); InitModel( *libcomp, kcomp.m_name );
@ -60,7 +60,7 @@ void SIM_LIBRARY_KIBIS::ReadFile( const wxString& aFilePath, REPORTER& aReporter
} }
bool SIM_LIBRARY_KIBIS::InitModel( SIM_MODEL_KIBIS& aModel, wxString aCompName ) bool SIM_LIBRARY_IBIS::InitModel( SIM_MODEL_IBIS& aModel, wxString aCompName )
{ {
for( KIBIS_COMPONENT& kcomp : m_kibis.m_components ) for( KIBIS_COMPONENT& kcomp : m_kibis.m_components )
{ {
@ -83,7 +83,7 @@ bool SIM_LIBRARY_KIBIS::InitModel( SIM_MODEL_KIBIS& aModel, wxString aCompName )
} }
bool SIM_LIBRARY_KIBIS::isPinDiff( const std::string& aComp, const std::string& aPinNumber ) const bool SIM_LIBRARY_IBIS::isPinDiff( const std::string& aComp, const std::string& aPinNumber ) const
{ {
for( std::pair<std::string, std::string> aInfo : m_diffPins ) for( std::pair<std::string, std::string> aInfo : m_diffPins )
{ {

View File

@ -21,16 +21,16 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/ */
#ifndef SIM_LIBRARY_KIBIS_H #ifndef SIM_LIBRARY_IBIS_H
#define SIM_LIBRARY_KIBIS_H #define SIM_LIBRARY_IBIS_H
#include <sim/kibis/kibis.h> #include <sim/kibis/kibis.h>
#include <sim/sim_library.h> #include <sim/sim_library.h>
#include <sim/sim_model_kibis.h> #include <sim/sim_model_ibis.h>
class SIM_LIBRARY_KIBIS : public SIM_LIBRARY class SIM_LIBRARY_IBIS : public SIM_LIBRARY
{ {
friend class SIM_MODEL_KIBIS; friend class SIM_MODEL_IBIS;
public: public:
static constexpr auto PIN_FIELD = "Sim.Ibis.Pin"; static constexpr auto PIN_FIELD = "Sim.Ibis.Pin";
@ -40,7 +40,7 @@ public:
// @copydoc SIM_LIBRARY::ReadFile() // @copydoc SIM_LIBRARY::ReadFile()
void ReadFile( const wxString& aFilePath, REPORTER& aReporter ) override; void ReadFile( const wxString& aFilePath, REPORTER& aReporter ) override;
bool InitModel( SIM_MODEL_KIBIS& aModel, wxString aCompName ); bool InitModel( SIM_MODEL_IBIS& aModel, wxString aCompName );
bool isPinDiff( const std::string& aComp, const std::string& aPinNumber ) const; bool isPinDiff( const std::string& aComp, const std::string& aPinNumber ) const;
protected: protected:
@ -48,4 +48,4 @@ protected:
std::vector<std::pair<std::string, std::string>> m_diffPins; std::vector<std::pair<std::string, std::string>> m_diffPins;
}; };
#endif // SIM_LIBRARY_SPICE_H #endif // SIM_LIBRARY_IBIS_H

View File

@ -33,7 +33,7 @@
#include <sim/sim_model_l_mutual.h> #include <sim/sim_model_l_mutual.h>
#include <sim/sim_model_ngspice.h> #include <sim/sim_model_ngspice.h>
#include <sim/sim_model_r_pot.h> #include <sim/sim_model_r_pot.h>
#include <sim/sim_model_kibis.h> #include <sim/sim_model_ibis.h>
#include <sim/sim_model_source.h> #include <sim/sim_model_source.h>
#include <sim/sim_model_raw_spice.h> #include <sim/sim_model_raw_spice.h>
#include <sim/sim_model_subckt.h> #include <sim/sim_model_subckt.h>
@ -41,7 +41,7 @@
#include <sim/sim_model_tline.h> #include <sim/sim_model_tline.h>
#include <sim/sim_model_xspice.h> #include <sim/sim_model_xspice.h>
#include <sim/sim_lib_mgr.h> #include <sim/sim_lib_mgr.h>
#include <sim/sim_library_kibis.h> #include <sim/sim_library_ibis.h>
#include <boost/algorithm/string.hpp> #include <boost/algorithm/string.hpp>
#include <fmt/core.h> #include <fmt/core.h>
@ -423,7 +423,7 @@ TYPE SIM_MODEL::ReadTypeFromFields( const std::vector<SCH_FIELD>& aFields, REPOR
void SIM_MODEL::ReadDataFields( const std::vector<SCH_FIELD>* aFields, void SIM_MODEL::ReadDataFields( const std::vector<SCH_FIELD>* aFields,
const std::vector<SCH_PIN*>& aPins ) const std::vector<SCH_PIN*>& aPins )
{ {
bool diffMode = GetFieldValue( aFields, SIM_LIBRARY_KIBIS::DIFF_FIELD ) == "1"; bool diffMode = GetFieldValue( aFields, SIM_LIBRARY_IBIS::DIFF_FIELD ) == "1";
SwitchSingleEndedDiff( diffMode ); SwitchSingleEndedDiff( diffMode );
m_serializer->ParseEnable( GetFieldValue( aFields, SIM_LEGACY_ENABLE_FIELD_V7 ) ); m_serializer->ParseEnable( GetFieldValue( aFields, SIM_LEGACY_ENABLE_FIELD_V7 ) );
@ -944,7 +944,7 @@ std::unique_ptr<SIM_MODEL> SIM_MODEL::Create( TYPE aType )
case TYPE::KIBIS_DRIVER_DC: case TYPE::KIBIS_DRIVER_DC:
case TYPE::KIBIS_DRIVER_RECT: case TYPE::KIBIS_DRIVER_RECT:
case TYPE::KIBIS_DRIVER_PRBS: case TYPE::KIBIS_DRIVER_PRBS:
return std::make_unique<SIM_MODEL_KIBIS>( aType ); return std::make_unique<SIM_MODEL_IBIS>( aType );
case TYPE::RAWSPICE: case TYPE::RAWSPICE:
return std::make_unique<SIM_MODEL_RAW_SPICE>(); return std::make_unique<SIM_MODEL_RAW_SPICE>();

View File

@ -22,32 +22,32 @@
*/ */
#include <sim/kibis/kibis.h> #include <sim/kibis/kibis.h>
#include <sim/sim_model_kibis.h> #include <sim/sim_model_ibis.h>
#include <sim/sim_library_kibis.h> #include <sim/sim_library_ibis.h>
#include <fmt/core.h> #include <fmt/core.h>
#include <wx/filename.h> #include <wx/filename.h>
#include <kiway.h> #include <kiway.h>
#include "sim_lib_mgr.h" #include "sim_lib_mgr.h"
std::string SPICE_GENERATOR_KIBIS::ModelName( const SPICE_ITEM& aItem ) const std::string SPICE_GENERATOR_IBIS::ModelName( const SPICE_ITEM& aItem ) const
{ {
return fmt::format( "{}.{}", aItem.refName, aItem.baseModelName ); return fmt::format( "{}.{}", aItem.refName, aItem.baseModelName );
} }
std::string SPICE_GENERATOR_KIBIS::ModelLine( const SPICE_ITEM& aItem ) const std::string SPICE_GENERATOR_IBIS::ModelLine( const SPICE_ITEM& aItem ) const
{ {
return ""; return "";
} }
std::vector<std::reference_wrapper<const SIM_MODEL::PARAM>> SPICE_GENERATOR_KIBIS::GetInstanceParams() const std::vector<std::reference_wrapper<const SIM_MODEL::PARAM>> SPICE_GENERATOR_IBIS::GetInstanceParams() const
{ {
std::vector<std::reference_wrapper<const SIM_MODEL::PARAM>> vec; std::vector<std::reference_wrapper<const SIM_MODEL::PARAM>> vec;
return vec; return vec;
} }
std::vector<std::string> SPICE_GENERATOR_KIBIS::CurrentNames( const SPICE_ITEM& aItem ) const std::vector<std::string> SPICE_GENERATOR_IBIS::CurrentNames( const SPICE_ITEM& aItem ) const
{ {
std::vector<std::string> currentNames; std::vector<std::string> currentNames;
@ -58,15 +58,15 @@ std::vector<std::string> SPICE_GENERATOR_KIBIS::CurrentNames( const SPICE_ITEM&
} }
std::string SPICE_GENERATOR_KIBIS::IbisDevice( const SPICE_ITEM& aItem, const PROJECT& aProject, std::string SPICE_GENERATOR_IBIS::IbisDevice( const SPICE_ITEM& aItem, const PROJECT& aProject,
const wxString& aCacheDir, const wxString& aCacheDir,
REPORTER& aReporter ) const REPORTER& aReporter ) const
{ {
std::string ibisLibFilename = SIM_MODEL::GetFieldValue( &aItem.fields, SIM_LIBRARY::LIBRARY_FIELD ); std::string ibisLibFilename = SIM_MODEL::GetFieldValue( &aItem.fields, SIM_LIBRARY::LIBRARY_FIELD );
std::string ibisCompName = SIM_MODEL::GetFieldValue( &aItem.fields, SIM_LIBRARY::NAME_FIELD ); std::string ibisCompName = SIM_MODEL::GetFieldValue( &aItem.fields, SIM_LIBRARY::NAME_FIELD );
std::string ibisPinName = SIM_MODEL::GetFieldValue( &aItem.fields, SIM_LIBRARY_KIBIS::PIN_FIELD ); std::string ibisPinName = SIM_MODEL::GetFieldValue( &aItem.fields, SIM_LIBRARY_IBIS::PIN_FIELD );
std::string ibisModelName = SIM_MODEL::GetFieldValue( &aItem.fields, SIM_LIBRARY_KIBIS::MODEL_FIELD ); std::string ibisModelName = SIM_MODEL::GetFieldValue( &aItem.fields, SIM_LIBRARY_IBIS::MODEL_FIELD );
bool diffMode = SIM_MODEL::GetFieldValue( &aItem.fields, SIM_LIBRARY_KIBIS::DIFF_FIELD ) == "1"; bool diffMode = SIM_MODEL::GetFieldValue( &aItem.fields, SIM_LIBRARY_IBIS::DIFF_FIELD ) == "1";
wxString path = SIM_LIB_MGR::ResolveLibraryPath( ibisLibFilename, &aProject ); wxString path = SIM_LIB_MGR::ResolveLibraryPath( ibisLibFilename, &aProject );
@ -220,8 +220,8 @@ std::string SPICE_GENERATOR_KIBIS::IbisDevice( const SPICE_ITEM& aItem, const PR
} }
SIM_MODEL_KIBIS::SIM_MODEL_KIBIS( TYPE aType ) : SIM_MODEL_IBIS::SIM_MODEL_IBIS( TYPE aType ) :
SIM_MODEL( aType, std::make_unique<SPICE_GENERATOR_KIBIS>( *this ) ), SIM_MODEL( aType, std::make_unique<SPICE_GENERATOR_IBIS>( *this ) ),
m_enableDiff( false ), m_enableDiff( false ),
m_sourceModel( nullptr ) m_sourceModel( nullptr )
{ {
@ -251,7 +251,7 @@ SIM_MODEL_KIBIS::SIM_MODEL_KIBIS( TYPE aType ) :
} }
void SIM_MODEL_KIBIS::SwitchSingleEndedDiff( bool aDiff ) void SIM_MODEL_IBIS::SwitchSingleEndedDiff( bool aDiff )
{ {
ClearPins(); ClearPins();
@ -268,8 +268,8 @@ void SIM_MODEL_KIBIS::SwitchSingleEndedDiff( bool aDiff )
} }
} }
SIM_MODEL_KIBIS::SIM_MODEL_KIBIS( TYPE aType, const SIM_MODEL_KIBIS& aSource ) : SIM_MODEL_IBIS::SIM_MODEL_IBIS( TYPE aType, const SIM_MODEL_IBIS& aSource ) :
SIM_MODEL_KIBIS( aType ) SIM_MODEL_IBIS( aType )
{ {
for( PARAM& param1 : m_params ) for( PARAM& param1 : m_params )
{ {
@ -291,7 +291,7 @@ SIM_MODEL_KIBIS::SIM_MODEL_KIBIS( TYPE aType, const SIM_MODEL_KIBIS& aSource ) :
} }
bool SIM_MODEL_KIBIS::ChangePin( const SIM_LIBRARY_KIBIS& aLib, std::string aPinNumber ) bool SIM_MODEL_IBIS::ChangePin( const SIM_LIBRARY_IBIS& aLib, std::string aPinNumber )
{ {
KIBIS_COMPONENT* kcomp = aLib.m_kibis.GetComponent( std::string( GetComponentName() ) ); KIBIS_COMPONENT* kcomp = aLib.m_kibis.GetComponent( std::string( GetComponentName() ) );
@ -312,17 +312,17 @@ bool SIM_MODEL_KIBIS::ChangePin( const SIM_LIBRARY_KIBIS& aLib, std::string aPin
} }
void SIM_MODEL_KIBIS::SetBaseModel( const SIM_MODEL& aBaseModel ) void SIM_MODEL_IBIS::SetBaseModel( const SIM_MODEL& aBaseModel )
{ {
// Actual base models can only be of the same type, which is not the case here, as in addition // Actual base models can only be of the same type, which is not the case here, as in addition
// to IBIS device model type we have multiple types of drivers available for the same sourced // to IBIS device model type we have multiple types of drivers available for the same sourced
// model. And we don't want to inherit the default values anyway. So we just store these models // model. And we don't want to inherit the default values anyway. So we just store these models
// and use the only for Spice code generation. // and use the only for Spice code generation.
m_sourceModel = dynamic_cast<const SIM_MODEL_KIBIS*>( &aBaseModel ); m_sourceModel = dynamic_cast<const SIM_MODEL_IBIS*>( &aBaseModel );
} }
std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_KIBIS::makeParamInfos( TYPE aType ) std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_IBIS::makeParamInfos( TYPE aType )
{ {
std::vector<PARAM::INFO> paramInfos; std::vector<PARAM::INFO> paramInfos;
PARAM::INFO paramInfo; PARAM::INFO paramInfo;
@ -396,7 +396,7 @@ std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_KIBIS::makeParamInfos( TYPE aType
} }
std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_KIBIS::makeDcWaveformParamInfos() std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_IBIS::makeDcWaveformParamInfos()
{ {
std::vector<PARAM::INFO> paramInfos; std::vector<PARAM::INFO> paramInfos;
PARAM::INFO paramInfo; PARAM::INFO paramInfo;
@ -414,7 +414,7 @@ std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_KIBIS::makeDcWaveformParamInfos()
} }
std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_KIBIS::makeRectWaveformParamInfos() std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_IBIS::makeRectWaveformParamInfos()
{ {
std::vector<PARAM::INFO> paramInfos; std::vector<PARAM::INFO> paramInfos;
PARAM::INFO paramInfo; PARAM::INFO paramInfo;
@ -455,7 +455,7 @@ std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_KIBIS::makeRectWaveformParamInfos(
} }
std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_KIBIS::makePrbsWaveformParamInfos() std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_IBIS::makePrbsWaveformParamInfos()
{ {
std::vector<PARAM::INFO> paramInfos; std::vector<PARAM::INFO> paramInfos;
PARAM::INFO paramInfo; PARAM::INFO paramInfo;

View File

@ -21,19 +21,19 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/ */
#ifndef SIM_MODEL_KIBIS_H #ifndef SIM_MODEL_IBIS_H
#define SIM_MODEL_KIBIS_H #define SIM_MODEL_IBIS_H
#include <sim/kibis/kibis.h> #include <sim/kibis/kibis.h>
#include <sim/sim_model.h> #include <sim/sim_model.h>
#include <sim/spice_generator.h> #include <sim/spice_generator.h>
#include <project.h> #include <project.h>
class SIM_LIBRARY_KIBIS; class SIM_LIBRARY_IBIS;
class REPORTER; class REPORTER;
class SPICE_GENERATOR_KIBIS : public SPICE_GENERATOR class SPICE_GENERATOR_IBIS : public SPICE_GENERATOR
{ {
public: public:
using SPICE_GENERATOR::SPICE_GENERATOR; using SPICE_GENERATOR::SPICE_GENERATOR;
@ -49,16 +49,16 @@ protected:
std::vector<std::reference_wrapper<const SIM_MODEL::PARAM>> GetInstanceParams() const override; std::vector<std::reference_wrapper<const SIM_MODEL::PARAM>> GetInstanceParams() const override;
}; };
class SIM_MODEL_KIBIS : public SIM_MODEL class SIM_MODEL_IBIS : public SIM_MODEL
{ {
friend class SIM_LIBRARY_KIBIS; friend class SIM_LIBRARY_IBIS;
public: public:
SIM_MODEL_KIBIS( TYPE aType ); SIM_MODEL_IBIS( TYPE aType );
// @brief Special copy constructor // @brief Special copy constructor
// creates a a model with aType, but tries to match parameters from aSource. // creates a a model with aType, but tries to match parameters from aSource.
SIM_MODEL_KIBIS( TYPE aType, const SIM_MODEL_KIBIS& aSource ); SIM_MODEL_IBIS( TYPE aType, const SIM_MODEL_IBIS& aSource );
std::vector<std::pair<std::string, std::string>> GetIbisPins() const std::vector<std::pair<std::string, std::string>> GetIbisPins() const
{ {
@ -81,7 +81,7 @@ public:
/** /**
* @brief update the list of available models based on the pin number. * @brief update the list of available models based on the pin number.
*/ */
bool ChangePin( const SIM_LIBRARY_KIBIS& aLib, std::string aPinNumber ); bool ChangePin( const SIM_LIBRARY_IBIS& aLib, std::string aPinNumber );
void SetBaseModel( const SIM_MODEL& aBaseModel ) override; void SetBaseModel( const SIM_MODEL& aBaseModel ) override;
@ -97,7 +97,7 @@ private:
static std::vector<PARAM::INFO> makeRectWaveformParamInfos(); static std::vector<PARAM::INFO> makeRectWaveformParamInfos();
static std::vector<PARAM::INFO> makePrbsWaveformParamInfos(); static std::vector<PARAM::INFO> makePrbsWaveformParamInfos();
const SIM_MODEL_KIBIS* m_sourceModel; const SIM_MODEL_IBIS* m_sourceModel;
std::vector<std::string> m_ibisModels; std::vector<std::string> m_ibisModels;
std::vector<std::pair<std::string, std::string>> m_ibisPins; std::vector<std::pair<std::string, std::string>> m_ibisPins;
std::string m_componentName; std::string m_componentName;