Enabled support for track positionning in analog Transistor devices.
* New: In Analog, new Parameter derived class "StringParameter", to support strings. Also added to the Python interface. * New: In Analog::Transistor, added StringParameters for specifying track positions. They are named "G.t", "S.t", "D.t" and "B.t". * New: In Oroshi/wip_transistor.py, now read the track positionning devices parameters. * New: In Karakaze/AnalogDesign.doDevice(), read an optional 14th parameter holding the track positions (example in ADC-SAR).
This commit is contained in:
parent
7dcd8e136a
commit
4483766f34
|
@ -21,6 +21,7 @@
|
||||||
MatrixParameter.cpp
|
MatrixParameter.cpp
|
||||||
MCheckBoxParameter.cpp
|
MCheckBoxParameter.cpp
|
||||||
StepParameter.cpp
|
StepParameter.cpp
|
||||||
|
StringParameter.cpp
|
||||||
BJT.cpp
|
BJT.cpp
|
||||||
BJTFamily.cpp
|
BJTFamily.cpp
|
||||||
BJTFamilyNames.cpp
|
BJTFamilyNames.cpp
|
||||||
|
@ -71,6 +72,7 @@
|
||||||
PySimpleCurrentMirror.cpp
|
PySimpleCurrentMirror.cpp
|
||||||
PySpinBoxParameter.cpp
|
PySpinBoxParameter.cpp
|
||||||
PyStepParameter.cpp
|
PyStepParameter.cpp
|
||||||
|
PyStringParameter.cpp
|
||||||
PyFloatParameter.cpp
|
PyFloatParameter.cpp
|
||||||
PyTransistor.cpp
|
PyTransistor.cpp
|
||||||
PyTransistorFamily.cpp
|
PyTransistorFamily.cpp
|
||||||
|
@ -108,6 +110,7 @@
|
||||||
hurricane/analog/SimpleCurrentMirror.h
|
hurricane/analog/SimpleCurrentMirror.h
|
||||||
hurricane/analog/SpinBoxParameter.h
|
hurricane/analog/SpinBoxParameter.h
|
||||||
hurricane/analog/StepParameter.h
|
hurricane/analog/StepParameter.h
|
||||||
|
hurricane/analog/StringParameter.h
|
||||||
hurricane/analog/FloatParameter.h
|
hurricane/analog/FloatParameter.h
|
||||||
hurricane/analog/TransistorFamily.h
|
hurricane/analog/TransistorFamily.h
|
||||||
hurricane/analog/TransistorFamilyNames.h
|
hurricane/analog/TransistorFamilyNames.h
|
||||||
|
@ -141,6 +144,7 @@
|
||||||
hurricane/analog/PySimpleCurrentMirror.h
|
hurricane/analog/PySimpleCurrentMirror.h
|
||||||
hurricane/analog/PySpinBoxParameter.h
|
hurricane/analog/PySpinBoxParameter.h
|
||||||
hurricane/analog/PyStepParameter.h
|
hurricane/analog/PyStepParameter.h
|
||||||
|
hurricane/analog/PyStringParameter.h
|
||||||
hurricane/analog/PyFloatParameter.h
|
hurricane/analog/PyFloatParameter.h
|
||||||
hurricane/analog/PyTransistorFamily.h
|
hurricane/analog/PyTransistorFamily.h
|
||||||
hurricane/analog/PyTransistor.h
|
hurricane/analog/PyTransistor.h
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
#include "hurricane/analog/PyFormFactorParameter.h"
|
#include "hurricane/analog/PyFormFactorParameter.h"
|
||||||
#include "hurricane/analog/PyMCheckBoxParameter.h"
|
#include "hurricane/analog/PyMCheckBoxParameter.h"
|
||||||
#include "hurricane/analog/PySpinBoxParameter.h"
|
#include "hurricane/analog/PySpinBoxParameter.h"
|
||||||
|
#include "hurricane/analog/PyStringParameter.h"
|
||||||
#include "hurricane/analog/PyStepParameter.h"
|
#include "hurricane/analog/PyStepParameter.h"
|
||||||
#include "hurricane/analog/PyFloatParameter.h"
|
#include "hurricane/analog/PyFloatParameter.h"
|
||||||
#include "hurricane/analog/PyCapacitiesParameter.h"
|
#include "hurricane/analog/PyCapacitiesParameter.h"
|
||||||
|
@ -97,6 +98,7 @@ extern "C" {
|
||||||
PyMCheckBoxParameter_LinkPyType();
|
PyMCheckBoxParameter_LinkPyType();
|
||||||
PySpinBoxParameter_LinkPyType();
|
PySpinBoxParameter_LinkPyType();
|
||||||
PyStepParameter_LinkPyType();
|
PyStepParameter_LinkPyType();
|
||||||
|
PyStringParameter_LinkPyType();
|
||||||
PyFloatParameter_LinkPyType();
|
PyFloatParameter_LinkPyType();
|
||||||
PyCapacitiesParameter_LinkPyType();
|
PyCapacitiesParameter_LinkPyType();
|
||||||
PyMatrixParameter_LinkPyType();
|
PyMatrixParameter_LinkPyType();
|
||||||
|
@ -129,6 +131,7 @@ extern "C" {
|
||||||
PYTYPE_READY_SUB( FormFactorParameter , Parameter )
|
PYTYPE_READY_SUB( FormFactorParameter , Parameter )
|
||||||
PYTYPE_READY_SUB( MCheckBoxParameter , Parameter )
|
PYTYPE_READY_SUB( MCheckBoxParameter , Parameter )
|
||||||
PYTYPE_READY_SUB( SpinBoxParameter , Parameter )
|
PYTYPE_READY_SUB( SpinBoxParameter , Parameter )
|
||||||
|
PYTYPE_READY_SUB( StringParameter , Parameter )
|
||||||
PYTYPE_READY_SUB( StepParameter , Parameter )
|
PYTYPE_READY_SUB( StepParameter , Parameter )
|
||||||
PYTYPE_READY_SUB( FloatParameter , Parameter )
|
PYTYPE_READY_SUB( FloatParameter , Parameter )
|
||||||
PYTYPE_READY_SUB( CapacitiesParameter , Parameter )
|
PYTYPE_READY_SUB( CapacitiesParameter , Parameter )
|
||||||
|
@ -160,6 +163,7 @@ extern "C" {
|
||||||
__cs.addType( "ffpar" , &PyTypeFormFactorParameter , "<FormFactorParameter>" , false, "parameter" );
|
__cs.addType( "ffpar" , &PyTypeFormFactorParameter , "<FormFactorParameter>" , false, "parameter" );
|
||||||
__cs.addType( "mcboxpar" , &PyTypeMCheckBoxParameter , "<MCheckBoxParameter>" , false, "parameter" );
|
__cs.addType( "mcboxpar" , &PyTypeMCheckBoxParameter , "<MCheckBoxParameter>" , false, "parameter" );
|
||||||
__cs.addType( "sboxpar" , &PyTypeSpinBoxParameter , "<SpinBoxParameter>" , false, "parameter" );
|
__cs.addType( "sboxpar" , &PyTypeSpinBoxParameter , "<SpinBoxParameter>" , false, "parameter" );
|
||||||
|
__cs.addType( "strpar" , &PyTypeStringParameter , "<StringParameter>" , false, "parameter" );
|
||||||
__cs.addType( "steppar" , &PyTypeStepParameter , "<StepParameter>" , false, "parameter" );
|
__cs.addType( "steppar" , &PyTypeStepParameter , "<StepParameter>" , false, "parameter" );
|
||||||
__cs.addType( "floatpar" , &PyTypeFloatParameter , "<FloatParameter>" , false, "parameter" );
|
__cs.addType( "floatpar" , &PyTypeFloatParameter , "<FloatParameter>" , false, "parameter" );
|
||||||
__cs.addType( "capspar" , &PyTypeCapacitiesParameter , "<CapacitiesParameter>" , false, "parameter" );
|
__cs.addType( "capspar" , &PyTypeCapacitiesParameter , "<CapacitiesParameter>" , false, "parameter" );
|
||||||
|
@ -221,6 +225,8 @@ extern "C" {
|
||||||
PyModule_AddObject( module, "MCheckBoxParameter" , (PyObject*)&PyTypeMCheckBoxParameter );
|
PyModule_AddObject( module, "MCheckBoxParameter" , (PyObject*)&PyTypeMCheckBoxParameter );
|
||||||
Py_INCREF( &PyTypeSpinBoxParameter );
|
Py_INCREF( &PyTypeSpinBoxParameter );
|
||||||
PyModule_AddObject( module, "SpinBoxParameter" , (PyObject*)&PyTypeSpinBoxParameter );
|
PyModule_AddObject( module, "SpinBoxParameter" , (PyObject*)&PyTypeSpinBoxParameter );
|
||||||
|
Py_INCREF( &PyTypeStringParameter );
|
||||||
|
PyModule_AddObject( module, "StringParameter" , (PyObject*)&PyTypeStringParameter );
|
||||||
Py_INCREF( &PyTypeStepParameter );
|
Py_INCREF( &PyTypeStepParameter );
|
||||||
PyModule_AddObject( module, "StepParameter" , (PyObject*)&PyTypeStepParameter );
|
PyModule_AddObject( module, "StepParameter" , (PyObject*)&PyTypeStepParameter );
|
||||||
Py_INCREF( &PyTypeFloatParameter );
|
Py_INCREF( &PyTypeFloatParameter );
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include "hurricane/analog/PyFormFactorParameter.h"
|
#include "hurricane/analog/PyFormFactorParameter.h"
|
||||||
#include "hurricane/analog/PyMCheckBoxParameter.h"
|
#include "hurricane/analog/PyMCheckBoxParameter.h"
|
||||||
#include "hurricane/analog/PySpinBoxParameter.h"
|
#include "hurricane/analog/PySpinBoxParameter.h"
|
||||||
|
#include "hurricane/analog/PyStringParameter.h"
|
||||||
#include "hurricane/analog/PyStepParameter.h"
|
#include "hurricane/analog/PyStepParameter.h"
|
||||||
#include "hurricane/analog/PyFloatParameter.h"
|
#include "hurricane/analog/PyFloatParameter.h"
|
||||||
|
|
||||||
|
@ -121,6 +122,9 @@ extern "C" {
|
||||||
StepParameter* stepParameter = dynamic_cast<StepParameter*>(object);
|
StepParameter* stepParameter = dynamic_cast<StepParameter*>(object);
|
||||||
if (stepParameter) return PyStepParameter_Link(stepParameter);
|
if (stepParameter) return PyStepParameter_Link(stepParameter);
|
||||||
|
|
||||||
|
StringParameter* stringParameter = dynamic_cast<StringParameter*>(object);
|
||||||
|
if (stringParameter) return PyStringParameter_Link(stringParameter);
|
||||||
|
|
||||||
FloatParameter* floatParameter = dynamic_cast<FloatParameter*>(object);
|
FloatParameter* floatParameter = dynamic_cast<FloatParameter*>(object);
|
||||||
if (floatParameter) return PyFloatParameter_Link(floatParameter);
|
if (floatParameter) return PyFloatParameter_Link(floatParameter);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,81 @@
|
||||||
|
// -*- C++ -*-
|
||||||
|
//
|
||||||
|
// This file is part of the Coriolis Software.
|
||||||
|
// Copyright (c) UPMC 2020-2020, 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 |
|
||||||
|
// | |
|
||||||
|
// | Author : Jean-Paul Chaput |
|
||||||
|
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
||||||
|
// | =============================================================== |
|
||||||
|
// | C++ Module : "./PyStringParameter.cpp" |
|
||||||
|
// +-----------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
#include "hurricane/analog/PyStringParameter.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace Isobar {
|
||||||
|
|
||||||
|
using namespace Hurricane;
|
||||||
|
using namespace Analog;
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
|
||||||
|
|
||||||
|
#undef ACCESS_OBJECT
|
||||||
|
#undef ACCESS_CLASS
|
||||||
|
#define ACCESS_OBJECT _baseObject._object
|
||||||
|
#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject)
|
||||||
|
#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(StringParameter,stringParameter,function)
|
||||||
|
|
||||||
|
#if defined(__PYTHON_MODULE__)
|
||||||
|
|
||||||
|
// +=================================================================+
|
||||||
|
// | "PyStringParameter" Python Module Code Part |
|
||||||
|
// +=================================================================+
|
||||||
|
|
||||||
|
|
||||||
|
DirectGetStringAttribute( PyStringParameter_getValue, getValue , PyStringParameter, StringParameter)
|
||||||
|
DirectSetCStringAttribute(PyStringParameter_setValue, setValue , PyStringParameter, StringParameter)
|
||||||
|
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------
|
||||||
|
// PyStringParameter Attribute Method table.
|
||||||
|
|
||||||
|
PyMethodDef PyStringParameter_Methods[] =
|
||||||
|
{ { "getValue" , (PyCFunction)PyStringParameter_getValue , METH_NOARGS
|
||||||
|
, "Self explanatory." }
|
||||||
|
, { "setValue" , (PyCFunction)PyStringParameter_setValue , METH_VARARGS
|
||||||
|
, "Self explanatory." }
|
||||||
|
, { NULL, NULL, 0, NULL } /* sentinel */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// +-------------------------------------------------------------+
|
||||||
|
// | "PyStringParameter" Object Methods |
|
||||||
|
// +-------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
PythonOnlyDeleteMethod(StringParameter)
|
||||||
|
PyTypeObjectLinkPyType(StringParameter)
|
||||||
|
|
||||||
|
|
||||||
|
#else // End of Python Module Code Part.
|
||||||
|
|
||||||
|
// +=================================================================+
|
||||||
|
// | "PyStringParameter" Shared Library Code Part |
|
||||||
|
// +=================================================================+
|
||||||
|
|
||||||
|
|
||||||
|
LinkCreateMethod(StringParameter)
|
||||||
|
PyTypeInheritedObjectDefinitions(StringParameter, Parameter)
|
||||||
|
|
||||||
|
|
||||||
|
#endif // End of Shared Library Code Part.
|
||||||
|
|
||||||
|
} // extern "C".
|
||||||
|
|
||||||
|
} // Isobar namespace.
|
|
@ -10,7 +10,7 @@
|
||||||
// | Authors : Christophe Alexandre |
|
// | Authors : Christophe Alexandre |
|
||||||
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Module : "./StepParameter.cpp" |
|
// | C++ Module : "./StepParameter.cpp" |
|
||||||
// +-----------------------------------------------------------------+
|
// +-----------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
// -*- C++ -*-
|
||||||
|
//
|
||||||
|
// This file is part of the Coriolis Software.
|
||||||
|
// Copyright (c) UPMC 2020-2020, 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 : Jean-Paul Chaput |
|
||||||
|
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
||||||
|
// | =============================================================== |
|
||||||
|
// | C++ Module : "./StringParameter.cpp" |
|
||||||
|
// +-----------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
#include "hurricane/analog/StringParameter.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace Analog {
|
||||||
|
|
||||||
|
using std::string;
|
||||||
|
|
||||||
|
|
||||||
|
string StringParameter::_getTypeName () const
|
||||||
|
{ return "StringParameter"; }
|
||||||
|
|
||||||
|
|
||||||
|
std::string StringParameter::_getString () const
|
||||||
|
{
|
||||||
|
string s = Super::_getString();
|
||||||
|
s.insert( s.size()-1, " \""+_value+"\"" );
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Record* StringParameter::_getRecord () const
|
||||||
|
{
|
||||||
|
Record* record = Super::_getRecord();
|
||||||
|
record->add( getSlot( "_value", &_value ) );
|
||||||
|
return record;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} // Analog namespace.
|
|
@ -46,10 +46,15 @@ namespace Analog {
|
||||||
tr->_postCreate(deviceName);
|
tr->_postCreate(deviceName);
|
||||||
tr->createConnections(bulkConnected);
|
tr->createConnections(bulkConnected);
|
||||||
|
|
||||||
tr->addStepParameter("B.w" , 1, 1, 1);
|
tr->addStepParameter( "B.w" , 1, 1, 1 );
|
||||||
tr->addStepParameter("D.w" , 1, 1, 1);
|
tr->addStepParameter( "D.w" , 1, 1, 1 );
|
||||||
tr->addStepParameter("G.w" , 1, 1, 1);
|
tr->addStepParameter( "G.w" , 1, 1, 1 );
|
||||||
tr->addStepParameter("S.w" , 1, 1, 1);
|
tr->addStepParameter( "S.w" , 1, 1, 1 );
|
||||||
|
|
||||||
|
tr->addStringParameter( "B.t" , "bX" );
|
||||||
|
tr->addStringParameter( "D.t" , "b0" );
|
||||||
|
tr->addStringParameter( "G.t" , "t0" );
|
||||||
|
tr->addStringParameter( "S.t" , "b1" );
|
||||||
UpdateSession::close();
|
UpdateSession::close();
|
||||||
return tr;
|
return tr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,14 +14,13 @@
|
||||||
// +-----------------------------------------------------------------+
|
// +-----------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
#ifndef ANALOG_DEVICE_H
|
#pragma once
|
||||||
#define ANALOG_DEVICE_H
|
|
||||||
|
|
||||||
#include "hurricane/Cell.h"
|
#include "hurricane/Cell.h"
|
||||||
#include "hurricane/analog/StepParameter.h"
|
#include "hurricane/analog/StepParameter.h"
|
||||||
#include "hurricane/analog/FloatParameter.h"
|
#include "hurricane/analog/FloatParameter.h"
|
||||||
#include "hurricane/analog/CapacitorParameter.h"
|
#include "hurricane/analog/CapacitorParameter.h"
|
||||||
#include "hurricane/analog/ChoiceParameter.h"
|
#include "hurricane/analog/ChoiceParameter.h"
|
||||||
|
#include "hurricane/analog/StringParameter.h"
|
||||||
#include "hurricane/analog/SpinBoxParameter.h"
|
#include "hurricane/analog/SpinBoxParameter.h"
|
||||||
#include "hurricane/analog/MCheckBoxParameter.h"
|
#include "hurricane/analog/MCheckBoxParameter.h"
|
||||||
#include "hurricane/analog/FormFactorParameter.h"
|
#include "hurricane/analog/FormFactorParameter.h"
|
||||||
|
@ -71,6 +70,7 @@ namespace Analog {
|
||||||
inline Hurricane::Library* getSubDevicesLibrary ();
|
inline Hurricane::Library* getSubDevicesLibrary ();
|
||||||
inline void addParameter ( Parameter* parameter );
|
inline void addParameter ( Parameter* parameter );
|
||||||
inline StepParameter* addStepParameter ( const std::string name, long min, long max, long step );
|
inline StepParameter* addStepParameter ( const std::string name, long min, long max, long step );
|
||||||
|
inline StringParameter* addStringParameter ( const std::string name, const std::string value="" );
|
||||||
inline FloatParameter* addFloatParameter ( const std::string name, float value=0.0 );
|
inline FloatParameter* addFloatParameter ( const std::string name, float value=0.0 );
|
||||||
inline CapacitorParameter* addCapacitorParameter ( const std::string name, long value );
|
inline CapacitorParameter* addCapacitorParameter ( const std::string name, long value );
|
||||||
inline SpinBoxParameter* addSpinBoxParameter ( const std::string name, long min, long max );
|
inline SpinBoxParameter* addSpinBoxParameter ( const std::string name, long min, long max );
|
||||||
|
@ -110,6 +110,13 @@ namespace Analog {
|
||||||
return stepParameter;
|
return stepParameter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline StringParameter* Device::addStringParameter ( const std::string name, const std::string value )
|
||||||
|
{
|
||||||
|
StringParameter* stringParameter = new StringParameter( name, value );
|
||||||
|
addParameter( stringParameter );
|
||||||
|
return stringParameter;
|
||||||
|
}
|
||||||
|
|
||||||
inline FloatParameter* Device::addFloatParameter ( const std::string name, float value )
|
inline FloatParameter* Device::addFloatParameter ( const std::string name, float value )
|
||||||
{
|
{
|
||||||
FloatParameter* floatParameter = new FloatParameter( name, value );
|
FloatParameter* floatParameter = new FloatParameter( name, value );
|
||||||
|
@ -171,5 +178,3 @@ namespace Analog {
|
||||||
|
|
||||||
|
|
||||||
INSPECTOR_P_SUPPORT(Analog::Device);
|
INSPECTOR_P_SUPPORT(Analog::Device);
|
||||||
|
|
||||||
#endif // ANALOG_DEVICE_H
|
|
||||||
|
|
|
@ -14,9 +14,7 @@
|
||||||
// +-----------------------------------------------------------------+
|
// +-----------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
#ifndef ANALOG_PY_STEP_PARAMETER_H
|
#pragma once
|
||||||
#define ANALOG_PY_STEP_PARAMETER_H
|
|
||||||
|
|
||||||
#include "hurricane/analog/PyParameter.h"
|
#include "hurricane/analog/PyParameter.h"
|
||||||
#include "hurricane/analog/StepParameter.h"
|
#include "hurricane/analog/StepParameter.h"
|
||||||
|
|
||||||
|
@ -51,5 +49,3 @@ extern "C" {
|
||||||
} // extern "C".
|
} // extern "C".
|
||||||
|
|
||||||
} // Isobar namespace.
|
} // Isobar namespace.
|
||||||
|
|
||||||
#endif // ANALOG_PY_STEP_PARAMETER_H
|
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
// -*- C++ -*-
|
||||||
|
//
|
||||||
|
// This file is part of the Coriolis Software.
|
||||||
|
// Copyright (c) UPMC 2020-2020, 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 |
|
||||||
|
// | |
|
||||||
|
// | Author : Jean-Paul Chaput |
|
||||||
|
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
||||||
|
// | =============================================================== |
|
||||||
|
// | C++ Header : "./hurricane/analog/PyStringParameter.h" |
|
||||||
|
// +-----------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "hurricane/analog/PyParameter.h"
|
||||||
|
#include "hurricane/analog/StringParameter.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace Isobar {
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
// Python Object : "PyStringParameter".
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyParameter _baseObject;
|
||||||
|
} PyStringParameter;
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
// Functions & Types exported to "PyHurricane.cpp".
|
||||||
|
|
||||||
|
extern PyTypeObject PyTypeStringParameter;
|
||||||
|
extern PyMethodDef PyStringParameter_Methods[];
|
||||||
|
|
||||||
|
extern PyObject* PyStringParameter_Link ( Analog::StringParameter* object );
|
||||||
|
extern void PyStringParameter_LinkPyType ();
|
||||||
|
|
||||||
|
|
||||||
|
#define IsPyStringParameter(v) ( (v)->ob_type == &PyTypeStringParameter )
|
||||||
|
#define PYSTRINGPARAMETER(v) ( (PyStringParameter*)(v) )
|
||||||
|
#define PYSTRINGPARAMETER_O(v) ( PYSTRINGPARAMETER(v)->_baseObject->_baseObject._object )
|
||||||
|
|
||||||
|
|
||||||
|
} // extern "C".
|
||||||
|
|
||||||
|
} // Isobar namespace.
|
|
@ -10,12 +10,10 @@
|
||||||
// | Authors : Christophe Alexandre |
|
// | Authors : Christophe Alexandre |
|
||||||
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Header : "./hurricane/analog/Choices.h" |
|
// | C++ Header : "./hurricane/analog/StepParameter.h" |
|
||||||
// +-----------------------------------------------------------------+
|
// +-----------------------------------------------------------------+
|
||||||
|
|
||||||
#ifndef ANALOG_STEP_PARAMETER_H
|
#pragma once
|
||||||
#define ANALOG_STEP_PARAMETER_H
|
|
||||||
|
|
||||||
#include "hurricane/analog/Parameter.h"
|
#include "hurricane/analog/Parameter.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -56,5 +54,3 @@ namespace Analog {
|
||||||
|
|
||||||
|
|
||||||
INSPECTOR_PR_SUPPORT(Analog::StepParameter);
|
INSPECTOR_PR_SUPPORT(Analog::StepParameter);
|
||||||
|
|
||||||
#endif // ANALOG_STEP_PARAMETER_H
|
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
// -*- C++ -*-
|
||||||
|
//
|
||||||
|
// This file is part of the Coriolis Software.
|
||||||
|
// Copyright (c) UPMC 2009-2018, 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 : Jean-Paul Chaput |
|
||||||
|
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
||||||
|
// | =============================================================== |
|
||||||
|
// | C++ Header : "./hurricane/analog/StringParameter.h" |
|
||||||
|
// +-----------------------------------------------------------------+
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "hurricane/analog/Parameter.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace Analog {
|
||||||
|
|
||||||
|
class StringParameter : public Parameter {
|
||||||
|
public:
|
||||||
|
typedef Parameter Super;
|
||||||
|
public:
|
||||||
|
inline StringParameter ( std::string id, std::string v );
|
||||||
|
inline std::string getValue () const;
|
||||||
|
inline operator std::string () const;
|
||||||
|
inline void setValue ( std::string );
|
||||||
|
virtual std::string _getTypeName () const;
|
||||||
|
virtual std::string _getString () const;
|
||||||
|
virtual Record* _getRecord () const;
|
||||||
|
private:
|
||||||
|
std::string _value;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
inline StringParameter::StringParameter ( std::string id, std::string v ): Parameter(id), _value(v) {}
|
||||||
|
inline std::string StringParameter::getValue () const { return _value; }
|
||||||
|
inline StringParameter::operator std::string () const { return getValue(); }
|
||||||
|
inline void StringParameter::setValue ( std::string value ) { _value = value; }
|
||||||
|
|
||||||
|
|
||||||
|
} // Analog namespace.
|
||||||
|
|
||||||
|
|
||||||
|
INSPECTOR_PR_SUPPORT(Analog::StringParameter);
|
|
@ -14,9 +14,7 @@
|
||||||
// +-----------------------------------------------------------------+
|
// +-----------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
#ifndef ANALOG_TRANSISTOR_H
|
#pragma once
|
||||||
#define ANALOG_TRANSISTOR_H
|
|
||||||
|
|
||||||
#include "hurricane/analog/TransistorFamily.h"
|
#include "hurricane/analog/TransistorFamily.h"
|
||||||
|
|
||||||
namespace Analog {
|
namespace Analog {
|
||||||
|
@ -46,5 +44,3 @@ namespace Analog {
|
||||||
|
|
||||||
|
|
||||||
} // Analog namespace.
|
} // Analog namespace.
|
||||||
|
|
||||||
#endif // ANALOG_TRANSISTOR_H
|
|
||||||
|
|
|
@ -14,9 +14,7 @@
|
||||||
// +-----------------------------------------------------------------+
|
// +-----------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
#ifndef ANALOG_TRANSISTOR_FAMILY_H
|
#pragma once
|
||||||
#define ANALOG_TRANSISTOR_FAMILY_H
|
|
||||||
|
|
||||||
#include "hurricane/DbU.h"
|
#include "hurricane/DbU.h"
|
||||||
#include "hurricane/analog/Device.h"
|
#include "hurricane/analog/Device.h"
|
||||||
#include "hurricane/analog/MetaTransistor.h"
|
#include "hurricane/analog/MetaTransistor.h"
|
||||||
|
@ -175,5 +173,3 @@ namespace Analog {
|
||||||
|
|
||||||
|
|
||||||
} // Analog namespace.
|
} // Analog namespace.
|
||||||
|
|
||||||
#endif // ANALOG_TRANSISTOR_FAMILY_H
|
|
||||||
|
|
|
@ -424,6 +424,11 @@ class AnalogDesign ( object ):
|
||||||
|
|
||||||
if (len(dspec) > 12): device.getParameter( 'NERC' ).setValue(int (dspec[12]))
|
if (len(dspec) > 12): device.getParameter( 'NERC' ).setValue(int (dspec[12]))
|
||||||
if (len(dspec) > 13): device.getParameter( 'NIRC' ).setValue(int (dspec[13]))
|
if (len(dspec) > 13): device.getParameter( 'NIRC' ).setValue(int (dspec[13]))
|
||||||
|
if (len(dspec) > 14):
|
||||||
|
for wiringSpec in dspec[14].split(' '):
|
||||||
|
fields = wiringSpec.split('.')
|
||||||
|
if len(fields) > 1:
|
||||||
|
device.getParameter( fields[0]+'.t' ).setValue( fields[1] )
|
||||||
|
|
||||||
if not (dspec[7] is None): device.setMint ( dspec[7] )
|
if not (dspec[7] is None): device.setMint ( dspec[7] )
|
||||||
if dspec[8]: device.setExternalDummy( dspec[8] )
|
if dspec[8]: device.setExternalDummy( dspec[8] )
|
||||||
|
|
|
@ -159,8 +159,15 @@ class RoutMatchedCapacitor( CapacitorUnit, CapacitorStack, VerticalRoutingTracks
|
||||||
xMax = self.abutmentBox.getXMax()
|
xMax = self.abutmentBox.getXMax()
|
||||||
else:
|
else:
|
||||||
trackSpacing = (self.vRoutingTrack_width + self.vpitch + self.metal3Width)/2
|
trackSpacing = (self.vRoutingTrack_width + self.vpitch + self.metal3Width)/2
|
||||||
xMin = self.vRoutingTrackXCenter[ 0][firstVRTId] - trackSpacing
|
if firstVRTId > len(self.vRoutingTrackXCenter[ 0]):
|
||||||
xMax = self.vRoutingTrackXCenter[-1][ lastVRTId] + trackSpacing
|
xMin = self.abutmentBox.getXMin() - trackSpacing
|
||||||
|
else:
|
||||||
|
xMin = self.vRoutingTrackXCenter[ 0][firstVRTId] - trackSpacing
|
||||||
|
|
||||||
|
if lastVRTId > len(self.vRoutingTrackXCenter[-1]):
|
||||||
|
xMax = self.abutmentBox.getXMax() + trackSpacing
|
||||||
|
else:
|
||||||
|
xMax = self.vRoutingTrackXCenter[-1][ lastVRTId] + trackSpacing
|
||||||
|
|
||||||
width = xMax - xMin
|
width = xMax - xMin
|
||||||
widthAdjust = width % (2*self.vpitch)
|
widthAdjust = width % (2*self.vpitch)
|
||||||
|
|
|
@ -60,18 +60,29 @@ def layout ( device, bbMode ):
|
||||||
gw = str(device.getParameter( 'G.w' ).getValue())
|
gw = str(device.getParameter( 'G.w' ).getValue())
|
||||||
sw = str(device.getParameter( 'S.w' ).getValue())
|
sw = str(device.getParameter( 'S.w' ).getValue())
|
||||||
|
|
||||||
diffMap = { 'D':'D', 'S':'S', 'Dw':dw, 'Sw':sw, 'Gw':gw, 'Bw':bw }
|
bt = device.getParameter( 'B.t' ).getValue()
|
||||||
|
dt = device.getParameter( 'D.t' ).getValue()
|
||||||
|
gt = device.getParameter( 'G.t' ).getValue()
|
||||||
|
st = device.getParameter( 'S.t' ).getValue()
|
||||||
|
|
||||||
|
diffMap = { 'D':'D', 'S':'S'
|
||||||
|
, 'Dw':dw, 'Sw':sw, 'Gw':gw, 'Bw':bw
|
||||||
|
, 'Dt':dt, 'St':st, 'Gt':gt, 'Bt':bt
|
||||||
|
}
|
||||||
if device.isSourceFirst():
|
if device.isSourceFirst():
|
||||||
trace( 100, '\tUse sourceFirst.\n' )
|
trace( 100, '\tUse sourceFirst.\n' )
|
||||||
diffMap = { 'D':'S', 'S':'D', 'Dw':sw, 'Sw':dw, 'Gw':gw, 'Bw':bw }
|
diffMap = { 'D':'S', 'S':'D'
|
||||||
|
, 'Dw':sw, 'Sw':dw, 'Gw':gw, 'Bw':bw
|
||||||
|
, 'Dt':dt, 'St':st, 'Gt':gt, 'Bt':bt
|
||||||
|
}
|
||||||
|
|
||||||
wirings = '{D}.b0.{Dw} G.t0.{Gw} {S}.b1.{Sw}'
|
wirings = '{D}.{Dt}.{Dw} G.{Gt}.{Gw} {S}.{St}.{Sw}'
|
||||||
for i in range(device.getM() - 1):
|
for i in range(device.getM() - 1):
|
||||||
if i%2: wirings += ' G.t0.{Gw} {S}.b1.{Sw}'
|
if i%2: wirings += ' G.{Gt}.{Gw} {S}.{St}.{Sw}'
|
||||||
else: wirings += ' G.t0.{Gw} {D}.b0.{Dw}'
|
else: wirings += ' G.{Gt}.{Gw} {D}.{Dt}.{Dw}'
|
||||||
for i in range(device.getExternalDummy()):
|
for i in range(device.getExternalDummy()):
|
||||||
wirings = 'B.bX.{Bw} B.bX.{Bw} ' + wirings
|
wirings = 'B.{Bt}.{Bw} B.{Bt}.{Bw} ' + wirings
|
||||||
wirings += ' B.bX.{Bw} B.bX.{Bw}'
|
wirings += ' B.{Bt}.{Bw} B.{Bt}.{Bw}'
|
||||||
|
|
||||||
stack.setWirings( wirings.format( **diffMap ) )
|
stack.setWirings( wirings.format( **diffMap ) )
|
||||||
stack.doLayout ( bbMode )
|
stack.doLayout ( bbMode )
|
||||||
|
|
Loading…
Reference in New Issue