@@ -37,7 +37,8 @@ WatchPoint::InteractiveWPAction::invokeAction(WatchPoint* wp)
3737 msg (" SetInteractive" );
3838 wp->setEnterInteractive (); // Trigger action
3939 std::string handlerStr = wp->handlerToString (wp->triggerHandler );
40- wp->setInteractiveMsg (format_string (" WP%ld: %s : %s ..." , wp->wpIndex , handlerStr.c_str (), wp->name_ .c_str ()));
40+ wp->setInteractiveMsg (
41+ format_string (" Last Trigger: WP%ld: %s : %s ..." , wp->wpIndex , handlerStr.c_str (), wp->name_ .c_str ()));
4142 // Note that the interactive action is delayed and
4243 // we want to be able to print the Trace Buffer there.
4344 // So, resetTraceBuffer for this case is in handlers
@@ -103,37 +104,52 @@ WatchPoint::WatchPoint(size_t index, const std::string& name, Core::Serializatio
103104WatchPoint::~WatchPoint () {}
104105
105106void
106- WatchPoint::beforeHandler ( uintptr_t UNUSED (key), const Event* UNUSED(ev) )
107+ WatchPoint::genericHandler (HANDLER h )
107108{
108- if ( handler & BEFORE_EVENT ) {
109- msg (" Before Event Handler" );
110- check ();
111- if ( tb_ ) {
109+ if ( tb_ ) {
112110
113- if ( reset_ && !getInteractive () ) {
114- tb_->resetTraceBuffer ();
115- reset_ = false ;
116- }
111+ if ( reset_ && !getInteractive () ) {
112+ tb_->resetTraceBuffer ();
113+ triggerCount = 0 ;
114+ reset_ = false ;
115+ }
117116
118- SimTime_t cycle = getCurrentSimCycle ();
119- bool invoke = tb_->sampleT (trigger, cycle, " BE" );
120- trigger = false ;
121- if ( invoke ) {
122- triggerHandler = HANDLER::BEFORE_EVENT;
123- setBufferReset ();
124- wpAction->invokeAction (this );
125- triggerHandler = HANDLER::NONE;
126- }
117+ SimTime_t cycle = getCurrentSimCycle ();
118+
119+ bool invoke = tb_->sampleT (trigger, cycle, handlerToString (h));
120+ if ( trigger == true ) triggerCount++;
121+ trigger = false ;
122+ if ( invoke ) {
123+ triggerHandler = h;
124+ setBufferReset ();
125+ wpAction->invokeAction (this );
126+ triggerHandler = HANDLER::NONE;
127127 }
128- else {
129- msg (" No trace buffer" );
130- if ( trigger ) {
131- triggerHandler = HANDLER::BEFORE_EVENT;
132- wpAction->invokeAction (this );
133- trigger = false ;
134- triggerHandler = HANDLER::NONE;
135- }
128+ }
129+ else {
130+ msg (" No trace buffer" );
131+ if ( reset_ && !getInteractive () ) {
132+ triggerCount = 0 ;
133+ reset_ = false ;
136134 }
135+ if ( trigger ) {
136+ triggerHandler = h;
137+ triggerCount++;
138+ reset_ = true ;
139+ wpAction->invokeAction (this );
140+ trigger = false ;
141+ triggerHandler = HANDLER::NONE;
142+ }
143+ }
144+ }
145+
146+ void
147+ WatchPoint::beforeHandler (uintptr_t UNUSED (key), const Event* UNUSED(ev))
148+ {
149+ if ( handler & BEFORE_EVENT ) {
150+ msg (" Before Event Handler" );
151+ check ();
152+ genericHandler (HANDLER::BEFORE_EVENT);
137153 } // if BEFORE_EVENT
138154}
139155
@@ -143,32 +159,7 @@ WatchPoint::afterHandler(uintptr_t UNUSED(key))
143159 if ( handler & AFTER_EVENT ) {
144160 msg (" After Event Handler" );
145161 check ();
146- if ( tb_ ) {
147-
148- if ( reset_ && !getInteractive () ) {
149- tb_->resetTraceBuffer ();
150- reset_ = false ;
151- }
152-
153- SimTime_t cycle = getCurrentSimCycle ();
154- bool invoke = tb_->sampleT (trigger, cycle, " AE" );
155- trigger = false ;
156- if ( invoke ) {
157- triggerHandler = HANDLER::AFTER_EVENT;
158- setBufferReset ();
159- wpAction->invokeAction (this );
160- triggerHandler = HANDLER::NONE;
161- }
162- }
163- else {
164- msg (" No trace buffer" );
165- if ( trigger ) {
166- triggerHandler = HANDLER::AFTER_EVENT;
167- wpAction->invokeAction (this );
168- trigger = false ;
169- triggerHandler = HANDLER::NONE;
170- }
171- }
162+ genericHandler (HANDLER::AFTER_EVENT);
172163 } // if AFTER_EVENT
173164}
174165
@@ -178,31 +169,7 @@ WatchPoint::beforeHandler(uintptr_t UNUSED(key), const Cycle_t& UNUSED(cycle))
178169 if ( handler & BEFORE_CLOCK ) {
179170 msg (" Before Clock Handler" );
180171 check ();
181- if ( tb_ ) {
182- if ( reset_ && !getInteractive () ) {
183- tb_->resetTraceBuffer ();
184- reset_ = false ;
185- }
186-
187- SimTime_t cycle = getCurrentSimCycle ();
188- bool invoke = tb_->sampleT (trigger, cycle, " BC" );
189- trigger = false ;
190- if ( invoke ) {
191- triggerHandler = HANDLER::BEFORE_CLOCK;
192- setBufferReset ();
193- wpAction->invokeAction (this );
194- triggerHandler = HANDLER::NONE;
195- }
196- }
197- else {
198- msg (" No trace buffer" );
199- if ( trigger ) {
200- triggerHandler = HANDLER::BEFORE_CLOCK;
201- wpAction->invokeAction (this );
202- trigger = false ;
203- triggerHandler = HANDLER::NONE;
204- }
205- }
172+ genericHandler (HANDLER::BEFORE_CLOCK);
206173 } // if AFTER_CLOCK
207174}
208175
@@ -212,31 +179,7 @@ WatchPoint::afterHandler(uintptr_t UNUSED(key), const bool& UNUSED(ret))
212179 if ( handler & AFTER_CLOCK ) {
213180 msg (" After Clock Handler" );
214181 check ();
215- if ( tb_ ) {
216- if ( reset_ && !getInteractive () ) {
217- tb_->resetTraceBuffer ();
218- reset_ = false ;
219- }
220-
221- SimTime_t cycle = getCurrentSimCycle ();
222- bool invoke = tb_->sampleT (trigger, cycle, " AC" );
223- trigger = false ;
224- if ( invoke ) {
225- triggerHandler = HANDLER::AFTER_CLOCK;
226- setBufferReset ();
227- wpAction->invokeAction (this );
228- triggerHandler = HANDLER::NONE;
229- }
230- }
231- else {
232- msg (" No trace buffer" );
233- if ( trigger ) {
234- triggerHandler = HANDLER::AFTER_CLOCK;
235- wpAction->invokeAction (this );
236- trigger = false ;
237- triggerHandler = HANDLER::NONE;
238- }
239- }
182+ genericHandler (HANDLER::AFTER_CLOCK);
240183 } // if AFTER_CLOCK
241184}
242185
263206WatchPoint::printTrace ()
264207{
265208 if ( tb_ != nullptr ) {
209+ std::cout << " TriggerCount=" << triggerCount << std::endl;
266210 tb_->dumpTriggerRecord ();
267211 tb_->dumpTraceBufferT ();
268212 }
@@ -329,6 +273,8 @@ WatchPoint::printHandler()
329273void
330274WatchPoint::printWatchpoint ()
331275{
276+
277+ std::cout << " TriggerCount " << triggerCount << " : " ;
332278 printHandler ();
333279 // TODO: print the logic values
334280 for ( size_t i = 0 ; i < numCmpObj_; i++ ) { // Print trigger tests
@@ -341,6 +287,7 @@ WatchPoint::printWatchpoint()
341287 std::cout << " : " ;
342288 }
343289 printAction ();
290+
344291 std::cout << std::endl;
345292}
346293
0 commit comments