Completed inspector support on analog transitors.

This commit is contained in:
Jean-Paul Chaput 2023-05-08 20:00:29 +02:00
parent ae5f6ad3de
commit 7cfd056da2
25 changed files with 333 additions and 93 deletions

View File

@ -20,6 +20,7 @@
FloatParameter.cpp
MatrixParameter.cpp
MCheckBoxParameter.cpp
SpinBoxParameter.cpp
StepParameter.cpp
StringParameter.cpp
BJT.cpp

View File

@ -107,4 +107,17 @@ namespace Analog {
}
string Cascode::_getTypeName () const
{ return "Cascode"; }
Record* Cascode::_getRecord () const
{
Record* record = Super::_getRecord();
record->add( getSlot("_cBulkConnectedName" , _cBulkConnectedName ) );
record->add( getSlot("_cBulkUnconnectedName", _cBulkUnconnectedName ) );
return record;
}
} // Analog namespace.

View File

@ -109,4 +109,17 @@ namespace Analog {
}
string CommonDrain::_getTypeName () const
{ return "CommonDrain"; }
Record* CommonDrain::_getRecord () const
{
Record* record = Super::_getRecord();
record->add( getSlot("_cdBulkConnectedName" , _cdBulkConnectedName ) );
record->add( getSlot("_cdBulkUnconnectedName", _cdBulkUnconnectedName ) );
return record;
}
} // Analog namespace.

View File

@ -103,4 +103,16 @@ namespace Analog {
{ return (isBulkConnected()) ? _cgBulkConnectedName : _cgBulkUnconnectedName; }
string CommonGatePair::_getTypeName () const
{ return "CommonGatePair"; }
Record* CommonGatePair::_getRecord () const
{
Record* record = Super::_getRecord();
record->add( getSlot("_cgBulkConnectedName" , _cgBulkConnectedName ) );
record->add( getSlot("_cgBulkUnconnectedName", _cgBulkUnconnectedName ) );
return record;
}
} // Analog namespace.

View File

@ -244,4 +244,17 @@ namespace Analog {
}
string CommonSourcePair::_getTypeName () const
{ return "CommonSourcePair"; }
Record* CommonSourcePair::_getRecord () const
{
Record* record = Super::_getRecord();
record->add( getSlot("_cspBulkConnectedName" , _cspBulkConnectedName ) );
record->add( getSlot("_cspBulkUnconnectedName", _cspBulkUnconnectedName ) );
return record;
}
} // Analog namespace.

View File

@ -98,4 +98,17 @@ namespace Analog {
{ return (isBulkConnected()) ? _ccpBulkConnectedName : _ccpBulkUnconnectedName; }
string CrossCoupledPair::_getTypeName () const
{ return "CrossCoupledPair"; }
Record* CrossCoupledPair::_getRecord () const
{
Record* record = Super::_getRecord();
record->add( getSlot("_ccpBulkConnectedName" , _ccpBulkConnectedName ) );
record->add( getSlot("_ccpBulkUnconnectedName", _ccpBulkUnconnectedName ) );
return record;
}
} // Analog namespace.

View File

@ -264,4 +264,17 @@ namespace Analog {
}
string DifferentialPair::_getTypeName () const
{ return "DifferentialPair"; }
Record* DifferentialPair::_getRecord () const
{
Record* record = Super::_getRecord();
record->add( getSlot("_dpBulkConnectedName" , _dpBulkConnectedName ) );
record->add( getSlot("_dpBulkUnconnectedName", _dpBulkUnconnectedName ) );
return record;
}
} // Analog namespace.

View File

@ -101,4 +101,17 @@ namespace Analog {
{ return (isBulkConnected()) ? _lsBulkConnectedName : _lsBulkUnconnectedName; }
string LevelShifter::_getTypeName () const
{ return "LevelShifter"; }
Record* LevelShifter::_getRecord () const
{
Record* record = Super::_getRecord();
record->add( getSlot("_lsBulkConnectedName" , _lsBulkConnectedName ) );
record->add( getSlot("_lsBulkUnconnectedName", _lsBulkUnconnectedName ) );
return record;
}
} // Analog namespace.

View File

@ -72,4 +72,36 @@ namespace Analog {
}
string MetaTransistor::_getTypeName () const
{ return "MetaTransistor"; }
Record* MetaTransistor::_getRecord () const
{
Record* record = Super::_getRecord();
record->add( getSlot("_drain" , _drain ) );
record->add( getSlot("_source" , _source ) );
record->add( getSlot("_gate" , _gate ) );
record->add( getSlot("_bulk" , _bulk ) );
record->add( getSlot("_anonymous", _anonymous ) );
record->add( getSlot("_m" , _m ) );
record->add( getSlot("_we" , _we ) );
record->add( getSlot("_le" , _le ) );
record->add( getSlot("_ids" , _ids ) );
record->add( getSlot("_vgs" , _vgs ) );
record->add( getSlot("_vds" , _vds ) );
record->add( getSlot("_vbs" , _vds ) );
record->add( getSlot("_vg" , _vg ) );
record->add( getSlot("_vd" , _vd ) );
record->add( getSlot("_vb" , _vb ) );
record->add( getSlot("_vs" , _vs ) );
record->add( getSlot("_veg" , _veg ) );
record->add( getSlot("_vth" , _vth ) );
record->add( getSlot("_wmin" , _wmin ) );
record->add( getSlot("_wmax" , _wmax ) );
record->add( getSlot("_nfing" , _nfing ) );
return record;
}
} // Analog namespace.

View File

@ -0,0 +1,47 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) Sorbonne Université 2023-2023, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | H u r r i c a n e A n a l o g |
// | |
// | Authors : Christophe Alexandre |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./SpinBoxParameter.cpp" |
// +-----------------------------------------------------------------+
#include "hurricane/analog/SpinBoxParameter.h"
namespace Analog {
using std::string;
string SpinBoxParameter::_getTypeName () const
{ return "SpinBoxParameter"; }
std::string SpinBoxParameter::_getString () const
{
string s = Super::_getString();
s.insert( s.size()-1, " "+getString(_value) );
return s;
}
Record* SpinBoxParameter::_getRecord () const
{
Record* record = Super::_getRecord();
record->add( getSlot( "_min" , _min ) );
record->add( getSlot( "_max" , _max ) );
record->add( getSlot( "_value", _value ) );
return record;
}
} // Analog namespace.

View File

@ -233,4 +233,8 @@ namespace Analog {
}
string Transistor::_getTypeName () const
{ return "Transistor"; }
} // Analog namespace.

View File

@ -33,7 +33,7 @@ namespace Analog {
, _m (NULL)
, _externalDummy (NULL)
, _sourceFirst (NULL)
, _bulkType (NULL)
, _bulkType (NULL)
{ }
@ -64,7 +64,23 @@ namespace Analog {
addStepParameter( "NIRC" , 1, 1, 1 );
}
Record* TransistorFamily::_getRecord () const
{
Record* record = Super::_getRecord();
record->add( getSlot("_type" , &_type ) );
record->add( getSlot("_referenceTransistor", _referenceTransistor) );
record->add( getSlot("_operatorIndex" , _operatorIndex ) );
record->add( getSlot("_w" , _w ) );
record->add( getSlot("_l" , _l ) );
record->add( getSlot("_m" , _m ) );
record->add( getSlot("_externalDummy" , _externalDummy ) );
record->add( getSlot("_sourceFirst" , _sourceFirst ) );
record->add( getSlot("_bulkType" , _bulkType ) );
return record;
}
#ifdef DISABLED
void TransistorFamily::setReferenceTransistor ( const Name& referenceTransistorName ) {
Instance* instance = getInstance(referenceTransistorName);

View File

@ -40,4 +40,13 @@ namespace Analog {
}
Record* TransistorPair::_getRecord () const
{
Record* record = Super::_getRecord();
record->add( getSlot("_m1" , _m1 ) );
record->add( getSlot("_m2" , _m2 ) );
record->add( getSlot("_mInt", _mInt ) );
return record;
}
} // Analog namespace.

View File

@ -1,7 +1,7 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2009-2018, All Rights Reserved
// Copyright (c) Sorbonne Université 2009-2023, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
@ -14,9 +14,7 @@
// +-----------------------------------------------------------------+
#ifndef ANALOG_CASCODE_H
#define ANALOG_CASCODE_H
#pragma once
#include "hurricane/analog/TransistorPair.h"
namespace Analog {
@ -31,6 +29,8 @@ namespace Analog {
, const Type&
, bool bulkConnected );
virtual Hurricane::Name getDeviceName () const;
virtual std::string _getTypeName () const;
virtual Record* _getRecord () const;
protected:
Cascode ( Hurricane::Library*, const Hurricane::Name&, const Type& );
private:
@ -43,4 +43,6 @@ namespace Analog {
} // Analog namespace.
#endif // ANALOG_CASCODE_H
INSPECTOR_P_SUPPORT(Analog::Cascode);

View File

@ -1,7 +1,7 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2009-2018, All Rights Reserved
// Copyright (c) Sorbonne Université 2009-2023, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
@ -14,9 +14,7 @@
// +-----------------------------------------------------------------+
#ifndef ANALOG_COMMON_DRAIN_H
#define ANALOG_COMMON_DRAIN_H
#pragma once
#include "hurricane/analog/TransistorPair.h"
@ -32,6 +30,8 @@ namespace Analog {
, const Type&
, bool bulkConnected );
virtual Hurricane::Name getDeviceName () const;
virtual std::string _getTypeName () const;
virtual Record* _getRecord () const;
protected:
CommonDrain ( Hurricane::Library*, const Hurricane::Name&, const Type& );
private:
@ -44,4 +44,5 @@ namespace Analog {
} // Analog namespace.
#endif // ANALOG_COMMON_DRAIN_H
INSPECTOR_P_SUPPORT(Analog::CommonDrain);

View File

@ -1,7 +1,7 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2009-2018, All Rights Reserved
// Copyright (c) Sorbonne Université 2009-2023, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
@ -14,9 +14,7 @@
// +-----------------------------------------------------------------+
#ifndef ANALOG_COMMON_GATE_PAIR_H
#define ANALOG_COMMON_GATE_PAIR_H
#pragma once
#include "hurricane/analog/TransistorPair.h"
namespace Analog {
@ -31,6 +29,8 @@ namespace Analog {
, const Type&
, bool bulkConnected );
virtual Hurricane::Name getDeviceName () const;
virtual std::string _getTypeName () const;
virtual Record* _getRecord () const;
protected:
CommonGatePair ( Hurricane::Library*, const Hurricane::Name&, const Type& );
virtual void createConnections ( bool bulkConnected );
@ -42,4 +42,5 @@ namespace Analog {
} // Analog namespace.
#endif // ANALOG_COMMON_GATE_PAIR_H
INSPECTOR_P_SUPPORT(Analog::CommonGatePair);

View File

@ -1,7 +1,7 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2009-2018, All Rights Reserved
// Copyright (c) Sorbonne Université 2009-2023, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
@ -14,9 +14,7 @@
// +-----------------------------------------------------------------+
#ifndef ANALOG_COMMON_SOURCE_PAIR_H
#define ANALOG_COMMON_SOURCE_PAIR_H
#pragma once
#include "hurricane/analog/TransistorPair.h"
namespace Analog {
@ -34,6 +32,8 @@ namespace Analog {
unsigned int getRestriction ( Hurricane::Net* net ) const;
bool isSame ( CommonSourcePair* );
virtual std::string _getTypeName () const;
virtual Record* _getRecord () const;
protected:
CommonSourcePair ( Hurricane::Library*, const Hurricane::Name&, const Type& );
private:
@ -46,4 +46,5 @@ namespace Analog {
} // Analog namespace.
#endif // ANALOG_COMMON_SOURCE_PAIR_H
INSPECTOR_P_SUPPORT(Analog::CommonSourcePair);

View File

@ -1,7 +1,7 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2009-2018, All Rights Reserved
// Copyright (c) Sorbonne Université 2009-2023, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
@ -14,9 +14,7 @@
// +-----------------------------------------------------------------+
#ifndef ANALOG_CROSS_COUPLED_PAIR_H
#define ANALOG_CROSS_COUPLED_PAIR_H
#pragma once
#include "hurricane/analog/TransistorPair.h"
namespace Analog {
@ -31,6 +29,8 @@ namespace Analog {
, const Type& type
, bool bulkConnected );
virtual Hurricane::Name getDeviceName () const;
virtual std::string _getTypeName () const;
virtual Record* _getRecord () const;
protected:
CrossCoupledPair ( Hurricane::Library*, const Hurricane::Name&, const Type& );
private:
@ -43,4 +43,5 @@ namespace Analog {
} // Analog namespace.
#endif // ANALOG_CROSS_COUPLED_PAIR_H
INSPECTOR_P_SUPPORT(Analog::CrossCoupledPair);

View File

@ -1,7 +1,7 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2009-2018, All Rights Reserved
// Copyright (c) Sorbonne Université 2009-2023, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
@ -14,9 +14,7 @@
// +-----------------------------------------------------------------+
#ifndef ANALOG_DIFFERENTIAL_PAIR_H
#define ANALOG_DIFFERENTIAL_PAIR_H
#pragma once
#include "hurricane/analog/TransistorPair.h"
namespace Analog {
@ -31,8 +29,10 @@ namespace Analog {
, const Type&
, bool bulkConnected );
virtual Hurricane::Name getDeviceName () const;
unsigned int getRestriction ( Hurricane::Net* net ) const;
bool isSame ( DifferentialPair* dp );
unsigned int getRestriction ( Hurricane::Net* net ) const;
bool isSame ( DifferentialPair* dp );
virtual std::string _getTypeName () const;
virtual Record* _getRecord () const;
protected:
DifferentialPair ( Hurricane::Library*, const Hurricane::Name&, const Type& );
private:
@ -45,4 +45,5 @@ namespace Analog {
} // Analog namespace.
#endif // ANALOG_DIFFERENTIAL_PAIR_H
INSPECTOR_P_SUPPORT(Analog::DifferentialPair);

View File

@ -1,7 +1,7 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2009-2018, All Rights Reserved
// Copyright (c) Sorbonne Université 2009-2023, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
@ -14,9 +14,7 @@
// +-----------------------------------------------------------------+
#ifndef ANALOG_LEVEL_SHIFTER_H
#define ANALOG_LEVEL_SHIFTER_H
#pragma once
#include "hurricane/analog/TransistorPair.h"
namespace Analog {
@ -30,6 +28,8 @@ namespace Analog {
, const Type&
, bool bulkConnected );
virtual Hurricane::Name getDeviceName () const;
virtual std::string _getTypeName () const;
virtual Record* _getRecord () const;
protected:
LevelShifter ( Hurricane::Library*, const Hurricane::Name&, const Type& );
virtual void createConnections ( bool bulkConnected );
@ -41,4 +41,5 @@ namespace Analog {
} // Analog namespace.
#endif // ANALOG_LEVEL_SHIFTER_H
INSPECTOR_P_SUPPORT(Analog::LevelShifter);

View File

@ -1,7 +1,7 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2008-2018, All Rights Reserved
// Copyright (c) Sorbonne Université 2008-2023, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
@ -14,9 +14,7 @@
// +-----------------------------------------------------------------+
#ifndef ANALOG_METATRANSISTOR_H
#define ANALOG_METATRANSISTOR_H
#pragma once
#include "hurricane/Cell.h"
@ -29,46 +27,48 @@ namespace Analog {
public:
typedef Cell Super;
public:
static MetaTransistor* create ( Library* , const Name& );
inline Net* getSource () const;
inline Net* getDrain () const;
inline Net* getGate () const;
inline Net* getBulk () const;
inline float getWE () const;
inline float getLE () const;
inline float getIDS () const;
inline float getVGS () const;
inline float getVDS () const;
inline float getVBS () const;
inline float getVG () const;
inline float getVD () const;
inline float getVS () const;
inline float getVB () const;
inline float getVEG () const;
inline float getVTH () const;
inline float getWmin () const;
inline float getWmax () const;
inline int getNfing () const;
inline void setM ( unsigned int m );
inline void setWE ( float we );
inline void setLE ( float le );
inline void setIDS ( float ids );
inline void setVGS ( float vgs );
inline void setVDS ( float vds );
inline void setVBS ( float vbs );
inline void setVG ( float vg );
inline void setVD ( float vd );
inline void setVS ( float vs );
inline void setVB ( float vb );
inline void setVEG ( float veg );
inline void setVTH ( float vth );
inline void setWmin ( float wmin );
inline void setWmax ( float wmax );
inline void setNfing ( int nfing );
static MetaTransistor* create ( Library* , const Name& );
inline Net* getSource () const;
inline Net* getDrain () const;
inline Net* getGate () const;
inline Net* getBulk () const;
inline float getWE () const;
inline float getLE () const;
inline float getIDS () const;
inline float getVGS () const;
inline float getVDS () const;
inline float getVBS () const;
inline float getVG () const;
inline float getVD () const;
inline float getVS () const;
inline float getVB () const;
inline float getVEG () const;
inline float getVTH () const;
inline float getWmin () const;
inline float getWmax () const;
inline int getNfing () const;
inline void setM ( unsigned int m );
inline void setWE ( float we );
inline void setLE ( float le );
inline void setIDS ( float ids );
inline void setVGS ( float vgs );
inline void setVDS ( float vds );
inline void setVBS ( float vbs );
inline void setVG ( float vg );
inline void setVD ( float vd );
inline void setVS ( float vs );
inline void setVB ( float vb );
inline void setVEG ( float veg );
inline void setVTH ( float vth );
inline void setWmin ( float wmin );
inline void setWmax ( float wmax );
inline void setNfing ( int nfing );
virtual std::string _getTypeName () const;
virtual Record* _getRecord () const;
protected:
void _postCreate ();
void _postCreate ();
private:
MetaTransistor ( Library* , const Name& );
MetaTransistor ( Library* , const Name& );
private:
Net* _drain;
Net* _source;
@ -127,4 +127,5 @@ namespace Analog {
} // Analog namespace.
#endif // ANALOG_METATRANSISTOR_H
INSPECTOR_P_SUPPORT(Analog::MetaTransistor);

View File

@ -1,7 +1,7 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2009-2018, All Rights Reserved
// Copyright (c) Sorbonne Université 2009-2023, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
@ -14,15 +14,15 @@
// +-----------------------------------------------------------------+
#ifndef ANALOG_SPINBOX_PARAMETER_H
#define ANALOG_SPINBOX_PARAMETER_H
#pragma once
#include "hurricane/analog/Parameter.h"
namespace Analog {
class SpinBoxParameter : public Parameter {
public:
typedef Parameter Super;
public:
inline SpinBoxParameter ( std::string id, long min, long max );
inline long getMin () const;
@ -30,7 +30,9 @@ namespace Analog {
inline long getValue () const;
inline operator long () const;
inline void setValue ( long value );
virtual std::string _getTypeName () const { return "SpinBoxParameter"; }
virtual std::string _getTypeName () const;
virtual std::string _getString () const;
virtual Record* _getRecord () const;
private:
long _min;
long _max;
@ -48,4 +50,5 @@ namespace Analog {
} // Analog namespace.
#endif // ANALOG_SPINBOX_PARAMETER_H
INSPECTOR_PR_SUPPORT(Analog::SpinBoxParameter);

View File

@ -36,6 +36,7 @@ namespace Analog {
Transistor ( Hurricane::Library* , const Hurricane::Name& , const Type& );
virtual void _postCreate ( const Hurricane::Name& deviceName );
virtual void createConnections ( bool bulkConnected );
virtual std::string _getTypeName () const;
private:
static const Hurricane::Name _transistorBulkConnectedName;
static const Hurricane::Name _transistorBulkUnconnectedName;
@ -44,3 +45,6 @@ namespace Analog {
} // Analog namespace.
INSPECTOR_P_SUPPORT(Analog::Transistor);

View File

@ -84,6 +84,7 @@ namespace Analog {
// Sizing parameters commons to all MOS transistors.
inline int getOperatorIndex () const;
inline void setOperatorIndex ( int );
virtual Record* _getRecord () const;
protected:
TransistorFamily ( Hurricane::Library*
@ -173,3 +174,30 @@ namespace Analog {
} // Analog namespace.
// -------------------------------------------------------------------
// Inspector Support for : Net::Type::Code*".
template<>
inline std::string getString<const Analog::TransistorFamily::Type*>
( const Analog::TransistorFamily::Type* object )
{
switch ( *object ) {
case Analog::TransistorFamily::NMOS: return "NMOS";
case Analog::TransistorFamily::PMOS: return "PMOS";
}
return "Unknow (error)";
}
template<>
inline Hurricane::Record* getRecord<const Analog::TransistorFamily::Type*>
( const Analog::TransistorFamily::Type* object )
{
Hurricane::Record* record = new Hurricane::Record(getString(object));
record->add(getSlot("Type", (unsigned int*)object));
return record;
}
IOSTREAM_POINTER_SUPPORT(Analog::TransistorFamily::Type);
IOSTREAM_VALUE_SUPPORT(Analog::TransistorFamily::Type);

View File

@ -14,9 +14,7 @@
// +-----------------------------------------------------------------+
#ifndef ANALOG_TRANSISTOR_PAIR_H
#define ANALOG_TRANSISTOR_PAIR_H
#pragma once
#include "hurricane/analog/TransistorFamily.h"
namespace Analog {
@ -28,6 +26,7 @@ namespace Analog {
public:
inline long getMint () const;
inline void setMint ( long );
virtual Record* _getRecord () const;
protected:
TransistorPair ( Hurricane::Library*, const Hurricane::Name&, const Type& );
virtual void _postCreate ( const Hurricane::Name& deviceName );
@ -43,5 +42,3 @@ namespace Analog {
} // Analog namespace.
#endif // ANALOG_TRANSISTOR_PAIR_H