dashboard | hierarchy | modlist | groups | tests | asserts

Module Instance : tb.dut.gen_partitions[0].gen_unbuffered.u_part_unbuf

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
97.23 100.00 100.00 90.00 100.00 96.15


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
97.56 100.00 100.00 100.00 90.00 98.15 97.22


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
96.19 94.16 96.15 97.04 96.43 97.18 dut


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
gen_digest_write_lock.u_prim_mubi8_sender_write_lock 100.00 100.00 100.00 100.00
gen_ecc_reg.u_otp_ctrl_ecc_reg 95.00 100.00 100.00 80.00 100.00
u_prim_mubi8_sender_read_lock_pre 100.00 100.00 100.00 100.00
u_prim_mubi8_sender_write_lock_pre 100.00 100.00 100.00 100.00
u_state_regs 100.00 100.00 100.00 100.00


Module Instance : tb.dut.gen_partitions[1].gen_unbuffered.u_part_unbuf

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
98.33 100.00 100.00 91.67 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
98.32 100.00 100.00 100.00 91.67 98.25 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
96.19 94.16 96.15 97.04 96.43 97.18 dut


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
gen_digest_write_lock.u_prim_mubi8_sender_write_lock 100.00 100.00 100.00 100.00
gen_ecc_reg.u_otp_ctrl_ecc_reg 95.00 100.00 100.00 80.00 100.00
u_prim_mubi8_sender_read_lock_pre 100.00 100.00 100.00 100.00
u_prim_mubi8_sender_write_lock_pre 100.00 100.00 100.00 100.00
u_state_regs 100.00 100.00 100.00 100.00


Module Instance : tb.dut.gen_partitions[2].gen_unbuffered.u_part_unbuf

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
97.75 100.00 97.06 91.67 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
97.83 100.00 97.06 100.00 91.67 98.25 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
96.19 94.16 96.15 97.04 96.43 97.18 dut


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
gen_digest_write_lock.u_prim_mubi8_sender_write_lock 100.00 100.00 100.00 100.00
gen_ecc_reg.u_otp_ctrl_ecc_reg 95.00 100.00 100.00 80.00 100.00
u_prim_mubi8_sender_read_lock_pre 100.00 100.00 100.00 100.00
u_prim_mubi8_sender_write_lock_pre 100.00 100.00 100.00 100.00
u_state_regs 100.00 100.00 100.00 100.00

Go back
Module Instances:
tb.dut.gen_partitions[0].gen_unbuffered.u_part_unbuf
tb.dut.gen_partitions[1].gen_unbuffered.u_part_unbuf
tb.dut.gen_partitions[2].gen_unbuffered.u_part_unbuf
Line Coverage for Instance : tb.dut.gen_partitions[0].gen_unbuffered.u_part_unbuf
Line No.TotalCoveredPercent
TOTAL8686100.00
CONT_ASSIGN13811100.00
ALWAYS15333100.00
ALWAYS1646161100.00
CONT_ASSIGN33411100.00
CONT_ASSIGN33611100.00
CONT_ASSIGN33911100.00
CONT_ASSIGN34911100.00
CONT_ASSIGN35011100.00
CONT_ASSIGN35411100.00
CONT_ASSIGN35811100.00
CONT_ASSIGN39511100.00
CONT_ASSIGN42011100.00
CONT_ASSIGN45411100.00
ALWAYS46133100.00
ALWAYS46488100.00

137 // Output partition error state. 138 1/1 assign error_o = error_q; Tests: T1 T2 T3  139 140 // This partition cannot do any write accesses, hence we tie this 141 // constantly off. 142 assign otp_wdata_o = '0; 143 // Depending on the partition configuration, the wrapper is instructed to ignore integrity 144 // calculations and checks. To be on the safe side, the partition filters error responses at this 145 // point and does not report any integrity errors if integrity is disabled. 146 otp_err_e otp_err; 147 if (Info.integrity) begin : gen_integrity 148 assign otp_cmd_o = prim_otp_pkg::Read; 149 assign otp_err = otp_err_e'(otp_err_i); 150 end else begin : gen_no_integrity 151 assign otp_cmd_o = prim_otp_pkg::ReadRaw; 152 always_comb begin 153 1/1 if (otp_err_e'(otp_err_i) inside {MacroEccCorrError, MacroEccUncorrError}) begin Tests: T1 T2 T3  154 1/1 otp_err = NoError; Tests: T3 T99 T100  155 end else begin 156 1/1 otp_err = otp_err_e'(otp_err_i); Tests: T1 T2 T3  157 end 158 end 159 end 160 161 `ASSERT_KNOWN(FsmStateKnown_A, state_q) 162 always_comb begin : p_fsm 163 // Default assignments 164 1/1 state_d = state_q; Tests: T1 T2 T3  165 166 // Response to init request 167 1/1 init_done_o = 1'b0; Tests: T1 T2 T3  168 169 // OTP signals 170 1/1 otp_req_o = 1'b0; Tests: T1 T2 T3  171 1/1 otp_addr_sel = DigestAddrSel; Tests: T1 T2 T3  172 173 // TL-UL signals 174 1/1 tlul_gnt_o = 1'b0; Tests: T1 T2 T3  175 1/1 tlul_rvalid_o = 1'b0; Tests: T1 T2 T3  176 1/1 tlul_rerror_o = '0; Tests: T1 T2 T3  177 178 // Enable for buffered digest register 179 1/1 digest_reg_en = 1'b0; Tests: T1 T2 T3  180 181 // Error Register 182 1/1 error_d = error_q; Tests: T1 T2 T3  183 1/1 pending_tlul_error_d = 1'b0; Tests: T1 T2 T3  184 1/1 fsm_err_o = 1'b0; Tests: T1 T2 T3  185 186 1/1 unique case (state_q) Tests: T1 T2 T3  187 /////////////////////////////////////////////////////////////////// 188 // State right after reset. Wait here until we get a an 189 // initialization request. 190 ResetSt: begin 191 1/1 if (init_req_i) begin Tests: T1 T2 T3  192 // If the partition does not have a digest, no initialization is necessary. 193 1/1 if (Info.sw_digest) begin Tests: T1 T2 T3  194 1/1 state_d = InitSt; Tests: T1 T2 T3  195 end else begin 196 unreachable state_d = IdleSt; 197 end 198 end MISSING_ELSE 199 end 200 /////////////////////////////////////////////////////////////////// 201 // Initialization reads out the digest only in unbuffered 202 // partitions. Wait here until the OTP request has been granted. 203 // And then wait until the OTP word comes back. 204 InitSt: begin 205 1/1 otp_req_o = 1'b1; Tests: T1 T2 T3  206 1/1 if (otp_gnt_i) begin Tests: T1 T2 T3  207 1/1 state_d = InitWaitSt; Tests: T1 T2 T3  208 end ==> MISSING_ELSE 209 end 210 /////////////////////////////////////////////////////////////////// 211 // Wait for OTP response and write to digest buffer register. In 212 // case an OTP transaction fails, latch the OTP error code and 213 // jump to a terminal error state. 214 InitWaitSt: begin 215 1/1 if (otp_rvalid_i) begin Tests: T1 T2 T3  216 1/1 digest_reg_en = 1'b1; Tests: T1 T2 T3  217 1/1 if (otp_err inside {NoError, MacroEccCorrError}) begin Tests: T1 T2 T3  218 1/1 state_d = IdleSt; Tests: T1 T2 T3  219 // At this point the only error that we could have gotten are correctable ECC errors. 220 1/1 if (otp_err != NoError) begin Tests: T1 T2 T3  221 excluded error_d = MacroEccCorrError; Exclude Annotation: VC_COV_UNR 222 end MISSING_ELSE 223 end else begin 224 excluded state_d = ErrorSt; Exclude Annotation: VC_COV_UNR 225 excluded error_d = otp_err; Exclude Annotation: VC_COV_UNR 226 end 227 end MISSING_ELSE 228 end 229 /////////////////////////////////////////////////////////////////// 230 // Wait for TL-UL requests coming in. 231 // Then latch address and go to readout state. 232 IdleSt: begin 233 1/1 init_done_o = 1'b1; Tests: T1 T2 T3  234 1/1 if (tlul_req_i) begin Tests: T1 T2 T3  235 1/1 error_d = NoError; // clear recoverable soft errors. Tests: T1 T3 T4  236 1/1 state_d = ReadSt; Tests: T1 T3 T4  237 1/1 tlul_gnt_o = 1'b1; Tests: T1 T3 T4  238 end MISSING_ELSE 239 end 240 /////////////////////////////////////////////////////////////////// 241 // If the address is out of bounds, or if the partition is 242 // locked, signal back a bus error. Note that such an error does 243 // not cause the partition to go into error state. Otherwise if 244 // these checks pass, an OTP word is requested. 245 ReadSt: begin 246 1/1 init_done_o = 1'b1; Tests: T1 T3 T4  247 // Double check the address range. 248 1/1 if (tlul_addr_in_range && mubi8_test_false_strict(access_o.read_lock)) begin Tests: T1 T3 T4  249 1/1 otp_req_o = 1'b1; Tests: T1 T3 T4  250 1/1 otp_addr_sel = DataAddrSel; Tests: T1 T3 T4  251 1/1 if (otp_gnt_i) begin Tests: T1 T3 T4  252 1/1 state_d = ReadWaitSt; Tests: T1 T3 T4  253 end MISSING_ELSE 254 end else begin 255 1/1 state_d = IdleSt; Tests: T1 T6 T11  256 1/1 error_d = AccessError; // Signal this error, but do not go into terminal error state. Tests: T1 T6 T11  257 1/1 tlul_rvalid_o = 1'b1; Tests: T1 T6 T11  258 1/1 tlul_rerror_o = 2'b11; // This causes the TL-UL adapter to return a bus error. Tests: T1 T6 T11  259 end 260 end 261 /////////////////////////////////////////////////////////////////// 262 // Wait for OTP response and release the TL-UL response. In 263 // case an OTP transaction fails, latch the OTP error code, 264 // signal a TL-Ul bus error and jump to a terminal error state. 265 ReadWaitSt: begin 266 1/1 init_done_o = 1'b1; Tests: T1 T3 T4  267 1/1 if (otp_rvalid_i) begin Tests: T1 T3 T4  268 1/1 tlul_rvalid_o = 1'b1; Tests: T1 T3 T4  269 1/1 if (otp_err inside {NoError, MacroEccCorrError}) begin Tests: T1 T3 T4  270 1/1 state_d = IdleSt; Tests: T1 T3 T4  271 // At this point the only error that we could have gotten are correctable ECC errors. 272 1/1 if (otp_err != NoError) begin Tests: T1 T3 T4  273 excluded error_d = MacroEccCorrError; Exclude Annotation: VC_COV_UNR 274 end MISSING_ELSE 275 end else begin 276 excluded state_d = ErrorSt; Exclude Annotation: VC_COV_UNR 277 excluded error_d = otp_err; Exclude Annotation: VC_COV_UNR 278 // This causes the TL-UL adapter to return a bus error. 279 excluded tlul_rerror_o = 2'b11; Exclude Annotation: VC_COV_UNR 280 end 281 end MISSING_ELSE 282 end 283 /////////////////////////////////////////////////////////////////// 284 // Terminal Error State. This locks access to the partition. 285 // Make sure the partition signals an error state if no error 286 // code has been latched so far. 287 ErrorSt: begin 288 1/1 if (error_q == NoError) begin Tests: T1 T3 T11  289 1/1 error_d = FsmStateError; Tests: T27 T28 T29  290 end MISSING_ELSE 291 292 // Return bus errors if there are pending TL-UL requests. 293 1/1 if (pending_tlul_error_q) begin Tests: T1 T3 T11  294 1/1 tlul_rerror_o = 2'b11; Tests: T1 T12 T100  295 1/1 tlul_rvalid_o = 1'b1; Tests: T1 T12 T100  296 1/1 end else if (tlul_req_i) begin Tests: T1 T3 T11  297 1/1 tlul_gnt_o = 1'b1; Tests: T1 T12 T100  298 1/1 pending_tlul_error_d = 1'b1; Tests: T1 T12 T100  299 end MISSING_ELSE 300 end 301 /////////////////////////////////////////////////////////////////// 302 // We should never get here. If we do (e.g. via a malicious 303 // glitch), error out immediately. 304 default: begin 305 state_d = ErrorSt; 306 fsm_err_o = 1'b1; 307 end 308 /////////////////////////////////////////////////////////////////// 309 endcase // state_q 310 311 // Unconditionally jump into the terminal error state in case of 312 // an ECC error or escalation, and lock access to the partition down. 313 // SEC_CM: PART.FSM.LOCAL_ESC 314 1/1 if (ecc_err) begin Tests: T1 T2 T3  315 1/1 state_d = ErrorSt; Tests: T110 T172 T183  316 1/1 if (state_q != ErrorSt) begin Tests: T110 T172 T183  317 1/1 error_d = CheckFailError; Tests: T110 T172 T183  318 end MISSING_ELSE 319 end MISSING_ELSE 320 // SEC_CM: PART.FSM.GLOBAL_ESC 321 1/1 if (lc_ctrl_pkg::lc_tx_test_true_loose(escalate_en_i)) begin Tests: T1 T2 T3  322 1/1 state_d = ErrorSt; Tests: T1 T3 T11  323 1/1 fsm_err_o = 1'b1; Tests: T1 T3 T11  324 1/1 if (state_q != ErrorSt) begin Tests: T1 T3 T11  325 1/1 error_d = FsmStateError; Tests: T1 T3 T11  326 end MISSING_ELSE 327 end MISSING_ELSE 328 end 329 330 /////////////////////////////////// 331 // Signals to/from TL-UL Adapter // 332 /////////////////////////////////// 333 334 1/1 assign tlul_addr_d = tlul_addr_i; Tests: T1 T2 T3  335 // Do not forward data in case of an error. 336 1/1 assign tlul_rdata_o = (tlul_rvalid_o && tlul_rerror_o == '0) ? otp_rdata_i[31:0] : '0; Tests: T1 T2 T3  337 338 if (Info.offset == 0) begin : gen_zero_offset 339 1/1 assign tlul_addr_in_range = {1'b0, tlul_addr_q, 2'b00} < PartEnd; Tests: T1 T2 T3  340 341 end else begin : gen_nonzero_offset 342 assign tlul_addr_in_range = {tlul_addr_q, 2'b00} >= Info.offset && 343 {1'b0, tlul_addr_q, 2'b00} < PartEnd; 344 end 345 346 // Note that OTP works on halfword (16bit) addresses, hence need to 347 // shift the addresses appropriately. 348 logic [OtpByteAddrWidth-1:0] addr_calc; 349 1/1 assign addr_calc = (otp_addr_sel == DigestAddrSel) ? DigestOffset : {tlul_addr_q, 2'b00}; Tests: T1 T2 T3  350 1/1 assign otp_addr_o = addr_calc[OtpByteAddrWidth-1:OtpAddrShift]; Tests: T1 T2 T3  351 352 if (OtpAddrShift > 0) begin : gen_unused 353 logic unused_bits; 354 1/1 assign unused_bits = ^addr_calc[OtpAddrShift-1:0]; Tests: T1 T2 T3  355 end 356 357 // Request 32bit except in case of the digest. 358 1/1 assign otp_size_o = (otp_addr_sel == DigestAddrSel) ? Tests: T1 T2 T3  359 OtpSizeWidth'(unsigned'(ScrmblBlockWidth / OtpWidth - 1)) : 360 OtpSizeWidth'(unsigned'(32 / OtpWidth - 1)); 361 362 //////////////// 363 // Digest Reg // 364 //////////////// 365 366 if (Info.sw_digest) begin : gen_ecc_reg 367 // SEC_CM: PART.DATA_REG.INTEGRITY 368 otp_ctrl_ecc_reg #( 369 .Width ( ScrmblBlockWidth ), 370 .Depth ( 1 ) 371 ) u_otp_ctrl_ecc_reg ( 372 .clk_i, 373 .rst_ni, 374 .wren_i ( digest_reg_en ), 375 .addr_i ( '0 ), 376 .wdata_i ( otp_rdata_i ), 377 .rdata_o ( ), 378 .data_o ( digest_o ), 379 .ecc_err_o ( ecc_err ) 380 ); 381 end else begin : gen_no_ecc_reg 382 logic unused_digest_reg_en; 383 logic unused_rdata; 384 assign unused_digest_reg_en = digest_reg_en; 385 assign unused_rdata = ^otp_rdata_i[32 +: 32]; // Upper word is not connected in this case. 386 assign digest_o = '0; 387 assign ecc_err = 1'b0; 388 end 389 390 //////////////////////// 391 // DAI Access Control // 392 //////////////////////// 393 394 mubi8_t init_locked; 395 1/1 assign init_locked = (~init_done_o) ? MuBi8True : MuBi8False; Tests: T1 T2 T3  396 397 // Aggregate all possible DAI write locks. The partition is also locked when uninitialized. 398 // Note that the locks are redundantly encoded values. 399 part_access_t access_pre; 400 prim_mubi8_sender #( 401 .AsyncOn(0) 402 ) u_prim_mubi8_sender_write_lock_pre ( 403 .clk_i, 404 .rst_ni, 405 .mubi_i(mubi8_and_lo(init_locked, access_i.write_lock)), 406 .mubi_o(access_pre.write_lock) 407 ); 408 prim_mubi8_sender #( 409 .AsyncOn(0) 410 ) u_prim_mubi8_sender_read_lock_pre ( 411 .clk_i, 412 .rst_ni, 413 .mubi_i(mubi8_and_lo(init_locked, access_i.read_lock)), 414 .mubi_o(access_pre.read_lock) 415 ); 416 417 // SEC_CM: PART.MEM.SW_UNWRITABLE 418 if (Info.write_lock) begin : gen_digest_write_lock 419 mubi8_t digest_locked; 420 1/1 assign digest_locked = (digest_o != '0) ? MuBi8True : MuBi8False; Tests: T1 T2 T3  421 422 // This prevents the synthesis tool from optimizing the multibit signal. 423 prim_mubi8_sender #( 424 .AsyncOn(0) 425 ) u_prim_mubi8_sender_write_lock ( 426 .clk_i, 427 .rst_ni, 428 .mubi_i(mubi8_and_lo(access_pre.write_lock, digest_locked)), 429 .mubi_o(access_o.write_lock) 430 ); 431 432 `ASSERT(DigestWriteLocksPartition_A, digest_o |-> mubi8_test_true_loose(access_o.write_lock)) 433 end else begin : gen_no_digest_write_lock 434 assign access_o.write_lock = access_pre.write_lock; 435 end 436 437 // SEC_CM: PART.MEM.SW_UNREADABLE 438 if (Info.read_lock) begin : gen_digest_read_lock 439 mubi8_t digest_locked; 440 assign digest_locked = (digest_o != '0) ? MuBi8True : MuBi8False; 441 442 // This prevents the synthesis tool from optimizing the multibit signal. 443 prim_mubi8_sender #( 444 .AsyncOn(0) 445 ) u_prim_mubi8_sender_read_lock ( 446 .clk_i, 447 .rst_ni, 448 .mubi_i(mubi8_and_lo(access_pre.read_lock, digest_locked)), 449 .mubi_o(access_o.read_lock) 450 ); 451 452 `ASSERT(DigestReadLocksPartition_A, digest_o |-> mubi8_test_true_loose(access_o.read_lock)) 453 end else begin : gen_no_digest_read_lock 454 1/1 assign access_o.read_lock = access_pre.read_lock; Tests: T1 T2 T3  455 end 456 457 /////////////// 458 // Registers // 459 /////////////// 460 461 3/3 `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt) Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3 
PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt): 461.1 `ifdef SIMULATION 461.2 prim_sparse_fsm_flop #( 461.3 .StateEnumT(state_e), 461.4 .Width($bits(state_e)), 461.5 .ResetValue($bits(state_e)'(ResetSt)), 461.6 .EnableAlertTriggerSVA(1), 461.7 .CustomForceName("state_q") 461.8 ) u_state_regs ( 461.9 .clk_i ( clk_i ), 461.10 .rst_ni ( rst_ni ), 461.11 .state_i ( state_d ), 461.12 .state_o ( ) 461.13 ); 461.14 always_ff @(posedge clk_i or negedge rst_ni) begin 461.15 1/1 if (!rst_ni) begin Tests: T1 T2 T3  461.16 1/1 state_q <= ResetSt; Tests: T1 T2 T3  461.17 end else begin 461.18 1/1 state_q <= state_d; Tests: T1 T2 T3  461.19 end 461.20 end 461.21 u_state_regs_A: assert property (@(posedge clk_i) disable iff ((!rst_ni) !== '0) (state_q === u_state_regs.state_o)) 461.22 else begin 461.23 `ifdef UVM 461.24 uvm_pkg::uvm_report_error("ASSERT FAILED", "u_state_regs_A", uvm_pkg::UVM_NONE, 461.25 "../src/lowrisc_ip_otp_ctrl_1.0/rtl/otp_ctrl_part_unbuf.sv", 461, "", 1); 461.26 `else 461.27 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 461.28 `PRIM_STRINGIFY(u_state_regs_A)); 461.29 `endif 461.30 end 461.31 `else 461.32 prim_sparse_fsm_flop #( 461.33 .StateEnumT(state_e), 461.34 .Width($bits(state_e)), 461.35 .ResetValue($bits(state_e)'(ResetSt)), 461.36 .EnableAlertTriggerSVA(1) 461.37 ) u_state_regs ( 461.38 .clk_i ( `PRIM_FLOP_CLK ), 461.39 .rst_ni ( `PRIM_FLOP_RST ), 461.40 .state_i ( state_d ), 461.41 .state_o ( state_q ) 461.42 ); 461.43 `endif462 463 always_ff @(posedge clk_i or negedge rst_ni) begin : p_regs 464 1/1 if (!rst_ni) begin Tests: T1 T2 T3  465 1/1 error_q <= NoError; Tests: T1 T2 T3  466 1/1 tlul_addr_q <= '0; Tests: T1 T2 T3  467 1/1 pending_tlul_error_q <= 1'b0; Tests: T1 T2 T3  468 end else begin 469 1/1 error_q <= error_d; Tests: T1 T2 T3  470 1/1 pending_tlul_error_q <= pending_tlul_error_d; Tests: T1 T2 T3  471 1/1 if (tlul_gnt_o) begin Tests: T1 T2 T3  472 1/1 tlul_addr_q <= tlul_addr_d; Tests: T1 T3 T4  473 end MISSING_ELSE

Cond Coverage for Instance : tb.dut.gen_partitions[0].gen_unbuffered.u_part_unbuf
TotalCoveredPercent
Conditions2929100.00
Logical2929100.00
Non-Logical00
Event00

 LINE       220
 EXPRESSION (otp_err != NoError)
            ----------1---------
-1-StatusTestsExclude Annotation
0CoveredT1,T2,T3
1Excluded VC_COV_UNR

 LINE       272
 EXPRESSION (otp_err != NoError)
            ----------1---------
-1-StatusTestsExclude Annotation
0CoveredT1,T3,T4
1Excluded VC_COV_UNR

 LINE       288
 EXPRESSION (error_q == NoError)
            ----------1---------
-1-StatusTests
0CoveredT1,T3,T11
1CoveredT27,T28,T29

 LINE       316
 EXPRESSION (state_q != ErrorSt)
            ----------1---------
-1-StatusTests
0CoveredT110,T172,T183
1CoveredT110,T172,T183

 LINE       324
 EXPRESSION (state_q != ErrorSt)
            ----------1---------
-1-StatusTests
0CoveredT1,T3,T11
1CoveredT1,T3,T11

 LINE       336
 EXPRESSION ((tlul_rvalid_o && (tlul_rerror_o == '0)) ? otp_rdata_i[31:0] : '0)
             --------------------1-------------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T3,T4

 LINE       336
 SUB-EXPRESSION (tlul_rvalid_o && (tlul_rerror_o == '0))
                 ------1------    ----------2----------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT1,T6,T11
11CoveredT1,T3,T4

 LINE       336
 SUB-EXPRESSION (tlul_rerror_o == '0)
                ----------1----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       349
 EXPRESSION ((otp_addr_sel == DigestAddrSel) ? DigestOffset : ({tlul_addr_q, 2'b0}))
             ---------------1---------------
-1-StatusTests
0CoveredT1,T3,T4
1CoveredT1,T2,T3

 LINE       349
 SUB-EXPRESSION (otp_addr_sel == DigestAddrSel)
                ---------------1---------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       358
 EXPRESSION 
 Number  Term
      1  (otp_addr_sel == DigestAddrSel) ? (2'((unsigned'(((otp_ctrl_pkg::ScrmblBlockWidth / otp_ctrl_pkg::OtpWidth) - 1))))) : (2'((unsigned'(((32 / otp_ctrl_pkg::OtpWidth) - 1))))))
-1-StatusTests
0CoveredT1,T3,T4
1CoveredT1,T2,T3

 LINE       358
 SUB-EXPRESSION (otp_addr_sel == DigestAddrSel)
                ---------------1---------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       395
 EXPRESSION (((~init_done_o)) ? MuBi8True : MuBi8False)
             --------1-------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       420
 EXPRESSION ((digest_o != '0) ? MuBi8True : MuBi8False)
             --------1-------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T3,T6

 LINE       420
 SUB-EXPRESSION (digest_o != '0)
                --------1-------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T3,T6

FSM Coverage for Instance : tb.dut.gen_partitions[0].gen_unbuffered.u_part_unbuf
Summary for FSM :: state_q
TotalCoveredPercent
States 7 7 100.00 (Not included in score)
Transitions 13 11 84.62
Sequences 0 0

State, Transition and Sequence Details for FSM :: state_q
statesLine No.CoveredTests
ErrorSt 224 Covered T1,T3,T11
IdleSt 196 Covered T1,T2,T3
InitSt 194 Covered T1,T2,T3
InitWaitSt 207 Covered T1,T2,T3
ReadSt 236 Covered T1,T3,T4
ReadWaitSt 252 Covered T1,T3,T4
ResetSt 190 Covered T1,T2,T3


transitionsLine No.CoveredTestsExclude Annotation
IdleSt->ErrorSt 315 Covered T1,T3,T11
IdleSt->ReadSt 236 Covered T1,T3,T4
InitSt->ErrorSt 315 Covered T239,T240
InitSt->InitWaitSt 207 Covered T1,T2,T3
InitWaitSt->ErrorSt 224 Covered T12,T241,T242
InitWaitSt->IdleSt 218 Covered T1,T2,T3
ReadSt->ErrorSt 315 Not Covered
ReadSt->IdleSt 255 Covered T1,T6,T11
ReadSt->ReadWaitSt 252 Covered T1,T3,T4
ReadWaitSt->ErrorSt 276 Not Covered
ReadWaitSt->IdleSt 270 Covered T1,T3,T4
ResetSt->ErrorSt 315 Covered T109,T110,T111
ResetSt->IdleSt 196 Excluded VC_COV_UNR
ResetSt->InitSt 194 Covered T1,T2,T3


Summary for FSM :: error_q
TotalCoveredPercent
States 4 4 100.00 (Not included in score)
Transitions 7 7 100.00
Sequences 0 0

State, Transition and Sequence Details for FSM :: error_q
statesLine No.CoveredTestsExclude Annotation
AccessError 256 Covered T1,T6,T11
CheckFailError 317 Covered T110,T172,T183
FsmStateError 289 Covered T1,T3,T11
MacroEccCorrError 221 Excluded VC_COV_UNR
NoError 235 Covered T1,T2,T3


transitionsLine No.CoveredTestsExclude Annotation
AccessError->CheckFailError 317 Excluded
AccessError->FsmStateError 325 Covered T1,T7,T8
AccessError->MacroEccCorrError 221 Excluded
AccessError->NoError 235 Covered T6,T11,T97
CheckFailError->AccessError 256 Excluded VC_COV_UNR
CheckFailError->FsmStateError 325 Excluded VC_COV_UNR
CheckFailError->MacroEccCorrError 221 Excluded
CheckFailError->NoError 235 Covered T110,T172,T183
FsmStateError->AccessError 256 Excluded VC_COV_UNR
FsmStateError->CheckFailError 317 Excluded VC_COV_UNR
FsmStateError->MacroEccCorrError 221 Excluded
FsmStateError->NoError 235 Covered T1,T3,T11
MacroEccCorrError->AccessError 256 Excluded
MacroEccCorrError->CheckFailError 317 Excluded
MacroEccCorrError->FsmStateError 325 Excluded
MacroEccCorrError->NoError 235 Excluded
NoError->AccessError 256 Covered T1,T6,T11
NoError->CheckFailError 317 Covered T110,T172,T183
NoError->FsmStateError 289 Covered T3,T11,T12
NoError->MacroEccCorrError 221 Excluded



Branch Coverage for Instance : tb.dut.gen_partitions[0].gen_unbuffered.u_part_unbuf
Line No.TotalCoveredPercent
Branches 41 41 100.00
TERNARY 336 2 2 100.00
TERNARY 349 2 2 100.00
TERNARY 358 2 2 100.00
TERNARY 395 2 2 100.00
TERNARY 420 2 2 100.00
CASE 186 18 18 100.00
IF 314 3 3 100.00
IF 321 3 3 100.00
IF 461 2 2 100.00
IF 464 3 3 100.00
IF 153 2 2 100.00


336 assign tlul_rdata_o = (tlul_rvalid_o && tlul_rerror_o == '0) ? otp_rdata_i[31:0] : '0; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T3,T4
0 Covered T1,T2,T3


349 assign addr_calc = (otp_addr_sel == DigestAddrSel) ? DigestOffset : {tlul_addr_q, 2'b00}; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T1,T3,T4


358 assign otp_size_o = (otp_addr_sel == DigestAddrSel) ? -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T1,T3,T4


395 assign init_locked = (~init_done_o) ? MuBi8True : MuBi8False; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T1,T2,T3


420 assign digest_locked = (digest_o != '0) ? MuBi8True : MuBi8False; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T3,T6
0 Covered T1,T2,T3


186 unique case (state_q) -1- 187 /////////////////////////////////////////////////////////////////// 188 // State right after reset. Wait here until we get a an 189 // initialization request. 190 ResetSt: begin 191 if (init_req_i) begin -2- 192 // If the partition does not have a digest, no initialization is necessary. 193 if (Info.sw_digest) begin -3- 194 state_d = InitSt; ==> 195 end else begin 196 state_d = IdleSt; ==> (Unreachable) 197 end 198 end MISSING_ELSE ==> 199 end 200 /////////////////////////////////////////////////////////////////// 201 // Initialization reads out the digest only in unbuffered 202 // partitions. Wait here until the OTP request has been granted. 203 // And then wait until the OTP word comes back. 204 InitSt: begin 205 otp_req_o = 1'b1; 206 if (otp_gnt_i) begin -4- 207 state_d = InitWaitSt; ==> 208 end MISSING_ELSE ==> (Excluded) Exclude Annotation: VC_COV_UNR 209 end 210 /////////////////////////////////////////////////////////////////// 211 // Wait for OTP response and write to digest buffer register. In 212 // case an OTP transaction fails, latch the OTP error code and 213 // jump to a terminal error state. 214 InitWaitSt: begin 215 if (otp_rvalid_i) begin -5- 216 digest_reg_en = 1'b1; 217 if (otp_err inside {NoError, MacroEccCorrError}) begin -6- 218 state_d = IdleSt; 219 // At this point the only error that we could have gotten are correctable ECC errors. 220 if (otp_err != NoError) begin -7- 221 error_d = MacroEccCorrError; ==> (Excluded) Exclude Annotation: VC_COV_UNR 222 end MISSING_ELSE ==> 223 end else begin 224 state_d = ErrorSt; ==> (Excluded) Exclude Annotation: VC_COV_UNR 225 error_d = otp_err; 226 end 227 end MISSING_ELSE ==> 228 end 229 /////////////////////////////////////////////////////////////////// 230 // Wait for TL-UL requests coming in. 231 // Then latch address and go to readout state. 232 IdleSt: begin 233 init_done_o = 1'b1; 234 if (tlul_req_i) begin -8- 235 error_d = NoError; // clear recoverable soft errors. ==> 236 state_d = ReadSt; 237 tlul_gnt_o = 1'b1; 238 end MISSING_ELSE ==> 239 end 240 /////////////////////////////////////////////////////////////////// 241 // If the address is out of bounds, or if the partition is 242 // locked, signal back a bus error. Note that such an error does 243 // not cause the partition to go into error state. Otherwise if 244 // these checks pass, an OTP word is requested. 245 ReadSt: begin 246 init_done_o = 1'b1; 247 // Double check the address range. 248 if (tlul_addr_in_range && mubi8_test_false_strict(access_o.read_lock)) begin -9- 249 otp_req_o = 1'b1; 250 otp_addr_sel = DataAddrSel; 251 if (otp_gnt_i) begin -10- 252 state_d = ReadWaitSt; ==> 253 end MISSING_ELSE ==> 254 end else begin 255 state_d = IdleSt; ==> 256 error_d = AccessError; // Signal this error, but do not go into terminal error state. 257 tlul_rvalid_o = 1'b1; 258 tlul_rerror_o = 2'b11; // This causes the TL-UL adapter to return a bus error. 259 end 260 end 261 /////////////////////////////////////////////////////////////////// 262 // Wait for OTP response and release the TL-UL response. In 263 // case an OTP transaction fails, latch the OTP error code, 264 // signal a TL-Ul bus error and jump to a terminal error state. 265 ReadWaitSt: begin 266 init_done_o = 1'b1; 267 if (otp_rvalid_i) begin -11- 268 tlul_rvalid_o = 1'b1; 269 if (otp_err inside {NoError, MacroEccCorrError}) begin -12- 270 state_d = IdleSt; 271 // At this point the only error that we could have gotten are correctable ECC errors. 272 if (otp_err != NoError) begin -13- 273 error_d = MacroEccCorrError; ==> (Excluded) Exclude Annotation: VC_COV_UNR 274 end MISSING_ELSE ==> 275 end else begin 276 state_d = ErrorSt; ==> (Excluded) Exclude Annotation: VC_COV_UNR 277 error_d = otp_err; 278 // This causes the TL-UL adapter to return a bus error. 279 tlul_rerror_o = 2'b11; 280 end 281 end MISSING_ELSE ==> 282 end 283 /////////////////////////////////////////////////////////////////// 284 // Terminal Error State. This locks access to the partition. 285 // Make sure the partition signals an error state if no error 286 // code has been latched so far. 287 ErrorSt: begin 288 if (error_q == NoError) begin -14- 289 error_d = FsmStateError; ==> 290 end MISSING_ELSE ==> 291 292 // Return bus errors if there are pending TL-UL requests. 293 if (pending_tlul_error_q) begin -15- 294 tlul_rerror_o = 2'b11; ==> 295 tlul_rvalid_o = 1'b1; 296 end else if (tlul_req_i) begin -16- 297 tlul_gnt_o = 1'b1; ==> 298 pending_tlul_error_d = 1'b1; 299 end MISSING_ELSE ==> 300 end 301 /////////////////////////////////////////////////////////////////// 302 // We should never get here. If we do (e.g. via a malicious 303 // glitch), error out immediately. 304 default: begin 305 state_d = ErrorSt; ==>

Branches:
-1--2--3--4--5--6--7--8--9--10--11--12--13--14--15--16-StatusTestsExclude Annotation
ResetSt 1 1 - - - - - - - - - - - - - Covered T1,T2,T3
ResetSt 1 0 - - - - - - - - - - - - - Unreachable
ResetSt 0 - - - - - - - - - - - - - - Covered T1,T2,T3
InitSt - - 1 - - - - - - - - - - - - Covered T1,T2,T3
InitSt - - 0 - - - - - - - - - - - - Excluded VC_COV_UNR
InitWaitSt - - - 1 1 1 - - - - - - - - - Excluded VC_COV_UNR
InitWaitSt - - - 1 1 0 - - - - - - - - - Covered T1,T2,T3
InitWaitSt - - - 1 0 - - - - - - - - - - Excluded VC_COV_UNR
InitWaitSt - - - 0 - - - - - - - - - - - Covered T1,T2,T3
IdleSt - - - - - - 1 - - - - - - - - Covered T1,T3,T4
IdleSt - - - - - - 0 - - - - - - - - Covered T1,T2,T3
ReadSt - - - - - - - 1 1 - - - - - - Covered T1,T3,T4
ReadSt - - - - - - - 1 0 - - - - - - Covered T95,T96,T125
ReadSt - - - - - - - 0 - - - - - - - Covered T1,T6,T11
ReadWaitSt - - - - - - - - - 1 1 1 - - - Excluded VC_COV_UNR
ReadWaitSt - - - - - - - - - 1 1 0 - - - Covered T1,T3,T4
ReadWaitSt - - - - - - - - - 1 0 - - - - Excluded VC_COV_UNR
ReadWaitSt - - - - - - - - - 0 - - - - - Covered T1,T3,T4
ErrorSt - - - - - - - - - - - - 1 - - Covered T27,T28,T29
ErrorSt - - - - - - - - - - - - 0 - - Covered T1,T3,T11
ErrorSt - - - - - - - - - - - - - 1 - Covered T1,T12,T100
ErrorSt - - - - - - - - - - - - - 0 1 Covered T1,T12,T100
ErrorSt - - - - - - - - - - - - - 0 0 Covered T1,T3,T11
default - - - - - - - - - - - - - - - Covered T27,T28,T29


314 if (ecc_err) begin -1- 315 state_d = ErrorSt; 316 if (state_q != ErrorSt) begin -2- 317 error_d = CheckFailError; ==> 318 end MISSING_ELSE ==> 319 end MISSING_ELSE ==>

Branches:
-1--2-StatusTests
1 1 Covered T110,T172,T183
1 0 Covered T110,T172,T183
0 - Covered T1,T2,T3


321 if (lc_ctrl_pkg::lc_tx_test_true_loose(escalate_en_i)) begin -1- 322 state_d = ErrorSt; 323 fsm_err_o = 1'b1; 324 if (state_q != ErrorSt) begin -2- 325 error_d = FsmStateError; ==> 326 end MISSING_ELSE ==> 327 end MISSING_ELSE ==>

Branches:
-1--2-StatusTests
1 1 Covered T1,T3,T11
1 0 Covered T1,T3,T11
0 - Covered T1,T2,T3


461 `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt) -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T1,T2,T3


464 if (!rst_ni) begin -1- 465 error_q <= NoError; ==> 466 tlul_addr_q <= '0; 467 pending_tlul_error_q <= 1'b0; 468 end else begin 469 error_q <= error_d; 470 pending_tlul_error_q <= pending_tlul_error_d; 471 if (tlul_gnt_o) begin -2- 472 tlul_addr_q <= tlul_addr_d; ==> 473 end MISSING_ELSE ==>

Branches:
-1--2-StatusTests
1 - Covered T1,T2,T3
0 1 Covered T1,T3,T4
0 0 Covered T1,T2,T3


153 if (otp_err_e'(otp_err_i) inside {MacroEccCorrError, MacroEccUncorrError}) begin -1- 154 otp_err = NoError; ==> 155 end else begin 156 otp_err = otp_err_e'(otp_err_i); ==>

Branches:
-1-StatusTests
1 Covered T3,T99,T100
0 Covered T1,T2,T3


Assert Coverage for Instance : tb.dut.gen_partitions[0].gen_unbuffered.u_part_unbuf
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 26 26 100.00 25 96.15
Cover properties 0 0 0
Cover sequences 0 0 0
Total 26 26 100.00 25 96.15




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
AccessKnown_A 472167808 471284346 0 0
DigestKnown_A 472167808 471284346 0 0
DigestOffsetMustBeRepresentable_A 1143 1143 0 0
EccErrorState_A 472167808 18357 0 0
ErrorKnown_A 472167808 471284346 0 0
FsmStateKnown_A 472167808 471284346 0 0
InitDoneKnown_A 472167808 471284346 0 0
InitReadLocksPartition_A 472167808 89277773 0 0
InitWriteLocksPartition_A 472167808 89277773 0 0
OffsetMustBeBlockAligned_A 1143 1143 0 0
OtpAddrKnown_A 472167808 471284346 0 0
OtpCmdKnown_A 472167808 471284346 0 0
OtpErrorState_A 472167808 0 0 0
OtpReqKnown_A 472167808 471284346 0 0
OtpSizeKnown_A 472167808 471284346 0 0
OtpWdataKnown_A 472167808 471284346 0 0
ReadLockPropagation_A 472167808 186508815 0 0
SizeMustBeBlockAligned_A 1143 1143 0 0
TlulGntKnown_A 472167808 471284346 0 0
TlulRdataKnown_A 472167808 471284346 0 0
TlulReadOnReadLock_A 472167808 7629 0 0
TlulRerrorKnown_A 472167808 471284346 0 0
TlulRvalidKnown_A 472167808 471284346 0 0
WriteLockPropagation_A 472167808 4422316 0 0
gen_digest_write_lock.DigestWriteLocksPartition_A 472167808 59984967 0 0
u_state_regs_A 472167808 471284346 0 0


AccessKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

DigestKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

DigestOffsetMustBeRepresentable_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1143 1143 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T5 1 1 0 0
T6 1 1 0 0
T10 1 1 0 0
T11 1 1 0 0
T12 1 1 0 0
T13 1 1 0 0

EccErrorState_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 18357 0 0
T110 15060 2938 0 0
T172 0 2246 0 0
T179 84555 0 0 0
T183 0 3191 0 0
T202 0 2286 0 0
T204 0 2238 0 0
T205 0 2836 0 0
T206 0 2622 0 0
T216 62700 0 0 0
T217 10326 0 0 0
T218 27771 0 0 0
T219 67427 0 0 0
T220 110371 0 0 0
T221 105468 0 0 0
T222 34436 0 0 0
T223 19692 0 0 0

ErrorKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

FsmStateKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

InitDoneKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

InitReadLocksPartition_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 89277773 0 0
T1 22574 6864 0 0
T2 4421 53 0 0
T3 8781 3030 0 0
T4 44585 438 0 0
T5 27055 2567 0 0
T6 24416 3536 0 0
T10 5255 175 0 0
T11 41583 1790 0 0
T12 28247 13326 0 0
T13 70439 57 0 0

InitWriteLocksPartition_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 89277773 0 0
T1 22574 6864 0 0
T2 4421 53 0 0
T3 8781 3030 0 0
T4 44585 438 0 0
T5 27055 2567 0 0
T6 24416 3536 0 0
T10 5255 175 0 0
T11 41583 1790 0 0
T12 28247 13326 0 0
T13 70439 57 0 0

OffsetMustBeBlockAligned_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1143 1143 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T5 1 1 0 0
T6 1 1 0 0
T10 1 1 0 0
T11 1 1 0 0
T12 1 1 0 0
T13 1 1 0 0

OtpAddrKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

OtpCmdKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

OtpErrorState_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 0 0 0

OtpReqKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

OtpSizeKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

OtpWdataKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

ReadLockPropagation_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 186508815 0 0
T1 22574 5520 0 0
T2 4421 0 0 0
T3 8781 0 0 0
T4 44585 0 0 0
T5 27055 0 0 0
T6 24416 1368 0 0
T7 0 15108 0 0
T10 5255 0 0 0
T11 41583 7510 0 0
T12 28247 0 0 0
T13 70439 0 0 0
T18 0 5373 0 0
T94 0 1341 0 0
T95 0 1636 0 0
T97 0 6905 0 0
T99 0 260 0 0
T133 0 604 0 0

SizeMustBeBlockAligned_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1143 1143 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T5 1 1 0 0
T6 1 1 0 0
T10 1 1 0 0
T11 1 1 0 0
T12 1 1 0 0
T13 1 1 0 0

TlulGntKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

TlulRdataKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

TlulReadOnReadLock_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 7629 0 0
T1 22574 16 0 0
T2 4421 0 0 0
T3 8781 0 0 0
T4 44585 0 0 0
T5 27055 0 0 0
T6 24416 1 0 0
T7 0 18 0 0
T10 5255 0 0 0
T11 41583 4 0 0
T12 28247 15 0 0
T13 70439 0 0 0
T18 0 2 0 0
T94 0 1 0 0
T97 0 9 0 0
T100 0 5 0 0
T132 0 1 0 0

TlulRerrorKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

TlulRvalidKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

WriteLockPropagation_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 4422316 0 0
T11 41583 6061 0 0
T12 28247 0 0 0
T13 70439 0 0 0
T18 0 4385 0 0
T40 12502 0 0 0
T51 0 10842 0 0
T94 0 4927 0 0
T96 0 815 0 0
T97 0 15891 0 0
T99 50908 0 0 0
T100 34173 0 0 0
T103 26933 0 0 0
T125 0 4859 0 0
T126 0 516 0 0
T127 0 2727 0 0
T130 0 5544 0 0
T131 44250 0 0 0
T132 15905 0 0 0
T133 24744 0 0 0

gen_digest_write_lock.DigestWriteLocksPartition_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 59984967 0 0
T1 22574 11494 0 0
T2 4421 0 0 0
T3 8781 2269 0 0
T4 44585 0 0 0
T5 27055 0 0 0
T6 24416 12263 0 0
T10 5255 0 0 0
T11 41583 28656 0 0
T12 28247 4613 0 0
T13 70439 0 0 0
T18 0 21071 0 0
T94 0 46477 0 0
T95 0 36520 0 0
T97 0 68974 0 0
T103 0 11453 0 0

u_state_regs_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

Line Coverage for Instance : tb.dut.gen_partitions[1].gen_unbuffered.u_part_unbuf
Line No.TotalCoveredPercent
TOTAL9191100.00
CONT_ASSIGN13811100.00
CONT_ASSIGN14911100.00
ALWAYS1646868100.00
CONT_ASSIGN33411100.00
CONT_ASSIGN33611100.00
CONT_ASSIGN34211100.00
CONT_ASSIGN34911100.00
CONT_ASSIGN35011100.00
CONT_ASSIGN35411100.00
CONT_ASSIGN35811100.00
CONT_ASSIGN39511100.00
CONT_ASSIGN42011100.00
CONT_ASSIGN45411100.00
ALWAYS46133100.00
ALWAYS46488100.00

137 // Output partition error state. 138 1/1 assign error_o = error_q; Tests: T1 T2 T3  139 140 // This partition cannot do any write accesses, hence we tie this 141 // constantly off. 142 assign otp_wdata_o = '0; 143 // Depending on the partition configuration, the wrapper is instructed to ignore integrity 144 // calculations and checks. To be on the safe side, the partition filters error responses at this 145 // point and does not report any integrity errors if integrity is disabled. 146 otp_err_e otp_err; 147 if (Info.integrity) begin : gen_integrity 148 assign otp_cmd_o = prim_otp_pkg::Read; 149 1/1 assign otp_err = otp_err_e'(otp_err_i); Tests: T1 T2 T3  150 end else begin : gen_no_integrity 151 assign otp_cmd_o = prim_otp_pkg::ReadRaw; 152 always_comb begin 153 if (otp_err_e'(otp_err_i) inside {MacroEccCorrError, MacroEccUncorrError}) begin 154 otp_err = NoError; 155 end else begin 156 otp_err = otp_err_e'(otp_err_i); 157 end 158 end 159 end 160 161 `ASSERT_KNOWN(FsmStateKnown_A, state_q) 162 always_comb begin : p_fsm 163 // Default assignments 164 1/1 state_d = state_q; Tests: T1 T2 T3  165 166 // Response to init request 167 1/1 init_done_o = 1'b0; Tests: T1 T2 T3  168 169 // OTP signals 170 1/1 otp_req_o = 1'b0; Tests: T1 T2 T3  171 1/1 otp_addr_sel = DigestAddrSel; Tests: T1 T2 T3  172 173 // TL-UL signals 174 1/1 tlul_gnt_o = 1'b0; Tests: T1 T2 T3  175 1/1 tlul_rvalid_o = 1'b0; Tests: T1 T2 T3  176 1/1 tlul_rerror_o = '0; Tests: T1 T2 T3  177 178 // Enable for buffered digest register 179 1/1 digest_reg_en = 1'b0; Tests: T1 T2 T3  180 181 // Error Register 182 1/1 error_d = error_q; Tests: T1 T2 T3  183 1/1 pending_tlul_error_d = 1'b0; Tests: T1 T2 T3  184 1/1 fsm_err_o = 1'b0; Tests: T1 T2 T3  185 186 1/1 unique case (state_q) Tests: T1 T2 T3  187 /////////////////////////////////////////////////////////////////// 188 // State right after reset. Wait here until we get a an 189 // initialization request. 190 ResetSt: begin 191 1/1 if (init_req_i) begin Tests: T1 T2 T3  192 // If the partition does not have a digest, no initialization is necessary. 193 1/1 if (Info.sw_digest) begin Tests: T1 T2 T3  194 1/1 state_d = InitSt; Tests: T1 T2 T3  195 end else begin 196 unreachable state_d = IdleSt; 197 end 198 end MISSING_ELSE 199 end 200 /////////////////////////////////////////////////////////////////// 201 // Initialization reads out the digest only in unbuffered 202 // partitions. Wait here until the OTP request has been granted. 203 // And then wait until the OTP word comes back. 204 InitSt: begin 205 1/1 otp_req_o = 1'b1; Tests: T1 T2 T3  206 1/1 if (otp_gnt_i) begin Tests: T1 T2 T3  207 1/1 state_d = InitWaitSt; Tests: T1 T2 T3  208 end MISSING_ELSE 209 end 210 /////////////////////////////////////////////////////////////////// 211 // Wait for OTP response and write to digest buffer register. In 212 // case an OTP transaction fails, latch the OTP error code and 213 // jump to a terminal error state. 214 InitWaitSt: begin 215 1/1 if (otp_rvalid_i) begin Tests: T1 T2 T3  216 1/1 digest_reg_en = 1'b1; Tests: T1 T2 T3  217 1/1 if (otp_err inside {NoError, MacroEccCorrError}) begin Tests: T1 T2 T3  218 1/1 state_d = IdleSt; Tests: T1 T2 T3  219 // At this point the only error that we could have gotten are correctable ECC errors. 220 1/1 if (otp_err != NoError) begin Tests: T1 T2 T3  221 1/1 error_d = MacroEccCorrError; Tests: T102 T45 T184  222 end MISSING_ELSE 223 end else begin 224 1/1 state_d = ErrorSt; Tests: T185 T186 T187  225 1/1 error_d = otp_err; Tests: T185 T186 T187  226 end 227 end MISSING_ELSE 228 end 229 /////////////////////////////////////////////////////////////////// 230 // Wait for TL-UL requests coming in. 231 // Then latch address and go to readout state. 232 IdleSt: begin 233 1/1 init_done_o = 1'b1; Tests: T1 T2 T3  234 1/1 if (tlul_req_i) begin Tests: T1 T2 T3  235 1/1 error_d = NoError; // clear recoverable soft errors. Tests: T1 T3 T4  236 1/1 state_d = ReadSt; Tests: T1 T3 T4  237 1/1 tlul_gnt_o = 1'b1; Tests: T1 T3 T4  238 end MISSING_ELSE 239 end 240 /////////////////////////////////////////////////////////////////// 241 // If the address is out of bounds, or if the partition is 242 // locked, signal back a bus error. Note that such an error does 243 // not cause the partition to go into error state. Otherwise if 244 // these checks pass, an OTP word is requested. 245 ReadSt: begin 246 1/1 init_done_o = 1'b1; Tests: T1 T3 T4  247 // Double check the address range. 248 1/1 if (tlul_addr_in_range && mubi8_test_false_strict(access_o.read_lock)) begin Tests: T1 T3 T4  249 1/1 otp_req_o = 1'b1; Tests: T1 T3 T4  250 1/1 otp_addr_sel = DataAddrSel; Tests: T1 T3 T4  251 1/1 if (otp_gnt_i) begin Tests: T1 T3 T4  252 1/1 state_d = ReadWaitSt; Tests: T1 T3 T4  253 end MISSING_ELSE 254 end else begin 255 1/1 state_d = IdleSt; Tests: T1 T6 T11  256 1/1 error_d = AccessError; // Signal this error, but do not go into terminal error state. Tests: T1 T6 T11  257 1/1 tlul_rvalid_o = 1'b1; Tests: T1 T6 T11  258 1/1 tlul_rerror_o = 2'b11; // This causes the TL-UL adapter to return a bus error. Tests: T1 T6 T11  259 end 260 end 261 /////////////////////////////////////////////////////////////////// 262 // Wait for OTP response and release the TL-UL response. In 263 // case an OTP transaction fails, latch the OTP error code, 264 // signal a TL-Ul bus error and jump to a terminal error state. 265 ReadWaitSt: begin 266 1/1 init_done_o = 1'b1; Tests: T1 T3 T4  267 1/1 if (otp_rvalid_i) begin Tests: T1 T3 T4  268 1/1 tlul_rvalid_o = 1'b1; Tests: T1 T3 T4  269 1/1 if (otp_err inside {NoError, MacroEccCorrError}) begin Tests: T1 T3 T4  270 1/1 state_d = IdleSt; Tests: T1 T3 T4  271 // At this point the only error that we could have gotten are correctable ECC errors. 272 1/1 if (otp_err != NoError) begin Tests: T1 T3 T4  273 1/1 error_d = MacroEccCorrError; Tests: T97 T177 T188  274 end MISSING_ELSE 275 end else begin 276 1/1 state_d = ErrorSt; Tests: T189 T178 T190  277 1/1 error_d = otp_err; Tests: T189 T178 T190  278 // This causes the TL-UL adapter to return a bus error. 279 1/1 tlul_rerror_o = 2'b11; Tests: T189 T178 T190  280 end 281 end MISSING_ELSE 282 end 283 /////////////////////////////////////////////////////////////////// 284 // Terminal Error State. This locks access to the partition. 285 // Make sure the partition signals an error state if no error 286 // code has been latched so far. 287 ErrorSt: begin 288 1/1 if (error_q == NoError) begin Tests: T1 T3 T11  289 1/1 error_d = FsmStateError; Tests: T27 T28 T29  290 end MISSING_ELSE 291 292 // Return bus errors if there are pending TL-UL requests. 293 1/1 if (pending_tlul_error_q) begin Tests: T1 T3 T11  294 1/1 tlul_rerror_o = 2'b11; Tests: T1 T12 T100  295 1/1 tlul_rvalid_o = 1'b1; Tests: T1 T12 T100  296 1/1 end else if (tlul_req_i) begin Tests: T1 T3 T11  297 1/1 tlul_gnt_o = 1'b1; Tests: T1 T12 T100  298 1/1 pending_tlul_error_d = 1'b1; Tests: T1 T12 T100  299 end MISSING_ELSE 300 end 301 /////////////////////////////////////////////////////////////////// 302 // We should never get here. If we do (e.g. via a malicious 303 // glitch), error out immediately. 304 default: begin 305 state_d = ErrorSt; 306 fsm_err_o = 1'b1; 307 end 308 /////////////////////////////////////////////////////////////////// 309 endcase // state_q 310 311 // Unconditionally jump into the terminal error state in case of 312 // an ECC error or escalation, and lock access to the partition down. 313 // SEC_CM: PART.FSM.LOCAL_ESC 314 1/1 if (ecc_err) begin Tests: T1 T2 T3  315 1/1 state_d = ErrorSt; Tests: T109 T110 T191  316 1/1 if (state_q != ErrorSt) begin Tests: T109 T110 T191  317 1/1 error_d = CheckFailError; Tests: T109 T110 T191  318 end MISSING_ELSE 319 end MISSING_ELSE 320 // SEC_CM: PART.FSM.GLOBAL_ESC 321 1/1 if (lc_ctrl_pkg::lc_tx_test_true_loose(escalate_en_i)) begin Tests: T1 T2 T3  322 1/1 state_d = ErrorSt; Tests: T1 T3 T11  323 1/1 fsm_err_o = 1'b1; Tests: T1 T3 T11  324 1/1 if (state_q != ErrorSt) begin Tests: T1 T3 T11  325 1/1 error_d = FsmStateError; Tests: T1 T3 T11  326 end MISSING_ELSE 327 end MISSING_ELSE 328 end 329 330 /////////////////////////////////// 331 // Signals to/from TL-UL Adapter // 332 /////////////////////////////////// 333 334 1/1 assign tlul_addr_d = tlul_addr_i; Tests: T1 T2 T3  335 // Do not forward data in case of an error. 336 1/1 assign tlul_rdata_o = (tlul_rvalid_o && tlul_rerror_o == '0) ? otp_rdata_i[31:0] : '0; Tests: T1 T2 T3  337 338 if (Info.offset == 0) begin : gen_zero_offset 339 assign tlul_addr_in_range = {1'b0, tlul_addr_q, 2'b00} < PartEnd; 340 341 end else begin : gen_nonzero_offset 342 1/1 assign tlul_addr_in_range = {tlul_addr_q, 2'b00} >= Info.offset && Tests: T1 T2 T3  343 {1'b0, tlul_addr_q, 2'b00} < PartEnd; 344 end 345 346 // Note that OTP works on halfword (16bit) addresses, hence need to 347 // shift the addresses appropriately. 348 logic [OtpByteAddrWidth-1:0] addr_calc; 349 1/1 assign addr_calc = (otp_addr_sel == DigestAddrSel) ? DigestOffset : {tlul_addr_q, 2'b00}; Tests: T1 T2 T3  350 1/1 assign otp_addr_o = addr_calc[OtpByteAddrWidth-1:OtpAddrShift]; Tests: T1 T2 T3  351 352 if (OtpAddrShift > 0) begin : gen_unused 353 logic unused_bits; 354 1/1 assign unused_bits = ^addr_calc[OtpAddrShift-1:0]; Tests: T1 T2 T3  355 end 356 357 // Request 32bit except in case of the digest. 358 1/1 assign otp_size_o = (otp_addr_sel == DigestAddrSel) ? Tests: T1 T2 T3  359 OtpSizeWidth'(unsigned'(ScrmblBlockWidth / OtpWidth - 1)) : 360 OtpSizeWidth'(unsigned'(32 / OtpWidth - 1)); 361 362 //////////////// 363 // Digest Reg // 364 //////////////// 365 366 if (Info.sw_digest) begin : gen_ecc_reg 367 // SEC_CM: PART.DATA_REG.INTEGRITY 368 otp_ctrl_ecc_reg #( 369 .Width ( ScrmblBlockWidth ), 370 .Depth ( 1 ) 371 ) u_otp_ctrl_ecc_reg ( 372 .clk_i, 373 .rst_ni, 374 .wren_i ( digest_reg_en ), 375 .addr_i ( '0 ), 376 .wdata_i ( otp_rdata_i ), 377 .rdata_o ( ), 378 .data_o ( digest_o ), 379 .ecc_err_o ( ecc_err ) 380 ); 381 end else begin : gen_no_ecc_reg 382 logic unused_digest_reg_en; 383 logic unused_rdata; 384 assign unused_digest_reg_en = digest_reg_en; 385 assign unused_rdata = ^otp_rdata_i[32 +: 32]; // Upper word is not connected in this case. 386 assign digest_o = '0; 387 assign ecc_err = 1'b0; 388 end 389 390 //////////////////////// 391 // DAI Access Control // 392 //////////////////////// 393 394 mubi8_t init_locked; 395 1/1 assign init_locked = (~init_done_o) ? MuBi8True : MuBi8False; Tests: T1 T2 T3  396 397 // Aggregate all possible DAI write locks. The partition is also locked when uninitialized. 398 // Note that the locks are redundantly encoded values. 399 part_access_t access_pre; 400 prim_mubi8_sender #( 401 .AsyncOn(0) 402 ) u_prim_mubi8_sender_write_lock_pre ( 403 .clk_i, 404 .rst_ni, 405 .mubi_i(mubi8_and_lo(init_locked, access_i.write_lock)), 406 .mubi_o(access_pre.write_lock) 407 ); 408 prim_mubi8_sender #( 409 .AsyncOn(0) 410 ) u_prim_mubi8_sender_read_lock_pre ( 411 .clk_i, 412 .rst_ni, 413 .mubi_i(mubi8_and_lo(init_locked, access_i.read_lock)), 414 .mubi_o(access_pre.read_lock) 415 ); 416 417 // SEC_CM: PART.MEM.SW_UNWRITABLE 418 if (Info.write_lock) begin : gen_digest_write_lock 419 mubi8_t digest_locked; 420 1/1 assign digest_locked = (digest_o != '0) ? MuBi8True : MuBi8False; Tests: T1 T2 T3  421 422 // This prevents the synthesis tool from optimizing the multibit signal. 423 prim_mubi8_sender #( 424 .AsyncOn(0) 425 ) u_prim_mubi8_sender_write_lock ( 426 .clk_i, 427 .rst_ni, 428 .mubi_i(mubi8_and_lo(access_pre.write_lock, digest_locked)), 429 .mubi_o(access_o.write_lock) 430 ); 431 432 `ASSERT(DigestWriteLocksPartition_A, digest_o |-> mubi8_test_true_loose(access_o.write_lock)) 433 end else begin : gen_no_digest_write_lock 434 assign access_o.write_lock = access_pre.write_lock; 435 end 436 437 // SEC_CM: PART.MEM.SW_UNREADABLE 438 if (Info.read_lock) begin : gen_digest_read_lock 439 mubi8_t digest_locked; 440 assign digest_locked = (digest_o != '0) ? MuBi8True : MuBi8False; 441 442 // This prevents the synthesis tool from optimizing the multibit signal. 443 prim_mubi8_sender #( 444 .AsyncOn(0) 445 ) u_prim_mubi8_sender_read_lock ( 446 .clk_i, 447 .rst_ni, 448 .mubi_i(mubi8_and_lo(access_pre.read_lock, digest_locked)), 449 .mubi_o(access_o.read_lock) 450 ); 451 452 `ASSERT(DigestReadLocksPartition_A, digest_o |-> mubi8_test_true_loose(access_o.read_lock)) 453 end else begin : gen_no_digest_read_lock 454 1/1 assign access_o.read_lock = access_pre.read_lock; Tests: T1 T2 T3  455 end 456 457 /////////////// 458 // Registers // 459 /////////////// 460 461 3/3 `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt) Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3 
PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt): 461.1 `ifdef SIMULATION 461.2 prim_sparse_fsm_flop #( 461.3 .StateEnumT(state_e), 461.4 .Width($bits(state_e)), 461.5 .ResetValue($bits(state_e)'(ResetSt)), 461.6 .EnableAlertTriggerSVA(1), 461.7 .CustomForceName("state_q") 461.8 ) u_state_regs ( 461.9 .clk_i ( clk_i ), 461.10 .rst_ni ( rst_ni ), 461.11 .state_i ( state_d ), 461.12 .state_o ( ) 461.13 ); 461.14 always_ff @(posedge clk_i or negedge rst_ni) begin 461.15 1/1 if (!rst_ni) begin Tests: T1 T2 T3  461.16 1/1 state_q <= ResetSt; Tests: T1 T2 T3  461.17 end else begin 461.18 1/1 state_q <= state_d; Tests: T1 T2 T3  461.19 end 461.20 end 461.21 u_state_regs_A: assert property (@(posedge clk_i) disable iff ((!rst_ni) !== '0) (state_q === u_state_regs.state_o)) 461.22 else begin 461.23 `ifdef UVM 461.24 uvm_pkg::uvm_report_error("ASSERT FAILED", "u_state_regs_A", uvm_pkg::UVM_NONE, 461.25 "../src/lowrisc_ip_otp_ctrl_1.0/rtl/otp_ctrl_part_unbuf.sv", 461, "", 1); 461.26 `else 461.27 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 461.28 `PRIM_STRINGIFY(u_state_regs_A)); 461.29 `endif 461.30 end 461.31 `else 461.32 prim_sparse_fsm_flop #( 461.33 .StateEnumT(state_e), 461.34 .Width($bits(state_e)), 461.35 .ResetValue($bits(state_e)'(ResetSt)), 461.36 .EnableAlertTriggerSVA(1) 461.37 ) u_state_regs ( 461.38 .clk_i ( `PRIM_FLOP_CLK ), 461.39 .rst_ni ( `PRIM_FLOP_RST ), 461.40 .state_i ( state_d ), 461.41 .state_o ( state_q ) 461.42 ); 461.43 `endif462 463 always_ff @(posedge clk_i or negedge rst_ni) begin : p_regs 464 1/1 if (!rst_ni) begin Tests: T1 T2 T3  465 1/1 error_q <= NoError; Tests: T1 T2 T3  466 1/1 tlul_addr_q <= '0; Tests: T1 T2 T3  467 1/1 pending_tlul_error_q <= 1'b0; Tests: T1 T2 T3  468 end else begin 469 1/1 error_q <= error_d; Tests: T1 T2 T3  470 1/1 pending_tlul_error_q <= pending_tlul_error_d; Tests: T1 T2 T3  471 1/1 if (tlul_gnt_o) begin Tests: T1 T2 T3  472 1/1 tlul_addr_q <= tlul_addr_d; Tests: T1 T3 T4  473 end MISSING_ELSE

Cond Coverage for Instance : tb.dut.gen_partitions[1].gen_unbuffered.u_part_unbuf
TotalCoveredPercent
Conditions3333100.00
Logical3333100.00
Non-Logical00
Event00

 LINE       220
 EXPRESSION (otp_err != NoError)
            ----------1---------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT102,T45,T184

 LINE       272
 EXPRESSION (otp_err != NoError)
            ----------1---------
-1-StatusTests
0CoveredT1,T3,T4
1CoveredT97,T177,T188

 LINE       288
 EXPRESSION (error_q == NoError)
            ----------1---------
-1-StatusTests
0CoveredT1,T3,T11
1CoveredT27,T28,T29

 LINE       316
 EXPRESSION (state_q != ErrorSt)
            ----------1---------
-1-StatusTests
0CoveredT109,T110,T191
1CoveredT109,T110,T191

 LINE       324
 EXPRESSION (state_q != ErrorSt)
            ----------1---------
-1-StatusTests
0CoveredT1,T3,T11
1CoveredT1,T3,T11

 LINE       336
 EXPRESSION ((tlul_rvalid_o && (tlul_rerror_o == '0)) ? otp_rdata_i[31:0] : '0)
             --------------------1-------------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T3,T4

 LINE       336
 SUB-EXPRESSION (tlul_rvalid_o && (tlul_rerror_o == '0))
                 ------1------    ----------2----------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT1,T6,T11
11CoveredT1,T3,T4

 LINE       336
 SUB-EXPRESSION (tlul_rerror_o == '0)
                ----------1----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       342
 EXPRESSION (({tlul_addr_q, 2'b0} >= 11'b00001000000) && ({1'b0, tlul_addr_q, 2'b0} < PartEnd))
             --------------------1-------------------    ------------------2------------------
-1--2-StatusTestsExclude Annotation
01CoveredT1,T2,T3
10Excluded VC_COV_UNR
11CoveredT1,T3,T4

 LINE       349
 EXPRESSION ((otp_addr_sel == DigestAddrSel) ? DigestOffset : ({tlul_addr_q, 2'b0}))
             ---------------1---------------
-1-StatusTests
0CoveredT1,T3,T4
1CoveredT1,T2,T3

 LINE       349
 SUB-EXPRESSION (otp_addr_sel == DigestAddrSel)
                ---------------1---------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       358
 EXPRESSION 
 Number  Term
      1  (otp_addr_sel == DigestAddrSel) ? (2'((unsigned'(((otp_ctrl_pkg::ScrmblBlockWidth / otp_ctrl_pkg::OtpWidth) - 1))))) : (2'((unsigned'(((32 / otp_ctrl_pkg::OtpWidth) - 1))))))
-1-StatusTests
0CoveredT1,T3,T4
1CoveredT1,T2,T3

 LINE       358
 SUB-EXPRESSION (otp_addr_sel == DigestAddrSel)
                ---------------1---------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       395
 EXPRESSION (((~init_done_o)) ? MuBi8True : MuBi8False)
             --------1-------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       420
 EXPRESSION ((digest_o != '0) ? MuBi8True : MuBi8False)
             --------1-------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T6,T11

 LINE       420
 SUB-EXPRESSION (digest_o != '0)
                --------1-------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T6,T11

FSM Coverage for Instance : tb.dut.gen_partitions[1].gen_unbuffered.u_part_unbuf
Summary for FSM :: state_q
TotalCoveredPercent
States 7 7 100.00 (Not included in score)
Transitions 13 12 92.31
Sequences 0 0

State, Transition and Sequence Details for FSM :: state_q
statesLine No.CoveredTests
ErrorSt 224 Covered T1,T3,T11
IdleSt 196 Covered T1,T2,T3
InitSt 194 Covered T1,T2,T3
InitWaitSt 207 Covered T1,T2,T3
ReadSt 236 Covered T1,T3,T4
ReadWaitSt 252 Covered T1,T3,T4
ResetSt 190 Covered T1,T2,T3


transitionsLine No.CoveredTestsExclude Annotation
IdleSt->ErrorSt 315 Covered T1,T3,T11
IdleSt->ReadSt 236 Covered T1,T3,T4
InitSt->ErrorSt 315 Covered T12,T239,T241
InitSt->InitWaitSt 207 Covered T1,T2,T3
InitWaitSt->ErrorSt 224 Covered T185,T186,T187
InitWaitSt->IdleSt 218 Covered T1,T2,T3
ReadSt->ErrorSt 315 Not Covered
ReadSt->IdleSt 255 Covered T1,T6,T11
ReadSt->ReadWaitSt 252 Covered T1,T3,T4
ReadWaitSt->ErrorSt 276 Covered T189,T178,T190
ReadWaitSt->IdleSt 270 Covered T1,T3,T4
ResetSt->ErrorSt 315 Covered T109,T110,T111
ResetSt->IdleSt 196 Excluded VC_COV_UNR
ResetSt->InitSt 194 Covered T1,T2,T3


Summary for FSM :: error_q
TotalCoveredPercent
States 5 5 100.00 (Not included in score)
Transitions 11 10 90.91
Sequences 0 0

State, Transition and Sequence Details for FSM :: error_q
statesLine No.CoveredTests
AccessError 256 Covered T1,T6,T11
CheckFailError 317 Covered T109,T110,T191
FsmStateError 289 Covered T1,T3,T11
MacroEccCorrError 221 Covered T97,T177,T102
NoError 235 Covered T1,T2,T3


transitionsLine No.CoveredTestsExclude Annotation
AccessError->CheckFailError 317 Excluded VC_COV_UNR
AccessError->FsmStateError 325 Covered T1,T7,T8
AccessError->MacroEccCorrError 221 Excluded VC_COV_UNR
AccessError->NoError 235 Covered T1,T6,T11
CheckFailError->AccessError 256 Excluded VC_COV_UNR
CheckFailError->FsmStateError 325 Excluded VC_COV_UNR
CheckFailError->MacroEccCorrError 221 Excluded VC_COV_UNR
CheckFailError->NoError 235 Covered T109,T110,T191
FsmStateError->AccessError 256 Excluded VC_COV_UNR
FsmStateError->CheckFailError 317 Excluded VC_COV_UNR
FsmStateError->MacroEccCorrError 221 Excluded VC_COV_UNR
FsmStateError->NoError 235 Covered T1,T3,T11
MacroEccCorrError->AccessError 256 Excluded VC_COV_UNR
MacroEccCorrError->CheckFailError 317 Not Covered
MacroEccCorrError->FsmStateError 325 Covered T177,T102,T188
MacroEccCorrError->NoError 235 Covered T97,T84,T195
NoError->AccessError 256 Covered T1,T6,T11
NoError->CheckFailError 317 Covered T109,T110,T191
NoError->FsmStateError 289 Covered T3,T11,T12
NoError->MacroEccCorrError 221 Covered T97,T177,T102



Branch Coverage for Instance : tb.dut.gen_partitions[1].gen_unbuffered.u_part_unbuf
Line No.TotalCoveredPercent
Branches 44 44 100.00
TERNARY 336 2 2 100.00
TERNARY 349 2 2 100.00
TERNARY 358 2 2 100.00
TERNARY 395 2 2 100.00
TERNARY 420 2 2 100.00
CASE 186 23 23 100.00
IF 314 3 3 100.00
IF 321 3 3 100.00
IF 461 2 2 100.00
IF 464 3 3 100.00


336 assign tlul_rdata_o = (tlul_rvalid_o && tlul_rerror_o == '0) ? otp_rdata_i[31:0] : '0; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T3,T4
0 Covered T1,T2,T3


349 assign addr_calc = (otp_addr_sel == DigestAddrSel) ? DigestOffset : {tlul_addr_q, 2'b00}; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T1,T3,T4


358 assign otp_size_o = (otp_addr_sel == DigestAddrSel) ? -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T1,T3,T4


395 assign init_locked = (~init_done_o) ? MuBi8True : MuBi8False; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T1,T2,T3


420 assign digest_locked = (digest_o != '0) ? MuBi8True : MuBi8False; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T6,T11
0 Covered T1,T2,T3


186 unique case (state_q) -1- 187 /////////////////////////////////////////////////////////////////// 188 // State right after reset. Wait here until we get a an 189 // initialization request. 190 ResetSt: begin 191 if (init_req_i) begin -2- 192 // If the partition does not have a digest, no initialization is necessary. 193 if (Info.sw_digest) begin -3- 194 state_d = InitSt; ==> 195 end else begin 196 state_d = IdleSt; ==> (Unreachable) 197 end 198 end MISSING_ELSE ==> 199 end 200 /////////////////////////////////////////////////////////////////// 201 // Initialization reads out the digest only in unbuffered 202 // partitions. Wait here until the OTP request has been granted. 203 // And then wait until the OTP word comes back. 204 InitSt: begin 205 otp_req_o = 1'b1; 206 if (otp_gnt_i) begin -4- 207 state_d = InitWaitSt; ==> 208 end MISSING_ELSE ==> 209 end 210 /////////////////////////////////////////////////////////////////// 211 // Wait for OTP response and write to digest buffer register. In 212 // case an OTP transaction fails, latch the OTP error code and 213 // jump to a terminal error state. 214 InitWaitSt: begin 215 if (otp_rvalid_i) begin -5- 216 digest_reg_en = 1'b1; 217 if (otp_err inside {NoError, MacroEccCorrError}) begin -6- 218 state_d = IdleSt; 219 // At this point the only error that we could have gotten are correctable ECC errors. 220 if (otp_err != NoError) begin -7- 221 error_d = MacroEccCorrError; ==> 222 end MISSING_ELSE ==> 223 end else begin 224 state_d = ErrorSt; ==> 225 error_d = otp_err; 226 end 227 end MISSING_ELSE ==> 228 end 229 /////////////////////////////////////////////////////////////////// 230 // Wait for TL-UL requests coming in. 231 // Then latch address and go to readout state. 232 IdleSt: begin 233 init_done_o = 1'b1; 234 if (tlul_req_i) begin -8- 235 error_d = NoError; // clear recoverable soft errors. ==> 236 state_d = ReadSt; 237 tlul_gnt_o = 1'b1; 238 end MISSING_ELSE ==> 239 end 240 /////////////////////////////////////////////////////////////////// 241 // If the address is out of bounds, or if the partition is 242 // locked, signal back a bus error. Note that such an error does 243 // not cause the partition to go into error state. Otherwise if 244 // these checks pass, an OTP word is requested. 245 ReadSt: begin 246 init_done_o = 1'b1; 247 // Double check the address range. 248 if (tlul_addr_in_range && mubi8_test_false_strict(access_o.read_lock)) begin -9- 249 otp_req_o = 1'b1; 250 otp_addr_sel = DataAddrSel; 251 if (otp_gnt_i) begin -10- 252 state_d = ReadWaitSt; ==> 253 end MISSING_ELSE ==> 254 end else begin 255 state_d = IdleSt; ==> 256 error_d = AccessError; // Signal this error, but do not go into terminal error state. 257 tlul_rvalid_o = 1'b1; 258 tlul_rerror_o = 2'b11; // This causes the TL-UL adapter to return a bus error. 259 end 260 end 261 /////////////////////////////////////////////////////////////////// 262 // Wait for OTP response and release the TL-UL response. In 263 // case an OTP transaction fails, latch the OTP error code, 264 // signal a TL-Ul bus error and jump to a terminal error state. 265 ReadWaitSt: begin 266 init_done_o = 1'b1; 267 if (otp_rvalid_i) begin -11- 268 tlul_rvalid_o = 1'b1; 269 if (otp_err inside {NoError, MacroEccCorrError}) begin -12- 270 state_d = IdleSt; 271 // At this point the only error that we could have gotten are correctable ECC errors. 272 if (otp_err != NoError) begin -13- 273 error_d = MacroEccCorrError; ==> 274 end MISSING_ELSE ==> 275 end else begin 276 state_d = ErrorSt; ==> 277 error_d = otp_err; 278 // This causes the TL-UL adapter to return a bus error. 279 tlul_rerror_o = 2'b11; 280 end 281 end MISSING_ELSE ==> 282 end 283 /////////////////////////////////////////////////////////////////// 284 // Terminal Error State. This locks access to the partition. 285 // Make sure the partition signals an error state if no error 286 // code has been latched so far. 287 ErrorSt: begin 288 if (error_q == NoError) begin -14- 289 error_d = FsmStateError; ==> 290 end MISSING_ELSE ==> 291 292 // Return bus errors if there are pending TL-UL requests. 293 if (pending_tlul_error_q) begin -15- 294 tlul_rerror_o = 2'b11; ==> 295 tlul_rvalid_o = 1'b1; 296 end else if (tlul_req_i) begin -16- 297 tlul_gnt_o = 1'b1; ==> 298 pending_tlul_error_d = 1'b1; 299 end MISSING_ELSE ==> 300 end 301 /////////////////////////////////////////////////////////////////// 302 // We should never get here. If we do (e.g. via a malicious 303 // glitch), error out immediately. 304 default: begin 305 state_d = ErrorSt; ==>

Branches:
-1--2--3--4--5--6--7--8--9--10--11--12--13--14--15--16-StatusTests
ResetSt 1 1 - - - - - - - - - - - - - Covered T1,T2,T3
ResetSt 1 0 - - - - - - - - - - - - - Unreachable
ResetSt 0 - - - - - - - - - - - - - - Covered T1,T2,T3
InitSt - - 1 - - - - - - - - - - - - Covered T1,T2,T3
InitSt - - 0 - - - - - - - - - - - - Covered T1,T2,T3
InitWaitSt - - - 1 1 1 - - - - - - - - - Covered T102,T45,T184
InitWaitSt - - - 1 1 0 - - - - - - - - - Covered T1,T2,T3
InitWaitSt - - - 1 0 - - - - - - - - - - Covered T185,T186,T187
InitWaitSt - - - 0 - - - - - - - - - - - Covered T1,T2,T3
IdleSt - - - - - - 1 - - - - - - - - Covered T1,T3,T4
IdleSt - - - - - - 0 - - - - - - - - Covered T1,T2,T3
ReadSt - - - - - - - 1 1 - - - - - - Covered T1,T3,T4
ReadSt - - - - - - - 1 0 - - - - - - Covered T95,T96,T125
ReadSt - - - - - - - 0 - - - - - - - Covered T1,T6,T11
ReadWaitSt - - - - - - - - - 1 1 1 - - - Covered T97,T177,T188
ReadWaitSt - - - - - - - - - 1 1 0 - - - Covered T1,T3,T4
ReadWaitSt - - - - - - - - - 1 0 - - - - Covered T189,T178,T190
ReadWaitSt - - - - - - - - - 0 - - - - - Covered T1,T3,T4
ErrorSt - - - - - - - - - - - - 1 - - Covered T27,T28,T29
ErrorSt - - - - - - - - - - - - 0 - - Covered T1,T3,T11
ErrorSt - - - - - - - - - - - - - 1 - Covered T1,T12,T100
ErrorSt - - - - - - - - - - - - - 0 1 Covered T1,T12,T100
ErrorSt - - - - - - - - - - - - - 0 0 Covered T1,T3,T11
default - - - - - - - - - - - - - - - Covered T27,T28,T29


314 if (ecc_err) begin -1- 315 state_d = ErrorSt; 316 if (state_q != ErrorSt) begin -2- 317 error_d = CheckFailError; ==> 318 end MISSING_ELSE ==> 319 end MISSING_ELSE ==>

Branches:
-1--2-StatusTests
1 1 Covered T109,T110,T191
1 0 Covered T109,T110,T191
0 - Covered T1,T2,T3


321 if (lc_ctrl_pkg::lc_tx_test_true_loose(escalate_en_i)) begin -1- 322 state_d = ErrorSt; 323 fsm_err_o = 1'b1; 324 if (state_q != ErrorSt) begin -2- 325 error_d = FsmStateError; ==> 326 end MISSING_ELSE ==> 327 end MISSING_ELSE ==>

Branches:
-1--2-StatusTests
1 1 Covered T1,T3,T11
1 0 Covered T1,T3,T11
0 - Covered T1,T2,T3


461 `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt) -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T1,T2,T3


464 if (!rst_ni) begin -1- 465 error_q <= NoError; ==> 466 tlul_addr_q <= '0; 467 pending_tlul_error_q <= 1'b0; 468 end else begin 469 error_q <= error_d; 470 pending_tlul_error_q <= pending_tlul_error_d; 471 if (tlul_gnt_o) begin -2- 472 tlul_addr_q <= tlul_addr_d; ==> 473 end MISSING_ELSE ==>

Branches:
-1--2-StatusTests
1 - Covered T1,T2,T3
0 1 Covered T1,T3,T4
0 0 Covered T1,T2,T3


Assert Coverage for Instance : tb.dut.gen_partitions[1].gen_unbuffered.u_part_unbuf
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 26 26 100.00 26 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 26 26 100.00 26 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
AccessKnown_A 472167808 471284346 0 0
DigestKnown_A 472167808 471284346 0 0
DigestOffsetMustBeRepresentable_A 1143 1143 0 0
EccErrorState_A 472167808 12765 0 0
ErrorKnown_A 472167808 471284346 0 0
FsmStateKnown_A 472167808 471284346 0 0
InitDoneKnown_A 472167808 471284346 0 0
InitReadLocksPartition_A 472167808 89463686 0 0
InitWriteLocksPartition_A 472167808 89463686 0 0
OffsetMustBeBlockAligned_A 1143 1143 0 0
OtpAddrKnown_A 472167808 471284346 0 0
OtpCmdKnown_A 472167808 471284346 0 0
OtpErrorState_A 472167808 59 0 0
OtpReqKnown_A 472167808 471284346 0 0
OtpSizeKnown_A 472167808 471284346 0 0
OtpWdataKnown_A 472167808 471284346 0 0
ReadLockPropagation_A 472167808 184176214 0 0
SizeMustBeBlockAligned_A 1143 1143 0 0
TlulGntKnown_A 472167808 471284346 0 0
TlulRdataKnown_A 472167808 471284346 0 0
TlulReadOnReadLock_A 472167808 7774 0 0
TlulRerrorKnown_A 472167808 471284346 0 0
TlulRvalidKnown_A 472167808 471284346 0 0
WriteLockPropagation_A 472167808 5537097 0 0
gen_digest_write_lock.DigestWriteLocksPartition_A 472167808 56019342 0 0
u_state_regs_A 472167808 471284346 0 0


AccessKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

DigestKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

DigestOffsetMustBeRepresentable_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1143 1143 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T5 1 1 0 0
T6 1 1 0 0
T10 1 1 0 0
T11 1 1 0 0
T12 1 1 0 0
T13 1 1 0 0

EccErrorState_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 12765 0 0
T33 15397 0 0 0
T109 9204 3604 0 0
T110 0 2938 0 0
T191 0 3601 0 0
T206 0 2622 0 0
T208 7907 0 0 0
T209 19484 0 0 0
T210 43122 0 0 0
T211 17088 0 0 0
T212 12656 0 0 0
T213 5023 0 0 0
T214 15485 0 0 0
T215 35532 0 0 0

ErrorKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

FsmStateKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

InitDoneKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

InitReadLocksPartition_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 89463686 0 0
T1 22574 6932 0 0
T2 4421 70 0 0
T3 8781 3064 0 0
T4 44585 540 0 0
T5 27055 2652 0 0
T6 24416 3604 0 0
T10 5255 192 0 0
T11 41583 1960 0 0
T12 28247 13394 0 0
T13 70439 74 0 0

InitWriteLocksPartition_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 89463686 0 0
T1 22574 6932 0 0
T2 4421 70 0 0
T3 8781 3064 0 0
T4 44585 540 0 0
T5 27055 2652 0 0
T6 24416 3604 0 0
T10 5255 192 0 0
T11 41583 1960 0 0
T12 28247 13394 0 0
T13 70439 74 0 0

OffsetMustBeBlockAligned_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1143 1143 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T5 1 1 0 0
T6 1 1 0 0
T10 1 1 0 0
T11 1 1 0 0
T12 1 1 0 0
T13 1 1 0 0

OtpAddrKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

OtpCmdKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

OtpErrorState_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 59 0 0
T107 133714 0 0 0
T142 211977 0 0 0
T177 100884 0 0 0
T178 0 1 0 0
T179 0 1 0 0
T181 22581 0 0 0
T182 12224 0 0 0
T185 13091 1 0 0
T186 0 1 0 0
T187 0 1 0 0
T189 0 2 0 0
T190 0 1 0 0
T224 0 1 0 0
T226 0 1 0 0
T227 0 1 0 0
T232 26856 0 0 0
T233 13510 0 0 0
T234 49368 0 0 0
T235 17631 0 0 0

OtpReqKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

OtpSizeKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

OtpWdataKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

ReadLockPropagation_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 184176214 0 0
T1 22574 7707 0 0
T2 4421 0 0 0
T3 8781 0 0 0
T4 44585 0 0 0
T5 27055 0 0 0
T6 24416 4909 0 0
T10 5255 0 0 0
T11 41583 7468 0 0
T12 28247 0 0 0
T13 70439 0 0 0
T94 0 1492 0 0
T95 0 2516 0 0
T97 0 5140 0 0
T99 0 225 0 0
T100 0 23099 0 0
T103 0 4820 0 0
T133 0 602 0 0

SizeMustBeBlockAligned_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1143 1143 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T5 1 1 0 0
T6 1 1 0 0
T10 1 1 0 0
T11 1 1 0 0
T12 1 1 0 0
T13 1 1 0 0

TlulGntKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

TlulRdataKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

TlulReadOnReadLock_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 7774 0 0
T1 22574 14 0 0
T2 4421 0 0 0
T3 8781 0 0 0
T4 44585 0 0 0
T5 27055 0 0 0
T6 24416 4 0 0
T7 0 11 0 0
T10 5255 0 0 0
T11 41583 3 0 0
T12 28247 13 0 0
T13 70439 0 0 0
T95 0 1 0 0
T97 0 6 0 0
T100 0 5 0 0
T103 0 1 0 0
T132 0 2 0 0

TlulRerrorKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

TlulRvalidKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

WriteLockPropagation_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 5537097 0 0
T11 41583 6061 0 0
T12 28247 0 0 0
T13 70439 0 0 0
T18 0 5062 0 0
T40 12502 0 0 0
T94 0 3653 0 0
T95 0 3915 0 0
T96 0 10609 0 0
T97 0 7843 0 0
T99 50908 0 0 0
T100 34173 0 0 0
T103 26933 0 0 0
T124 0 9892 0 0
T125 0 5525 0 0
T127 0 11939 0 0
T130 0 6658 0 0
T131 44250 0 0 0
T132 15905 0 0 0
T133 24744 0 0 0

gen_digest_write_lock.DigestWriteLocksPartition_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 56019342 0 0
T1 22574 11460 0 0
T2 4421 0 0 0
T3 8781 0 0 0
T4 44585 0 0 0
T5 27055 0 0 0
T6 24416 12229 0 0
T10 5255 0 0 0
T11 41583 28520 0 0
T12 28247 4579 0 0
T13 70439 0 0 0
T18 0 21020 0 0
T94 0 29901 0 0
T95 0 44994 0 0
T97 0 58244 0 0
T103 0 11385 0 0
T104 0 12749 0 0

u_state_regs_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

Line Coverage for Instance : tb.dut.gen_partitions[2].gen_unbuffered.u_part_unbuf
Line No.TotalCoveredPercent
TOTAL9191100.00
CONT_ASSIGN13811100.00
CONT_ASSIGN14911100.00
ALWAYS1646868100.00
CONT_ASSIGN33411100.00
CONT_ASSIGN33611100.00
CONT_ASSIGN34211100.00
CONT_ASSIGN34911100.00
CONT_ASSIGN35011100.00
CONT_ASSIGN35411100.00
CONT_ASSIGN35811100.00
CONT_ASSIGN39511100.00
CONT_ASSIGN42011100.00
CONT_ASSIGN45411100.00
ALWAYS46133100.00
ALWAYS46488100.00

137 // Output partition error state. 138 1/1 assign error_o = error_q; Tests: T1 T2 T3  139 140 // This partition cannot do any write accesses, hence we tie this 141 // constantly off. 142 assign otp_wdata_o = '0; 143 // Depending on the partition configuration, the wrapper is instructed to ignore integrity 144 // calculations and checks. To be on the safe side, the partition filters error responses at this 145 // point and does not report any integrity errors if integrity is disabled. 146 otp_err_e otp_err; 147 if (Info.integrity) begin : gen_integrity 148 assign otp_cmd_o = prim_otp_pkg::Read; 149 1/1 assign otp_err = otp_err_e'(otp_err_i); Tests: T1 T2 T3  150 end else begin : gen_no_integrity 151 assign otp_cmd_o = prim_otp_pkg::ReadRaw; 152 always_comb begin 153 if (otp_err_e'(otp_err_i) inside {MacroEccCorrError, MacroEccUncorrError}) begin 154 otp_err = NoError; 155 end else begin 156 otp_err = otp_err_e'(otp_err_i); 157 end 158 end 159 end 160 161 `ASSERT_KNOWN(FsmStateKnown_A, state_q) 162 always_comb begin : p_fsm 163 // Default assignments 164 1/1 state_d = state_q; Tests: T1 T2 T3  165 166 // Response to init request 167 1/1 init_done_o = 1'b0; Tests: T1 T2 T3  168 169 // OTP signals 170 1/1 otp_req_o = 1'b0; Tests: T1 T2 T3  171 1/1 otp_addr_sel = DigestAddrSel; Tests: T1 T2 T3  172 173 // TL-UL signals 174 1/1 tlul_gnt_o = 1'b0; Tests: T1 T2 T3  175 1/1 tlul_rvalid_o = 1'b0; Tests: T1 T2 T3  176 1/1 tlul_rerror_o = '0; Tests: T1 T2 T3  177 178 // Enable for buffered digest register 179 1/1 digest_reg_en = 1'b0; Tests: T1 T2 T3  180 181 // Error Register 182 1/1 error_d = error_q; Tests: T1 T2 T3  183 1/1 pending_tlul_error_d = 1'b0; Tests: T1 T2 T3  184 1/1 fsm_err_o = 1'b0; Tests: T1 T2 T3  185 186 1/1 unique case (state_q) Tests: T1 T2 T3  187 /////////////////////////////////////////////////////////////////// 188 // State right after reset. Wait here until we get a an 189 // initialization request. 190 ResetSt: begin 191 1/1 if (init_req_i) begin Tests: T1 T2 T3  192 // If the partition does not have a digest, no initialization is necessary. 193 1/1 if (Info.sw_digest) begin Tests: T1 T2 T3  194 1/1 state_d = InitSt; Tests: T1 T2 T3  195 end else begin 196 unreachable state_d = IdleSt; 197 end 198 end MISSING_ELSE 199 end 200 /////////////////////////////////////////////////////////////////// 201 // Initialization reads out the digest only in unbuffered 202 // partitions. Wait here until the OTP request has been granted. 203 // And then wait until the OTP word comes back. 204 InitSt: begin 205 1/1 otp_req_o = 1'b1; Tests: T1 T2 T3  206 1/1 if (otp_gnt_i) begin Tests: T1 T2 T3  207 1/1 state_d = InitWaitSt; Tests: T1 T2 T3  208 end MISSING_ELSE 209 end 210 /////////////////////////////////////////////////////////////////// 211 // Wait for OTP response and write to digest buffer register. In 212 // case an OTP transaction fails, latch the OTP error code and 213 // jump to a terminal error state. 214 InitWaitSt: begin 215 1/1 if (otp_rvalid_i) begin Tests: T1 T2 T3  216 1/1 digest_reg_en = 1'b1; Tests: T1 T2 T3  217 1/1 if (otp_err inside {NoError, MacroEccCorrError}) begin Tests: T1 T2 T3  218 1/1 state_d = IdleSt; Tests: T1 T2 T3  219 // At this point the only error that we could have gotten are correctable ECC errors. 220 1/1 if (otp_err != NoError) begin Tests: T1 T2 T3  221 1/1 error_d = MacroEccCorrError; Tests: T43 T45 T192  222 end MISSING_ELSE 223 end else begin 224 1/1 state_d = ErrorSt; Tests: T101 T193 T194  225 1/1 error_d = otp_err; Tests: T101 T193 T194  226 end 227 end MISSING_ELSE 228 end 229 /////////////////////////////////////////////////////////////////// 230 // Wait for TL-UL requests coming in. 231 // Then latch address and go to readout state. 232 IdleSt: begin 233 1/1 init_done_o = 1'b1; Tests: T1 T2 T3  234 1/1 if (tlul_req_i) begin Tests: T1 T2 T3  235 1/1 error_d = NoError; // clear recoverable soft errors. Tests: T1 T3 T4  236 1/1 state_d = ReadSt; Tests: T1 T3 T4  237 1/1 tlul_gnt_o = 1'b1; Tests: T1 T3 T4  238 end MISSING_ELSE 239 end 240 /////////////////////////////////////////////////////////////////// 241 // If the address is out of bounds, or if the partition is 242 // locked, signal back a bus error. Note that such an error does 243 // not cause the partition to go into error state. Otherwise if 244 // these checks pass, an OTP word is requested. 245 ReadSt: begin 246 1/1 init_done_o = 1'b1; Tests: T1 T3 T4  247 // Double check the address range. 248 1/1 if (tlul_addr_in_range && mubi8_test_false_strict(access_o.read_lock)) begin Tests: T1 T3 T4  249 1/1 otp_req_o = 1'b1; Tests: T1 T3 T4  250 1/1 otp_addr_sel = DataAddrSel; Tests: T1 T3 T4  251 1/1 if (otp_gnt_i) begin Tests: T1 T3 T4  252 1/1 state_d = ReadWaitSt; Tests: T1 T3 T4  253 end MISSING_ELSE 254 end else begin 255 1/1 state_d = IdleSt; Tests: T1 T6 T11  256 1/1 error_d = AccessError; // Signal this error, but do not go into terminal error state. Tests: T1 T6 T11  257 1/1 tlul_rvalid_o = 1'b1; Tests: T1 T6 T11  258 1/1 tlul_rerror_o = 2'b11; // This causes the TL-UL adapter to return a bus error. Tests: T1 T6 T11  259 end 260 end 261 /////////////////////////////////////////////////////////////////// 262 // Wait for OTP response and release the TL-UL response. In 263 // case an OTP transaction fails, latch the OTP error code, 264 // signal a TL-Ul bus error and jump to a terminal error state. 265 ReadWaitSt: begin 266 1/1 init_done_o = 1'b1; Tests: T1 T3 T4  267 1/1 if (otp_rvalid_i) begin Tests: T1 T3 T4  268 1/1 tlul_rvalid_o = 1'b1; Tests: T1 T3 T4  269 1/1 if (otp_err inside {NoError, MacroEccCorrError}) begin Tests: T1 T3 T4  270 1/1 state_d = IdleSt; Tests: T1 T3 T4  271 // At this point the only error that we could have gotten are correctable ECC errors. 272 1/1 if (otp_err != NoError) begin Tests: T1 T3 T4  273 1/1 error_d = MacroEccCorrError; Tests: T133 T195 T196  274 end MISSING_ELSE 275 end else begin 276 1/1 state_d = ErrorSt; Tests: T178 T197 T179  277 1/1 error_d = otp_err; Tests: T178 T197 T179  278 // This causes the TL-UL adapter to return a bus error. 279 1/1 tlul_rerror_o = 2'b11; Tests: T178 T197 T179  280 end 281 end MISSING_ELSE 282 end 283 /////////////////////////////////////////////////////////////////// 284 // Terminal Error State. This locks access to the partition. 285 // Make sure the partition signals an error state if no error 286 // code has been latched so far. 287 ErrorSt: begin 288 1/1 if (error_q == NoError) begin Tests: T1 T3 T11  289 1/1 error_d = FsmStateError; Tests: T27 T28 T29  290 end MISSING_ELSE 291 292 // Return bus errors if there are pending TL-UL requests. 293 1/1 if (pending_tlul_error_q) begin Tests: T1 T3 T11  294 1/1 tlul_rerror_o = 2'b11; Tests: T1 T12 T99  295 1/1 tlul_rvalid_o = 1'b1; Tests: T1 T12 T99  296 1/1 end else if (tlul_req_i) begin Tests: T1 T3 T11  297 1/1 tlul_gnt_o = 1'b1; Tests: T1 T12 T99  298 1/1 pending_tlul_error_d = 1'b1; Tests: T1 T12 T99  299 end MISSING_ELSE 300 end 301 /////////////////////////////////////////////////////////////////// 302 // We should never get here. If we do (e.g. via a malicious 303 // glitch), error out immediately. 304 default: begin 305 state_d = ErrorSt; 306 fsm_err_o = 1'b1; 307 end 308 /////////////////////////////////////////////////////////////////// 309 endcase // state_q 310 311 // Unconditionally jump into the terminal error state in case of 312 // an ECC error or escalation, and lock access to the partition down. 313 // SEC_CM: PART.FSM.LOCAL_ESC 314 1/1 if (ecc_err) begin Tests: T1 T2 T3  315 1/1 state_d = ErrorSt; Tests: T172 T183 T191  316 1/1 if (state_q != ErrorSt) begin Tests: T172 T183 T191  317 1/1 error_d = CheckFailError; Tests: T172 T183 T191  318 end MISSING_ELSE 319 end MISSING_ELSE 320 // SEC_CM: PART.FSM.GLOBAL_ESC 321 1/1 if (lc_ctrl_pkg::lc_tx_test_true_loose(escalate_en_i)) begin Tests: T1 T2 T3  322 1/1 state_d = ErrorSt; Tests: T1 T3 T11  323 1/1 fsm_err_o = 1'b1; Tests: T1 T3 T11  324 1/1 if (state_q != ErrorSt) begin Tests: T1 T3 T11  325 1/1 error_d = FsmStateError; Tests: T1 T3 T11  326 end MISSING_ELSE 327 end MISSING_ELSE 328 end 329 330 /////////////////////////////////// 331 // Signals to/from TL-UL Adapter // 332 /////////////////////////////////// 333 334 1/1 assign tlul_addr_d = tlul_addr_i; Tests: T1 T2 T3  335 // Do not forward data in case of an error. 336 1/1 assign tlul_rdata_o = (tlul_rvalid_o && tlul_rerror_o == '0) ? otp_rdata_i[31:0] : '0; Tests: T1 T2 T3  337 338 if (Info.offset == 0) begin : gen_zero_offset 339 assign tlul_addr_in_range = {1'b0, tlul_addr_q, 2'b00} < PartEnd; 340 341 end else begin : gen_nonzero_offset 342 1/1 assign tlul_addr_in_range = {tlul_addr_q, 2'b00} >= Info.offset && Tests: T1 T2 T3  343 {1'b0, tlul_addr_q, 2'b00} < PartEnd; 344 end 345 346 // Note that OTP works on halfword (16bit) addresses, hence need to 347 // shift the addresses appropriately. 348 logic [OtpByteAddrWidth-1:0] addr_calc; 349 1/1 assign addr_calc = (otp_addr_sel == DigestAddrSel) ? DigestOffset : {tlul_addr_q, 2'b00}; Tests: T1 T2 T3  350 1/1 assign otp_addr_o = addr_calc[OtpByteAddrWidth-1:OtpAddrShift]; Tests: T1 T2 T3  351 352 if (OtpAddrShift > 0) begin : gen_unused 353 logic unused_bits; 354 1/1 assign unused_bits = ^addr_calc[OtpAddrShift-1:0]; Tests: T1 T2 T3  355 end 356 357 // Request 32bit except in case of the digest. 358 1/1 assign otp_size_o = (otp_addr_sel == DigestAddrSel) ? Tests: T1 T2 T3  359 OtpSizeWidth'(unsigned'(ScrmblBlockWidth / OtpWidth - 1)) : 360 OtpSizeWidth'(unsigned'(32 / OtpWidth - 1)); 361 362 //////////////// 363 // Digest Reg // 364 //////////////// 365 366 if (Info.sw_digest) begin : gen_ecc_reg 367 // SEC_CM: PART.DATA_REG.INTEGRITY 368 otp_ctrl_ecc_reg #( 369 .Width ( ScrmblBlockWidth ), 370 .Depth ( 1 ) 371 ) u_otp_ctrl_ecc_reg ( 372 .clk_i, 373 .rst_ni, 374 .wren_i ( digest_reg_en ), 375 .addr_i ( '0 ), 376 .wdata_i ( otp_rdata_i ), 377 .rdata_o ( ), 378 .data_o ( digest_o ), 379 .ecc_err_o ( ecc_err ) 380 ); 381 end else begin : gen_no_ecc_reg 382 logic unused_digest_reg_en; 383 logic unused_rdata; 384 assign unused_digest_reg_en = digest_reg_en; 385 assign unused_rdata = ^otp_rdata_i[32 +: 32]; // Upper word is not connected in this case. 386 assign digest_o = '0; 387 assign ecc_err = 1'b0; 388 end 389 390 //////////////////////// 391 // DAI Access Control // 392 //////////////////////// 393 394 mubi8_t init_locked; 395 1/1 assign init_locked = (~init_done_o) ? MuBi8True : MuBi8False; Tests: T1 T2 T3  396 397 // Aggregate all possible DAI write locks. The partition is also locked when uninitialized. 398 // Note that the locks are redundantly encoded values. 399 part_access_t access_pre; 400 prim_mubi8_sender #( 401 .AsyncOn(0) 402 ) u_prim_mubi8_sender_write_lock_pre ( 403 .clk_i, 404 .rst_ni, 405 .mubi_i(mubi8_and_lo(init_locked, access_i.write_lock)), 406 .mubi_o(access_pre.write_lock) 407 ); 408 prim_mubi8_sender #( 409 .AsyncOn(0) 410 ) u_prim_mubi8_sender_read_lock_pre ( 411 .clk_i, 412 .rst_ni, 413 .mubi_i(mubi8_and_lo(init_locked, access_i.read_lock)), 414 .mubi_o(access_pre.read_lock) 415 ); 416 417 // SEC_CM: PART.MEM.SW_UNWRITABLE 418 if (Info.write_lock) begin : gen_digest_write_lock 419 mubi8_t digest_locked; 420 1/1 assign digest_locked = (digest_o != '0) ? MuBi8True : MuBi8False; Tests: T1 T2 T3  421 422 // This prevents the synthesis tool from optimizing the multibit signal. 423 prim_mubi8_sender #( 424 .AsyncOn(0) 425 ) u_prim_mubi8_sender_write_lock ( 426 .clk_i, 427 .rst_ni, 428 .mubi_i(mubi8_and_lo(access_pre.write_lock, digest_locked)), 429 .mubi_o(access_o.write_lock) 430 ); 431 432 `ASSERT(DigestWriteLocksPartition_A, digest_o |-> mubi8_test_true_loose(access_o.write_lock)) 433 end else begin : gen_no_digest_write_lock 434 assign access_o.write_lock = access_pre.write_lock; 435 end 436 437 // SEC_CM: PART.MEM.SW_UNREADABLE 438 if (Info.read_lock) begin : gen_digest_read_lock 439 mubi8_t digest_locked; 440 assign digest_locked = (digest_o != '0) ? MuBi8True : MuBi8False; 441 442 // This prevents the synthesis tool from optimizing the multibit signal. 443 prim_mubi8_sender #( 444 .AsyncOn(0) 445 ) u_prim_mubi8_sender_read_lock ( 446 .clk_i, 447 .rst_ni, 448 .mubi_i(mubi8_and_lo(access_pre.read_lock, digest_locked)), 449 .mubi_o(access_o.read_lock) 450 ); 451 452 `ASSERT(DigestReadLocksPartition_A, digest_o |-> mubi8_test_true_loose(access_o.read_lock)) 453 end else begin : gen_no_digest_read_lock 454 1/1 assign access_o.read_lock = access_pre.read_lock; Tests: T1 T2 T3  455 end 456 457 /////////////// 458 // Registers // 459 /////////////// 460 461 3/3 `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt) Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3 
PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt): 461.1 `ifdef SIMULATION 461.2 prim_sparse_fsm_flop #( 461.3 .StateEnumT(state_e), 461.4 .Width($bits(state_e)), 461.5 .ResetValue($bits(state_e)'(ResetSt)), 461.6 .EnableAlertTriggerSVA(1), 461.7 .CustomForceName("state_q") 461.8 ) u_state_regs ( 461.9 .clk_i ( clk_i ), 461.10 .rst_ni ( rst_ni ), 461.11 .state_i ( state_d ), 461.12 .state_o ( ) 461.13 ); 461.14 always_ff @(posedge clk_i or negedge rst_ni) begin 461.15 1/1 if (!rst_ni) begin Tests: T1 T2 T3  461.16 1/1 state_q <= ResetSt; Tests: T1 T2 T3  461.17 end else begin 461.18 1/1 state_q <= state_d; Tests: T1 T2 T3  461.19 end 461.20 end 461.21 u_state_regs_A: assert property (@(posedge clk_i) disable iff ((!rst_ni) !== '0) (state_q === u_state_regs.state_o)) 461.22 else begin 461.23 `ifdef UVM 461.24 uvm_pkg::uvm_report_error("ASSERT FAILED", "u_state_regs_A", uvm_pkg::UVM_NONE, 461.25 "../src/lowrisc_ip_otp_ctrl_1.0/rtl/otp_ctrl_part_unbuf.sv", 461, "", 1); 461.26 `else 461.27 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 461.28 `PRIM_STRINGIFY(u_state_regs_A)); 461.29 `endif 461.30 end 461.31 `else 461.32 prim_sparse_fsm_flop #( 461.33 .StateEnumT(state_e), 461.34 .Width($bits(state_e)), 461.35 .ResetValue($bits(state_e)'(ResetSt)), 461.36 .EnableAlertTriggerSVA(1) 461.37 ) u_state_regs ( 461.38 .clk_i ( `PRIM_FLOP_CLK ), 461.39 .rst_ni ( `PRIM_FLOP_RST ), 461.40 .state_i ( state_d ), 461.41 .state_o ( state_q ) 461.42 ); 461.43 `endif462 463 always_ff @(posedge clk_i or negedge rst_ni) begin : p_regs 464 1/1 if (!rst_ni) begin Tests: T1 T2 T3  465 1/1 error_q <= NoError; Tests: T1 T2 T3  466 1/1 tlul_addr_q <= '0; Tests: T1 T2 T3  467 1/1 pending_tlul_error_q <= 1'b0; Tests: T1 T2 T3  468 end else begin 469 1/1 error_q <= error_d; Tests: T1 T2 T3  470 1/1 pending_tlul_error_q <= pending_tlul_error_d; Tests: T1 T2 T3  471 1/1 if (tlul_gnt_o) begin Tests: T1 T2 T3  472 1/1 tlul_addr_q <= tlul_addr_d; Tests: T1 T3 T4  473 end MISSING_ELSE

Cond Coverage for Instance : tb.dut.gen_partitions[2].gen_unbuffered.u_part_unbuf
TotalCoveredPercent
Conditions343397.06
Logical343397.06
Non-Logical00
Event00

 LINE       220
 EXPRESSION (otp_err != NoError)
            ----------1---------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT43,T45,T192

 LINE       272
 EXPRESSION (otp_err != NoError)
            ----------1---------
-1-StatusTests
0CoveredT1,T3,T4
1CoveredT133,T195,T196

 LINE       288
 EXPRESSION (error_q == NoError)
            ----------1---------
-1-StatusTests
0CoveredT1,T3,T11
1CoveredT27,T28,T29

 LINE       316
 EXPRESSION (state_q != ErrorSt)
            ----------1---------
-1-StatusTests
0CoveredT172,T183,T191
1CoveredT172,T183,T191

 LINE       324
 EXPRESSION (state_q != ErrorSt)
            ----------1---------
-1-StatusTests
0CoveredT1,T3,T11
1CoveredT1,T3,T11

 LINE       336
 EXPRESSION ((tlul_rvalid_o && (tlul_rerror_o == '0)) ? otp_rdata_i[31:0] : '0)
             --------------------1-------------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T3,T4

 LINE       336
 SUB-EXPRESSION (tlul_rvalid_o && (tlul_rerror_o == '0))
                 ------1------    ----------2----------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT1,T6,T11
11CoveredT1,T3,T4

 LINE       336
 SUB-EXPRESSION (tlul_rerror_o == '0)
                ----------1----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       342
 EXPRESSION (({tlul_addr_q, 2'b0} >= 11'b00110110000) && ({1'b0, tlul_addr_q, 2'b0} < PartEnd))
             --------------------1-------------------    ------------------2------------------
-1--2-StatusTests
01CoveredT1,T2,T3
10Not Covered
11CoveredT1,T3,T4

 LINE       349
 EXPRESSION ((otp_addr_sel == DigestAddrSel) ? DigestOffset : ({tlul_addr_q, 2'b0}))
             ---------------1---------------
-1-StatusTests
0CoveredT1,T3,T4
1CoveredT1,T2,T3

 LINE       349
 SUB-EXPRESSION (otp_addr_sel == DigestAddrSel)
                ---------------1---------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       358
 EXPRESSION 
 Number  Term
      1  (otp_addr_sel == DigestAddrSel) ? (2'((unsigned'(((otp_ctrl_pkg::ScrmblBlockWidth / otp_ctrl_pkg::OtpWidth) - 1))))) : (2'((unsigned'(((32 / otp_ctrl_pkg::OtpWidth) - 1))))))
-1-StatusTests
0CoveredT1,T3,T4
1CoveredT1,T2,T3

 LINE       358
 SUB-EXPRESSION (otp_addr_sel == DigestAddrSel)
                ---------------1---------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       395
 EXPRESSION (((~init_done_o)) ? MuBi8True : MuBi8False)
             --------1-------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       420
 EXPRESSION ((digest_o != '0) ? MuBi8True : MuBi8False)
             --------1-------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T11,T103

 LINE       420
 SUB-EXPRESSION (digest_o != '0)
                --------1-------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T11,T103

FSM Coverage for Instance : tb.dut.gen_partitions[2].gen_unbuffered.u_part_unbuf
Summary for FSM :: state_q
TotalCoveredPercent
States 7 7 100.00 (Not included in score)
Transitions 13 12 92.31
Sequences 0 0

State, Transition and Sequence Details for FSM :: state_q
statesLine No.CoveredTests
ErrorSt 224 Covered T1,T3,T11
IdleSt 196 Covered T1,T2,T3
InitSt 194 Covered T1,T2,T3
InitWaitSt 207 Covered T1,T2,T3
ReadSt 236 Covered T1,T3,T4
ReadWaitSt 252 Covered T1,T3,T4
ResetSt 190 Covered T1,T2,T3


transitionsLine No.CoveredTestsExclude Annotation
IdleSt->ErrorSt 315 Covered T1,T3,T11
IdleSt->ReadSt 236 Covered T1,T3,T4
InitSt->ErrorSt 315 Covered T12,T239,T241
InitSt->InitWaitSt 207 Covered T1,T2,T3
InitWaitSt->ErrorSt 224 Covered T101,T185,T186
InitWaitSt->IdleSt 218 Covered T1,T2,T3
ReadSt->ErrorSt 315 Not Covered
ReadSt->IdleSt 255 Covered T1,T6,T11
ReadSt->ReadWaitSt 252 Covered T1,T3,T4
ReadWaitSt->ErrorSt 276 Covered T178,T197,T179
ReadWaitSt->IdleSt 270 Covered T1,T3,T4
ResetSt->ErrorSt 315 Covered T109,T110,T111
ResetSt->IdleSt 196 Excluded VC_COV_UNR
ResetSt->InitSt 194 Covered T1,T2,T3


Summary for FSM :: error_q
TotalCoveredPercent
States 5 5 100.00 (Not included in score)
Transitions 11 10 90.91
Sequences 0 0

State, Transition and Sequence Details for FSM :: error_q
statesLine No.CoveredTests
AccessError 256 Covered T1,T6,T11
CheckFailError 317 Covered T172,T183,T191
FsmStateError 289 Covered T1,T3,T11
MacroEccCorrError 221 Covered T133,T43,T195
NoError 235 Covered T1,T2,T3


transitionsLine No.CoveredTestsExclude Annotation
AccessError->CheckFailError 317 Excluded VC_COV_UNR
AccessError->FsmStateError 325 Covered T100,T180,T9
AccessError->MacroEccCorrError 221 Excluded VC_COV_UNR
AccessError->NoError 235 Covered T1,T6,T11
CheckFailError->AccessError 256 Excluded VC_COV_UNR
CheckFailError->FsmStateError 325 Excluded VC_COV_UNR
CheckFailError->MacroEccCorrError 221 Excluded VC_COV_UNR
CheckFailError->NoError 235 Covered T172,T183,T191
FsmStateError->AccessError 256 Excluded VC_COV_UNR
FsmStateError->CheckFailError 317 Excluded VC_COV_UNR
FsmStateError->MacroEccCorrError 221 Excluded VC_COV_UNR
FsmStateError->NoError 235 Covered T1,T3,T11
MacroEccCorrError->AccessError 256 Excluded VC_COV_UNR
MacroEccCorrError->CheckFailError 317 Not Covered
MacroEccCorrError->FsmStateError 325 Covered T43,T45,T196
MacroEccCorrError->NoError 235 Covered T133,T195,T145
NoError->AccessError 256 Covered T1,T6,T11
NoError->CheckFailError 317 Covered T172,T183,T191
NoError->FsmStateError 289 Covered T1,T3,T11
NoError->MacroEccCorrError 221 Covered T133,T43,T195



Branch Coverage for Instance : tb.dut.gen_partitions[2].gen_unbuffered.u_part_unbuf
Line No.TotalCoveredPercent
Branches 44 44 100.00
TERNARY 336 2 2 100.00
TERNARY 349 2 2 100.00
TERNARY 358 2 2 100.00
TERNARY 395 2 2 100.00
TERNARY 420 2 2 100.00
CASE 186 23 23 100.00
IF 314 3 3 100.00
IF 321 3 3 100.00
IF 461 2 2 100.00
IF 464 3 3 100.00


336 assign tlul_rdata_o = (tlul_rvalid_o && tlul_rerror_o == '0) ? otp_rdata_i[31:0] : '0; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T3,T4
0 Covered T1,T2,T3


349 assign addr_calc = (otp_addr_sel == DigestAddrSel) ? DigestOffset : {tlul_addr_q, 2'b00}; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T1,T3,T4


358 assign otp_size_o = (otp_addr_sel == DigestAddrSel) ? -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T1,T3,T4


395 assign init_locked = (~init_done_o) ? MuBi8True : MuBi8False; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T1,T2,T3


420 assign digest_locked = (digest_o != '0) ? MuBi8True : MuBi8False; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T11,T103
0 Covered T1,T2,T3


186 unique case (state_q) -1- 187 /////////////////////////////////////////////////////////////////// 188 // State right after reset. Wait here until we get a an 189 // initialization request. 190 ResetSt: begin 191 if (init_req_i) begin -2- 192 // If the partition does not have a digest, no initialization is necessary. 193 if (Info.sw_digest) begin -3- 194 state_d = InitSt; ==> 195 end else begin 196 state_d = IdleSt; ==> (Unreachable) 197 end 198 end MISSING_ELSE ==> 199 end 200 /////////////////////////////////////////////////////////////////// 201 // Initialization reads out the digest only in unbuffered 202 // partitions. Wait here until the OTP request has been granted. 203 // And then wait until the OTP word comes back. 204 InitSt: begin 205 otp_req_o = 1'b1; 206 if (otp_gnt_i) begin -4- 207 state_d = InitWaitSt; ==> 208 end MISSING_ELSE ==> 209 end 210 /////////////////////////////////////////////////////////////////// 211 // Wait for OTP response and write to digest buffer register. In 212 // case an OTP transaction fails, latch the OTP error code and 213 // jump to a terminal error state. 214 InitWaitSt: begin 215 if (otp_rvalid_i) begin -5- 216 digest_reg_en = 1'b1; 217 if (otp_err inside {NoError, MacroEccCorrError}) begin -6- 218 state_d = IdleSt; 219 // At this point the only error that we could have gotten are correctable ECC errors. 220 if (otp_err != NoError) begin -7- 221 error_d = MacroEccCorrError; ==> 222 end MISSING_ELSE ==> 223 end else begin 224 state_d = ErrorSt; ==> 225 error_d = otp_err; 226 end 227 end MISSING_ELSE ==> 228 end 229 /////////////////////////////////////////////////////////////////// 230 // Wait for TL-UL requests coming in. 231 // Then latch address and go to readout state. 232 IdleSt: begin 233 init_done_o = 1'b1; 234 if (tlul_req_i) begin -8- 235 error_d = NoError; // clear recoverable soft errors. ==> 236 state_d = ReadSt; 237 tlul_gnt_o = 1'b1; 238 end MISSING_ELSE ==> 239 end 240 /////////////////////////////////////////////////////////////////// 241 // If the address is out of bounds, or if the partition is 242 // locked, signal back a bus error. Note that such an error does 243 // not cause the partition to go into error state. Otherwise if 244 // these checks pass, an OTP word is requested. 245 ReadSt: begin 246 init_done_o = 1'b1; 247 // Double check the address range. 248 if (tlul_addr_in_range && mubi8_test_false_strict(access_o.read_lock)) begin -9- 249 otp_req_o = 1'b1; 250 otp_addr_sel = DataAddrSel; 251 if (otp_gnt_i) begin -10- 252 state_d = ReadWaitSt; ==> 253 end MISSING_ELSE ==> 254 end else begin 255 state_d = IdleSt; ==> 256 error_d = AccessError; // Signal this error, but do not go into terminal error state. 257 tlul_rvalid_o = 1'b1; 258 tlul_rerror_o = 2'b11; // This causes the TL-UL adapter to return a bus error. 259 end 260 end 261 /////////////////////////////////////////////////////////////////// 262 // Wait for OTP response and release the TL-UL response. In 263 // case an OTP transaction fails, latch the OTP error code, 264 // signal a TL-Ul bus error and jump to a terminal error state. 265 ReadWaitSt: begin 266 init_done_o = 1'b1; 267 if (otp_rvalid_i) begin -11- 268 tlul_rvalid_o = 1'b1; 269 if (otp_err inside {NoError, MacroEccCorrError}) begin -12- 270 state_d = IdleSt; 271 // At this point the only error that we could have gotten are correctable ECC errors. 272 if (otp_err != NoError) begin -13- 273 error_d = MacroEccCorrError; ==> 274 end MISSING_ELSE ==> 275 end else begin 276 state_d = ErrorSt; ==> 277 error_d = otp_err; 278 // This causes the TL-UL adapter to return a bus error. 279 tlul_rerror_o = 2'b11; 280 end 281 end MISSING_ELSE ==> 282 end 283 /////////////////////////////////////////////////////////////////// 284 // Terminal Error State. This locks access to the partition. 285 // Make sure the partition signals an error state if no error 286 // code has been latched so far. 287 ErrorSt: begin 288 if (error_q == NoError) begin -14- 289 error_d = FsmStateError; ==> 290 end MISSING_ELSE ==> 291 292 // Return bus errors if there are pending TL-UL requests. 293 if (pending_tlul_error_q) begin -15- 294 tlul_rerror_o = 2'b11; ==> 295 tlul_rvalid_o = 1'b1; 296 end else if (tlul_req_i) begin -16- 297 tlul_gnt_o = 1'b1; ==> 298 pending_tlul_error_d = 1'b1; 299 end MISSING_ELSE ==> 300 end 301 /////////////////////////////////////////////////////////////////// 302 // We should never get here. If we do (e.g. via a malicious 303 // glitch), error out immediately. 304 default: begin 305 state_d = ErrorSt; ==>

Branches:
-1--2--3--4--5--6--7--8--9--10--11--12--13--14--15--16-StatusTests
ResetSt 1 1 - - - - - - - - - - - - - Covered T1,T2,T3
ResetSt 1 0 - - - - - - - - - - - - - Unreachable
ResetSt 0 - - - - - - - - - - - - - - Covered T1,T2,T3
InitSt - - 1 - - - - - - - - - - - - Covered T1,T2,T3
InitSt - - 0 - - - - - - - - - - - - Covered T1,T2,T3
InitWaitSt - - - 1 1 1 - - - - - - - - - Covered T43,T45,T192
InitWaitSt - - - 1 1 0 - - - - - - - - - Covered T1,T2,T3
InitWaitSt - - - 1 0 - - - - - - - - - - Covered T101,T193,T194
InitWaitSt - - - 0 - - - - - - - - - - - Covered T1,T2,T3
IdleSt - - - - - - 1 - - - - - - - - Covered T1,T3,T4
IdleSt - - - - - - 0 - - - - - - - - Covered T1,T2,T3
ReadSt - - - - - - - 1 1 - - - - - - Covered T1,T3,T4
ReadSt - - - - - - - 1 0 - - - - - - Covered T96,T125,T129
ReadSt - - - - - - - 0 - - - - - - - Covered T1,T6,T11
ReadWaitSt - - - - - - - - - 1 1 1 - - - Covered T133,T195,T196
ReadWaitSt - - - - - - - - - 1 1 0 - - - Covered T1,T3,T4
ReadWaitSt - - - - - - - - - 1 0 - - - - Covered T178,T197,T179
ReadWaitSt - - - - - - - - - 0 - - - - - Covered T1,T3,T4
ErrorSt - - - - - - - - - - - - 1 - - Covered T27,T28,T29
ErrorSt - - - - - - - - - - - - 0 - - Covered T1,T3,T11
ErrorSt - - - - - - - - - - - - - 1 - Covered T1,T12,T99
ErrorSt - - - - - - - - - - - - - 0 1 Covered T1,T12,T99
ErrorSt - - - - - - - - - - - - - 0 0 Covered T1,T3,T11
default - - - - - - - - - - - - - - - Covered T27,T28,T29


314 if (ecc_err) begin -1- 315 state_d = ErrorSt; 316 if (state_q != ErrorSt) begin -2- 317 error_d = CheckFailError; ==> 318 end MISSING_ELSE ==> 319 end MISSING_ELSE ==>

Branches:
-1--2-StatusTests
1 1 Covered T172,T183,T191
1 0 Covered T172,T183,T191
0 - Covered T1,T2,T3


321 if (lc_ctrl_pkg::lc_tx_test_true_loose(escalate_en_i)) begin -1- 322 state_d = ErrorSt; 323 fsm_err_o = 1'b1; 324 if (state_q != ErrorSt) begin -2- 325 error_d = FsmStateError; ==> 326 end MISSING_ELSE ==> 327 end MISSING_ELSE ==>

Branches:
-1--2-StatusTests
1 1 Covered T1,T3,T11
1 0 Covered T1,T3,T11
0 - Covered T1,T2,T3


461 `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt) -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T1,T2,T3


464 if (!rst_ni) begin -1- 465 error_q <= NoError; ==> 466 tlul_addr_q <= '0; 467 pending_tlul_error_q <= 1'b0; 468 end else begin 469 error_q <= error_d; 470 pending_tlul_error_q <= pending_tlul_error_d; 471 if (tlul_gnt_o) begin -2- 472 tlul_addr_q <= tlul_addr_d; ==> 473 end MISSING_ELSE ==>

Branches:
-1--2-StatusTests
1 - Covered T1,T2,T3
0 1 Covered T1,T3,T4
0 0 Covered T1,T2,T3


Assert Coverage for Instance : tb.dut.gen_partitions[2].gen_unbuffered.u_part_unbuf
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 26 26 100.00 26 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 26 26 100.00 26 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
AccessKnown_A 472167808 471284346 0 0
DigestKnown_A 472167808 471284346 0 0
DigestOffsetMustBeRepresentable_A 1143 1143 0 0
EccErrorState_A 472167808 20075 0 0
ErrorKnown_A 472167808 471284346 0 0
FsmStateKnown_A 472167808 471284346 0 0
InitDoneKnown_A 472167808 471284346 0 0
InitReadLocksPartition_A 472167808 89648430 0 0
InitWriteLocksPartition_A 472167808 89648430 0 0
OffsetMustBeBlockAligned_A 1143 1143 0 0
OtpAddrKnown_A 472167808 471284346 0 0
OtpCmdKnown_A 472167808 471284346 0 0
OtpErrorState_A 472167808 65 0 0
OtpReqKnown_A 472167808 471284346 0 0
OtpSizeKnown_A 472167808 471284346 0 0
OtpWdataKnown_A 472167808 471284346 0 0
ReadLockPropagation_A 472167808 183446947 0 0
SizeMustBeBlockAligned_A 1143 1143 0 0
TlulGntKnown_A 472167808 471284346 0 0
TlulRdataKnown_A 472167808 471284346 0 0
TlulReadOnReadLock_A 472167808 8005 0 0
TlulRerrorKnown_A 472167808 471284346 0 0
TlulRvalidKnown_A 472167808 471284346 0 0
WriteLockPropagation_A 472167808 2694759 0 0
gen_digest_write_lock.DigestWriteLocksPartition_A 472167808 41012861 0 0
u_state_regs_A 472167808 471284346 0 0


AccessKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

DigestKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

DigestOffsetMustBeRepresentable_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1143 1143 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T5 1 1 0 0
T6 1 1 0 0
T10 1 1 0 0
T11 1 1 0 0
T12 1 1 0 0
T13 1 1 0 0

EccErrorState_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 20075 0 0
T172 11775 2246 0 0
T183 0 3191 0 0
T191 0 3601 0 0
T204 0 2238 0 0
T205 0 2836 0 0
T206 0 2622 0 0
T207 0 3341 0 0
T243 15510 0 0 0
T244 34096 0 0 0
T245 35234 0 0 0
T246 543341 0 0 0
T247 15535 0 0 0
T248 24115 0 0 0
T249 42256 0 0 0
T250 26729 0 0 0
T251 27430 0 0 0

ErrorKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

FsmStateKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

InitDoneKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

InitReadLocksPartition_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 89648430 0 0
T1 22574 7000 0 0
T2 4421 87 0 0
T3 8781 3098 0 0
T4 44585 642 0 0
T5 27055 2737 0 0
T6 24416 3672 0 0
T10 5255 209 0 0
T11 41583 2130 0 0
T12 28247 13462 0 0
T13 70439 91 0 0

InitWriteLocksPartition_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 89648430 0 0
T1 22574 7000 0 0
T2 4421 87 0 0
T3 8781 3098 0 0
T4 44585 642 0 0
T5 27055 2737 0 0
T6 24416 3672 0 0
T10 5255 209 0 0
T11 41583 2130 0 0
T12 28247 13462 0 0
T13 70439 91 0 0

OffsetMustBeBlockAligned_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1143 1143 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T5 1 1 0 0
T6 1 1 0 0
T10 1 1 0 0
T11 1 1 0 0
T12 1 1 0 0
T13 1 1 0 0

OtpAddrKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

OtpCmdKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

OtpErrorState_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 65 0 0
T7 23423 0 0 0
T18 30169 0 0 0
T96 80638 0 0 0
T98 9025 0 0 0
T101 9762 1 0 0
T104 19294 0 0 0
T124 81002 0 0 0
T130 79963 0 0 0
T178 0 1 0 0
T179 0 1 0 0
T193 0 1 0 0
T194 0 1 0 0
T197 0 1 0 0
T225 0 1 0 0
T227 0 1 0 0
T228 0 1 0 0
T229 0 1 0 0
T230 5936 0 0 0
T231 33895 0 0 0

OtpReqKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

OtpSizeKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

OtpWdataKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

ReadLockPropagation_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 183446947 0 0
T1 22574 2655 0 0
T2 4421 0 0 0
T3 8781 0 0 0
T4 44585 0 0 0
T5 27055 0 0 0
T6 24416 4905 0 0
T10 5255 0 0 0
T11 41583 6510 0 0
T12 28247 0 0 0
T13 70439 0 0 0
T18 0 5688 0 0
T94 0 1248 0 0
T95 0 909 0 0
T97 0 5674 0 0
T100 0 23091 0 0
T103 0 2021 0 0
T133 0 600 0 0

SizeMustBeBlockAligned_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1143 1143 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T5 1 1 0 0
T6 1 1 0 0
T10 1 1 0 0
T11 1 1 0 0
T12 1 1 0 0
T13 1 1 0 0

TlulGntKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

TlulRdataKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

TlulReadOnReadLock_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 8005 0 0
T1 22574 15 0 0
T2 4421 0 0 0
T3 8781 0 0 0
T4 44585 0 0 0
T5 27055 0 0 0
T6 24416 1 0 0
T7 0 14 0 0
T10 5255 0 0 0
T11 41583 8 0 0
T12 28247 10 0 0
T13 70439 0 0 0
T95 0 1 0 0
T97 0 2 0 0
T99 0 2 0 0
T100 0 4 0 0
T132 0 1 0 0

TlulRerrorKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

TlulRvalidKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

WriteLockPropagation_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 2694759 0 0
T1 22574 6279 0 0
T2 4421 0 0 0
T3 8781 0 0 0
T4 44585 0 0 0
T5 27055 0 0 0
T6 24416 0 0 0
T10 5255 0 0 0
T11 41583 0 0 0
T12 28247 0 0 0
T13 70439 0 0 0
T19 0 9867 0 0
T96 0 799 0 0
T97 0 16035 0 0
T107 0 2239 0 0
T124 0 38000 0 0
T127 0 6659 0 0
T129 0 2561 0 0
T130 0 8928 0 0
T149 0 14308 0 0

gen_digest_write_lock.DigestWriteLocksPartition_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 41012861 0 0
T1 22574 11426 0 0
T2 4421 0 0 0
T3 8781 0 0 0
T4 44585 0 0 0
T5 27055 0 0 0
T6 24416 0 0 0
T10 5255 0 0 0
T11 41583 28384 0 0
T12 28247 0 0 0
T13 70439 0 0 0
T18 0 20969 0 0
T96 0 61659 0 0
T97 0 68566 0 0
T101 0 3024 0 0
T103 0 11317 0 0
T104 0 12715 0 0
T124 0 60192 0 0
T130 0 64714 0 0

u_state_regs_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 472167808 471284346 0 0
T1 22574 22128 0 0
T2 4421 4340 0 0
T3 8781 8578 0 0
T4 44585 44107 0 0
T5 27055 26504 0 0
T6 24416 24094 0 0
T10 5255 5171 0 0
T11 41583 40923 0 0
T12 28247 27926 0 0
T13 70439 70364 0 0

0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%