misc: Clean up and complete the gem5<->SystemC-TLM bridge [10/10]

The current TLM bridge only provides a Slave Port that allows the gem5
world to send request to the SystemC world. This patch series refractors
and cleans up the existing code, and adds a Master Port that allows the
SystemC world to send requests to the gem5 world.

This patch:
  * Add callbacks for the Gem5SimControl that are called at before and
  * after simulate()

Reviewed at http://reviews.gem5.org/r/3799/

Signed-off-by: Jason Lowe-Power <jason@lowepower.com>
This commit is contained in:
Christian Menard 2017-02-09 19:15:51 -05:00
parent 78e4967b6a
commit a309c2f343
2 changed files with 22 additions and 0 deletions

View file

@ -152,6 +152,9 @@ Gem5SimControl::end_of_elaboration()
void void
Gem5SimControl::run() Gem5SimControl::run()
{ {
// notify callback
beforeSimulate();
GlobalSimLoopExitEvent *exit_event = NULL; GlobalSimLoopExitEvent *exit_event = NULL;
if (simulationEnd == 0) { if (simulationEnd == 0) {
@ -165,6 +168,9 @@ Gem5SimControl::run()
getEventQueue(0)->dump(); getEventQueue(0)->dump();
// notify callback
afterSimulate();
#if TRY_CLEAN_DELETE #if TRY_CLEAN_DELETE
config_manager->deleteObjects(); config_manager->deleteObjects();
#endif #endif

View file

@ -77,6 +77,22 @@ class Gem5SimControl : public Module, public Gem5SimControlInterface
/// Pointer to a previously created instance. /// Pointer to a previously created instance.
static Gem5SimControl* instance; static Gem5SimControl* instance;
/** A callback that is called from the run thread before gem5 simulation is
* started.
*
* A derived class may use this to perform any additional initializations
* prior simulation.
*/
virtual void beforeSimulate() {}
/** A callback that is called from the run thread after gem5 simulation
* completed.
*
* A derived class may use this to perform any additional tasks after gem5
* exits. For instance, a derived class could use this to call sc_stop().
*/
virtual void afterSimulate() {}
public: public:
SC_HAS_PROCESS(Gem5SimControl); SC_HAS_PROCESS(Gem5SimControl);