Skip to content

Commit ea9ff68

Browse files
committed
Fix pause/breakpoint not working in PAUSE/WFI loops
1 parent e40e827 commit ea9ff68

File tree

2 files changed

+14
-13
lines changed

2 files changed

+14
-13
lines changed

src/cpu/controller.mlog.jinja

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,10 @@ end_slow_init:
136136
# icache
137137
set __etext 0
138138

139+
# debugging
140+
read breakpoint_address {{CONFIG}} "BREAKPOINT_ADDRESS"
141+
sensor single_step_enabled {{SINGLE_STEP_SWITCH}} @enabled
142+
139143
# reset hart state as per machine-level ISA
140144

141145
# set privilege mode to M
@@ -240,6 +244,14 @@ end_breakpoint:
240244
sensor enabled {{POWER_SWITCH}} @enabled
241245
jump state->halt equal enabled false
242246

247+
read breakpoint_address {{CONFIG}} "BREAKPOINT_ADDRESS"
248+
write breakpoint_address prev_proc "breakpoint_address"
249+
250+
sensor single_step_enabled {{SINGLE_STEP_SWITCH}} @enabled
251+
sensor pause_enabled {{PAUSE_SWITCH}} @enabled
252+
op or single_step_enabled single_step_enabled pause_enabled
253+
write single_step_enabled prev_proc "single_step_enabled"
254+
243255
# check which CSR we're currently updating, if any
244256

245257
# update mtime
@@ -321,12 +333,6 @@ breakpoint__end_loop:
321333
set state "running"
322334
write state prev_proc "state"
323335

324-
read breakpoint_address {{CONFIG}} "BREAKPOINT_ADDRESS"
325-
write breakpoint_address prev_proc "breakpoint_address"
326-
327-
sensor single_step_enabled {{SINGLE_STEP_SWITCH}} @enabled
328-
write single_step_enabled prev_proc "single_step_enabled"
329-
330336
jump end_breakpoint always
331337

332338
# given a value 0 <= address < RAM_PROC_BYTES, resolve that variable in the lookup table

src/cpu/worker.mlog.jinja

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
read __etext prev_proc "__etext"
44
read _address prev_proc "_address"
55
read address prev_proc "address"
6+
read breakpoint_address prev_proc "breakpoint_address"
67
read csr_mie prev_proc "csr_mie"
78
read csr_minstret prev_proc "csr_minstret"
89
read csr_minstreth prev_proc "csr_minstreth"
@@ -33,6 +34,7 @@
3334
read rs1_id prev_proc "rs1_id"
3435
read rs2 prev_proc "rs2"
3536
read rs2_id prev_proc "rs2_id"
37+
read single_step_enabled prev_proc "single_step_enabled"
3638
read state prev_proc "state"
3739
read value prev_proc "value"
3840
read variable prev_proc "variable"
@@ -78,8 +80,6 @@
7880

7981
#% set ERROR_OUTPUT = 'message1'
8082

81-
#% set SINGLE_STEP_SWITCH = 'switch1'
82-
8383
#%# constants
8484

8585
#%# Sv32
@@ -124,10 +124,6 @@ reset:
124124
# @counter is moved here when the next worker starts executing
125125
#directive assert_counter {{ labels.next_tick }}
126126

127-
# poll hardware
128-
read breakpoint_address {{CONFIG}} "BREAKPOINT_ADDRESS"
129-
sensor single_step_enabled {{SINGLE_STEP_SWITCH}} @enabled
130-
131127
# fetch saved variables from the previous worker
132128
read prev_proc {{CONTROLLER}} "prev_proc"
133129

@@ -2723,7 +2719,6 @@ set {{INCR}} null
27232719
set {{CONFIG}} null
27242720
set {{CONTROLLER}} null
27252721
set {{ERROR_OUTPUT}} null
2726-
set {{SINGLE_STEP_SWITCH}} null
27272722
set {{PAGESIZE}} null
27282723
set {{labels.next_tick}} null
27292724
# unused variables

0 commit comments

Comments
 (0)