@@ -137,9 +137,6 @@ module cv32e40x_controller_fsm import cv32e40x_pkg::*;
137
137
// Debug state
138
138
debug_state_e debug_fsm_cs, debug_fsm_ns;
139
139
140
- // Sticky version of debug_req_i
141
- logic debug_req_q;
142
-
143
140
// Sticky version of lsu_err_wb_i
144
141
logic nmi_pending_q;
145
142
logic nmi_is_store_q; // 1 for store, 0 for load
@@ -482,8 +479,12 @@ module cv32e40x_controller_fsm import cv32e40x_pkg::*;
482
479
(ebreak_in_wb && dcsr_i.ebreakm && ! debug_mode_q) || // Ebreak with dcsr.ebreakm==1
483
480
(ebreak_in_wb && debug_mode_q); // Ebreak during debug_mode restarts execution from dm_halt_addr, as a regular debug entry without CSR updates.
484
481
485
- // Debug pending for external debug request
486
- assign pending_async_debug = ((debug_req_i || debug_req_q) && ! debug_mode_q);
482
+ // Debug pending for external debug request, only if not already in debug mode
483
+ // Ideally the !debug_mode_q below should be factored into async_debug_allowed, but
484
+ // that can currently cause a deadlock if debug_req_i gets asserted while in debug mode, as
485
+ // a pending but not allowed async debug will cause the ID stage to halt forever while trying
486
+ // to get to an interruptible state.
487
+ assign pending_async_debug = debug_req_i && ! debug_mode_q;
487
488
488
489
// Determine cause of debug. Set for all causes of debug entry.
489
490
// In case of ebreak during debug mode, the entry code in DEBUG_TAKEN will
@@ -1129,18 +1130,6 @@ module cv32e40x_controller_fsm import cv32e40x_pkg::*;
1129
1130
assign ctrl_fsm_o.debug_mode_if = debug_mode_n;
1130
1131
assign ctrl_fsm_o.debug_mode = debug_mode_q;
1131
1132
1132
- // sticky version of debug_req (must be on clk_ungated_i such that incoming pulse before core is enabled is not missed)
1133
- always_ff @ (posedge clk_ungated_i, negedge rst_n) begin
1134
- if (rst_n == 1'b0 ) begin
1135
- debug_req_q <= 1'b0 ;
1136
- end else begin
1137
- if (debug_req_i) begin
1138
- debug_req_q <= 1'b1 ;
1139
- end else if (debug_mode_q) begin
1140
- debug_req_q <= 1'b0 ;
1141
- end
1142
- end
1143
- end
1144
1133
1145
1134
// Sticky version of lsu_err_wb_i
1146
1135
always_ff @ (posedge clk, negedge rst_n) begin
0 commit comments