46 #ifndef Xyce_N_DEV_Digital_h
47 #define Xyce_N_DEV_Digital_h
51 #include <N_UTL_fwd.h>
81 enum gType {
INV,
NOT,
AND,
NAND,
OR,
NOR,
ADD,
XOR,
NXOR,
DFF,
DLTCH,
BUF};
85 static const char *
name() {
return "Behavioral Digital";}
144 void registerLIDs(
const std::vector<int> & intLIDVecRef,
145 const std::vector<int> & extLIDVecRef );
150 const std::vector< std::vector<int> > &
jacobianStamp()
const;
151 void registerJacLIDs(
const std::vector< std::vector<int> > & jacLIDVec );
362 std::vector< std::pair<std::string,double> > & parNames,
388 virtual void updatePowerPinLi(
int&,
int&,
int&,
int&,
const bool,
const bool,
const bool);
411 void updatePowerPinLi(
int&,
int&,
int&,
int&,
const bool,
const bool,
const bool);
431 void updatePowerPinLi(
int&,
int&,
int&,
int&,
const bool,
const bool,
const bool);
464 void virtual evalTruthTable(
const std::vector<bool>, std::vector<bool>&,
465 std::vector<double>&,
const double,
const double,
466 const bool,
const bool,
const std::vector<bool>&);
497 std::vector<double>&,
const double,
const double,
498 const bool,
const bool,
const std::vector<bool>&);
522 std::vector<double>&,
const double,
const double,
523 const bool,
const bool,
const std::vector<bool>&);
546 std::vector<double>&,
const double,
const double,
547 const bool,
const bool,
const std::vector<bool>&);
569 std::vector<double>&,
const double,
const double,
570 const bool,
const bool,
const std::vector<bool>&);
592 std::vector<double>&,
const double,
const double,
593 const bool,
const bool,
const std::vector<bool>&);
615 std::vector<double>&,
const double,
const double,
616 const bool,
const bool,
const std::vector<bool>&);
637 std::vector<double>&,
const double,
const double,
638 const bool,
const bool,
const std::vector<bool>&);
659 std::vector<double>&,
const double,
const double,
660 const bool,
const bool,
const std::vector<bool>&);
681 std::vector<double>&,
const double,
const double,
682 const bool,
const bool,
const std::vector<bool>&);
708 std::vector<double>&,
const double,
const double,
709 const bool,
const bool,
const std::vector<bool>&);
730 std::vector<double>&,
const double,
const double,
731 const bool,
const bool,
const std::vector<bool>&);
std::vector< int > li_QinpState
static int numOptionalNodes()
NorData & operator=(const InvData &right)
std::vector< double > vcaplo
void evalTruthTable(const std::vector< bool >, std::vector< bool > &, std::vector< double > &, const double, const double, const bool, const bool, const std::vector< bool > &)
std::vector< double > iref
std::vector< double > rihi
std::vector< double > currentInp
void evalTruthTable(const std::vector< bool >, std::vector< bool > &, std::vector< double > &, const double, const double, const bool, const bool, const std::vector< bool > &)
void evalTruthTable(const std::vector< bool >, std::vector< bool > &, std::vector< double > &, const double, const double, const bool, const bool, const std::vector< bool > &)
std::vector< int > li_IhiState
void evalTruthTable(const std::vector< bool >, std::vector< bool > &, std::vector< double > &, const double, const double, const bool, const bool, const std::vector< bool > &)
NxorData & operator=(const InvData &right)
const std::string gateType_
std::vector< Instance * > instanceContainer
std::vector< int > li_QloState
AndData & operator=(const InvData &right)
void registerJacLIDs(const std::vector< std::vector< int > > &jacLIDVec)
Pure virtual class to augment a linear system.
AndData(const std::string gateType_, const char devLetter_, const int ilNumInput_)
std::vector< std::vector< int > > jacStamp
bool updateSecondaryState()
std::vector< double > vcaphi
std::vector< double > qlo
void addInstance(Instance *instance)
const std::vector< std::vector< int > > & jacobianStamp() const
std::vector< double > qInp
std::vector< double > ihi
void evalTruthTable(const std::vector< bool >, std::vector< bool > &, std::vector< double > &, const double, const double, const bool, const bool, const std::vector< bool > &)
std::vector< int > li_IloState
void evalTruthTable(const std::vector< bool >, std::vector< bool > &, std::vector< double > &, const double, const double, const bool, const bool, const std::vector< bool > &)
DffData(const std::string gateType_, const char devLetter_, const int ilNumInput_)
std::vector< int > li_IinpState
void evalTruthTable(const std::vector< bool >, std::vector< bool > &, std::vector< double > &, const double, const double, const bool, const bool, const std::vector< bool > &)
virtual bool isClockLine(const int)
std::vector< Instance * > InstanceVector
virtual void setIC(Instance &, const int)
std::vector< bool > icGiven_
Master(std::vector< std::pair< std::string, double > > &parNames, const Configuration &configuration, const FactoryBlock &factory_block, const SolverState &ss1, const DeviceOptions &do1)
DeviceMaster instantiates a device as described by the device traits T.
std::vector< double > qref
UDeviceData & operator=(const UDeviceData &right)
bool getInstanceBreakPoints(std::vector< Util::BreakPoint > &)
virtual std::ostream & printOutInstances(std::ostream &os) const
static void loadModelParameters(ParametricData< Model > &model_parameters)
The FactoryBlock contains parameters needed by the device, instance and model creation functions...
std::vector< double > iInp
std::vector< double > oTime
static const char * deviceTypeName()
void checkErrors(const Instance &, const InstanceBlock &, const int &, const int &)
std::vector< int > li_Inp
std::vector< double > vcapInp
InvData(const std::string gateType_, const char devLetter_, const int ilNumInput_)
void setIC(Instance &, const int)
std::vector< int > li_transitionTimeOut
BufData & operator=(const InvData &right)
static const char * name()
GateData & operator=(const GateData &right)
std::vector< double > currentOut
DeviceData & operator=(const DeviceData &right)
bool updateIntermediateVars()
std::vector< double > ilo
std::vector< double > riref
Instance(const Configuration &configuration, const InstanceBlock &instance_block, Model &model, const FactoryBlock &factory_block)
std::vector< double > qhi
std::vector< double > rilo
InvData & operator=(const InvData &right)
XorData & operator=(const InvData &right)
The Device class is an interface for device implementations.
static bool isLinearDevice()
void updatePowerPinLi(int &, int &, int &, int &, const bool, const bool, const bool)
void updatePowerPinLi(int &, int &, int &, int &, const bool, const bool, const bool)
std::vector< double > glo
static bool modelRequired()
DffData & operator=(const InvData &right)
virtual void updatePowerPinLi(int &, int &, int &, int &, const bool, const bool, const bool)
static Device * factory(const Configuration &configuration, const FactoryBlock &factory_block)
void checkErrors(const Instance &, const InstanceBlock &, const int &, const int &)
double prevInputStateChangeTime_
NandData(const std::string gateType_, const char devLetter_, const int ilNumInput_)
void checkErrors(const Instance &, const InstanceBlock &, const int &, const int &)
YDeviceData & operator=(const YDeviceData &right)
Class Configuration contains device configuration data.
virtual void evalTruthTable(const std::vector< bool >, std::vector< bool > &, std::vector< double > &, const double, const double, const bool, const bool, const std::vector< bool > &)
std::vector< double > iTime
Model & operator=(const Model &)
bool updatePrimaryState()
void evalTruthTable(const std::vector< bool >, std::vector< bool > &, std::vector< double > &, const double, const double, const bool, const bool, const std::vector< bool > &)
std::vector< std::vector< int > > li_jac_Ref
void checkErrors(const Instance &, const InstanceBlock &, const int &, const int &)
NorData(const std::string gateType_, const char devLetter_, const int ilNumInput_)
DltchData(const std::string gateType_, const char devLetter_, const int ilNumInput_)
virtual void forEachInstance(DeviceInstanceOp &op) const
Apply a device instance "op" to all instances associated with this model.
std::vector< double > ghi
BufData(const std::string gateType_, const char devLetter_, const int ilNumInput_)
YDeviceData(const char devLetter_)
bool processParams()
processParams
std::vector< int > li_Out
void getNumIO(int &, int &)
NxorData(const std::string gateType_, const char devLetter_, const int ilNumInput_)
NandData & operator=(const InvData &right)
static void loadInstanceParameters(ParametricData< Instance > &instance_parameters)
GateData(const std::string gateType_, const char devLetter_, const int ilNumInput_)
void registerStateLIDs(const std::vector< int > &staLIDVecRef)
std::vector< int > li_QhiState
DltchData & operator=(const InvData &right)
std::vector< double > vcapref
std::vector< std::vector< int > > li_jac_Hi
AddData(const std::string gateType_, const char devLetter_, const int ilNumInput_)
void evalTruthTable(const std::vector< bool >, std::vector< bool > &, std::vector< double > &, const double, const double, const bool, const bool, const std::vector< bool > &)
std::vector< int > li_currentStateInp
ModelBlock represents a .MODEL line from the netlist.
The DeviceTraits template describes the configuration of a device.
UDeviceData(const char devLetter_)
Manages parameter binding for class C.
void evalTruthTable(const std::vector< bool >, std::vector< bool > &, std::vector< double > &, const double, const double, const bool, const bool, const std::vector< bool > &)
void loadNodeSymbols(Util::SymbolTable &symbol_table) const
Populates and returns the store name map.
bool isClockLine(const int)
OrData & operator=(const InvData &right)
InstanceBlock represent a device instance line from the netlist.
virtual void checkErrors(const Instance &, const InstanceBlock &, const int &, const int &)
DeviceData(const char devLetter_)
std::vector< int > li_currentStateOut
AddData & operator=(const InvData &right)
void checkErrors(const Instance &, const InstanceBlock &, const int &, const int &)
std::vector< double > currentIn
Instance & operator=(const Instance &)
void evalTruthTable(const std::vector< bool >, std::vector< bool > &, std::vector< double > &, const double, const double, const bool, const bool, const std::vector< bool > &)
void registerLIDs(const std::vector< int > &intLIDVecRef, const std::vector< int > &extLIDVecRef)
std::vector< int > li_transitionTimeInp
XorData(const std::string gateType_, const char devLetter_, const int ilNumInput_)
void setIC(Instance &, const int)
bool processInstanceParams()
processInstanceParams
OrData(const std::string gateType_, const char devLetter_, const int ilNumInput_)
std::vector< std::vector< int > > li_jac_Lo