summaryrefslogtreecommitdiff
path: root/rtl/core/decode
diff options
context:
space:
mode:
Diffstat (limited to 'rtl/core/decode')
-rw-r--r--rtl/core/decode/decode.sv5
-rw-r--r--rtl/core/decode/isa.sv4
-rw-r--r--rtl/core/decode/mux.sv11
3 files changed, 18 insertions, 2 deletions
diff --git a/rtl/core/decode/decode.sv b/rtl/core/decode/decode.sv
index f16db9a..6534897 100644
--- a/rtl/core/decode/decode.sv
+++ b/rtl/core/decode/decode.sv
@@ -29,6 +29,7 @@ module core_decode
assign dec_ctrl.mul = mul;
assign dec_ctrl.psr = psr;
assign dec_ctrl.ldst = ldst;
+ assign dec_ctrl.bkpt = bkpt;
assign dec_ctrl.branch = branch;
assign dec_ctrl.coproc = coproc;
assign dec_ctrl.execute = execute;
@@ -44,8 +45,8 @@ module core_decode
assign dec_psr.restore_spsr = restore_spsr;
logic execute, undefined, conditional, writeback, update_flags,
- restore_spsr, branch, ldst, mul, psr, coproc, psr_saved,
- psr_write, psr_wr_flags, psr_wr_control;
+ restore_spsr, branch, ldst, mul, psr, coproc, bkpt,
+ psr_saved, psr_write, psr_wr_flags, psr_wr_control;
core_decode_mux mux
(
diff --git a/rtl/core/decode/isa.sv b/rtl/core/decode/isa.sv
index 7c27f49..4c9f316 100644
--- a/rtl/core/decode/isa.sv
+++ b/rtl/core/decode/isa.sv
@@ -209,4 +209,8 @@
`define FIELD_SWI_IMM [23:0]
+// GDB swbreak (a magic 'und')
+
+`define INSN_GDB_SWBREAK 28'h7ffdefe
+
`endif
diff --git a/rtl/core/decode/mux.sv b/rtl/core/decode/mux.sv
index 3f613a4..f05b711 100644
--- a/rtl/core/decode/mux.sv
+++ b/rtl/core/decode/mux.sv
@@ -57,6 +57,7 @@ module core_decode_mux
mul,
psr,
coproc,
+ bkpt,
psr_saved,
psr_write,
psr_wr_flags,
@@ -71,6 +72,7 @@ module core_decode_mux
always_comb begin
mul = 0;
ldst = 0;
+ bkpt = 0;
branch = 0;
coproc = 0;
execute = 1;
@@ -230,6 +232,14 @@ module core_decode_mux
writeback = 1;
end
+`ifdef VERILATOR
+ // No es parte de ARM del todo, es un hack para soportar gdb
+ `INSN_GDB_SWBREAK: begin
+ bkpt = 1;
+ dec_data.uses_rn = 0;
+ end
+`endif
+
default:
undefined = 1;
endcase
@@ -252,6 +262,7 @@ module core_decode_mux
mul = 1'bx;
psr = 1'bx;
+ bkpt = 1'bx;
ldst = 1'bx;
branch = 1'bx;
coproc = 1'bx;