summaryrefslogtreecommitdiff
path: root/src/systemc/core/scheduler.cc
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2018-09-26 00:24:01 -0700
committerGabe Black <gabeblack@google.com>2018-10-16 00:35:11 +0000
commitf4ab64a588771391c2eebd9b1c8b089aa33cda67 (patch)
tree5768dc92ef1d12770e6c53af76c66d87d49328b2 /src/systemc/core/scheduler.cc
parentfc752d3f3c967557e28f42664b86c18e027e8eec (diff)
downloadgem5-f4ab64a588771391c2eebd9b1c8b089aa33cda67.tar.xz
systemc: Implement the synchronous reset state.
Change-Id: Ie0c29bb6cf918aea1c0bc719b9d37628b5b19339 Reviewed-on: https://gem5-review.googlesource.com/c/13185 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
Diffstat (limited to 'src/systemc/core/scheduler.cc')
-rw-r--r--src/systemc/core/scheduler.cc14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/systemc/core/scheduler.cc b/src/systemc/core/scheduler.cc
index d79abb251..6d571f60b 100644
--- a/src/systemc/core/scheduler.cc
+++ b/src/systemc/core/scheduler.cc
@@ -178,12 +178,14 @@ Scheduler::yield()
}
}
}
- if (_current && _current->excWrapper) {
- // Make sure this isn't a method process.
- assert(!_current->needsStart());
- auto ew = _current->excWrapper;
- _current->excWrapper = nullptr;
- ew->throw_it();
+ if (_current && !_current->needsStart()) {
+ if (_current->excWrapper) {
+ auto ew = _current->excWrapper;
+ _current->excWrapper = nullptr;
+ ew->throw_it();
+ } else if (_current->syncReset()) {
+ _current->reset(false);
+ }
}
}