aboutsummaryrefslogtreecommitdiff
path: root/riscv
diff options
context:
space:
mode:
authorStephen Twigg <sdtwigg@eecs.berkeley.edu>2013-10-15 00:30:46 -0700
committerStephen Twigg <sdtwigg@eecs.berkeley.edu>2013-10-15 00:30:46 -0700
commitcabb915003e68d3db8dc058460d1936fac432956 (patch)
tree6947ec62237ea4a9f9b9ce19bac6ebbe53a3a845 /riscv
parent658188c92b337c85a472f6de8067518a2e95de7d (diff)
downloadriscv-isa-sim-cabb915003e68d3db8dc058460d1936fac432956.zip
riscv-isa-sim-cabb915003e68d3db8dc058460d1936fac432956.tar.gz
riscv-isa-sim-cabb915003e68d3db8dc058460d1936fac432956.tar.bz2
Propogate the reset call to the extensions as well. Add reset function to extensions (demonstration in dummy acc)
Diffstat (limited to 'riscv')
-rw-r--r--riscv/dummy-rocc.h5
-rw-r--r--riscv/extension.h1
-rw-r--r--riscv/processor.cc3
3 files changed, 8 insertions, 1 deletions
diff --git a/riscv/dummy-rocc.h b/riscv/dummy-rocc.h
index 55cd48f..c74286e 100644
--- a/riscv/dummy-rocc.h
+++ b/riscv/dummy-rocc.h
@@ -35,6 +35,11 @@ class dummy_rocc_t : public rocc_t
return prev_acc; // in all cases, xd <- previous value of acc[rs2]
}
+
+ void reset()
+ {
+ for(int i = 0; i < num_acc; i++) acc[i] = 0;
+ }
private:
static const int num_acc = 4;
diff --git a/riscv/extension.h b/riscv/extension.h
index 218deb4..7e9bfe5 100644
--- a/riscv/extension.h
+++ b/riscv/extension.h
@@ -15,6 +15,7 @@ class extension_t
virtual ~extension_t();
void set_processor(processor_t* _p) { p = _p; }
+ virtual void reset() {};
protected:
processor_t* p;
diff --git a/riscv/processor.cc b/riscv/processor.cc
index 5c0d784..652a170 100644
--- a/riscv/processor.cc
+++ b/riscv/processor.cc
@@ -65,7 +65,8 @@ void processor_t::reset(bool value)
return;
run = !value;
- state.reset();
+ state.reset(); // reset the core
+ ext->reset(); // reset the extension
}
uint32_t processor_t::set_fsr(uint32_t val)