diff options
author | Prashanth Mundkur <prashanth.mundkur@gmail.com> | 2020-04-01 11:04:32 -0700 |
---|---|---|
committer | Prashanth Mundkur <prashanth.mundkur@gmail.com> | 2020-04-01 11:04:32 -0700 |
commit | 0403086181fc303d54c85b700ab917554effbcdb (patch) | |
tree | 1436bf15e1ac0bc5347b9767298472b08ef15527 | |
parent | d1fe5f8f418275cc8119866a2f3827fe5dc102e4 (diff) | |
download | sail-riscv-0403086181fc303d54c85b700ab917554effbcdb.zip sail-riscv-0403086181fc303d54c85b700ab917554effbcdb.tar.gz sail-riscv-0403086181fc303d54c85b700ab917554effbcdb.tar.bz2 |
Set mtval to 0 on ebreak. Fixes #44.
-rw-r--r-- | model/riscv_insts_base.sail | 2 | ||||
-rw-r--r-- | model/riscv_sys_control.sail | 7 |
2 files changed, 8 insertions, 1 deletions
diff --git a/model/riscv_insts_base.sail b/model/riscv_insts_base.sail index bc86859..f500ac4 100644 --- a/model/riscv_insts_base.sail +++ b/model/riscv_insts_base.sail @@ -753,7 +753,7 @@ mapping clause encdec = EBREAK() <-> 0b000000000001 @ 0b00000 @ 0b000 @ 0b00000 @ 0b1110011 function clause execute EBREAK() = { - handle_mem_exception(PC, E_Breakpoint()); + handle_exception(E_Breakpoint()); RETIRE_FAIL } diff --git a/model/riscv_sys_control.sail b/model/riscv_sys_control.sail index d906f5e..f4b005d 100644 --- a/model/riscv_sys_control.sail +++ b/model/riscv_sys_control.sail @@ -436,6 +436,13 @@ function handle_mem_exception(addr : xlenbits, e : ExceptionType) -> unit = { set_next_pc(exception_handler(cur_privilege, CTL_TRAP(t), PC)) } +function handle_exception(e: ExceptionType) -> unit = { + let t : sync_exception = struct { trap = e, + excinfo = None(), + ext = None() } in + set_next_pc(exception_handler(cur_privilege, CTL_TRAP(t), PC)) +} + function handle_interrupt(i : InterruptType, del_priv : Privilege) -> unit = set_next_pc(trap_handler(del_priv, true, interruptType_to_bits(i), PC, None(), None())) |