Line split page
dashboard | hierarchy | modlist | groups | tests | asserts
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: T22 T37 T72  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 T5 T6  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: T49 T94 T69  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: T49 T94 T69  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: T49 T94 T69  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: T5 T30 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 T6  2607 1/1 reg_rdata_next[1] = '0; Tests: T4 T5 T6  2608 end 2609 2610 addr_hit[1]: begin 2611 1/1 reg_rdata_next[0] = extclk_ctrl_regwen_qs; Tests: T4 T5 T6  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 T6  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 T6  2640 1/1 reg_rdata_next[1] = clk_hints_clk_main_hmac_hint_qs; Tests: T4 T5 T6  2641 1/1 reg_rdata_next[2] = clk_hints_clk_main_kmac_hint_qs; Tests: T4 T5 T6  2642 1/1 reg_rdata_next[3] = clk_hints_clk_main_otbn_hint_qs; Tests: T4 T5 T6  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 T6  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: T101 T76 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: T101 T76 T102  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 T6  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 
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%