@@ -72,7 +72,7 @@ module dmi_jtag_tap #(
72
72
logic [IrLength- 1 : 0 ] jtag_ir_shift_d, jtag_ir_shift_q;
73
73
// IR register -> this gets captured from shift register upon update_ir
74
74
ir_reg_e jtag_ir_d, jtag_ir_q;
75
- logic capture_ir, shift_ir, update_ir; // pause_ir
75
+ logic capture_ir, shift_ir, update_ir, test_logic_reset ; // pause_ir
76
76
77
77
always_comb begin : p_jtag
78
78
jtag_ir_shift_d = jtag_ir_shift_q;
@@ -92,6 +92,12 @@ module dmi_jtag_tap #(
92
92
if (update_ir) begin
93
93
jtag_ir_d = ir_reg_e ' (jtag_ir_shift_q);
94
94
end
95
+
96
+ if (test_logic_reset) begin
97
+ // Bring all TAP state to the initial value.
98
+ jtag_ir_shift_d = '0 ;
99
+ jtag_ir_d = IDCODE ;
100
+ end
95
101
end
96
102
97
103
always_ff @ (posedge tck_i, negedge trst_ni) begin : p_jtag_ir_reg
@@ -129,6 +135,12 @@ module dmi_jtag_tap #(
129
135
if (idcode_select) idcode_d = { td_i, 31 '(idcode_q >> 1 )} ;
130
136
if (bypass_select) bypass_d = td_i;
131
137
end
138
+
139
+ if (test_logic_reset) begin
140
+ // Bring all TAP state to the initial value.
141
+ idcode_d = IdcodeValue;
142
+ bypass_d = 1'b0 ;
143
+ end
132
144
end
133
145
134
146
// ----------------
@@ -199,7 +211,7 @@ module dmi_jtag_tap #(
199
211
// Determination of next state; purely combinatorial
200
212
always_comb begin : p_tap_fsm
201
213
202
- trst_no = trst_ni ;
214
+ test_logic_reset = 1'b0 ;
203
215
204
216
capture_dr = 1'b0 ;
205
217
shift_dr = 1'b0 ;
@@ -213,7 +225,7 @@ module dmi_jtag_tap #(
213
225
unique case (tap_state_q)
214
226
TestLogicReset: begin
215
227
tap_state_d = (tms_i) ? TestLogicReset : RunTestIdle;
216
- trst_no = 1'b1 ;
228
+ test_logic_reset = 1'b1 ;
217
229
end
218
230
RunTestIdle: begin
219
231
tap_state_d = (tms_i) ? SelectDrScan : RunTestIdle;
@@ -287,7 +299,7 @@ module dmi_jtag_tap #(
287
299
288
300
always_ff @ (posedge tck_i or negedge trst_ni) begin : p_regs
289
301
if (! trst_ni) begin
290
- tap_state_q <= RunTestIdle ;
302
+ tap_state_q <= TestLogicReset ;
291
303
idcode_q <= IdcodeValue;
292
304
bypass_q <= 1'b0 ;
293
305
end else begin
@@ -300,6 +312,7 @@ module dmi_jtag_tap #(
300
312
// Pass through JTAG signals to debug custom DR logic.
301
313
// In case of a single TAP those are just feed-through.
302
314
assign tck_o = tck_i;
315
+ assign trst_no = ! test_logic_reset;
303
316
assign tdi_o = td_i;
304
317
assign update_o = update_dr;
305
318
assign shift_o = shift_dr;
0 commit comments