@@ -62,12 +62,6 @@ isVectorEqual(const std::vector<double>& a,
6262 return true ;
6363}
6464
65- void
66- CSMDriver::updateTimeStepsAndEffCaps (const SimResult& simResult, ) const
67- {
68-
69- }
70-
7165void
7266CSMDriver::updateDriverData (const SimResult& simResult)
7367{
@@ -118,14 +112,34 @@ CSMDriver::calcEffectiveCap(const SimResult& simResult, double timeStart, double
118112 }
119113}
120114
115+ Waveform
116+ assembleDriverWaveform (const CCSDriverData& driverData, const std::vector<double >& timeSteps)
117+ {
118+ const std::vector<double >& voltageRegions = driverData.voltageRegions ();
119+ assert (voltageRegions.size () == timeSteps.size ());
120+ Waveform waveform;
121+ for (size_t i=0l i<timeSteps.size (); ++i) {
122+ waveform.addPoint (timeSteps[i], voltageRegions[i]);
123+ }
124+ return waveform;
125+ }
126+
121127void
122128CSMDriver::updateCircuit (const SimResult& simResult) const
123129{
124- updateDriverData
125- // / First check current simTime, and choose the correct effCap from _effCaps, update circuit
126- double effCap = calcEffectiveCap (simResult, timeStart, timeEnd);
127- // / append voltage waveform from timeStart to timeEnd, to _driverArc->driverSource
128-
130+ updateDriverData (simResult);
131+ const Waveform& drvierWaveform = assembleDriverWaveform (_driverData, _timeSteps);
132+ // / update driver data
133+ const Device& driverSource = _ckt->device (_driverArc->driverSourceId ());
134+ PWLValue& driverData = _ckt->PWLData (driverSource);
135+ double vdd = _driverArc->nldmData ()->owner ()->voltage ();
136+ // populatePWLData(_tZero, _tDelta, vdd, _isRiseOnDriverPin, driverData);
137+ driverData._time .clear ();
138+ driverData._value .clear ();
139+ for (const auto & p : driverWaveform.data ()) {
140+ driverData._time .push_back (p._time );
141+ driverData._value .push_back (p._value );
142+ }
129143}
130144
131145
0 commit comments