Go
back
81 always_ff @(posedge clk_i or negedge rst_ni) begin
82 1/1 if (!rst_ni) begin
Tests: T4 T5 T6
83 1/1 err_q <= '0;
Tests: T4 T5 T6
84 1/1 end else if (intg_err || reg_we_err) begin
Tests: T4 T5 T6
85 1/1 err_q <= 1'b1;
Tests: T78 T21 T81
86 end
MISSING_ELSE
87 end
88
89 // integrity error output is permanent and should be used for alert generation
90 // register errors are transactional
91 1/1 assign intg_err_o = err_q | intg_err | reg_we_err;
Tests: T4 T5 T6
92
93 // outgoing integrity generation
94 tlul_pkg::tl_d2h_t tl_o_pre;
95 tlul_rsp_intg_gen #(
96 .EnableRspIntgGen(1),
97 .EnableDataIntgGen(1)
98 ) u_rsp_intg_gen (
99 .tl_i(tl_o_pre),
100 .tl_o(tl_o)
101 );
102
103 1/1 assign tl_reg_h2d = tl_i;
Tests: T4 T5 T6
104 1/1 assign tl_o_pre = tl_reg_d2h;
Tests: T4 T5 T6
105
106 tlul_adapter_reg #(
107 .RegAw(AW),
108 .RegDw(DW),
109 .EnableDataIntgGen(0)
110 ) u_reg_if (
111 .clk_i (clk_i),
112 .rst_ni (rst_ni),
113
114 .tl_i (tl_reg_h2d),
115 .tl_o (tl_reg_d2h),
116
117 .en_ifetch_i(prim_mubi_pkg::MuBi4False),
118 .intg_error_o(),
119
120 .we_o (reg_we),
121 .re_o (reg_re),
122 .addr_o (reg_addr),
123 .wdata_o (reg_wdata),
124 .be_o (reg_be),
125 .busy_i (reg_busy),
126 .rdata_i (reg_rdata),
127 .error_i (reg_error)
128 );
129
130 // cdc oversampling signals
131
132 1/1 assign reg_rdata = reg_rdata_next ;
Tests: T4 T5 T6
133 1/1 assign reg_error = addrmiss | wr_err | intg_err;
Tests: T4 T28 T30
134
135 // Define SW related signals
136 // Format: <reg>_<field>_{wd|we|qs}
137 // or <reg>_{wd|we|qs} if field == 1 or 0
138 logic alert_test_we;
139 logic alert_test_recov_fault_wd;
140 logic alert_test_fatal_fault_wd;
141 logic extclk_ctrl_regwen_we;
142 logic extclk_ctrl_regwen_qs;
143 logic extclk_ctrl_regwen_wd;
144 logic extclk_ctrl_we;
145 logic [3:0] extclk_ctrl_sel_qs;
146 logic [3:0] extclk_ctrl_sel_wd;
147 logic [3:0] extclk_ctrl_hi_speed_sel_qs;
148 logic [3:0] extclk_ctrl_hi_speed_sel_wd;
149 logic extclk_status_re;
150 logic [3:0] extclk_status_qs;
151 logic jitter_regwen_we;
152 logic jitter_regwen_qs;
153 logic jitter_regwen_wd;
154 logic jitter_enable_we;
155 logic [3:0] jitter_enable_qs;
156 logic [3:0] jitter_enable_wd;
157 logic clk_enables_we;
158 logic clk_enables_clk_io_div4_peri_en_qs;
159 logic clk_enables_clk_io_div4_peri_en_wd;
160 logic clk_enables_clk_io_div2_peri_en_qs;
161 logic clk_enables_clk_io_div2_peri_en_wd;
162 logic clk_enables_clk_io_peri_en_qs;
163 logic clk_enables_clk_io_peri_en_wd;
164 logic clk_enables_clk_usb_peri_en_qs;
165 logic clk_enables_clk_usb_peri_en_wd;
166 logic clk_hints_we;
167 logic clk_hints_clk_main_aes_hint_qs;
168 logic clk_hints_clk_main_aes_hint_wd;
169 logic clk_hints_clk_main_hmac_hint_qs;
170 logic clk_hints_clk_main_hmac_hint_wd;
171 logic clk_hints_clk_main_kmac_hint_qs;
172 logic clk_hints_clk_main_kmac_hint_wd;
173 logic clk_hints_clk_main_otbn_hint_qs;
174 logic clk_hints_clk_main_otbn_hint_wd;
175 logic clk_hints_status_clk_main_aes_val_qs;
176 logic clk_hints_status_clk_main_hmac_val_qs;
177 logic clk_hints_status_clk_main_kmac_val_qs;
178 logic clk_hints_status_clk_main_otbn_val_qs;
179 logic measure_ctrl_regwen_we;
180 logic measure_ctrl_regwen_qs;
181 logic measure_ctrl_regwen_wd;
182 logic io_meas_ctrl_en_we;
183 logic [3:0] io_meas_ctrl_en_qs;
184 logic io_meas_ctrl_en_busy;
185 logic io_meas_ctrl_shadowed_re;
186 logic io_meas_ctrl_shadowed_we;
187 logic [19:0] io_meas_ctrl_shadowed_qs;
188 logic io_meas_ctrl_shadowed_busy;
189 logic io_meas_ctrl_shadowed_hi_storage_err;
190 logic io_meas_ctrl_shadowed_hi_update_err;
191 logic io_meas_ctrl_shadowed_lo_storage_err;
192 logic io_meas_ctrl_shadowed_lo_update_err;
193 logic io_div2_meas_ctrl_en_we;
194 logic [3:0] io_div2_meas_ctrl_en_qs;
195 logic io_div2_meas_ctrl_en_busy;
196 logic io_div2_meas_ctrl_shadowed_re;
197 logic io_div2_meas_ctrl_shadowed_we;
198 logic [17:0] io_div2_meas_ctrl_shadowed_qs;
199 logic io_div2_meas_ctrl_shadowed_busy;
200 logic io_div2_meas_ctrl_shadowed_hi_storage_err;
201 logic io_div2_meas_ctrl_shadowed_hi_update_err;
202 logic io_div2_meas_ctrl_shadowed_lo_storage_err;
203 logic io_div2_meas_ctrl_shadowed_lo_update_err;
204 logic io_div4_meas_ctrl_en_we;
205 logic [3:0] io_div4_meas_ctrl_en_qs;
206 logic io_div4_meas_ctrl_en_busy;
207 logic io_div4_meas_ctrl_shadowed_re;
208 logic io_div4_meas_ctrl_shadowed_we;
209 logic [15:0] io_div4_meas_ctrl_shadowed_qs;
210 logic io_div4_meas_ctrl_shadowed_busy;
211 logic io_div4_meas_ctrl_shadowed_hi_storage_err;
212 logic io_div4_meas_ctrl_shadowed_hi_update_err;
213 logic io_div4_meas_ctrl_shadowed_lo_storage_err;
214 logic io_div4_meas_ctrl_shadowed_lo_update_err;
215 logic main_meas_ctrl_en_we;
216 logic [3:0] main_meas_ctrl_en_qs;
217 logic main_meas_ctrl_en_busy;
218 logic main_meas_ctrl_shadowed_re;
219 logic main_meas_ctrl_shadowed_we;
220 logic [19:0] main_meas_ctrl_shadowed_qs;
221 logic main_meas_ctrl_shadowed_busy;
222 logic main_meas_ctrl_shadowed_hi_storage_err;
223 logic main_meas_ctrl_shadowed_hi_update_err;
224 logic main_meas_ctrl_shadowed_lo_storage_err;
225 logic main_meas_ctrl_shadowed_lo_update_err;
226 logic usb_meas_ctrl_en_we;
227 logic [3:0] usb_meas_ctrl_en_qs;
228 logic usb_meas_ctrl_en_busy;
229 logic usb_meas_ctrl_shadowed_re;
230 logic usb_meas_ctrl_shadowed_we;
231 logic [17:0] usb_meas_ctrl_shadowed_qs;
232 logic usb_meas_ctrl_shadowed_busy;
233 logic usb_meas_ctrl_shadowed_hi_storage_err;
234 logic usb_meas_ctrl_shadowed_hi_update_err;
235 logic usb_meas_ctrl_shadowed_lo_storage_err;
236 logic usb_meas_ctrl_shadowed_lo_update_err;
237 logic recov_err_code_we;
238 logic recov_err_code_shadow_update_err_qs;
239 logic recov_err_code_shadow_update_err_wd;
240 logic recov_err_code_io_measure_err_qs;
241 logic recov_err_code_io_measure_err_wd;
242 logic recov_err_code_io_div2_measure_err_qs;
243 logic recov_err_code_io_div2_measure_err_wd;
244 logic recov_err_code_io_div4_measure_err_qs;
245 logic recov_err_code_io_div4_measure_err_wd;
246 logic recov_err_code_main_measure_err_qs;
247 logic recov_err_code_main_measure_err_wd;
248 logic recov_err_code_usb_measure_err_qs;
249 logic recov_err_code_usb_measure_err_wd;
250 logic recov_err_code_io_timeout_err_qs;
251 logic recov_err_code_io_timeout_err_wd;
252 logic recov_err_code_io_div2_timeout_err_qs;
253 logic recov_err_code_io_div2_timeout_err_wd;
254 logic recov_err_code_io_div4_timeout_err_qs;
255 logic recov_err_code_io_div4_timeout_err_wd;
256 logic recov_err_code_main_timeout_err_qs;
257 logic recov_err_code_main_timeout_err_wd;
258 logic recov_err_code_usb_timeout_err_qs;
259 logic recov_err_code_usb_timeout_err_wd;
260 logic fatal_err_code_reg_intg_qs;
261 logic fatal_err_code_idle_cnt_qs;
262 logic fatal_err_code_shadow_storage_err_qs;
263 // Define register CDC handling.
264 // CDC handling is done on a per-reg instead of per-field boundary.
265
266 logic [3:0] io_io_meas_ctrl_en_ds_int;
267 logic [3:0] io_io_meas_ctrl_en_qs_int;
268 logic [3:0] io_io_meas_ctrl_en_ds;
269 logic io_io_meas_ctrl_en_qe;
270 logic [3:0] io_io_meas_ctrl_en_qs;
271 logic [3:0] io_io_meas_ctrl_en_wdata;
272 logic io_io_meas_ctrl_en_we;
273 logic unused_io_io_meas_ctrl_en_wdata;
274 logic io_io_meas_ctrl_en_regwen;
275
276 always_comb begin
277 1/1 io_io_meas_ctrl_en_qs = 4'h9;
Tests: T1 T2 T3
278 1/1 io_io_meas_ctrl_en_ds = 4'h9;
Tests: T1 T2 T3
279 1/1 io_io_meas_ctrl_en_ds = io_io_meas_ctrl_en_ds_int;
Tests: T1 T2 T3
280 1/1 io_io_meas_ctrl_en_qs = io_io_meas_ctrl_en_qs_int;
Tests: T1 T2 T3
281 end
282
283 prim_reg_cdc #(
284 .DataWidth(4),
285 .ResetVal(4'h9),
286 .BitMask(4'hf),
287 .DstWrReq(1)
288 ) u_io_meas_ctrl_en_cdc (
289 .clk_src_i (clk_i),
290 .rst_src_ni (rst_ni),
291 .clk_dst_i (clk_io_i),
292 .rst_dst_ni (rst_io_ni),
293 .src_regwen_i (measure_ctrl_regwen_qs),
294 .src_we_i (io_meas_ctrl_en_we),
295 .src_re_i ('0),
296 .src_wd_i (reg_wdata[3:0]),
297 .src_busy_o (io_meas_ctrl_en_busy),
298 .src_qs_o (io_meas_ctrl_en_qs), // for software read back
299 .dst_update_i (io_io_meas_ctrl_en_qe),
300 .dst_ds_i (io_io_meas_ctrl_en_ds),
301 .dst_qs_i (io_io_meas_ctrl_en_qs),
302 .dst_we_o (io_io_meas_ctrl_en_we),
303 .dst_re_o (),
304 .dst_regwen_o (io_io_meas_ctrl_en_regwen),
305 .dst_wd_o (io_io_meas_ctrl_en_wdata)
306 );
307 1/1 assign unused_io_io_meas_ctrl_en_wdata =
Tests: T1 T2 T3
308 ^io_io_meas_ctrl_en_wdata;
309
310 logic [9:0] io_io_meas_ctrl_shadowed_hi_qs_int;
311 logic [9:0] io_io_meas_ctrl_shadowed_lo_qs_int;
312 logic [19:0] io_io_meas_ctrl_shadowed_qs;
313 logic [19:0] io_io_meas_ctrl_shadowed_wdata;
314 logic io_io_meas_ctrl_shadowed_we;
315 logic unused_io_io_meas_ctrl_shadowed_wdata;
316 logic io_io_meas_ctrl_shadowed_re;
317 logic io_io_meas_ctrl_shadowed_regwen;
318
319 always_comb begin
320 1/1 io_io_meas_ctrl_shadowed_qs = 20'h759ea;
Tests: T1 T2 T3
321 1/1 io_io_meas_ctrl_shadowed_qs[9:0] = io_io_meas_ctrl_shadowed_hi_qs_int;
Tests: T1 T2 T3
322 1/1 io_io_meas_ctrl_shadowed_qs[19:10] = io_io_meas_ctrl_shadowed_lo_qs_int;
Tests: T1 T2 T3
323 end
324
325 prim_reg_cdc #(
326 .DataWidth(20),
327 .ResetVal(20'h759ea),
328 .BitMask(20'hfffff),
329 .DstWrReq(0)
330 ) u_io_meas_ctrl_shadowed_cdc (
331 .clk_src_i (clk_i),
332 .rst_src_ni (rst_ni),
333 .clk_dst_i (clk_io_i),
334 .rst_dst_ni (rst_io_ni),
335 .src_regwen_i (measure_ctrl_regwen_qs),
336 .src_we_i (io_meas_ctrl_shadowed_we),
337 .src_re_i (io_meas_ctrl_shadowed_re),
338 .src_wd_i (reg_wdata[19:0]),
339 .src_busy_o (io_meas_ctrl_shadowed_busy),
340 .src_qs_o (io_meas_ctrl_shadowed_qs), // for software read back
341 .dst_update_i ('0),
342 .dst_ds_i ('0),
343 .dst_qs_i (io_io_meas_ctrl_shadowed_qs),
344 .dst_we_o (io_io_meas_ctrl_shadowed_we),
345 .dst_re_o (io_io_meas_ctrl_shadowed_re),
346 .dst_regwen_o (io_io_meas_ctrl_shadowed_regwen),
347 .dst_wd_o (io_io_meas_ctrl_shadowed_wdata)
348 );
349 1/1 assign unused_io_io_meas_ctrl_shadowed_wdata =
Tests: T1 T2 T3
350 ^io_io_meas_ctrl_shadowed_wdata;
351
352 logic [3:0] io_div2_io_div2_meas_ctrl_en_ds_int;
353 logic [3:0] io_div2_io_div2_meas_ctrl_en_qs_int;
354 logic [3:0] io_div2_io_div2_meas_ctrl_en_ds;
355 logic io_div2_io_div2_meas_ctrl_en_qe;
356 logic [3:0] io_div2_io_div2_meas_ctrl_en_qs;
357 logic [3:0] io_div2_io_div2_meas_ctrl_en_wdata;
358 logic io_div2_io_div2_meas_ctrl_en_we;
359 logic unused_io_div2_io_div2_meas_ctrl_en_wdata;
360 logic io_div2_io_div2_meas_ctrl_en_regwen;
361
362 always_comb begin
363 1/1 io_div2_io_div2_meas_ctrl_en_qs = 4'h9;
Tests: T1 T2 T3
364 1/1 io_div2_io_div2_meas_ctrl_en_ds = 4'h9;
Tests: T1 T2 T3
365 1/1 io_div2_io_div2_meas_ctrl_en_ds = io_div2_io_div2_meas_ctrl_en_ds_int;
Tests: T1 T2 T3
366 1/1 io_div2_io_div2_meas_ctrl_en_qs = io_div2_io_div2_meas_ctrl_en_qs_int;
Tests: T1 T2 T3
367 end
368
369 prim_reg_cdc #(
370 .DataWidth(4),
371 .ResetVal(4'h9),
372 .BitMask(4'hf),
373 .DstWrReq(1)
374 ) u_io_div2_meas_ctrl_en_cdc (
375 .clk_src_i (clk_i),
376 .rst_src_ni (rst_ni),
377 .clk_dst_i (clk_io_div2_i),
378 .rst_dst_ni (rst_io_div2_ni),
379 .src_regwen_i (measure_ctrl_regwen_qs),
380 .src_we_i (io_div2_meas_ctrl_en_we),
381 .src_re_i ('0),
382 .src_wd_i (reg_wdata[3:0]),
383 .src_busy_o (io_div2_meas_ctrl_en_busy),
384 .src_qs_o (io_div2_meas_ctrl_en_qs), // for software read back
385 .dst_update_i (io_div2_io_div2_meas_ctrl_en_qe),
386 .dst_ds_i (io_div2_io_div2_meas_ctrl_en_ds),
387 .dst_qs_i (io_div2_io_div2_meas_ctrl_en_qs),
388 .dst_we_o (io_div2_io_div2_meas_ctrl_en_we),
389 .dst_re_o (),
390 .dst_regwen_o (io_div2_io_div2_meas_ctrl_en_regwen),
391 .dst_wd_o (io_div2_io_div2_meas_ctrl_en_wdata)
392 );
393 1/1 assign unused_io_div2_io_div2_meas_ctrl_en_wdata =
Tests: T1 T2 T3
394 ^io_div2_io_div2_meas_ctrl_en_wdata;
395
396 logic [8:0] io_div2_io_div2_meas_ctrl_shadowed_hi_qs_int;
397 logic [8:0] io_div2_io_div2_meas_ctrl_shadowed_lo_qs_int;
398 logic [17:0] io_div2_io_div2_meas_ctrl_shadowed_qs;
399 logic [17:0] io_div2_io_div2_meas_ctrl_shadowed_wdata;
400 logic io_div2_io_div2_meas_ctrl_shadowed_we;
401 logic unused_io_div2_io_div2_meas_ctrl_shadowed_wdata;
402 logic io_div2_io_div2_meas_ctrl_shadowed_re;
403 logic io_div2_io_div2_meas_ctrl_shadowed_regwen;
404
405 always_comb begin
406 1/1 io_div2_io_div2_meas_ctrl_shadowed_qs = 18'h1ccfa;
Tests: T1 T2 T3
407 1/1 io_div2_io_div2_meas_ctrl_shadowed_qs[8:0] = io_div2_io_div2_meas_ctrl_shadowed_hi_qs_int;
Tests: T1 T2 T3
408 1/1 io_div2_io_div2_meas_ctrl_shadowed_qs[17:9] = io_div2_io_div2_meas_ctrl_shadowed_lo_qs_int;
Tests: T1 T2 T3
409 end
410
411 prim_reg_cdc #(
412 .DataWidth(18),
413 .ResetVal(18'h1ccfa),
414 .BitMask(18'h3ffff),
415 .DstWrReq(0)
416 ) u_io_div2_meas_ctrl_shadowed_cdc (
417 .clk_src_i (clk_i),
418 .rst_src_ni (rst_ni),
419 .clk_dst_i (clk_io_div2_i),
420 .rst_dst_ni (rst_io_div2_ni),
421 .src_regwen_i (measure_ctrl_regwen_qs),
422 .src_we_i (io_div2_meas_ctrl_shadowed_we),
423 .src_re_i (io_div2_meas_ctrl_shadowed_re),
424 .src_wd_i (reg_wdata[17:0]),
425 .src_busy_o (io_div2_meas_ctrl_shadowed_busy),
426 .src_qs_o (io_div2_meas_ctrl_shadowed_qs), // for software read back
427 .dst_update_i ('0),
428 .dst_ds_i ('0),
429 .dst_qs_i (io_div2_io_div2_meas_ctrl_shadowed_qs),
430 .dst_we_o (io_div2_io_div2_meas_ctrl_shadowed_we),
431 .dst_re_o (io_div2_io_div2_meas_ctrl_shadowed_re),
432 .dst_regwen_o (io_div2_io_div2_meas_ctrl_shadowed_regwen),
433 .dst_wd_o (io_div2_io_div2_meas_ctrl_shadowed_wdata)
434 );
435 1/1 assign unused_io_div2_io_div2_meas_ctrl_shadowed_wdata =
Tests: T1 T2 T3
436 ^io_div2_io_div2_meas_ctrl_shadowed_wdata;
437
438 logic [3:0] io_div4_io_div4_meas_ctrl_en_ds_int;
439 logic [3:0] io_div4_io_div4_meas_ctrl_en_qs_int;
440 logic [3:0] io_div4_io_div4_meas_ctrl_en_ds;
441 logic io_div4_io_div4_meas_ctrl_en_qe;
442 logic [3:0] io_div4_io_div4_meas_ctrl_en_qs;
443 logic [3:0] io_div4_io_div4_meas_ctrl_en_wdata;
444 logic io_div4_io_div4_meas_ctrl_en_we;
445 logic unused_io_div4_io_div4_meas_ctrl_en_wdata;
446 logic io_div4_io_div4_meas_ctrl_en_regwen;
447
448 always_comb begin
449 1/1 io_div4_io_div4_meas_ctrl_en_qs = 4'h9;
Tests: T1 T2 T3
450 1/1 io_div4_io_div4_meas_ctrl_en_ds = 4'h9;
Tests: T1 T2 T3
451 1/1 io_div4_io_div4_meas_ctrl_en_ds = io_div4_io_div4_meas_ctrl_en_ds_int;
Tests: T1 T2 T3
452 1/1 io_div4_io_div4_meas_ctrl_en_qs = io_div4_io_div4_meas_ctrl_en_qs_int;
Tests: T1 T2 T3
453 end
454
455 prim_reg_cdc #(
456 .DataWidth(4),
457 .ResetVal(4'h9),
458 .BitMask(4'hf),
459 .DstWrReq(1)
460 ) u_io_div4_meas_ctrl_en_cdc (
461 .clk_src_i (clk_i),
462 .rst_src_ni (rst_ni),
463 .clk_dst_i (clk_io_div4_i),
464 .rst_dst_ni (rst_io_div4_ni),
465 .src_regwen_i (measure_ctrl_regwen_qs),
466 .src_we_i (io_div4_meas_ctrl_en_we),
467 .src_re_i ('0),
468 .src_wd_i (reg_wdata[3:0]),
469 .src_busy_o (io_div4_meas_ctrl_en_busy),
470 .src_qs_o (io_div4_meas_ctrl_en_qs), // for software read back
471 .dst_update_i (io_div4_io_div4_meas_ctrl_en_qe),
472 .dst_ds_i (io_div4_io_div4_meas_ctrl_en_ds),
473 .dst_qs_i (io_div4_io_div4_meas_ctrl_en_qs),
474 .dst_we_o (io_div4_io_div4_meas_ctrl_en_we),
475 .dst_re_o (),
476 .dst_regwen_o (io_div4_io_div4_meas_ctrl_en_regwen),
477 .dst_wd_o (io_div4_io_div4_meas_ctrl_en_wdata)
478 );
479 1/1 assign unused_io_div4_io_div4_meas_ctrl_en_wdata =
Tests: T1 T2 T3
480 ^io_div4_io_div4_meas_ctrl_en_wdata;
481
482 logic [7:0] io_div4_io_div4_meas_ctrl_shadowed_hi_qs_int;
483 logic [7:0] io_div4_io_div4_meas_ctrl_shadowed_lo_qs_int;
484 logic [15:0] io_div4_io_div4_meas_ctrl_shadowed_qs;
485 logic [15:0] io_div4_io_div4_meas_ctrl_shadowed_wdata;
486 logic io_div4_io_div4_meas_ctrl_shadowed_we;
487 logic unused_io_div4_io_div4_meas_ctrl_shadowed_wdata;
488 logic io_div4_io_div4_meas_ctrl_shadowed_re;
489 logic io_div4_io_div4_meas_ctrl_shadowed_regwen;
490
491 always_comb begin
492 1/1 io_div4_io_div4_meas_ctrl_shadowed_qs = 16'h6e82;
Tests: T1 T2 T3
493 1/1 io_div4_io_div4_meas_ctrl_shadowed_qs[7:0] = io_div4_io_div4_meas_ctrl_shadowed_hi_qs_int;
Tests: T1 T2 T3
494 1/1 io_div4_io_div4_meas_ctrl_shadowed_qs[15:8] = io_div4_io_div4_meas_ctrl_shadowed_lo_qs_int;
Tests: T1 T2 T3
495 end
496
497 prim_reg_cdc #(
498 .DataWidth(16),
499 .ResetVal(16'h6e82),
500 .BitMask(16'hffff),
501 .DstWrReq(0)
502 ) u_io_div4_meas_ctrl_shadowed_cdc (
503 .clk_src_i (clk_i),
504 .rst_src_ni (rst_ni),
505 .clk_dst_i (clk_io_div4_i),
506 .rst_dst_ni (rst_io_div4_ni),
507 .src_regwen_i (measure_ctrl_regwen_qs),
508 .src_we_i (io_div4_meas_ctrl_shadowed_we),
509 .src_re_i (io_div4_meas_ctrl_shadowed_re),
510 .src_wd_i (reg_wdata[15:0]),
511 .src_busy_o (io_div4_meas_ctrl_shadowed_busy),
512 .src_qs_o (io_div4_meas_ctrl_shadowed_qs), // for software read back
513 .dst_update_i ('0),
514 .dst_ds_i ('0),
515 .dst_qs_i (io_div4_io_div4_meas_ctrl_shadowed_qs),
516 .dst_we_o (io_div4_io_div4_meas_ctrl_shadowed_we),
517 .dst_re_o (io_div4_io_div4_meas_ctrl_shadowed_re),
518 .dst_regwen_o (io_div4_io_div4_meas_ctrl_shadowed_regwen),
519 .dst_wd_o (io_div4_io_div4_meas_ctrl_shadowed_wdata)
520 );
521 1/1 assign unused_io_div4_io_div4_meas_ctrl_shadowed_wdata =
Tests: T1 T2 T3
522 ^io_div4_io_div4_meas_ctrl_shadowed_wdata;
523
524 logic [3:0] main_main_meas_ctrl_en_ds_int;
525 logic [3:0] main_main_meas_ctrl_en_qs_int;
526 logic [3:0] main_main_meas_ctrl_en_ds;
527 logic main_main_meas_ctrl_en_qe;
528 logic [3:0] main_main_meas_ctrl_en_qs;
529 logic [3:0] main_main_meas_ctrl_en_wdata;
530 logic main_main_meas_ctrl_en_we;
531 logic unused_main_main_meas_ctrl_en_wdata;
532 logic main_main_meas_ctrl_en_regwen;
533
534 always_comb begin
535 1/1 main_main_meas_ctrl_en_qs = 4'h9;
Tests: T1 T2 T3
536 1/1 main_main_meas_ctrl_en_ds = 4'h9;
Tests: T1 T2 T3
537 1/1 main_main_meas_ctrl_en_ds = main_main_meas_ctrl_en_ds_int;
Tests: T1 T2 T3
538 1/1 main_main_meas_ctrl_en_qs = main_main_meas_ctrl_en_qs_int;
Tests: T1 T2 T3
539 end
540
541 prim_reg_cdc #(
542 .DataWidth(4),
543 .ResetVal(4'h9),
544 .BitMask(4'hf),
545 .DstWrReq(1)
546 ) u_main_meas_ctrl_en_cdc (
547 .clk_src_i (clk_i),
548 .rst_src_ni (rst_ni),
549 .clk_dst_i (clk_main_i),
550 .rst_dst_ni (rst_main_ni),
551 .src_regwen_i (measure_ctrl_regwen_qs),
552 .src_we_i (main_meas_ctrl_en_we),
553 .src_re_i ('0),
554 .src_wd_i (reg_wdata[3:0]),
555 .src_busy_o (main_meas_ctrl_en_busy),
556 .src_qs_o (main_meas_ctrl_en_qs), // for software read back
557 .dst_update_i (main_main_meas_ctrl_en_qe),
558 .dst_ds_i (main_main_meas_ctrl_en_ds),
559 .dst_qs_i (main_main_meas_ctrl_en_qs),
560 .dst_we_o (main_main_meas_ctrl_en_we),
561 .dst_re_o (),
562 .dst_regwen_o (main_main_meas_ctrl_en_regwen),
563 .dst_wd_o (main_main_meas_ctrl_en_wdata)
564 );
565 1/1 assign unused_main_main_meas_ctrl_en_wdata =
Tests: T1 T2 T3
566 ^main_main_meas_ctrl_en_wdata;
567
568 logic [9:0] main_main_meas_ctrl_shadowed_hi_qs_int;
569 logic [9:0] main_main_meas_ctrl_shadowed_lo_qs_int;
570 logic [19:0] main_main_meas_ctrl_shadowed_qs;
571 logic [19:0] main_main_meas_ctrl_shadowed_wdata;
572 logic main_main_meas_ctrl_shadowed_we;
573 logic unused_main_main_meas_ctrl_shadowed_wdata;
574 logic main_main_meas_ctrl_shadowed_re;
575 logic main_main_meas_ctrl_shadowed_regwen;
576
577 always_comb begin
578 1/1 main_main_meas_ctrl_shadowed_qs = 20'h7a9fe;
Tests: T1 T2 T3
579 1/1 main_main_meas_ctrl_shadowed_qs[9:0] = main_main_meas_ctrl_shadowed_hi_qs_int;
Tests: T1 T2 T3
580 1/1 main_main_meas_ctrl_shadowed_qs[19:10] = main_main_meas_ctrl_shadowed_lo_qs_int;
Tests: T1 T2 T3
581 end
582
583 prim_reg_cdc #(
584 .DataWidth(20),
585 .ResetVal(20'h7a9fe),
586 .BitMask(20'hfffff),
587 .DstWrReq(0)
588 ) u_main_meas_ctrl_shadowed_cdc (
589 .clk_src_i (clk_i),
590 .rst_src_ni (rst_ni),
591 .clk_dst_i (clk_main_i),
592 .rst_dst_ni (rst_main_ni),
593 .src_regwen_i (measure_ctrl_regwen_qs),
594 .src_we_i (main_meas_ctrl_shadowed_we),
595 .src_re_i (main_meas_ctrl_shadowed_re),
596 .src_wd_i (reg_wdata[19:0]),
597 .src_busy_o (main_meas_ctrl_shadowed_busy),
598 .src_qs_o (main_meas_ctrl_shadowed_qs), // for software read back
599 .dst_update_i ('0),
600 .dst_ds_i ('0),
601 .dst_qs_i (main_main_meas_ctrl_shadowed_qs),
602 .dst_we_o (main_main_meas_ctrl_shadowed_we),
603 .dst_re_o (main_main_meas_ctrl_shadowed_re),
604 .dst_regwen_o (main_main_meas_ctrl_shadowed_regwen),
605 .dst_wd_o (main_main_meas_ctrl_shadowed_wdata)
606 );
607 1/1 assign unused_main_main_meas_ctrl_shadowed_wdata =
Tests: T1 T2 T3
608 ^main_main_meas_ctrl_shadowed_wdata;
609
610 logic [3:0] usb_usb_meas_ctrl_en_ds_int;
611 logic [3:0] usb_usb_meas_ctrl_en_qs_int;
612 logic [3:0] usb_usb_meas_ctrl_en_ds;
613 logic usb_usb_meas_ctrl_en_qe;
614 logic [3:0] usb_usb_meas_ctrl_en_qs;
615 logic [3:0] usb_usb_meas_ctrl_en_wdata;
616 logic usb_usb_meas_ctrl_en_we;
617 logic unused_usb_usb_meas_ctrl_en_wdata;
618 logic usb_usb_meas_ctrl_en_regwen;
619
620 always_comb begin
621 1/1 usb_usb_meas_ctrl_en_qs = 4'h9;
Tests: T1 T2 T3
622 1/1 usb_usb_meas_ctrl_en_ds = 4'h9;
Tests: T1 T2 T3
623 1/1 usb_usb_meas_ctrl_en_ds = usb_usb_meas_ctrl_en_ds_int;
Tests: T1 T2 T3
624 1/1 usb_usb_meas_ctrl_en_qs = usb_usb_meas_ctrl_en_qs_int;
Tests: T1 T2 T3
625 end
626
627 prim_reg_cdc #(
628 .DataWidth(4),
629 .ResetVal(4'h9),
630 .BitMask(4'hf),
631 .DstWrReq(1)
632 ) u_usb_meas_ctrl_en_cdc (
633 .clk_src_i (clk_i),
634 .rst_src_ni (rst_ni),
635 .clk_dst_i (clk_usb_i),
636 .rst_dst_ni (rst_usb_ni),
637 .src_regwen_i (measure_ctrl_regwen_qs),
638 .src_we_i (usb_meas_ctrl_en_we),
639 .src_re_i ('0),
640 .src_wd_i (reg_wdata[3:0]),
641 .src_busy_o (usb_meas_ctrl_en_busy),
642 .src_qs_o (usb_meas_ctrl_en_qs), // for software read back
643 .dst_update_i (usb_usb_meas_ctrl_en_qe),
644 .dst_ds_i (usb_usb_meas_ctrl_en_ds),
645 .dst_qs_i (usb_usb_meas_ctrl_en_qs),
646 .dst_we_o (usb_usb_meas_ctrl_en_we),
647 .dst_re_o (),
648 .dst_regwen_o (usb_usb_meas_ctrl_en_regwen),
649 .dst_wd_o (usb_usb_meas_ctrl_en_wdata)
650 );
651 1/1 assign unused_usb_usb_meas_ctrl_en_wdata =
Tests: T1 T2 T3
652 ^usb_usb_meas_ctrl_en_wdata;
653
654 logic [8:0] usb_usb_meas_ctrl_shadowed_hi_qs_int;
655 logic [8:0] usb_usb_meas_ctrl_shadowed_lo_qs_int;
656 logic [17:0] usb_usb_meas_ctrl_shadowed_qs;
657 logic [17:0] usb_usb_meas_ctrl_shadowed_wdata;
658 logic usb_usb_meas_ctrl_shadowed_we;
659 logic unused_usb_usb_meas_ctrl_shadowed_wdata;
660 logic usb_usb_meas_ctrl_shadowed_re;
661 logic usb_usb_meas_ctrl_shadowed_regwen;
662
663 always_comb begin
664 1/1 usb_usb_meas_ctrl_shadowed_qs = 18'h1ccfa;
Tests: T1 T2 T3
665 1/1 usb_usb_meas_ctrl_shadowed_qs[8:0] = usb_usb_meas_ctrl_shadowed_hi_qs_int;
Tests: T1 T2 T3
666 1/1 usb_usb_meas_ctrl_shadowed_qs[17:9] = usb_usb_meas_ctrl_shadowed_lo_qs_int;
Tests: T1 T2 T3
667 end
668
669 prim_reg_cdc #(
670 .DataWidth(18),
671 .ResetVal(18'h1ccfa),
672 .BitMask(18'h3ffff),
673 .DstWrReq(0)
674 ) u_usb_meas_ctrl_shadowed_cdc (
675 .clk_src_i (clk_i),
676 .rst_src_ni (rst_ni),
677 .clk_dst_i (clk_usb_i),
678 .rst_dst_ni (rst_usb_ni),
679 .src_regwen_i (measure_ctrl_regwen_qs),
680 .src_we_i (usb_meas_ctrl_shadowed_we),
681 .src_re_i (usb_meas_ctrl_shadowed_re),
682 .src_wd_i (reg_wdata[17:0]),
683 .src_busy_o (usb_meas_ctrl_shadowed_busy),
684 .src_qs_o (usb_meas_ctrl_shadowed_qs), // for software read back
685 .dst_update_i ('0),
686 .dst_ds_i ('0),
687 .dst_qs_i (usb_usb_meas_ctrl_shadowed_qs),
688 .dst_we_o (usb_usb_meas_ctrl_shadowed_we),
689 .dst_re_o (usb_usb_meas_ctrl_shadowed_re),
690 .dst_regwen_o (usb_usb_meas_ctrl_shadowed_regwen),
691 .dst_wd_o (usb_usb_meas_ctrl_shadowed_wdata)
692 );
693 1/1 assign unused_usb_usb_meas_ctrl_shadowed_wdata =
Tests: T1 T2 T3
694 ^usb_usb_meas_ctrl_shadowed_wdata;
695
696 // Register instances
697 // R[alert_test]: V(True)
698 logic alert_test_qe;
699 logic [1:0] alert_test_flds_we;
700 1/1 assign alert_test_qe = &alert_test_flds_we;
Tests: T84 T85 T86
701 // F[recov_fault]: 0:0
702 prim_subreg_ext #(
703 .DW (1)
704 ) u_alert_test_recov_fault (
705 .re (1'b0),
706 .we (alert_test_we),
707 .wd (alert_test_recov_fault_wd),
708 .d ('0),
709 .qre (),
710 .qe (alert_test_flds_we[0]),
711 .q (reg2hw.alert_test.recov_fault.q),
712 .ds (),
713 .qs ()
714 );
715 1/1 assign reg2hw.alert_test.recov_fault.qe = alert_test_qe;
Tests: T84 T85 T86
716
717 // F[fatal_fault]: 1:1
718 prim_subreg_ext #(
719 .DW (1)
720 ) u_alert_test_fatal_fault (
721 .re (1'b0),
722 .we (alert_test_we),
723 .wd (alert_test_fatal_fault_wd),
724 .d ('0),
725 .qre (),
726 .qe (alert_test_flds_we[1]),
727 .q (reg2hw.alert_test.fatal_fault.q),
728 .ds (),
729 .qs ()
730 );
731 1/1 assign reg2hw.alert_test.fatal_fault.qe = alert_test_qe;
Tests: T84 T85 T86
732
733
734 // R[extclk_ctrl_regwen]: V(False)
735 prim_subreg #(
736 .DW (1),
737 .SwAccess(prim_subreg_pkg::SwAccessW0C),
738 .RESVAL (1'h1),
739 .Mubi (1'b0)
740 ) u_extclk_ctrl_regwen (
741 .clk_i (clk_i),
742 .rst_ni (rst_ni),
743
744 // from register interface
745 .we (extclk_ctrl_regwen_we),
746 .wd (extclk_ctrl_regwen_wd),
747
748 // from internal hardware
749 .de (1'b0),
750 .d ('0),
751
752 // to internal hardware
753 .qe (),
754 .q (),
755 .ds (),
756
757 // to register interface (read)
758 .qs (extclk_ctrl_regwen_qs)
759 );
760
761
762 // R[extclk_ctrl]: V(False)
763 // Create REGWEN-gated WE signal
764 logic extclk_ctrl_gated_we;
765 1/1 assign extclk_ctrl_gated_we = extclk_ctrl_we & extclk_ctrl_regwen_qs;
Tests: T4 T28 T31
766 // F[sel]: 3:0
767 prim_subreg #(
768 .DW (4),
769 .SwAccess(prim_subreg_pkg::SwAccessRW),
770 .RESVAL (4'h9),
771 .Mubi (1'b1)
772 ) u_extclk_ctrl_sel (
773 .clk_i (clk_i),
774 .rst_ni (rst_ni),
775
776 // from register interface
777 .we (extclk_ctrl_gated_we),
778 .wd (extclk_ctrl_sel_wd),
779
780 // from internal hardware
781 .de (1'b0),
782 .d ('0),
783
784 // to internal hardware
785 .qe (),
786 .q (reg2hw.extclk_ctrl.sel.q),
787 .ds (),
788
789 // to register interface (read)
790 .qs (extclk_ctrl_sel_qs)
791 );
792
793 // F[hi_speed_sel]: 7:4
794 prim_subreg #(
795 .DW (4),
796 .SwAccess(prim_subreg_pkg::SwAccessRW),
797 .RESVAL (4'h9),
798 .Mubi (1'b1)
799 ) u_extclk_ctrl_hi_speed_sel (
800 .clk_i (clk_i),
801 .rst_ni (rst_ni),
802
803 // from register interface
804 .we (extclk_ctrl_gated_we),
805 .wd (extclk_ctrl_hi_speed_sel_wd),
806
807 // from internal hardware
808 .de (1'b0),
809 .d ('0),
810
811 // to internal hardware
812 .qe (),
813 .q (reg2hw.extclk_ctrl.hi_speed_sel.q),
814 .ds (),
815
816 // to register interface (read)
817 .qs (extclk_ctrl_hi_speed_sel_qs)
818 );
819
820
821 // R[extclk_status]: V(True)
822 prim_subreg_ext #(
823 .DW (4)
824 ) u_extclk_status (
825 .re (extclk_status_re),
826 .we (1'b0),
827 .wd ('0),
828 .d (hw2reg.extclk_status.d),
829 .qre (),
830 .qe (),
831 .q (),
832 .ds (),
833 .qs (extclk_status_qs)
834 );
835
836
837 // R[jitter_regwen]: V(False)
838 prim_subreg #(
839 .DW (1),
840 .SwAccess(prim_subreg_pkg::SwAccessW0C),
841 .RESVAL (1'h1),
842 .Mubi (1'b0)
843 ) u_jitter_regwen (
844 .clk_i (clk_i),
845 .rst_ni (rst_ni),
846
847 // from register interface
848 .we (jitter_regwen_we),
849 .wd (jitter_regwen_wd),
850
851 // from internal hardware
852 .de (1'b0),
853 .d ('0),
854
855 // to internal hardware
856 .qe (),
857 .q (),
858 .ds (),
859
860 // to register interface (read)
861 .qs (jitter_regwen_qs)
862 );
863
864
865 // R[jitter_enable]: V(False)
866 prim_subreg #(
867 .DW (4),
868 .SwAccess(prim_subreg_pkg::SwAccessRW),
869 .RESVAL (4'h9),
870 .Mubi (1'b1)
871 ) u_jitter_enable (
872 .clk_i (clk_i),
873 .rst_ni (rst_ni),
874
875 // from register interface
876 .we (jitter_enable_we),
877 .wd (jitter_enable_wd),
878
879 // from internal hardware
880 .de (1'b0),
881 .d ('0),
882
883 // to internal hardware
884 .qe (),
885 .q (reg2hw.jitter_enable.q),
886 .ds (),
887
888 // to register interface (read)
889 .qs (jitter_enable_qs)
890 );
891
892
893 // R[clk_enables]: V(False)
894 // F[clk_io_div4_peri_en]: 0:0
895 prim_subreg #(
896 .DW (1),
897 .SwAccess(prim_subreg_pkg::SwAccessRW),
898 .RESVAL (1'h1),
899 .Mubi (1'b0)
900 ) u_clk_enables_clk_io_div4_peri_en (
901 .clk_i (clk_i),
902 .rst_ni (rst_ni),
903
904 // from register interface
905 .we (clk_enables_we),
906 .wd (clk_enables_clk_io_div4_peri_en_wd),
907
908 // from internal hardware
909 .de (1'b0),
910 .d ('0),
911
912 // to internal hardware
913 .qe (),
914 .q (reg2hw.clk_enables.clk_io_div4_peri_en.q),
915 .ds (),
916
917 // to register interface (read)
918 .qs (clk_enables_clk_io_div4_peri_en_qs)
919 );
920
921 // F[clk_io_div2_peri_en]: 1:1
922 prim_subreg #(
923 .DW (1),
924 .SwAccess(prim_subreg_pkg::SwAccessRW),
925 .RESVAL (1'h1),
926 .Mubi (1'b0)
927 ) u_clk_enables_clk_io_div2_peri_en (
928 .clk_i (clk_i),
929 .rst_ni (rst_ni),
930
931 // from register interface
932 .we (clk_enables_we),
933 .wd (clk_enables_clk_io_div2_peri_en_wd),
934
935 // from internal hardware
936 .de (1'b0),
937 .d ('0),
938
939 // to internal hardware
940 .qe (),
941 .q (reg2hw.clk_enables.clk_io_div2_peri_en.q),
942 .ds (),
943
944 // to register interface (read)
945 .qs (clk_enables_clk_io_div2_peri_en_qs)
946 );
947
948 // F[clk_io_peri_en]: 2:2
949 prim_subreg #(
950 .DW (1),
951 .SwAccess(prim_subreg_pkg::SwAccessRW),
952 .RESVAL (1'h1),
953 .Mubi (1'b0)
954 ) u_clk_enables_clk_io_peri_en (
955 .clk_i (clk_i),
956 .rst_ni (rst_ni),
957
958 // from register interface
959 .we (clk_enables_we),
960 .wd (clk_enables_clk_io_peri_en_wd),
961
962 // from internal hardware
963 .de (1'b0),
964 .d ('0),
965
966 // to internal hardware
967 .qe (),
968 .q (reg2hw.clk_enables.clk_io_peri_en.q),
969 .ds (),
970
971 // to register interface (read)
972 .qs (clk_enables_clk_io_peri_en_qs)
973 );
974
975 // F[clk_usb_peri_en]: 3:3
976 prim_subreg #(
977 .DW (1),
978 .SwAccess(prim_subreg_pkg::SwAccessRW),
979 .RESVAL (1'h1),
980 .Mubi (1'b0)
981 ) u_clk_enables_clk_usb_peri_en (
982 .clk_i (clk_i),
983 .rst_ni (rst_ni),
984
985 // from register interface
986 .we (clk_enables_we),
987 .wd (clk_enables_clk_usb_peri_en_wd),
988
989 // from internal hardware
990 .de (1'b0),
991 .d ('0),
992
993 // to internal hardware
994 .qe (),
995 .q (reg2hw.clk_enables.clk_usb_peri_en.q),
996 .ds (),
997
998 // to register interface (read)
999 .qs (clk_enables_clk_usb_peri_en_qs)
1000 );
1001
1002
1003 // R[clk_hints]: V(False)
1004 // F[clk_main_aes_hint]: 0:0
1005 prim_subreg #(
1006 .DW (1),
1007 .SwAccess(prim_subreg_pkg::SwAccessRW),
1008 .RESVAL (1'h1),
1009 .Mubi (1'b0)
1010 ) u_clk_hints_clk_main_aes_hint (
1011 .clk_i (clk_i),
1012 .rst_ni (rst_ni),
1013
1014 // from register interface
1015 .we (clk_hints_we),
1016 .wd (clk_hints_clk_main_aes_hint_wd),
1017
1018 // from internal hardware
1019 .de (1'b0),
1020 .d ('0),
1021
1022 // to internal hardware
1023 .qe (),
1024 .q (reg2hw.clk_hints.clk_main_aes_hint.q),
1025 .ds (),
1026
1027 // to register interface (read)
1028 .qs (clk_hints_clk_main_aes_hint_qs)
1029 );
1030
1031 // F[clk_main_hmac_hint]: 1:1
1032 prim_subreg #(
1033 .DW (1),
1034 .SwAccess(prim_subreg_pkg::SwAccessRW),
1035 .RESVAL (1'h1),
1036 .Mubi (1'b0)
1037 ) u_clk_hints_clk_main_hmac_hint (
1038 .clk_i (clk_i),
1039 .rst_ni (rst_ni),
1040
1041 // from register interface
1042 .we (clk_hints_we),
1043 .wd (clk_hints_clk_main_hmac_hint_wd),
1044
1045 // from internal hardware
1046 .de (1'b0),
1047 .d ('0),
1048
1049 // to internal hardware
1050 .qe (),
1051 .q (reg2hw.clk_hints.clk_main_hmac_hint.q),
1052 .ds (),
1053
1054 // to register interface (read)
1055 .qs (clk_hints_clk_main_hmac_hint_qs)
1056 );
1057
1058 // F[clk_main_kmac_hint]: 2:2
1059 prim_subreg #(
1060 .DW (1),
1061 .SwAccess(prim_subreg_pkg::SwAccessRW),
1062 .RESVAL (1'h1),
1063 .Mubi (1'b0)
1064 ) u_clk_hints_clk_main_kmac_hint (
1065 .clk_i (clk_i),
1066 .rst_ni (rst_ni),
1067
1068 // from register interface
1069 .we (clk_hints_we),
1070 .wd (clk_hints_clk_main_kmac_hint_wd),
1071
1072 // from internal hardware
1073 .de (1'b0),
1074 .d ('0),
1075
1076 // to internal hardware
1077 .qe (),
1078 .q (reg2hw.clk_hints.clk_main_kmac_hint.q),
1079 .ds (),
1080
1081 // to register interface (read)
1082 .qs (clk_hints_clk_main_kmac_hint_qs)
1083 );
1084
1085 // F[clk_main_otbn_hint]: 3:3
1086 prim_subreg #(
1087 .DW (1),
1088 .SwAccess(prim_subreg_pkg::SwAccessRW),
1089 .RESVAL (1'h1),
1090 .Mubi (1'b0)
1091 ) u_clk_hints_clk_main_otbn_hint (
1092 .clk_i (clk_i),
1093 .rst_ni (rst_ni),
1094
1095 // from register interface
1096 .we (clk_hints_we),
1097 .wd (clk_hints_clk_main_otbn_hint_wd),
1098
1099 // from internal hardware
1100 .de (1'b0),
1101 .d ('0),
1102
1103 // to internal hardware
1104 .qe (),
1105 .q (reg2hw.clk_hints.clk_main_otbn_hint.q),
1106 .ds (),
1107
1108 // to register interface (read)
1109 .qs (clk_hints_clk_main_otbn_hint_qs)
1110 );
1111
1112
1113 // R[clk_hints_status]: V(False)
1114 // F[clk_main_aes_val]: 0:0
1115 prim_subreg #(
1116 .DW (1),
1117 .SwAccess(prim_subreg_pkg::SwAccessRO),
1118 .RESVAL (1'h1),
1119 .Mubi (1'b0)
1120 ) u_clk_hints_status_clk_main_aes_val (
1121 .clk_i (clk_i),
1122 .rst_ni (rst_ni),
1123
1124 // from register interface
1125 .we (1'b0),
1126 .wd ('0),
1127
1128 // from internal hardware
1129 .de (hw2reg.clk_hints_status.clk_main_aes_val.de),
1130 .d (hw2reg.clk_hints_status.clk_main_aes_val.d),
1131
1132 // to internal hardware
1133 .qe (),
1134 .q (),
1135 .ds (),
1136
1137 // to register interface (read)
1138 .qs (clk_hints_status_clk_main_aes_val_qs)
1139 );
1140
1141 // F[clk_main_hmac_val]: 1:1
1142 prim_subreg #(
1143 .DW (1),
1144 .SwAccess(prim_subreg_pkg::SwAccessRO),
1145 .RESVAL (1'h1),
1146 .Mubi (1'b0)
1147 ) u_clk_hints_status_clk_main_hmac_val (
1148 .clk_i (clk_i),
1149 .rst_ni (rst_ni),
1150
1151 // from register interface
1152 .we (1'b0),
1153 .wd ('0),
1154
1155 // from internal hardware
1156 .de (hw2reg.clk_hints_status.clk_main_hmac_val.de),
1157 .d (hw2reg.clk_hints_status.clk_main_hmac_val.d),
1158
1159 // to internal hardware
1160 .qe (),
1161 .q (),
1162 .ds (),
1163
1164 // to register interface (read)
1165 .qs (clk_hints_status_clk_main_hmac_val_qs)
1166 );
1167
1168 // F[clk_main_kmac_val]: 2:2
1169 prim_subreg #(
1170 .DW (1),
1171 .SwAccess(prim_subreg_pkg::SwAccessRO),
1172 .RESVAL (1'h1),
1173 .Mubi (1'b0)
1174 ) u_clk_hints_status_clk_main_kmac_val (
1175 .clk_i (clk_i),
1176 .rst_ni (rst_ni),
1177
1178 // from register interface
1179 .we (1'b0),
1180 .wd ('0),
1181
1182 // from internal hardware
1183 .de (hw2reg.clk_hints_status.clk_main_kmac_val.de),
1184 .d (hw2reg.clk_hints_status.clk_main_kmac_val.d),
1185
1186 // to internal hardware
1187 .qe (),
1188 .q (),
1189 .ds (),
1190
1191 // to register interface (read)
1192 .qs (clk_hints_status_clk_main_kmac_val_qs)
1193 );
1194
1195 // F[clk_main_otbn_val]: 3:3
1196 prim_subreg #(
1197 .DW (1),
1198 .SwAccess(prim_subreg_pkg::SwAccessRO),
1199 .RESVAL (1'h1),
1200 .Mubi (1'b0)
1201 ) u_clk_hints_status_clk_main_otbn_val (
1202 .clk_i (clk_i),
1203 .rst_ni (rst_ni),
1204
1205 // from register interface
1206 .we (1'b0),
1207 .wd ('0),
1208
1209 // from internal hardware
1210 .de (hw2reg.clk_hints_status.clk_main_otbn_val.de),
1211 .d (hw2reg.clk_hints_status.clk_main_otbn_val.d),
1212
1213 // to internal hardware
1214 .qe (),
1215 .q (),
1216 .ds (),
1217
1218 // to register interface (read)
1219 .qs (clk_hints_status_clk_main_otbn_val_qs)
1220 );
1221
1222
1223 // R[measure_ctrl_regwen]: V(False)
1224 prim_subreg #(
1225 .DW (1),
1226 .SwAccess(prim_subreg_pkg::SwAccessW0C),
1227 .RESVAL (1'h1),
1228 .Mubi (1'b0)
1229 ) u_measure_ctrl_regwen (
1230 .clk_i (clk_i),
1231 .rst_ni (rst_ni),
1232
1233 // from register interface
1234 .we (measure_ctrl_regwen_we),
1235 .wd (measure_ctrl_regwen_wd),
1236
1237 // from internal hardware
1238 .de (hw2reg.measure_ctrl_regwen.de),
1239 .d (hw2reg.measure_ctrl_regwen.d),
1240
1241 // to internal hardware
1242 .qe (),
1243 .q (reg2hw.measure_ctrl_regwen.q),
1244 .ds (),
1245
1246 // to register interface (read)
1247 .qs (measure_ctrl_regwen_qs)
1248 );
1249
1250
1251 // R[io_meas_ctrl_en]: V(False)
1252 logic [0:0] io_meas_ctrl_en_flds_we;
1253 1/1 assign io_io_meas_ctrl_en_qe = |io_meas_ctrl_en_flds_we;
Tests: T1 T2 T3
1254 // Create REGWEN-gated WE signal
1255 logic io_io_meas_ctrl_en_gated_we;
1256 1/1 assign io_io_meas_ctrl_en_gated_we = io_io_meas_ctrl_en_we & io_io_meas_ctrl_en_regwen;
Tests: T1 T2 T3
1257 prim_subreg #(
1258 .DW (4),
1259 .SwAccess(prim_subreg_pkg::SwAccessRW),
1260 .RESVAL (4'h9),
1261 .Mubi (1'b1)
1262 ) u_io_meas_ctrl_en (
1263 .clk_i (clk_io_i),
1264 .rst_ni (rst_io_ni),
1265
1266 // from register interface
1267 .we (io_io_meas_ctrl_en_gated_we),
1268 .wd (io_io_meas_ctrl_en_wdata[3:0]),
1269
1270 // from internal hardware
1271 .de (hw2reg.io_meas_ctrl_en.de),
1272 .d (hw2reg.io_meas_ctrl_en.d),
1273
1274 // to internal hardware
1275 .qe (io_meas_ctrl_en_flds_we[0]),
1276 .q (reg2hw.io_meas_ctrl_en.q),
1277 .ds (io_io_meas_ctrl_en_ds_int),
1278
1279 // to register interface (read)
1280 .qs (io_io_meas_ctrl_en_qs_int)
1281 );
1282
1283
1284 // R[io_meas_ctrl_shadowed]: V(False)
1285 // Create REGWEN-gated WE signal
1286 logic io_io_meas_ctrl_shadowed_gated_we;
1287 1/1 assign io_io_meas_ctrl_shadowed_gated_we =
Tests: T1 T2 T3
1288 io_io_meas_ctrl_shadowed_we & io_io_meas_ctrl_shadowed_regwen;
1289 // F[hi]: 9:0
1290 logic async_io_meas_ctrl_shadowed_hi_err_update;
1291 logic async_io_meas_ctrl_shadowed_hi_err_storage;
1292
1293 // storage error is persistent and can be sampled at any time
1294 prim_flop_2sync #(
1295 .Width(1),
1296 .ResetValue('0)
1297 ) u_io_meas_ctrl_shadowed_hi_err_storage_sync (
1298 .clk_i,
1299 .rst_ni,
1300 .d_i(async_io_meas_ctrl_shadowed_hi_err_storage),
1301 .q_o(io_meas_ctrl_shadowed_hi_storage_err)
1302 );
1303
1304 // update error is transient and must be immediately captured
1305 prim_pulse_sync u_io_meas_ctrl_shadowed_hi_err_update_sync (
1306 .clk_src_i(clk_io_i),
1307 .rst_src_ni(rst_io_ni),
1308 .src_pulse_i(async_io_meas_ctrl_shadowed_hi_err_update),
1309 .clk_dst_i(clk_i),
1310 .rst_dst_ni(rst_ni),
1311 .dst_pulse_o(io_meas_ctrl_shadowed_hi_update_err)
1312 );
1313 prim_subreg_shadow #(
1314 .DW (10),
1315 .SwAccess(prim_subreg_pkg::SwAccessRW),
1316 .RESVAL (10'h1ea),
1317 .Mubi (1'b0)
1318 ) u_io_meas_ctrl_shadowed_hi (
1319 .clk_i (clk_io_i),
1320 .rst_ni (rst_io_ni),
1321 .rst_shadowed_ni (rst_shadowed_ni),
1322
1323 // from register interface
1324 .re (io_io_meas_ctrl_shadowed_re),
1325 .we (io_io_meas_ctrl_shadowed_gated_we),
1326 .wd (io_io_meas_ctrl_shadowed_wdata[9:0]),
1327
1328 // from internal hardware
1329 .de (1'b0),
1330 .d ('0),
1331
1332 // to internal hardware
1333 .qe (),
1334 .q (reg2hw.io_meas_ctrl_shadowed.hi.q),
1335 .ds (),
1336
1337 // to register interface (read)
1338 .qs (io_io_meas_ctrl_shadowed_hi_qs_int),
1339
1340 // Shadow register phase. Relevant for hwext only.
1341 .phase (),
1342
1343 // Shadow register error conditions
1344 .err_update (async_io_meas_ctrl_shadowed_hi_err_update),
1345 .err_storage (async_io_meas_ctrl_shadowed_hi_err_storage)
1346 );
1347
1348 // F[lo]: 19:10
1349 logic async_io_meas_ctrl_shadowed_lo_err_update;
1350 logic async_io_meas_ctrl_shadowed_lo_err_storage;
1351
1352 // storage error is persistent and can be sampled at any time
1353 prim_flop_2sync #(
1354 .Width(1),
1355 .ResetValue('0)
1356 ) u_io_meas_ctrl_shadowed_lo_err_storage_sync (
1357 .clk_i,
1358 .rst_ni,
1359 .d_i(async_io_meas_ctrl_shadowed_lo_err_storage),
1360 .q_o(io_meas_ctrl_shadowed_lo_storage_err)
1361 );
1362
1363 // update error is transient and must be immediately captured
1364 prim_pulse_sync u_io_meas_ctrl_shadowed_lo_err_update_sync (
1365 .clk_src_i(clk_io_i),
1366 .rst_src_ni(rst_io_ni),
1367 .src_pulse_i(async_io_meas_ctrl_shadowed_lo_err_update),
1368 .clk_dst_i(clk_i),
1369 .rst_dst_ni(rst_ni),
1370 .dst_pulse_o(io_meas_ctrl_shadowed_lo_update_err)
1371 );
1372 prim_subreg_shadow #(
1373 .DW (10),
1374 .SwAccess(prim_subreg_pkg::SwAccessRW),
1375 .RESVAL (10'h1d6),
1376 .Mubi (1'b0)
1377 ) u_io_meas_ctrl_shadowed_lo (
1378 .clk_i (clk_io_i),
1379 .rst_ni (rst_io_ni),
1380 .rst_shadowed_ni (rst_shadowed_ni),
1381
1382 // from register interface
1383 .re (io_io_meas_ctrl_shadowed_re),
1384 .we (io_io_meas_ctrl_shadowed_gated_we),
1385 .wd (io_io_meas_ctrl_shadowed_wdata[19:10]),
1386
1387 // from internal hardware
1388 .de (1'b0),
1389 .d ('0),
1390
1391 // to internal hardware
1392 .qe (),
1393 .q (reg2hw.io_meas_ctrl_shadowed.lo.q),
1394 .ds (),
1395
1396 // to register interface (read)
1397 .qs (io_io_meas_ctrl_shadowed_lo_qs_int),
1398
1399 // Shadow register phase. Relevant for hwext only.
1400 .phase (),
1401
1402 // Shadow register error conditions
1403 .err_update (async_io_meas_ctrl_shadowed_lo_err_update),
1404 .err_storage (async_io_meas_ctrl_shadowed_lo_err_storage)
1405 );
1406
1407
1408 // R[io_div2_meas_ctrl_en]: V(False)
1409 logic [0:0] io_div2_meas_ctrl_en_flds_we;
1410 1/1 assign io_div2_io_div2_meas_ctrl_en_qe = |io_div2_meas_ctrl_en_flds_we;
Tests: T1 T2 T3
1411 // Create REGWEN-gated WE signal
1412 logic io_div2_io_div2_meas_ctrl_en_gated_we;
1413 1/1 assign io_div2_io_div2_meas_ctrl_en_gated_we =
Tests: T1 T2 T3
1414 io_div2_io_div2_meas_ctrl_en_we & io_div2_io_div2_meas_ctrl_en_regwen;
1415 prim_subreg #(
1416 .DW (4),
1417 .SwAccess(prim_subreg_pkg::SwAccessRW),
1418 .RESVAL (4'h9),
1419 .Mubi (1'b1)
1420 ) u_io_div2_meas_ctrl_en (
1421 .clk_i (clk_io_div2_i),
1422 .rst_ni (rst_io_div2_ni),
1423
1424 // from register interface
1425 .we (io_div2_io_div2_meas_ctrl_en_gated_we),
1426 .wd (io_div2_io_div2_meas_ctrl_en_wdata[3:0]),
1427
1428 // from internal hardware
1429 .de (hw2reg.io_div2_meas_ctrl_en.de),
1430 .d (hw2reg.io_div2_meas_ctrl_en.d),
1431
1432 // to internal hardware
1433 .qe (io_div2_meas_ctrl_en_flds_we[0]),
1434 .q (reg2hw.io_div2_meas_ctrl_en.q),
1435 .ds (io_div2_io_div2_meas_ctrl_en_ds_int),
1436
1437 // to register interface (read)
1438 .qs (io_div2_io_div2_meas_ctrl_en_qs_int)
1439 );
1440
1441
1442 // R[io_div2_meas_ctrl_shadowed]: V(False)
1443 // Create REGWEN-gated WE signal
1444 logic io_div2_io_div2_meas_ctrl_shadowed_gated_we;
1445 1/1 assign io_div2_io_div2_meas_ctrl_shadowed_gated_we =
Tests: T1 T2 T3
1446 io_div2_io_div2_meas_ctrl_shadowed_we & io_div2_io_div2_meas_ctrl_shadowed_regwen;
1447 // F[hi]: 8:0
1448 logic async_io_div2_meas_ctrl_shadowed_hi_err_update;
1449 logic async_io_div2_meas_ctrl_shadowed_hi_err_storage;
1450
1451 // storage error is persistent and can be sampled at any time
1452 prim_flop_2sync #(
1453 .Width(1),
1454 .ResetValue('0)
1455 ) u_io_div2_meas_ctrl_shadowed_hi_err_storage_sync (
1456 .clk_i,
1457 .rst_ni,
1458 .d_i(async_io_div2_meas_ctrl_shadowed_hi_err_storage),
1459 .q_o(io_div2_meas_ctrl_shadowed_hi_storage_err)
1460 );
1461
1462 // update error is transient and must be immediately captured
1463 prim_pulse_sync u_io_div2_meas_ctrl_shadowed_hi_err_update_sync (
1464 .clk_src_i(clk_io_div2_i),
1465 .rst_src_ni(rst_io_div2_ni),
1466 .src_pulse_i(async_io_div2_meas_ctrl_shadowed_hi_err_update),
1467 .clk_dst_i(clk_i),
1468 .rst_dst_ni(rst_ni),
1469 .dst_pulse_o(io_div2_meas_ctrl_shadowed_hi_update_err)
1470 );
1471 prim_subreg_shadow #(
1472 .DW (9),
1473 .SwAccess(prim_subreg_pkg::SwAccessRW),
1474 .RESVAL (9'hfa),
1475 .Mubi (1'b0)
1476 ) u_io_div2_meas_ctrl_shadowed_hi (
1477 .clk_i (clk_io_div2_i),
1478 .rst_ni (rst_io_div2_ni),
1479 .rst_shadowed_ni (rst_shadowed_ni),
1480
1481 // from register interface
1482 .re (io_div2_io_div2_meas_ctrl_shadowed_re),
1483 .we (io_div2_io_div2_meas_ctrl_shadowed_gated_we),
1484 .wd (io_div2_io_div2_meas_ctrl_shadowed_wdata[8:0]),
1485
1486 // from internal hardware
1487 .de (1'b0),
1488 .d ('0),
1489
1490 // to internal hardware
1491 .qe (),
1492 .q (reg2hw.io_div2_meas_ctrl_shadowed.hi.q),
1493 .ds (),
1494
1495 // to register interface (read)
1496 .qs (io_div2_io_div2_meas_ctrl_shadowed_hi_qs_int),
1497
1498 // Shadow register phase. Relevant for hwext only.
1499 .phase (),
1500
1501 // Shadow register error conditions
1502 .err_update (async_io_div2_meas_ctrl_shadowed_hi_err_update),
1503 .err_storage (async_io_div2_meas_ctrl_shadowed_hi_err_storage)
1504 );
1505
1506 // F[lo]: 17:9
1507 logic async_io_div2_meas_ctrl_shadowed_lo_err_update;
1508 logic async_io_div2_meas_ctrl_shadowed_lo_err_storage;
1509
1510 // storage error is persistent and can be sampled at any time
1511 prim_flop_2sync #(
1512 .Width(1),
1513 .ResetValue('0)
1514 ) u_io_div2_meas_ctrl_shadowed_lo_err_storage_sync (
1515 .clk_i,
1516 .rst_ni,
1517 .d_i(async_io_div2_meas_ctrl_shadowed_lo_err_storage),
1518 .q_o(io_div2_meas_ctrl_shadowed_lo_storage_err)
1519 );
1520
1521 // update error is transient and must be immediately captured
1522 prim_pulse_sync u_io_div2_meas_ctrl_shadowed_lo_err_update_sync (
1523 .clk_src_i(clk_io_div2_i),
1524 .rst_src_ni(rst_io_div2_ni),
1525 .src_pulse_i(async_io_div2_meas_ctrl_shadowed_lo_err_update),
1526 .clk_dst_i(clk_i),
1527 .rst_dst_ni(rst_ni),
1528 .dst_pulse_o(io_div2_meas_ctrl_shadowed_lo_update_err)
1529 );
1530 prim_subreg_shadow #(
1531 .DW (9),
1532 .SwAccess(prim_subreg_pkg::SwAccessRW),
1533 .RESVAL (9'he6),
1534 .Mubi (1'b0)
1535 ) u_io_div2_meas_ctrl_shadowed_lo (
1536 .clk_i (clk_io_div2_i),
1537 .rst_ni (rst_io_div2_ni),
1538 .rst_shadowed_ni (rst_shadowed_ni),
1539
1540 // from register interface
1541 .re (io_div2_io_div2_meas_ctrl_shadowed_re),
1542 .we (io_div2_io_div2_meas_ctrl_shadowed_gated_we),
1543 .wd (io_div2_io_div2_meas_ctrl_shadowed_wdata[17:9]),
1544
1545 // from internal hardware
1546 .de (1'b0),
1547 .d ('0),
1548
1549 // to internal hardware
1550 .qe (),
1551 .q (reg2hw.io_div2_meas_ctrl_shadowed.lo.q),
1552 .ds (),
1553
1554 // to register interface (read)
1555 .qs (io_div2_io_div2_meas_ctrl_shadowed_lo_qs_int),
1556
1557 // Shadow register phase. Relevant for hwext only.
1558 .phase (),
1559
1560 // Shadow register error conditions
1561 .err_update (async_io_div2_meas_ctrl_shadowed_lo_err_update),
1562 .err_storage (async_io_div2_meas_ctrl_shadowed_lo_err_storage)
1563 );
1564
1565
1566 // R[io_div4_meas_ctrl_en]: V(False)
1567 logic [0:0] io_div4_meas_ctrl_en_flds_we;
1568 1/1 assign io_div4_io_div4_meas_ctrl_en_qe = |io_div4_meas_ctrl_en_flds_we;
Tests: T1 T2 T3
1569 // Create REGWEN-gated WE signal
1570 logic io_div4_io_div4_meas_ctrl_en_gated_we;
1571 1/1 assign io_div4_io_div4_meas_ctrl_en_gated_we =
Tests: T1 T2 T3
1572 io_div4_io_div4_meas_ctrl_en_we & io_div4_io_div4_meas_ctrl_en_regwen;
1573 prim_subreg #(
1574 .DW (4),
1575 .SwAccess(prim_subreg_pkg::SwAccessRW),
1576 .RESVAL (4'h9),
1577 .Mubi (1'b1)
1578 ) u_io_div4_meas_ctrl_en (
1579 .clk_i (clk_io_div4_i),
1580 .rst_ni (rst_io_div4_ni),
1581
1582 // from register interface
1583 .we (io_div4_io_div4_meas_ctrl_en_gated_we),
1584 .wd (io_div4_io_div4_meas_ctrl_en_wdata[3:0]),
1585
1586 // from internal hardware
1587 .de (hw2reg.io_div4_meas_ctrl_en.de),
1588 .d (hw2reg.io_div4_meas_ctrl_en.d),
1589
1590 // to internal hardware
1591 .qe (io_div4_meas_ctrl_en_flds_we[0]),
1592 .q (reg2hw.io_div4_meas_ctrl_en.q),
1593 .ds (io_div4_io_div4_meas_ctrl_en_ds_int),
1594
1595 // to register interface (read)
1596 .qs (io_div4_io_div4_meas_ctrl_en_qs_int)
1597 );
1598
1599
1600 // R[io_div4_meas_ctrl_shadowed]: V(False)
1601 // Create REGWEN-gated WE signal
1602 logic io_div4_io_div4_meas_ctrl_shadowed_gated_we;
1603 1/1 assign io_div4_io_div4_meas_ctrl_shadowed_gated_we =
Tests: T1 T2 T3
1604 io_div4_io_div4_meas_ctrl_shadowed_we & io_div4_io_div4_meas_ctrl_shadowed_regwen;
1605 // F[hi]: 7:0
1606 logic async_io_div4_meas_ctrl_shadowed_hi_err_update;
1607 logic async_io_div4_meas_ctrl_shadowed_hi_err_storage;
1608
1609 // storage error is persistent and can be sampled at any time
1610 prim_flop_2sync #(
1611 .Width(1),
1612 .ResetValue('0)
1613 ) u_io_div4_meas_ctrl_shadowed_hi_err_storage_sync (
1614 .clk_i,
1615 .rst_ni,
1616 .d_i(async_io_div4_meas_ctrl_shadowed_hi_err_storage),
1617 .q_o(io_div4_meas_ctrl_shadowed_hi_storage_err)
1618 );
1619
1620 // update error is transient and must be immediately captured
1621 prim_pulse_sync u_io_div4_meas_ctrl_shadowed_hi_err_update_sync (
1622 .clk_src_i(clk_io_div4_i),
1623 .rst_src_ni(rst_io_div4_ni),
1624 .src_pulse_i(async_io_div4_meas_ctrl_shadowed_hi_err_update),
1625 .clk_dst_i(clk_i),
1626 .rst_dst_ni(rst_ni),
1627 .dst_pulse_o(io_div4_meas_ctrl_shadowed_hi_update_err)
1628 );
1629 prim_subreg_shadow #(
1630 .DW (8),
1631 .SwAccess(prim_subreg_pkg::SwAccessRW),
1632 .RESVAL (8'h82),
1633 .Mubi (1'b0)
1634 ) u_io_div4_meas_ctrl_shadowed_hi (
1635 .clk_i (clk_io_div4_i),
1636 .rst_ni (rst_io_div4_ni),
1637 .rst_shadowed_ni (rst_shadowed_ni),
1638
1639 // from register interface
1640 .re (io_div4_io_div4_meas_ctrl_shadowed_re),
1641 .we (io_div4_io_div4_meas_ctrl_shadowed_gated_we),
1642 .wd (io_div4_io_div4_meas_ctrl_shadowed_wdata[7:0]),
1643
1644 // from internal hardware
1645 .de (1'b0),
1646 .d ('0),
1647
1648 // to internal hardware
1649 .qe (),
1650 .q (reg2hw.io_div4_meas_ctrl_shadowed.hi.q),
1651 .ds (),
1652
1653 // to register interface (read)
1654 .qs (io_div4_io_div4_meas_ctrl_shadowed_hi_qs_int),
1655
1656 // Shadow register phase. Relevant for hwext only.
1657 .phase (),
1658
1659 // Shadow register error conditions
1660 .err_update (async_io_div4_meas_ctrl_shadowed_hi_err_update),
1661 .err_storage (async_io_div4_meas_ctrl_shadowed_hi_err_storage)
1662 );
1663
1664 // F[lo]: 15:8
1665 logic async_io_div4_meas_ctrl_shadowed_lo_err_update;
1666 logic async_io_div4_meas_ctrl_shadowed_lo_err_storage;
1667
1668 // storage error is persistent and can be sampled at any time
1669 prim_flop_2sync #(
1670 .Width(1),
1671 .ResetValue('0)
1672 ) u_io_div4_meas_ctrl_shadowed_lo_err_storage_sync (
1673 .clk_i,
1674 .rst_ni,
1675 .d_i(async_io_div4_meas_ctrl_shadowed_lo_err_storage),
1676 .q_o(io_div4_meas_ctrl_shadowed_lo_storage_err)
1677 );
1678
1679 // update error is transient and must be immediately captured
1680 prim_pulse_sync u_io_div4_meas_ctrl_shadowed_lo_err_update_sync (
1681 .clk_src_i(clk_io_div4_i),
1682 .rst_src_ni(rst_io_div4_ni),
1683 .src_pulse_i(async_io_div4_meas_ctrl_shadowed_lo_err_update),
1684 .clk_dst_i(clk_i),
1685 .rst_dst_ni(rst_ni),
1686 .dst_pulse_o(io_div4_meas_ctrl_shadowed_lo_update_err)
1687 );
1688 prim_subreg_shadow #(
1689 .DW (8),
1690 .SwAccess(prim_subreg_pkg::SwAccessRW),
1691 .RESVAL (8'h6e),
1692 .Mubi (1'b0)
1693 ) u_io_div4_meas_ctrl_shadowed_lo (
1694 .clk_i (clk_io_div4_i),
1695 .rst_ni (rst_io_div4_ni),
1696 .rst_shadowed_ni (rst_shadowed_ni),
1697
1698 // from register interface
1699 .re (io_div4_io_div4_meas_ctrl_shadowed_re),
1700 .we (io_div4_io_div4_meas_ctrl_shadowed_gated_we),
1701 .wd (io_div4_io_div4_meas_ctrl_shadowed_wdata[15:8]),
1702
1703 // from internal hardware
1704 .de (1'b0),
1705 .d ('0),
1706
1707 // to internal hardware
1708 .qe (),
1709 .q (reg2hw.io_div4_meas_ctrl_shadowed.lo.q),
1710 .ds (),
1711
1712 // to register interface (read)
1713 .qs (io_div4_io_div4_meas_ctrl_shadowed_lo_qs_int),
1714
1715 // Shadow register phase. Relevant for hwext only.
1716 .phase (),
1717
1718 // Shadow register error conditions
1719 .err_update (async_io_div4_meas_ctrl_shadowed_lo_err_update),
1720 .err_storage (async_io_div4_meas_ctrl_shadowed_lo_err_storage)
1721 );
1722
1723
1724 // R[main_meas_ctrl_en]: V(False)
1725 logic [0:0] main_meas_ctrl_en_flds_we;
1726 1/1 assign main_main_meas_ctrl_en_qe = |main_meas_ctrl_en_flds_we;
Tests: T1 T2 T3
1727 // Create REGWEN-gated WE signal
1728 logic main_main_meas_ctrl_en_gated_we;
1729 1/1 assign main_main_meas_ctrl_en_gated_we =
Tests: T1 T2 T3
1730 main_main_meas_ctrl_en_we & main_main_meas_ctrl_en_regwen;
1731 prim_subreg #(
1732 .DW (4),
1733 .SwAccess(prim_subreg_pkg::SwAccessRW),
1734 .RESVAL (4'h9),
1735 .Mubi (1'b1)
1736 ) u_main_meas_ctrl_en (
1737 .clk_i (clk_main_i),
1738 .rst_ni (rst_main_ni),
1739
1740 // from register interface
1741 .we (main_main_meas_ctrl_en_gated_we),
1742 .wd (main_main_meas_ctrl_en_wdata[3:0]),
1743
1744 // from internal hardware
1745 .de (hw2reg.main_meas_ctrl_en.de),
1746 .d (hw2reg.main_meas_ctrl_en.d),
1747
1748 // to internal hardware
1749 .qe (main_meas_ctrl_en_flds_we[0]),
1750 .q (reg2hw.main_meas_ctrl_en.q),
1751 .ds (main_main_meas_ctrl_en_ds_int),
1752
1753 // to register interface (read)
1754 .qs (main_main_meas_ctrl_en_qs_int)
1755 );
1756
1757
1758 // R[main_meas_ctrl_shadowed]: V(False)
1759 // Create REGWEN-gated WE signal
1760 logic main_main_meas_ctrl_shadowed_gated_we;
1761 1/1 assign main_main_meas_ctrl_shadowed_gated_we =
Tests: T1 T2 T3
1762 main_main_meas_ctrl_shadowed_we & main_main_meas_ctrl_shadowed_regwen;
1763 // F[hi]: 9:0
1764 logic async_main_meas_ctrl_shadowed_hi_err_update;
1765 logic async_main_meas_ctrl_shadowed_hi_err_storage;
1766
1767 // storage error is persistent and can be sampled at any time
1768 prim_flop_2sync #(
1769 .Width(1),
1770 .ResetValue('0)
1771 ) u_main_meas_ctrl_shadowed_hi_err_storage_sync (
1772 .clk_i,
1773 .rst_ni,
1774 .d_i(async_main_meas_ctrl_shadowed_hi_err_storage),
1775 .q_o(main_meas_ctrl_shadowed_hi_storage_err)
1776 );
1777
1778 // update error is transient and must be immediately captured
1779 prim_pulse_sync u_main_meas_ctrl_shadowed_hi_err_update_sync (
1780 .clk_src_i(clk_main_i),
1781 .rst_src_ni(rst_main_ni),
1782 .src_pulse_i(async_main_meas_ctrl_shadowed_hi_err_update),
1783 .clk_dst_i(clk_i),
1784 .rst_dst_ni(rst_ni),
1785 .dst_pulse_o(main_meas_ctrl_shadowed_hi_update_err)
1786 );
1787 prim_subreg_shadow #(
1788 .DW (10),
1789 .SwAccess(prim_subreg_pkg::SwAccessRW),
1790 .RESVAL (10'h1fe),
1791 .Mubi (1'b0)
1792 ) u_main_meas_ctrl_shadowed_hi (
1793 .clk_i (clk_main_i),
1794 .rst_ni (rst_main_ni),
1795 .rst_shadowed_ni (rst_shadowed_ni),
1796
1797 // from register interface
1798 .re (main_main_meas_ctrl_shadowed_re),
1799 .we (main_main_meas_ctrl_shadowed_gated_we),
1800 .wd (main_main_meas_ctrl_shadowed_wdata[9:0]),
1801
1802 // from internal hardware
1803 .de (1'b0),
1804 .d ('0),
1805
1806 // to internal hardware
1807 .qe (),
1808 .q (reg2hw.main_meas_ctrl_shadowed.hi.q),
1809 .ds (),
1810
1811 // to register interface (read)
1812 .qs (main_main_meas_ctrl_shadowed_hi_qs_int),
1813
1814 // Shadow register phase. Relevant for hwext only.
1815 .phase (),
1816
1817 // Shadow register error conditions
1818 .err_update (async_main_meas_ctrl_shadowed_hi_err_update),
1819 .err_storage (async_main_meas_ctrl_shadowed_hi_err_storage)
1820 );
1821
1822 // F[lo]: 19:10
1823 logic async_main_meas_ctrl_shadowed_lo_err_update;
1824 logic async_main_meas_ctrl_shadowed_lo_err_storage;
1825
1826 // storage error is persistent and can be sampled at any time
1827 prim_flop_2sync #(
1828 .Width(1),
1829 .ResetValue('0)
1830 ) u_main_meas_ctrl_shadowed_lo_err_storage_sync (
1831 .clk_i,
1832 .rst_ni,
1833 .d_i(async_main_meas_ctrl_shadowed_lo_err_storage),
1834 .q_o(main_meas_ctrl_shadowed_lo_storage_err)
1835 );
1836
1837 // update error is transient and must be immediately captured
1838 prim_pulse_sync u_main_meas_ctrl_shadowed_lo_err_update_sync (
1839 .clk_src_i(clk_main_i),
1840 .rst_src_ni(rst_main_ni),
1841 .src_pulse_i(async_main_meas_ctrl_shadowed_lo_err_update),
1842 .clk_dst_i(clk_i),
1843 .rst_dst_ni(rst_ni),
1844 .dst_pulse_o(main_meas_ctrl_shadowed_lo_update_err)
1845 );
1846 prim_subreg_shadow #(
1847 .DW (10),
1848 .SwAccess(prim_subreg_pkg::SwAccessRW),
1849 .RESVAL (10'h1ea),
1850 .Mubi (1'b0)
1851 ) u_main_meas_ctrl_shadowed_lo (
1852 .clk_i (clk_main_i),
1853 .rst_ni (rst_main_ni),
1854 .rst_shadowed_ni (rst_shadowed_ni),
1855
1856 // from register interface
1857 .re (main_main_meas_ctrl_shadowed_re),
1858 .we (main_main_meas_ctrl_shadowed_gated_we),
1859 .wd (main_main_meas_ctrl_shadowed_wdata[19:10]),
1860
1861 // from internal hardware
1862 .de (1'b0),
1863 .d ('0),
1864
1865 // to internal hardware
1866 .qe (),
1867 .q (reg2hw.main_meas_ctrl_shadowed.lo.q),
1868 .ds (),
1869
1870 // to register interface (read)
1871 .qs (main_main_meas_ctrl_shadowed_lo_qs_int),
1872
1873 // Shadow register phase. Relevant for hwext only.
1874 .phase (),
1875
1876 // Shadow register error conditions
1877 .err_update (async_main_meas_ctrl_shadowed_lo_err_update),
1878 .err_storage (async_main_meas_ctrl_shadowed_lo_err_storage)
1879 );
1880
1881
1882 // R[usb_meas_ctrl_en]: V(False)
1883 logic [0:0] usb_meas_ctrl_en_flds_we;
1884 1/1 assign usb_usb_meas_ctrl_en_qe = |usb_meas_ctrl_en_flds_we;
Tests: T1 T2 T3
1885 // Create REGWEN-gated WE signal
1886 logic usb_usb_meas_ctrl_en_gated_we;
1887 1/1 assign usb_usb_meas_ctrl_en_gated_we = usb_usb_meas_ctrl_en_we & usb_usb_meas_ctrl_en_regwen;
Tests: T1 T2 T3
1888 prim_subreg #(
1889 .DW (4),
1890 .SwAccess(prim_subreg_pkg::SwAccessRW),
1891 .RESVAL (4'h9),
1892 .Mubi (1'b1)
1893 ) u_usb_meas_ctrl_en (
1894 .clk_i (clk_usb_i),
1895 .rst_ni (rst_usb_ni),
1896
1897 // from register interface
1898 .we (usb_usb_meas_ctrl_en_gated_we),
1899 .wd (usb_usb_meas_ctrl_en_wdata[3:0]),
1900
1901 // from internal hardware
1902 .de (hw2reg.usb_meas_ctrl_en.de),
1903 .d (hw2reg.usb_meas_ctrl_en.d),
1904
1905 // to internal hardware
1906 .qe (usb_meas_ctrl_en_flds_we[0]),
1907 .q (reg2hw.usb_meas_ctrl_en.q),
1908 .ds (usb_usb_meas_ctrl_en_ds_int),
1909
1910 // to register interface (read)
1911 .qs (usb_usb_meas_ctrl_en_qs_int)
1912 );
1913
1914
1915 // R[usb_meas_ctrl_shadowed]: V(False)
1916 // Create REGWEN-gated WE signal
1917 logic usb_usb_meas_ctrl_shadowed_gated_we;
1918 1/1 assign usb_usb_meas_ctrl_shadowed_gated_we =
Tests: T1 T2 T3
1919 usb_usb_meas_ctrl_shadowed_we & usb_usb_meas_ctrl_shadowed_regwen;
1920 // F[hi]: 8:0
1921 logic async_usb_meas_ctrl_shadowed_hi_err_update;
1922 logic async_usb_meas_ctrl_shadowed_hi_err_storage;
1923
1924 // storage error is persistent and can be sampled at any time
1925 prim_flop_2sync #(
1926 .Width(1),
1927 .ResetValue('0)
1928 ) u_usb_meas_ctrl_shadowed_hi_err_storage_sync (
1929 .clk_i,
1930 .rst_ni,
1931 .d_i(async_usb_meas_ctrl_shadowed_hi_err_storage),
1932 .q_o(usb_meas_ctrl_shadowed_hi_storage_err)
1933 );
1934
1935 // update error is transient and must be immediately captured
1936 prim_pulse_sync u_usb_meas_ctrl_shadowed_hi_err_update_sync (
1937 .clk_src_i(clk_usb_i),
1938 .rst_src_ni(rst_usb_ni),
1939 .src_pulse_i(async_usb_meas_ctrl_shadowed_hi_err_update),
1940 .clk_dst_i(clk_i),
1941 .rst_dst_ni(rst_ni),
1942 .dst_pulse_o(usb_meas_ctrl_shadowed_hi_update_err)
1943 );
1944 prim_subreg_shadow #(
1945 .DW (9),
1946 .SwAccess(prim_subreg_pkg::SwAccessRW),
1947 .RESVAL (9'hfa),
1948 .Mubi (1'b0)
1949 ) u_usb_meas_ctrl_shadowed_hi (
1950 .clk_i (clk_usb_i),
1951 .rst_ni (rst_usb_ni),
1952 .rst_shadowed_ni (rst_shadowed_ni),
1953
1954 // from register interface
1955 .re (usb_usb_meas_ctrl_shadowed_re),
1956 .we (usb_usb_meas_ctrl_shadowed_gated_we),
1957 .wd (usb_usb_meas_ctrl_shadowed_wdata[8:0]),
1958
1959 // from internal hardware
1960 .de (1'b0),
1961 .d ('0),
1962
1963 // to internal hardware
1964 .qe (),
1965 .q (reg2hw.usb_meas_ctrl_shadowed.hi.q),
1966 .ds (),
1967
1968 // to register interface (read)
1969 .qs (usb_usb_meas_ctrl_shadowed_hi_qs_int),
1970
1971 // Shadow register phase. Relevant for hwext only.
1972 .phase (),
1973
1974 // Shadow register error conditions
1975 .err_update (async_usb_meas_ctrl_shadowed_hi_err_update),
1976 .err_storage (async_usb_meas_ctrl_shadowed_hi_err_storage)
1977 );
1978
1979 // F[lo]: 17:9
1980 logic async_usb_meas_ctrl_shadowed_lo_err_update;
1981 logic async_usb_meas_ctrl_shadowed_lo_err_storage;
1982
1983 // storage error is persistent and can be sampled at any time
1984 prim_flop_2sync #(
1985 .Width(1),
1986 .ResetValue('0)
1987 ) u_usb_meas_ctrl_shadowed_lo_err_storage_sync (
1988 .clk_i,
1989 .rst_ni,
1990 .d_i(async_usb_meas_ctrl_shadowed_lo_err_storage),
1991 .q_o(usb_meas_ctrl_shadowed_lo_storage_err)
1992 );
1993
1994 // update error is transient and must be immediately captured
1995 prim_pulse_sync u_usb_meas_ctrl_shadowed_lo_err_update_sync (
1996 .clk_src_i(clk_usb_i),
1997 .rst_src_ni(rst_usb_ni),
1998 .src_pulse_i(async_usb_meas_ctrl_shadowed_lo_err_update),
1999 .clk_dst_i(clk_i),
2000 .rst_dst_ni(rst_ni),
2001 .dst_pulse_o(usb_meas_ctrl_shadowed_lo_update_err)
2002 );
2003 prim_subreg_shadow #(
2004 .DW (9),
2005 .SwAccess(prim_subreg_pkg::SwAccessRW),
2006 .RESVAL (9'he6),
2007 .Mubi (1'b0)
2008 ) u_usb_meas_ctrl_shadowed_lo (
2009 .clk_i (clk_usb_i),
2010 .rst_ni (rst_usb_ni),
2011 .rst_shadowed_ni (rst_shadowed_ni),
2012
2013 // from register interface
2014 .re (usb_usb_meas_ctrl_shadowed_re),
2015 .we (usb_usb_meas_ctrl_shadowed_gated_we),
2016 .wd (usb_usb_meas_ctrl_shadowed_wdata[17:9]),
2017
2018 // from internal hardware
2019 .de (1'b0),
2020 .d ('0),
2021
2022 // to internal hardware
2023 .qe (),
2024 .q (reg2hw.usb_meas_ctrl_shadowed.lo.q),
2025 .ds (),
2026
2027 // to register interface (read)
2028 .qs (usb_usb_meas_ctrl_shadowed_lo_qs_int),
2029
2030 // Shadow register phase. Relevant for hwext only.
2031 .phase (),
2032
2033 // Shadow register error conditions
2034 .err_update (async_usb_meas_ctrl_shadowed_lo_err_update),
2035 .err_storage (async_usb_meas_ctrl_shadowed_lo_err_storage)
2036 );
2037
2038
2039 // R[recov_err_code]: V(False)
2040 // F[shadow_update_err]: 0:0
2041 prim_subreg #(
2042 .DW (1),
2043 .SwAccess(prim_subreg_pkg::SwAccessW1C),
2044 .RESVAL (1'h0),
2045 .Mubi (1'b0)
2046 ) u_recov_err_code_shadow_update_err (
2047 .clk_i (clk_i),
2048 .rst_ni (rst_ni),
2049
2050 // from register interface
2051 .we (recov_err_code_we),
2052 .wd (recov_err_code_shadow_update_err_wd),
2053
2054 // from internal hardware
2055 .de (hw2reg.recov_err_code.shadow_update_err.de),
2056 .d (hw2reg.recov_err_code.shadow_update_err.d),
2057
2058 // to internal hardware
2059 .qe (),
2060 .q (),
2061 .ds (),
2062
2063 // to register interface (read)
2064 .qs (recov_err_code_shadow_update_err_qs)
2065 );
2066
2067 // F[io_measure_err]: 1:1
2068 prim_subreg #(
2069 .DW (1),
2070 .SwAccess(prim_subreg_pkg::SwAccessW1C),
2071 .RESVAL (1'h0),
2072 .Mubi (1'b0)
2073 ) u_recov_err_code_io_measure_err (
2074 .clk_i (clk_i),
2075 .rst_ni (rst_ni),
2076
2077 // from register interface
2078 .we (recov_err_code_we),
2079 .wd (recov_err_code_io_measure_err_wd),
2080
2081 // from internal hardware
2082 .de (hw2reg.recov_err_code.io_measure_err.de),
2083 .d (hw2reg.recov_err_code.io_measure_err.d),
2084
2085 // to internal hardware
2086 .qe (),
2087 .q (),
2088 .ds (),
2089
2090 // to register interface (read)
2091 .qs (recov_err_code_io_measure_err_qs)
2092 );
2093
2094 // F[io_div2_measure_err]: 2:2
2095 prim_subreg #(
2096 .DW (1),
2097 .SwAccess(prim_subreg_pkg::SwAccessW1C),
2098 .RESVAL (1'h0),
2099 .Mubi (1'b0)
2100 ) u_recov_err_code_io_div2_measure_err (
2101 .clk_i (clk_i),
2102 .rst_ni (rst_ni),
2103
2104 // from register interface
2105 .we (recov_err_code_we),
2106 .wd (recov_err_code_io_div2_measure_err_wd),
2107
2108 // from internal hardware
2109 .de (hw2reg.recov_err_code.io_div2_measure_err.de),
2110 .d (hw2reg.recov_err_code.io_div2_measure_err.d),
2111
2112 // to internal hardware
2113 .qe (),
2114 .q (),
2115 .ds (),
2116
2117 // to register interface (read)
2118 .qs (recov_err_code_io_div2_measure_err_qs)
2119 );
2120
2121 // F[io_div4_measure_err]: 3:3
2122 prim_subreg #(
2123 .DW (1),
2124 .SwAccess(prim_subreg_pkg::SwAccessW1C),
2125 .RESVAL (1'h0),
2126 .Mubi (1'b0)
2127 ) u_recov_err_code_io_div4_measure_err (
2128 .clk_i (clk_i),
2129 .rst_ni (rst_ni),
2130
2131 // from register interface
2132 .we (recov_err_code_we),
2133 .wd (recov_err_code_io_div4_measure_err_wd),
2134
2135 // from internal hardware
2136 .de (hw2reg.recov_err_code.io_div4_measure_err.de),
2137 .d (hw2reg.recov_err_code.io_div4_measure_err.d),
2138
2139 // to internal hardware
2140 .qe (),
2141 .q (),
2142 .ds (),
2143
2144 // to register interface (read)
2145 .qs (recov_err_code_io_div4_measure_err_qs)
2146 );
2147
2148 // F[main_measure_err]: 4:4
2149 prim_subreg #(
2150 .DW (1),
2151 .SwAccess(prim_subreg_pkg::SwAccessW1C),
2152 .RESVAL (1'h0),
2153 .Mubi (1'b0)
2154 ) u_recov_err_code_main_measure_err (
2155 .clk_i (clk_i),
2156 .rst_ni (rst_ni),
2157
2158 // from register interface
2159 .we (recov_err_code_we),
2160 .wd (recov_err_code_main_measure_err_wd),
2161
2162 // from internal hardware
2163 .de (hw2reg.recov_err_code.main_measure_err.de),
2164 .d (hw2reg.recov_err_code.main_measure_err.d),
2165
2166 // to internal hardware
2167 .qe (),
2168 .q (),
2169 .ds (),
2170
2171 // to register interface (read)
2172 .qs (recov_err_code_main_measure_err_qs)
2173 );
2174
2175 // F[usb_measure_err]: 5:5
2176 prim_subreg #(
2177 .DW (1),
2178 .SwAccess(prim_subreg_pkg::SwAccessW1C),
2179 .RESVAL (1'h0),
2180 .Mubi (1'b0)
2181 ) u_recov_err_code_usb_measure_err (
2182 .clk_i (clk_i),
2183 .rst_ni (rst_ni),
2184
2185 // from register interface
2186 .we (recov_err_code_we),
2187 .wd (recov_err_code_usb_measure_err_wd),
2188
2189 // from internal hardware
2190 .de (hw2reg.recov_err_code.usb_measure_err.de),
2191 .d (hw2reg.recov_err_code.usb_measure_err.d),
2192
2193 // to internal hardware
2194 .qe (),
2195 .q (),
2196 .ds (),
2197
2198 // to register interface (read)
2199 .qs (recov_err_code_usb_measure_err_qs)
2200 );
2201
2202 // F[io_timeout_err]: 6:6
2203 prim_subreg #(
2204 .DW (1),
2205 .SwAccess(prim_subreg_pkg::SwAccessW1C),
2206 .RESVAL (1'h0),
2207 .Mubi (1'b0)
2208 ) u_recov_err_code_io_timeout_err (
2209 .clk_i (clk_i),
2210 .rst_ni (rst_ni),
2211
2212 // from register interface
2213 .we (recov_err_code_we),
2214 .wd (recov_err_code_io_timeout_err_wd),
2215
2216 // from internal hardware
2217 .de (hw2reg.recov_err_code.io_timeout_err.de),
2218 .d (hw2reg.recov_err_code.io_timeout_err.d),
2219
2220 // to internal hardware
2221 .qe (),
2222 .q (),
2223 .ds (),
2224
2225 // to register interface (read)
2226 .qs (recov_err_code_io_timeout_err_qs)
2227 );
2228
2229 // F[io_div2_timeout_err]: 7:7
2230 prim_subreg #(
2231 .DW (1),
2232 .SwAccess(prim_subreg_pkg::SwAccessW1C),
2233 .RESVAL (1'h0),
2234 .Mubi (1'b0)
2235 ) u_recov_err_code_io_div2_timeout_err (
2236 .clk_i (clk_i),
2237 .rst_ni (rst_ni),
2238
2239 // from register interface
2240 .we (recov_err_code_we),
2241 .wd (recov_err_code_io_div2_timeout_err_wd),
2242
2243 // from internal hardware
2244 .de (hw2reg.recov_err_code.io_div2_timeout_err.de),
2245 .d (hw2reg.recov_err_code.io_div2_timeout_err.d),
2246
2247 // to internal hardware
2248 .qe (),
2249 .q (),
2250 .ds (),
2251
2252 // to register interface (read)
2253 .qs (recov_err_code_io_div2_timeout_err_qs)
2254 );
2255
2256 // F[io_div4_timeout_err]: 8:8
2257 prim_subreg #(
2258 .DW (1),
2259 .SwAccess(prim_subreg_pkg::SwAccessW1C),
2260 .RESVAL (1'h0),
2261 .Mubi (1'b0)
2262 ) u_recov_err_code_io_div4_timeout_err (
2263 .clk_i (clk_i),
2264 .rst_ni (rst_ni),
2265
2266 // from register interface
2267 .we (recov_err_code_we),
2268 .wd (recov_err_code_io_div4_timeout_err_wd),
2269
2270 // from internal hardware
2271 .de (hw2reg.recov_err_code.io_div4_timeout_err.de),
2272 .d (hw2reg.recov_err_code.io_div4_timeout_err.d),
2273
2274 // to internal hardware
2275 .qe (),
2276 .q (),
2277 .ds (),
2278
2279 // to register interface (read)
2280 .qs (recov_err_code_io_div4_timeout_err_qs)
2281 );
2282
2283 // F[main_timeout_err]: 9:9
2284 prim_subreg #(
2285 .DW (1),
2286 .SwAccess(prim_subreg_pkg::SwAccessW1C),
2287 .RESVAL (1'h0),
2288 .Mubi (1'b0)
2289 ) u_recov_err_code_main_timeout_err (
2290 .clk_i (clk_i),
2291 .rst_ni (rst_ni),
2292
2293 // from register interface
2294 .we (recov_err_code_we),
2295 .wd (recov_err_code_main_timeout_err_wd),
2296
2297 // from internal hardware
2298 .de (hw2reg.recov_err_code.main_timeout_err.de),
2299 .d (hw2reg.recov_err_code.main_timeout_err.d),
2300
2301 // to internal hardware
2302 .qe (),
2303 .q (),
2304 .ds (),
2305
2306 // to register interface (read)
2307 .qs (recov_err_code_main_timeout_err_qs)
2308 );
2309
2310 // F[usb_timeout_err]: 10:10
2311 prim_subreg #(
2312 .DW (1),
2313 .SwAccess(prim_subreg_pkg::SwAccessW1C),
2314 .RESVAL (1'h0),
2315 .Mubi (1'b0)
2316 ) u_recov_err_code_usb_timeout_err (
2317 .clk_i (clk_i),
2318 .rst_ni (rst_ni),
2319
2320 // from register interface
2321 .we (recov_err_code_we),
2322 .wd (recov_err_code_usb_timeout_err_wd),
2323
2324 // from internal hardware
2325 .de (hw2reg.recov_err_code.usb_timeout_err.de),
2326 .d (hw2reg.recov_err_code.usb_timeout_err.d),
2327
2328 // to internal hardware
2329 .qe (),
2330 .q (),
2331 .ds (),
2332
2333 // to register interface (read)
2334 .qs (recov_err_code_usb_timeout_err_qs)
2335 );
2336
2337
2338 // R[fatal_err_code]: V(False)
2339 // F[reg_intg]: 0:0
2340 prim_subreg #(
2341 .DW (1),
2342 .SwAccess(prim_subreg_pkg::SwAccessRO),
2343 .RESVAL (1'h0),
2344 .Mubi (1'b0)
2345 ) u_fatal_err_code_reg_intg (
2346 .clk_i (clk_i),
2347 .rst_ni (rst_ni),
2348
2349 // from register interface
2350 .we (1'b0),
2351 .wd ('0),
2352
2353 // from internal hardware
2354 .de (hw2reg.fatal_err_code.reg_intg.de),
2355 .d (hw2reg.fatal_err_code.reg_intg.d),
2356
2357 // to internal hardware
2358 .qe (),
2359 .q (reg2hw.fatal_err_code.reg_intg.q),
2360 .ds (),
2361
2362 // to register interface (read)
2363 .qs (fatal_err_code_reg_intg_qs)
2364 );
2365
2366 // F[idle_cnt]: 1:1
2367 prim_subreg #(
2368 .DW (1),
2369 .SwAccess(prim_subreg_pkg::SwAccessRO),
2370 .RESVAL (1'h0),
2371 .Mubi (1'b0)
2372 ) u_fatal_err_code_idle_cnt (
2373 .clk_i (clk_i),
2374 .rst_ni (rst_ni),
2375
2376 // from register interface
2377 .we (1'b0),
2378 .wd ('0),
2379
2380 // from internal hardware
2381 .de (hw2reg.fatal_err_code.idle_cnt.de),
2382 .d (hw2reg.fatal_err_code.idle_cnt.d),
2383
2384 // to internal hardware
2385 .qe (),
2386 .q (reg2hw.fatal_err_code.idle_cnt.q),
2387 .ds (),
2388
2389 // to register interface (read)
2390 .qs (fatal_err_code_idle_cnt_qs)
2391 );
2392
2393 // F[shadow_storage_err]: 2:2
2394 prim_subreg #(
2395 .DW (1),
2396 .SwAccess(prim_subreg_pkg::SwAccessRO),
2397 .RESVAL (1'h0),
2398 .Mubi (1'b0)
2399 ) u_fatal_err_code_shadow_storage_err (
2400 .clk_i (clk_i),
2401 .rst_ni (rst_ni),
2402
2403 // from register interface
2404 .we (1'b0),
2405 .wd ('0),
2406
2407 // from internal hardware
2408 .de (hw2reg.fatal_err_code.shadow_storage_err.de),
2409 .d (hw2reg.fatal_err_code.shadow_storage_err.d),
2410
2411 // to internal hardware
2412 .qe (),
2413 .q (reg2hw.fatal_err_code.shadow_storage_err.q),
2414 .ds (),
2415
2416 // to register interface (read)
2417 .qs (fatal_err_code_shadow_storage_err_qs)
2418 );
2419
2420
2421
2422 logic [21:0] addr_hit;
2423 always_comb begin
2424 1/1 addr_hit = '0;
Tests: T4 T5 T6
2425 1/1 addr_hit[ 0] = (reg_addr == CLKMGR_ALERT_TEST_OFFSET);
Tests: T4 T5 T6
2426 1/1 addr_hit[ 1] = (reg_addr == CLKMGR_EXTCLK_CTRL_REGWEN_OFFSET);
Tests: T4 T5 T6
2427 1/1 addr_hit[ 2] = (reg_addr == CLKMGR_EXTCLK_CTRL_OFFSET);
Tests: T4 T5 T6
2428 1/1 addr_hit[ 3] = (reg_addr == CLKMGR_EXTCLK_STATUS_OFFSET);
Tests: T4 T5 T6
2429 1/1 addr_hit[ 4] = (reg_addr == CLKMGR_JITTER_REGWEN_OFFSET);
Tests: T4 T5 T6
2430 1/1 addr_hit[ 5] = (reg_addr == CLKMGR_JITTER_ENABLE_OFFSET);
Tests: T4 T5 T6
2431 1/1 addr_hit[ 6] = (reg_addr == CLKMGR_CLK_ENABLES_OFFSET);
Tests: T4 T5 T6
2432 1/1 addr_hit[ 7] = (reg_addr == CLKMGR_CLK_HINTS_OFFSET);
Tests: T4 T5 T6
2433 1/1 addr_hit[ 8] = (reg_addr == CLKMGR_CLK_HINTS_STATUS_OFFSET);
Tests: T4 T5 T6
2434 1/1 addr_hit[ 9] = (reg_addr == CLKMGR_MEASURE_CTRL_REGWEN_OFFSET);
Tests: T4 T5 T6
2435 1/1 addr_hit[10] = (reg_addr == CLKMGR_IO_MEAS_CTRL_EN_OFFSET);
Tests: T4 T5 T6
2436 1/1 addr_hit[11] = (reg_addr == CLKMGR_IO_MEAS_CTRL_SHADOWED_OFFSET);
Tests: T4 T5 T6
2437 1/1 addr_hit[12] = (reg_addr == CLKMGR_IO_DIV2_MEAS_CTRL_EN_OFFSET);
Tests: T4 T5 T6
2438 1/1 addr_hit[13] = (reg_addr == CLKMGR_IO_DIV2_MEAS_CTRL_SHADOWED_OFFSET);
Tests: T4 T5 T6
2439 1/1 addr_hit[14] = (reg_addr == CLKMGR_IO_DIV4_MEAS_CTRL_EN_OFFSET);
Tests: T4 T5 T6
2440 1/1 addr_hit[15] = (reg_addr == CLKMGR_IO_DIV4_MEAS_CTRL_SHADOWED_OFFSET);
Tests: T4 T5 T6
2441 1/1 addr_hit[16] = (reg_addr == CLKMGR_MAIN_MEAS_CTRL_EN_OFFSET);
Tests: T4 T5 T6
2442 1/1 addr_hit[17] = (reg_addr == CLKMGR_MAIN_MEAS_CTRL_SHADOWED_OFFSET);
Tests: T4 T5 T6
2443 1/1 addr_hit[18] = (reg_addr == CLKMGR_USB_MEAS_CTRL_EN_OFFSET);
Tests: T4 T5 T6
2444 1/1 addr_hit[19] = (reg_addr == CLKMGR_USB_MEAS_CTRL_SHADOWED_OFFSET);
Tests: T4 T5 T6
2445 1/1 addr_hit[20] = (reg_addr == CLKMGR_RECOV_ERR_CODE_OFFSET);
Tests: T4 T5 T6
2446 1/1 addr_hit[21] = (reg_addr == CLKMGR_FATAL_ERR_CODE_OFFSET);
Tests: T4 T5 T6
2447 end
2448
2449 1/1 assign addrmiss = (reg_re || reg_we) ? ~|addr_hit : 1'b0 ;
Tests: T4 T5 T6
2450
2451 // Check sub-word write is permitted
2452 always_comb begin
2453 1/1 wr_err = (reg_we &
Tests: T4 T5 T6
2454 ((addr_hit[ 0] & (|(CLKMGR_PERMIT[ 0] & ~reg_be))) |
2455 (addr_hit[ 1] & (|(CLKMGR_PERMIT[ 1] & ~reg_be))) |
2456 (addr_hit[ 2] & (|(CLKMGR_PERMIT[ 2] & ~reg_be))) |
2457 (addr_hit[ 3] & (|(CLKMGR_PERMIT[ 3] & ~reg_be))) |
2458 (addr_hit[ 4] & (|(CLKMGR_PERMIT[ 4] & ~reg_be))) |
2459 (addr_hit[ 5] & (|(CLKMGR_PERMIT[ 5] & ~reg_be))) |
2460 (addr_hit[ 6] & (|(CLKMGR_PERMIT[ 6] & ~reg_be))) |
2461 (addr_hit[ 7] & (|(CLKMGR_PERMIT[ 7] & ~reg_be))) |
2462 (addr_hit[ 8] & (|(CLKMGR_PERMIT[ 8] & ~reg_be))) |
2463 (addr_hit[ 9] & (|(CLKMGR_PERMIT[ 9] & ~reg_be))) |
2464 (addr_hit[10] & (|(CLKMGR_PERMIT[10] & ~reg_be))) |
2465 (addr_hit[11] & (|(CLKMGR_PERMIT[11] & ~reg_be))) |
2466 (addr_hit[12] & (|(CLKMGR_PERMIT[12] & ~reg_be))) |
2467 (addr_hit[13] & (|(CLKMGR_PERMIT[13] & ~reg_be))) |
2468 (addr_hit[14] & (|(CLKMGR_PERMIT[14] & ~reg_be))) |
2469 (addr_hit[15] & (|(CLKMGR_PERMIT[15] & ~reg_be))) |
2470 (addr_hit[16] & (|(CLKMGR_PERMIT[16] & ~reg_be))) |
2471 (addr_hit[17] & (|(CLKMGR_PERMIT[17] & ~reg_be))) |
2472 (addr_hit[18] & (|(CLKMGR_PERMIT[18] & ~reg_be))) |
2473 (addr_hit[19] & (|(CLKMGR_PERMIT[19] & ~reg_be))) |
2474 (addr_hit[20] & (|(CLKMGR_PERMIT[20] & ~reg_be))) |
2475 (addr_hit[21] & (|(CLKMGR_PERMIT[21] & ~reg_be)))));
2476 end
2477
2478 // Generate write-enables
2479 1/1 assign alert_test_we = addr_hit[0] & reg_we & !reg_error;
Tests: T4 T5 T6
2480
2481 1/1 assign alert_test_recov_fault_wd = reg_wdata[0];
Tests: T4 T5 T6
2482
2483 1/1 assign alert_test_fatal_fault_wd = reg_wdata[1];
Tests: T4 T5 T6
2484 1/1 assign extclk_ctrl_regwen_we = addr_hit[1] & reg_we & !reg_error;
Tests: T4 T5 T6
2485
2486 1/1 assign extclk_ctrl_regwen_wd = reg_wdata[0];
Tests: T4 T5 T6
2487 1/1 assign extclk_ctrl_we = addr_hit[2] & reg_we & !reg_error;
Tests: T4 T5 T6
2488
2489 1/1 assign extclk_ctrl_sel_wd = reg_wdata[3:0];
Tests: T4 T5 T6
2490
2491 1/1 assign extclk_ctrl_hi_speed_sel_wd = reg_wdata[7:4];
Tests: T4 T5 T6
2492 1/1 assign extclk_status_re = addr_hit[3] & reg_re & !reg_error;
Tests: T4 T5 T6
2493 1/1 assign jitter_regwen_we = addr_hit[4] & reg_we & !reg_error;
Tests: T4 T5 T6
2494
2495 1/1 assign jitter_regwen_wd = reg_wdata[0];
Tests: T4 T5 T6
2496 1/1 assign jitter_enable_we = addr_hit[5] & reg_we & !reg_error;
Tests: T4 T5 T6
2497
2498 1/1 assign jitter_enable_wd = reg_wdata[3:0];
Tests: T4 T5 T6
2499 1/1 assign clk_enables_we = addr_hit[6] & reg_we & !reg_error;
Tests: T4 T5 T6
2500
2501 1/1 assign clk_enables_clk_io_div4_peri_en_wd = reg_wdata[0];
Tests: T4 T5 T6
2502
2503 1/1 assign clk_enables_clk_io_div2_peri_en_wd = reg_wdata[1];
Tests: T4 T5 T6
2504
2505 1/1 assign clk_enables_clk_io_peri_en_wd = reg_wdata[2];
Tests: T4 T5 T6
2506
2507 1/1 assign clk_enables_clk_usb_peri_en_wd = reg_wdata[3];
Tests: T4 T5 T6
2508 1/1 assign clk_hints_we = addr_hit[7] & reg_we & !reg_error;
Tests: T4 T5 T6
2509
2510 1/1 assign clk_hints_clk_main_aes_hint_wd = reg_wdata[0];
Tests: T4 T5 T6
2511
2512 1/1 assign clk_hints_clk_main_hmac_hint_wd = reg_wdata[1];
Tests: T4 T5 T6
2513
2514 1/1 assign clk_hints_clk_main_kmac_hint_wd = reg_wdata[2];
Tests: T4 T5 T6
2515
2516 1/1 assign clk_hints_clk_main_otbn_hint_wd = reg_wdata[3];
Tests: T4 T5 T6
2517 1/1 assign measure_ctrl_regwen_we = addr_hit[9] & reg_we & !reg_error;
Tests: T4 T5 T6
2518
2519 1/1 assign measure_ctrl_regwen_wd = reg_wdata[0];
Tests: T4 T5 T6
2520 1/1 assign io_meas_ctrl_en_we = addr_hit[10] & reg_we & !reg_error;
Tests: T4 T5 T6
2521
2522 1/1 assign io_meas_ctrl_shadowed_re = addr_hit[11] & reg_re & !reg_error;
Tests: T4 T5 T6
2523 1/1 assign io_meas_ctrl_shadowed_we = addr_hit[11] & reg_we & !reg_error;
Tests: T4 T5 T6
2524
2525
2526 1/1 assign io_div2_meas_ctrl_en_we = addr_hit[12] & reg_we & !reg_error;
Tests: T4 T5 T6
2527
2528 1/1 assign io_div2_meas_ctrl_shadowed_re = addr_hit[13] & reg_re & !reg_error;
Tests: T4 T5 T6
2529 1/1 assign io_div2_meas_ctrl_shadowed_we = addr_hit[13] & reg_we & !reg_error;
Tests: T4 T5 T6
2530
2531
2532 1/1 assign io_div4_meas_ctrl_en_we = addr_hit[14] & reg_we & !reg_error;
Tests: T4 T5 T6
2533
2534 1/1 assign io_div4_meas_ctrl_shadowed_re = addr_hit[15] & reg_re & !reg_error;
Tests: T4 T5 T6
2535 1/1 assign io_div4_meas_ctrl_shadowed_we = addr_hit[15] & reg_we & !reg_error;
Tests: T4 T5 T6
2536
2537
2538 1/1 assign main_meas_ctrl_en_we = addr_hit[16] & reg_we & !reg_error;
Tests: T4 T5 T6
2539
2540 1/1 assign main_meas_ctrl_shadowed_re = addr_hit[17] & reg_re & !reg_error;
Tests: T4 T5 T6
2541 1/1 assign main_meas_ctrl_shadowed_we = addr_hit[17] & reg_we & !reg_error;
Tests: T4 T5 T6
2542
2543
2544 1/1 assign usb_meas_ctrl_en_we = addr_hit[18] & reg_we & !reg_error;
Tests: T4 T5 T6
2545
2546 1/1 assign usb_meas_ctrl_shadowed_re = addr_hit[19] & reg_re & !reg_error;
Tests: T4 T5 T6
2547 1/1 assign usb_meas_ctrl_shadowed_we = addr_hit[19] & reg_we & !reg_error;
Tests: T4 T5 T6
2548
2549
2550 1/1 assign recov_err_code_we = addr_hit[20] & reg_we & !reg_error;
Tests: T4 T5 T6
2551
2552 1/1 assign recov_err_code_shadow_update_err_wd = reg_wdata[0];
Tests: T4 T5 T6
2553
2554 1/1 assign recov_err_code_io_measure_err_wd = reg_wdata[1];
Tests: T4 T5 T6
2555
2556 1/1 assign recov_err_code_io_div2_measure_err_wd = reg_wdata[2];
Tests: T4 T5 T6
2557
2558 1/1 assign recov_err_code_io_div4_measure_err_wd = reg_wdata[3];
Tests: T4 T5 T6
2559
2560 1/1 assign recov_err_code_main_measure_err_wd = reg_wdata[4];
Tests: T4 T5 T6
2561
2562 1/1 assign recov_err_code_usb_measure_err_wd = reg_wdata[5];
Tests: T4 T5 T6
2563
2564 1/1 assign recov_err_code_io_timeout_err_wd = reg_wdata[6];
Tests: T4 T5 T6
2565
2566 1/1 assign recov_err_code_io_div2_timeout_err_wd = reg_wdata[7];
Tests: T4 T5 T6
2567
2568 1/1 assign recov_err_code_io_div4_timeout_err_wd = reg_wdata[8];
Tests: T4 T5 T6
2569
2570 1/1 assign recov_err_code_main_timeout_err_wd = reg_wdata[9];
Tests: T4 T5 T6
2571
2572 1/1 assign recov_err_code_usb_timeout_err_wd = reg_wdata[10];
Tests: T4 T5 T6
2573
2574 // Assign write-enables to checker logic vector.
2575 always_comb begin
2576 1/1 reg_we_check = '0;
Tests: T4 T5 T6
2577 1/1 reg_we_check[0] = alert_test_we;
Tests: T4 T5 T6
2578 1/1 reg_we_check[1] = extclk_ctrl_regwen_we;
Tests: T4 T5 T6
2579 1/1 reg_we_check[2] = extclk_ctrl_gated_we;
Tests: T4 T5 T6
2580 1/1 reg_we_check[3] = 1'b0;
Tests: T4 T5 T6
2581 1/1 reg_we_check[4] = jitter_regwen_we;
Tests: T4 T5 T6
2582 1/1 reg_we_check[5] = jitter_enable_we;
Tests: T4 T5 T6
2583 1/1 reg_we_check[6] = clk_enables_we;
Tests: T4 T5 T6
2584 1/1 reg_we_check[7] = clk_hints_we;
Tests: T4 T5 T6
2585 1/1 reg_we_check[8] = 1'b0;
Tests: T4 T5 T6
2586 1/1 reg_we_check[9] = measure_ctrl_regwen_we;
Tests: T4 T5 T6
2587 1/1 reg_we_check[10] = io_meas_ctrl_en_we;
Tests: T4 T5 T6
2588 1/1 reg_we_check[11] = io_meas_ctrl_shadowed_we;
Tests: T4 T5 T6
2589 1/1 reg_we_check[12] = io_div2_meas_ctrl_en_we;
Tests: T4 T5 T6
2590 1/1 reg_we_check[13] = io_div2_meas_ctrl_shadowed_we;
Tests: T4 T5 T6
2591 1/1 reg_we_check[14] = io_div4_meas_ctrl_en_we;
Tests: T4 T5 T6
2592 1/1 reg_we_check[15] = io_div4_meas_ctrl_shadowed_we;
Tests: T4 T5 T6
2593 1/1 reg_we_check[16] = main_meas_ctrl_en_we;
Tests: T4 T5 T6
2594 1/1 reg_we_check[17] = main_meas_ctrl_shadowed_we;
Tests: T4 T5 T6
2595 1/1 reg_we_check[18] = usb_meas_ctrl_en_we;
Tests: T4 T5 T6
2596 1/1 reg_we_check[19] = usb_meas_ctrl_shadowed_we;
Tests: T4 T5 T6
2597 1/1 reg_we_check[20] = recov_err_code_we;
Tests: T4 T5 T6
2598 1/1 reg_we_check[21] = 1'b0;
Tests: T4 T5 T6
2599 end
2600
2601 // Read data return
2602 always_comb begin
2603 1/1 reg_rdata_next = '0;
Tests: T4 T5 T6
2604 1/1 unique case (1'b1)
Tests: T4 T5 T6
2605 addr_hit[0]: begin
2606 1/1 reg_rdata_next[0] = '0;
Tests: T4 T5 T28
2607 1/1 reg_rdata_next[1] = '0;
Tests: T4 T5 T28
2608 end
2609
2610 addr_hit[1]: begin
2611 1/1 reg_rdata_next[0] = extclk_ctrl_regwen_qs;
Tests: T4 T5 T28
2612 end
2613
2614 addr_hit[2]: begin
2615 1/1 reg_rdata_next[3:0] = extclk_ctrl_sel_qs;
Tests: T4 T5 T6
2616 1/1 reg_rdata_next[7:4] = extclk_ctrl_hi_speed_sel_qs;
Tests: T4 T5 T6
2617 end
2618
2619 addr_hit[3]: begin
2620 1/1 reg_rdata_next[3:0] = extclk_status_qs;
Tests: T4 T5 T6
2621 end
2622
2623 addr_hit[4]: begin
2624 1/1 reg_rdata_next[0] = jitter_regwen_qs;
Tests: T4 T5 T28
2625 end
2626
2627 addr_hit[5]: begin
2628 1/1 reg_rdata_next[3:0] = jitter_enable_qs;
Tests: T4 T5 T6
2629 end
2630
2631 addr_hit[6]: begin
2632 1/1 reg_rdata_next[0] = clk_enables_clk_io_div4_peri_en_qs;
Tests: T4 T5 T6
2633 1/1 reg_rdata_next[1] = clk_enables_clk_io_div2_peri_en_qs;
Tests: T4 T5 T6
2634 1/1 reg_rdata_next[2] = clk_enables_clk_io_peri_en_qs;
Tests: T4 T5 T6
2635 1/1 reg_rdata_next[3] = clk_enables_clk_usb_peri_en_qs;
Tests: T4 T5 T6
2636 end
2637
2638 addr_hit[7]: begin
2639 1/1 reg_rdata_next[0] = clk_hints_clk_main_aes_hint_qs;
Tests: T4 T5 T28
2640 1/1 reg_rdata_next[1] = clk_hints_clk_main_hmac_hint_qs;
Tests: T4 T5 T28
2641 1/1 reg_rdata_next[2] = clk_hints_clk_main_kmac_hint_qs;
Tests: T4 T5 T28
2642 1/1 reg_rdata_next[3] = clk_hints_clk_main_otbn_hint_qs;
Tests: T4 T5 T28
2643 end
2644
2645 addr_hit[8]: begin
2646 1/1 reg_rdata_next[0] = clk_hints_status_clk_main_aes_val_qs;
Tests: T4 T5 T6
2647 1/1 reg_rdata_next[1] = clk_hints_status_clk_main_hmac_val_qs;
Tests: T4 T5 T6
2648 1/1 reg_rdata_next[2] = clk_hints_status_clk_main_kmac_val_qs;
Tests: T4 T5 T6
2649 1/1 reg_rdata_next[3] = clk_hints_status_clk_main_otbn_val_qs;
Tests: T4 T5 T6
2650 end
2651
2652 addr_hit[9]: begin
2653 1/1 reg_rdata_next[0] = measure_ctrl_regwen_qs;
Tests: T4 T5 T6
2654 end
2655
2656 addr_hit[10]: begin
2657 1/1 reg_rdata_next = DW'(io_meas_ctrl_en_qs);
Tests: T4 T5 T6
2658 end
2659 addr_hit[11]: begin
2660 1/1 reg_rdata_next = DW'(io_meas_ctrl_shadowed_qs);
Tests: T4 T5 T6
2661 end
2662 addr_hit[12]: begin
2663 1/1 reg_rdata_next = DW'(io_div2_meas_ctrl_en_qs);
Tests: T4 T5 T28
2664 end
2665 addr_hit[13]: begin
2666 1/1 reg_rdata_next = DW'(io_div2_meas_ctrl_shadowed_qs);
Tests: T4 T5 T6
2667 end
2668 addr_hit[14]: begin
2669 1/1 reg_rdata_next = DW'(io_div4_meas_ctrl_en_qs);
Tests: T4 T5 T6
2670 end
2671 addr_hit[15]: begin
2672 1/1 reg_rdata_next = DW'(io_div4_meas_ctrl_shadowed_qs);
Tests: T4 T5 T6
2673 end
2674 addr_hit[16]: begin
2675 1/1 reg_rdata_next = DW'(main_meas_ctrl_en_qs);
Tests: T4 T5 T6
2676 end
2677 addr_hit[17]: begin
2678 1/1 reg_rdata_next = DW'(main_meas_ctrl_shadowed_qs);
Tests: T4 T5 T6
2679 end
2680 addr_hit[18]: begin
2681 1/1 reg_rdata_next = DW'(usb_meas_ctrl_en_qs);
Tests: T4 T5 T6
2682 end
2683 addr_hit[19]: begin
2684 1/1 reg_rdata_next = DW'(usb_meas_ctrl_shadowed_qs);
Tests: T4 T5 T6
2685 end
2686 addr_hit[20]: begin
2687 1/1 reg_rdata_next[0] = recov_err_code_shadow_update_err_qs;
Tests: T4 T5 T6
2688 1/1 reg_rdata_next[1] = recov_err_code_io_measure_err_qs;
Tests: T4 T5 T6
2689 1/1 reg_rdata_next[2] = recov_err_code_io_div2_measure_err_qs;
Tests: T4 T5 T6
2690 1/1 reg_rdata_next[3] = recov_err_code_io_div4_measure_err_qs;
Tests: T4 T5 T6
2691 1/1 reg_rdata_next[4] = recov_err_code_main_measure_err_qs;
Tests: T4 T5 T6
2692 1/1 reg_rdata_next[5] = recov_err_code_usb_measure_err_qs;
Tests: T4 T5 T6
2693 1/1 reg_rdata_next[6] = recov_err_code_io_timeout_err_qs;
Tests: T4 T5 T6
2694 1/1 reg_rdata_next[7] = recov_err_code_io_div2_timeout_err_qs;
Tests: T4 T5 T6
2695 1/1 reg_rdata_next[8] = recov_err_code_io_div4_timeout_err_qs;
Tests: T4 T5 T6
2696 1/1 reg_rdata_next[9] = recov_err_code_main_timeout_err_qs;
Tests: T4 T5 T6
2697 1/1 reg_rdata_next[10] = recov_err_code_usb_timeout_err_qs;
Tests: T4 T5 T6
2698 end
2699
2700 addr_hit[21]: begin
2701 1/1 reg_rdata_next[0] = fatal_err_code_reg_intg_qs;
Tests: T4 T5 T6
2702 1/1 reg_rdata_next[1] = fatal_err_code_idle_cnt_qs;
Tests: T4 T5 T6
2703 1/1 reg_rdata_next[2] = fatal_err_code_shadow_storage_err_qs;
Tests: T4 T5 T6
2704 end
2705
2706 default: begin
2707 reg_rdata_next = '1;
2708 end
2709 endcase
2710 end
2711
2712 // shadow busy
2713 logic shadow_busy;
2714 logic rst_done;
2715 logic shadow_rst_done;
2716 always_ff @(posedge clk_i or negedge rst_ni) begin
2717 1/1 if (!rst_ni) begin
Tests: T4 T5 T6
2718 1/1 rst_done <= '0;
Tests: T4 T5 T6
2719 end else begin
2720 1/1 rst_done <= 1'b1;
Tests: T4 T5 T6
2721 end
2722 end
2723
2724 always_ff @(posedge clk_i or negedge rst_shadowed_ni) begin
2725 1/1 if (!rst_shadowed_ni) begin
Tests: T4 T5 T6
2726 1/1 shadow_rst_done <= '0;
Tests: T4 T5 T6
2727 end else begin
2728 1/1 shadow_rst_done <= 1'b1;
Tests: T4 T5 T6
2729 end
2730 end
2731
2732 // both shadow and normal resets have been released
2733 1/1 assign shadow_busy = ~(rst_done & shadow_rst_done);
Tests: T4 T5 T6
2734
2735 // Collect up storage and update errors
2736 1/1 assign shadowed_storage_err_o = |{
Tests: T99 T100 T102
2737 io_meas_ctrl_shadowed_hi_storage_err,
2738 io_meas_ctrl_shadowed_lo_storage_err,
2739 io_div2_meas_ctrl_shadowed_hi_storage_err,
2740 io_div2_meas_ctrl_shadowed_lo_storage_err,
2741 io_div4_meas_ctrl_shadowed_hi_storage_err,
2742 io_div4_meas_ctrl_shadowed_lo_storage_err,
2743 main_meas_ctrl_shadowed_hi_storage_err,
2744 main_meas_ctrl_shadowed_lo_storage_err,
2745 usb_meas_ctrl_shadowed_hi_storage_err,
2746 usb_meas_ctrl_shadowed_lo_storage_err
2747 };
2748 1/1 assign shadowed_update_err_o = |{
Tests: T100 T102 T101
2749 io_meas_ctrl_shadowed_hi_update_err,
2750 io_meas_ctrl_shadowed_lo_update_err,
2751 io_div2_meas_ctrl_shadowed_hi_update_err,
2752 io_div2_meas_ctrl_shadowed_lo_update_err,
2753 io_div4_meas_ctrl_shadowed_hi_update_err,
2754 io_div4_meas_ctrl_shadowed_lo_update_err,
2755 main_meas_ctrl_shadowed_hi_update_err,
2756 main_meas_ctrl_shadowed_lo_update_err,
2757 usb_meas_ctrl_shadowed_hi_update_err,
2758 usb_meas_ctrl_shadowed_lo_update_err
2759 };
2760
2761 // register busy
2762 logic reg_busy_sel;
2763 1/1 assign reg_busy = reg_busy_sel | shadow_busy;
Tests: T4 T5 T6
2764 always_comb begin
2765 1/1 reg_busy_sel = '0;
Tests: T4 T5 T6
2766 1/1 unique case (1'b1)
Tests: T4 T5 T6
2767 addr_hit[10]: begin
2768 1/1 reg_busy_sel = io_meas_ctrl_en_busy;
Tests: T4 T5 T6
2769 end
2770 addr_hit[11]: begin
2771 1/1 reg_busy_sel = io_meas_ctrl_shadowed_busy;
Tests: T4 T5 T6
2772 end
2773 addr_hit[12]: begin
2774 1/1 reg_busy_sel = io_div2_meas_ctrl_en_busy;
Tests: T4 T5 T28
2775 end
2776 addr_hit[13]: begin
2777 1/1 reg_busy_sel = io_div2_meas_ctrl_shadowed_busy;
Tests: T4 T5 T6
2778 end
2779 addr_hit[14]: begin
2780 1/1 reg_busy_sel = io_div4_meas_ctrl_en_busy;
Tests: T4 T5 T6
2781 end
2782 addr_hit[15]: begin
2783 1/1 reg_busy_sel = io_div4_meas_ctrl_shadowed_busy;
Tests: T4 T5 T6
2784 end
2785 addr_hit[16]: begin
2786 1/1 reg_busy_sel = main_meas_ctrl_en_busy;
Tests: T4 T5 T6
2787 end
2788 addr_hit[17]: begin
2789 1/1 reg_busy_sel = main_meas_ctrl_shadowed_busy;
Tests: T4 T5 T6
2790 end
2791 addr_hit[18]: begin
2792 1/1 reg_busy_sel = usb_meas_ctrl_en_busy;
Tests: T4 T5 T6
2793 end
2794 addr_hit[19]: begin
2795 1/1 reg_busy_sel = usb_meas_ctrl_shadowed_busy;
Tests: T4 T5 T6
2796 end
2797 default: begin
2798 reg_busy_sel = '0;
2799 end
2800 endcase
2801 end
2802
2803
2804 // Unused signal tieoff
2805
2806 // wdata / byte enable are not always fully used
2807 // add a blanket unused statement to handle lint waivers
2808 logic unused_wdata;
2809 logic unused_be;
2810 1/1 assign unused_wdata = ^reg_wdata;
Tests: T4 T5 T6
2811 1/1 assign unused_be = ^reg_be;
Tests: T4 T5 T6