1 /* 2 * CConnection.hh 3 * 4 * Copyright 2014-2018 D. Mitch Bailey cvc at shuharisystem dot com 5 * 6 * This file is part of cvc. 7 * 8 * cvc is free software: you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation, either version 3 of the License, or 11 * (at your option) any later version. 12 * 13 * cvc is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with cvc. If not, see <http://www.gnu.org/licenses/>. 20 * 21 * You can download cvc from https://github.com/d-m-bailey/cvc.git 22 */ 23 24 #ifndef CCONNECTION_HH_ 25 #define CCONNECTION_HH_ 26 27 #include "Cvc.hh" 28 29 #include "CVirtualNet.hh" 30 #include "CPower.hh" 31 #include "CDevice.hh" 32 33 class CConnection { 34 public: 35 netId_t sourceId = UNKNOWN_NET; 36 netId_t gateId = UNKNOWN_NET; 37 netId_t drainId = UNKNOWN_NET; 38 netId_t bulkId = UNKNOWN_NET; 39 CVirtualNet masterSourceNet; 40 CVirtualNet masterDrainNet; 41 CVirtualNet masterGateNet; 42 CVirtualNet masterBulkNet; 43 voltage_t sourceVoltage = UNKNOWN_VOLTAGE; 44 voltage_t drainVoltage = UNKNOWN_VOLTAGE; 45 voltage_t gateVoltage = UNKNOWN_VOLTAGE; 46 voltage_t bulkVoltage = UNKNOWN_VOLTAGE; 47 CDevice * device_p = NULL; 48 deviceId_t deviceId = UNKNOWN_DEVICE; 49 CPower * sourcePower_p = NULL; 50 CPower * gatePower_p = NULL; 51 CPower * drainPower_p = NULL; 52 resistance_t resistance = INFINITE_RESISTANCE; 53 IsUnknownSourceVoltage()54 inline bool IsUnknownSourceVoltage() { return ( sourceVoltage == UNKNOWN_VOLTAGE && ! (sourcePower_p && sourcePower_p->type[HIZ_BIT]) ); } IsUnknownGateVoltage()55 inline bool IsUnknownGateVoltage() { return ( gateVoltage == UNKNOWN_VOLTAGE && ! (gatePower_p && gatePower_p->type[HIZ_BIT]) ); } IsUnknownDrainVoltage()56 inline bool IsUnknownDrainVoltage() { return ( drainVoltage == UNKNOWN_VOLTAGE && ! (drainPower_p && drainPower_p->type[HIZ_BIT]) ); } 57 float EstimatedMosDiodeCurrent(voltage_t theSourceVoltage, CConnection & theConnections); 58 float EstimatedCurrent(voltage_t theSourceVoltage, voltage_t theDrainVoltage, resistance_t theSourceResistance, resistance_t theDrainResistance); 59 // inline bool IsUnknownBulkVoltage() { return ( bulkVoltage == UNKNOWN_VOLTAGE && ! (bulkPower_p && bulkPower_p->type[HIZ_BIT]) ); } 60 61 }; 62 63 void AddConnectedDevices(netId_t theNetId, list<deviceId_t>& myPmosToCheck, list<deviceId_t>& myNmosToCheck, 64 list<deviceId_t>& myResistorToCheck, CDeviceIdVector& theFirstDevice_v, CDeviceIdVector& theNextDevice_v, vector<modelType_t>& theDeviceType_v ); 65 66 class CFullConnection { 67 public: 68 netId_t originalSourceId = UNKNOWN_NET; 69 netId_t originalGateId = UNKNOWN_NET; 70 netId_t originalDrainId = UNKNOWN_NET; 71 netId_t originalBulkId = UNKNOWN_NET; 72 netId_t sourceId = UNKNOWN_NET; 73 netId_t gateId = UNKNOWN_NET; 74 netId_t drainId = UNKNOWN_NET; 75 netId_t bulkId = UNKNOWN_NET; 76 CVirtualNet masterMinSourceNet; 77 CVirtualNet masterMinDrainNet; 78 CVirtualNet masterMinGateNet; 79 CVirtualNet masterMinBulkNet; 80 voltage_t minSourceVoltage = UNKNOWN_VOLTAGE; 81 voltage_t minDrainVoltage = UNKNOWN_VOLTAGE; 82 voltage_t minGateVoltage = UNKNOWN_VOLTAGE; 83 voltage_t minBulkVoltage = UNKNOWN_VOLTAGE; 84 CPower * minSourcePower_p = NULL; 85 CPower * minDrainPower_p = NULL; 86 CPower * minGatePower_p = NULL; 87 CPower * minBulkPower_p = NULL; 88 CVirtualNet masterMaxSourceNet; 89 CVirtualNet masterMaxDrainNet; 90 CVirtualNet masterMaxGateNet; 91 CVirtualNet masterMaxBulkNet; 92 voltage_t maxSourceVoltage = UNKNOWN_VOLTAGE; 93 voltage_t maxDrainVoltage = UNKNOWN_VOLTAGE; 94 voltage_t maxGateVoltage = UNKNOWN_VOLTAGE; 95 voltage_t maxBulkVoltage = UNKNOWN_VOLTAGE; 96 CPower * maxSourcePower_p = NULL; 97 CPower * maxDrainPower_p = NULL; 98 CPower * maxGatePower_p = NULL; 99 CPower * maxBulkPower_p = NULL; 100 CVirtualNet masterSimSourceNet; 101 CVirtualNet masterSimDrainNet; 102 CVirtualNet masterSimGateNet; 103 CVirtualNet masterSimBulkNet; 104 voltage_t simSourceVoltage = UNKNOWN_VOLTAGE; 105 voltage_t simDrainVoltage = UNKNOWN_VOLTAGE; 106 voltage_t simGateVoltage = UNKNOWN_VOLTAGE; 107 voltage_t simBulkVoltage = UNKNOWN_VOLTAGE; 108 CPower * simSourcePower_p = NULL; 109 CPower * simDrainPower_p = NULL; 110 CPower * simGatePower_p = NULL; 111 CPower * simBulkPower_p = NULL; 112 113 voltage_t minSourceLeakVoltage = UNKNOWN_VOLTAGE; 114 voltage_t minDrainLeakVoltage = UNKNOWN_VOLTAGE; 115 voltage_t minGateLeakVoltage = UNKNOWN_VOLTAGE; 116 voltage_t minBulkLeakVoltage = UNKNOWN_VOLTAGE; 117 voltage_t maxSourceLeakVoltage = UNKNOWN_VOLTAGE; 118 voltage_t maxDrainLeakVoltage = UNKNOWN_VOLTAGE; 119 voltage_t maxGateLeakVoltage = UNKNOWN_VOLTAGE; 120 voltage_t maxBulkLeakVoltage = UNKNOWN_VOLTAGE; 121 122 bool validMinSource = true; 123 bool validMinDrain = true; 124 bool validMinGate = true; 125 bool validMinBulk = true; 126 bool validSimSource = true; 127 bool validSimDrain = true; 128 bool validSimGate = true; 129 bool validSimBulk = true; 130 bool validMaxSource = true; 131 bool validMaxDrain = true; 132 bool validMaxGate = true; 133 bool validMaxBulk = true; 134 bool validMinSourceLeak = true; 135 bool validMinDrainLeak = true; 136 bool validMinGateLeak = true; 137 bool validMinBulkLeak = true; 138 bool validMaxSourceLeak = true; 139 bool validMaxDrainLeak = true; 140 bool validMaxGateLeak = true; 141 bool validMaxBulkLeak = true; 142 143 CDevice * device_p = NULL; 144 deviceId_t deviceId = UNKNOWN_DEVICE; 145 resistance_t resistance = INFINITE_RESISTANCE; 146 147 float EstimatedCurrent(); 148 float EstimatedCurrent(bool theVthFlag); 149 float EstimatedMinimumCurrent(); 150 bool CheckTerminalMinMaxVoltages(int theCheckTerminals, bool theCheckHiZFlag = true); 151 bool CheckTerminalMinMaxLeakVoltages(int theCheckTerminals); 152 bool CheckTerminalMinVoltages(int theCheckTerminals); 153 bool CheckTerminalMaxVoltages(int theCheckTerminals); 154 bool CheckTerminalSimVoltages(int theCheckTerminals); 155 void SetUnknownVoltageToSim(); 156 void SetUnknownVoltage(); 157 void SetMinMaxLeakVoltagesAndFlags(CCvcDb * theCvcDb); 158 bool IsPossibleHiZ(CCvcDb * theCvcDb); 159 bool IsTransferGate(deviceId_t theNmos, deviceId_t thePmos, CCvcDb * theCvcDb); 160 bool IsPumpCapacitor(); 161 162 }; 163 #endif /* CCONNECTION_HH_ */ 164