28class WatchPoint :
public Clock::HandlerBase::AttachPoint,
public Event::HandlerBase::AttachPoint
31 static const uint32_t VMASK = 0x10;
40 virtual bool check() = 0;
41 virtual ~Logic() =
default;
51 virtual ~WPAction() =
default;
52 virtual std::string actionToString() = 0;
53 virtual void invokeAction(WatchPoint* wp) = 0;
54 inline void setVerbosity(uint32_t v) { verbosity = v; }
57 uint32_t verbosity = 0;
58 inline void msg(
const std::string& msg)
60 if ( WatchPoint::VMASK & verbosity ) std::cout << msg << std::endl;
64 class InteractiveWPAction :
public WPAction
67 InteractiveWPAction() {}
68 virtual ~InteractiveWPAction() =
default;
69 inline std::string actionToString()
override {
return "interactive"; }
70 void invokeAction(WatchPoint* wp)
override;
73 class PrintTraceWPAction :
public WPAction
76 PrintTraceWPAction() {}
77 virtual ~PrintTraceWPAction() =
default;
78 inline std::string actionToString()
override {
return "printTrace"; }
79 void invokeAction(WatchPoint* wp)
override;
82 class CheckpointWPAction :
public WPAction
85 CheckpointWPAction() {}
86 virtual ~CheckpointWPAction() =
default;
87 inline std::string actionToString()
override {
return "checkpoint"; }
88 void invokeAction(WatchPoint* wp)
override;
91 class PrintStatusWPAction :
public WPAction
94 PrintStatusWPAction() {}
95 virtual ~PrintStatusWPAction() =
default;
96 inline std::string actionToString()
override {
return "printStatus"; }
97 void invokeAction(WatchPoint* wp)
override;
100 class SetVarWPAction :
public WPAction
108 virtual ~SetVarWPAction() =
default;
109 inline std::string actionToString()
override {
return "set " + name_ +
" " + valStr_; }
110 void invokeAction(WatchPoint* wp)
override;
113 std::string name_ =
"";
115 std::string valStr_ =
"";
118 class ShutdownWPAction :
public WPAction
121 ShutdownWPAction() {}
122 virtual ~ShutdownWPAction() =
default;
123 inline std::string actionToString()
override {
return "shutdown"; }
124 void invokeAction(WatchPoint* wp)
override;
129 ~WatchPoint() =
default;
136 void beforeHandler(uintptr_t UNUSED(key),
const Event* UNUSED(ev))
override;
137 void afterHandler(uintptr_t UNUSED(key))
override;
140 void beforeHandler(uintptr_t UNUSED(key),
const Cycle_t& UNUSED(cycle))
override;
141 void afterHandler(uintptr_t UNUSED(key),
const bool& UNUSED(ret))
override;
144 inline std::string getName() {
return name_; }
145 size_t getBufferSize();
146 void printTriggerRecord();
147 void printTrace(std::ostream& os = std::cout);
149 enum HANDLER :
unsigned {
160 inline void setVerbosity(uint32_t v)
163 wpAction->setVerbosity(v);
165 inline void msg(
const std::string& msg)
167 if ( VMASK & verbosity ) std::cout << msg << std::endl;
169 void setHandler(
unsigned handlerType);
170 std::string handlerToString(HANDLER h);
171 void printHandler(std::stringstream& ss);
172 void genericHandler(HANDLER h);
173 void printWatchpoint(std::stringstream& ss);
174 void resetTraceBuffer();
175 inline bool checkReset() {
return reset_; }
176 void printAction(std::stringstream& ss);
177 void addTraceBuffer(Core::Serialization::ObjTreeTraceBuffer* tb);
178 void addObjectBuffer(std::unique_ptr<Core::Serialization::ObjTreeCont> ob);
180 enum LogicOp :
unsigned {
185 inline void addLogicOp(LogicOp op) { logicOps_.push_back(op); }
186 inline void setAction(
WPAction* action) { wpAction = action; }
189 bool getInteractive();
190 void setEnterInteractive();
191 void setInteractiveMsg(
const std::string& msg);
192 SimTime_t getCurrentSimCycle();
193 void setCheckpoint();
196 void simulationShutdown();
200 std::unique_ptr<Core::Serialization::ObjTreeComparison> cmpObjects_;
201 std::vector<LogicOp> logicOps_;
203 Core::Serialization::ObjTreeTraceBuffer* tb_ =
nullptr;
205 HANDLER handler = ALL;
206 bool trigger =
false;
207 HANDLER triggerHandler = HANDLER::NONE;
208 size_t triggerCount = 0;
212 void setBufferReset();
214 uint32_t verbosity = 0;