Line Coverage for Instance : tb.dut.gen_partitions[0].gen_unbuffered.u_part_unbuf
| Line No. | Total | Covered | Percent |
TOTAL | | 91 | 86 | 94.51 |
CONT_ASSIGN | 138 | 1 | 1 | 100.00 |
ALWAYS | 153 | 3 | 3 | 100.00 |
ALWAYS | 164 | 66 | 61 | 92.42 |
CONT_ASSIGN | 334 | 1 | 1 | 100.00 |
CONT_ASSIGN | 336 | 1 | 1 | 100.00 |
CONT_ASSIGN | 339 | 1 | 1 | 100.00 |
CONT_ASSIGN | 349 | 1 | 1 | 100.00 |
CONT_ASSIGN | 350 | 1 | 1 | 100.00 |
CONT_ASSIGN | 354 | 1 | 1 | 100.00 |
CONT_ASSIGN | 358 | 1 | 1 | 100.00 |
CONT_ASSIGN | 395 | 1 | 1 | 100.00 |
CONT_ASSIGN | 420 | 1 | 1 | 100.00 |
CONT_ASSIGN | 454 | 1 | 1 | 100.00 |
ALWAYS | 461 | 3 | 3 | 100.00 |
ALWAYS | 464 | 8 | 8 | 100.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: T4 T6 T9
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 0/1 ==> state_d = ErrorSt;
225 0/1 ==> 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 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: T3 T4 T5
236 1/1 state_d = ReadSt;
Tests: T3 T4 T5
237 1/1 tlul_gnt_o = 1'b1;
Tests: T3 T4 T5
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: T3 T4 T5
247 // Double check the address range.
248 1/1 if (tlul_addr_in_range && mubi8_test_false_strict(access_o.read_lock)) begin
Tests: T3 T4 T5
249 1/1 otp_req_o = 1'b1;
Tests: T3 T4 T5
250 1/1 otp_addr_sel = DataAddrSel;
Tests: T3 T4 T5
251 1/1 if (otp_gnt_i) begin
Tests: T3 T4 T5
252 1/1 state_d = ReadWaitSt;
Tests: T3 T4 T5
253 end
MISSING_ELSE
254 end else begin
255 1/1 state_d = IdleSt;
Tests: T106 T113 T10
256 1/1 error_d = AccessError; // Signal this error, but do not go into terminal error state.
Tests: T106 T113 T10
257 1/1 tlul_rvalid_o = 1'b1;
Tests: T106 T113 T10
258 1/1 tlul_rerror_o = 2'b11; // This causes the TL-UL adapter to return a bus error.
Tests: T106 T113 T10
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: T3 T4 T5
267 1/1 if (otp_rvalid_i) begin
Tests: T3 T4 T5
268 1/1 tlul_rvalid_o = 1'b1;
Tests: T3 T4 T5
269 1/1 if (otp_err inside {NoError, MacroEccCorrError}) begin
Tests: T3 T4 T5
270 1/1 state_d = IdleSt;
Tests: T3 T4 T5
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: T3 T4 T5
273 excluded error_d = MacroEccCorrError;
Exclude Annotation: VC_COV_UNR
274 end
MISSING_ELSE
275 end else begin
276 0/1 ==> state_d = ErrorSt;
277 0/1 ==> error_d = otp_err;
278 // This causes the TL-UL adapter to return a bus error.
279 0/1 ==> 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 1/1 if (error_q == NoError) begin
Tests: T4 T6 T9
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: T4 T6 T9
294 1/1 tlul_rerror_o = 2'b11;
Tests: T9 T13 T106
295 1/1 tlul_rvalid_o = 1'b1;
Tests: T9 T13 T106
296 1/1 end else if (tlul_req_i) begin
Tests: T4 T6 T9
297 1/1 tlul_gnt_o = 1'b1;
Tests: T9 T13 T106
298 1/1 pending_tlul_error_d = 1'b1;
Tests: T9 T13 T106
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: T108 T151 T152
316 1/1 if (state_q != ErrorSt) begin
Tests: T108 T151 T152
317 1/1 error_d = CheckFailError;
Tests: T108 T151 T152
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: T4 T6 T9
323 1/1 fsm_err_o = 1'b1;
Tests: T4 T6 T9
324 1/1 if (state_q != ErrorSt) begin
Tests: T4 T6 T9
325 1/1 error_d = FsmStateError;
Tests: T4 T6 T9
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: T3 T4 T5
473 end
MISSING_ELSE
Cond Coverage for Instance : tb.dut.gen_partitions[0].gen_unbuffered.u_part_unbuf
| Total | Covered | Percent |
Conditions | 29 | 29 | 100.00 |
Logical | 29 | 29 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 220
EXPRESSION (otp_err != NoError)
----------1---------
-1- | Status | Tests | Exclude Annotation |
0 | Covered | T1,T2,T3 |
1 | Excluded | |
VC_COV_UNR |
LINE 272
EXPRESSION (otp_err != NoError)
----------1---------
-1- | Status | Tests | Exclude Annotation |
0 | Covered | T3,T4,T5 |
1 | Excluded | |
VC_COV_UNR |
LINE 288
EXPRESSION (error_q == NoError)
----------1---------
-1- | Status | Tests |
0 | Covered | T4,T6,T9 |
1 | Covered | T27,T28,T29 |
LINE 316
EXPRESSION (state_q != ErrorSt)
----------1---------
-1- | Status | Tests |
0 | Covered | T108,T151,T152 |
1 | Covered | T108,T151,T152 |
LINE 324
EXPRESSION (state_q != ErrorSt)
----------1---------
-1- | Status | Tests |
0 | Covered | T4,T6,T9 |
1 | Covered | T4,T6,T9 |
LINE 336
EXPRESSION ((tlul_rvalid_o && (tlul_rerror_o == '0)) ? otp_rdata_i[31:0] : '0)
--------------------1-------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T3,T4,T5 |
LINE 336
SUB-EXPRESSION (tlul_rvalid_o && (tlul_rerror_o == '0))
------1------ ----------2----------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T9,T13,T106 |
1 | 1 | Covered | T3,T4,T5 |
LINE 336
SUB-EXPRESSION (tlul_rerror_o == '0)
----------1----------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 349
EXPRESSION ((otp_addr_sel == DigestAddrSel) ? DigestOffset : ({tlul_addr_q, 2'b0}))
---------------1---------------
-1- | Status | Tests |
0 | Covered | T3,T4,T5 |
1 | Covered | T1,T2,T3 |
LINE 349
SUB-EXPRESSION (otp_addr_sel == DigestAddrSel)
---------------1---------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | Covered | T3,T4,T5 |
1 | Covered | T1,T2,T3 |
LINE 358
SUB-EXPRESSION (otp_addr_sel == DigestAddrSel)
---------------1---------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 395
EXPRESSION (((~init_done_o)) ? MuBi8True : MuBi8False)
--------1-------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 420
EXPRESSION ((digest_o != '0) ? MuBi8True : MuBi8False)
--------1-------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T4,T113,T96 |
LINE 420
SUB-EXPRESSION (digest_o != '0)
--------1-------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T4,T113,T96 |
FSM Coverage for Instance : tb.dut.gen_partitions[0].gen_unbuffered.u_part_unbuf
Summary for FSM :: state_q
| Total | Covered | Percent | |
States |
7 |
7 |
100.00 |
(Not included in score) |
Transitions |
13 |
10 |
76.92 |
|
Sequences |
0 |
0 |
|
|
State, Transition and Sequence Details for FSM :: state_q
states | Line No. | Covered | Tests |
ErrorSt |
224 |
Covered |
T4,T6,T9 |
IdleSt |
196 |
Covered |
T1,T2,T3 |
InitSt |
194 |
Covered |
T1,T2,T3 |
InitWaitSt |
207 |
Covered |
T1,T2,T3 |
ReadSt |
236 |
Covered |
T3,T4,T5 |
ReadWaitSt |
252 |
Covered |
T3,T4,T5 |
ResetSt |
190 |
Covered |
T1,T2,T3 |
transitions | Line No. | Covered | Tests | Exclude Annotation |
IdleSt->ErrorSt |
315 |
Covered |
T4,T6,T9 |
|
IdleSt->ReadSt |
236 |
Covered |
T3,T4,T5 |
|
InitSt->ErrorSt |
315 |
Not Covered |
|
|
InitSt->InitWaitSt |
207 |
Covered |
T1,T2,T3 |
|
InitWaitSt->ErrorSt |
224 |
Covered |
T200,T201,T202 |
|
InitWaitSt->IdleSt |
218 |
Covered |
T1,T2,T3 |
|
ReadSt->ErrorSt |
315 |
Not Covered |
|
|
ReadSt->IdleSt |
255 |
Covered |
T106,T113,T10 |
|
ReadSt->ReadWaitSt |
252 |
Covered |
T3,T4,T5 |
|
ReadWaitSt->ErrorSt |
276 |
Not Covered |
|
|
ReadWaitSt->IdleSt |
270 |
Covered |
T3,T4,T5 |
|
ResetSt->ErrorSt |
315 |
Covered |
T107,T108,T109 |
|
ResetSt->IdleSt |
196 |
Excluded |
|
VC_COV_UNR |
ResetSt->InitSt |
194 |
Covered |
T1,T2,T3 |
|
Summary for FSM :: error_q
| Total | Covered | Percent | |
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
states | Line No. | Covered | Tests | Exclude Annotation |
AccessError |
256 |
Covered |
T106,T113,T10 |
|
CheckFailError |
317 |
Covered |
T108,T151,T152 |
|
FsmStateError |
289 |
Covered |
T4,T6,T9 |
|
MacroEccCorrError |
221 |
Excluded |
|
VC_COV_UNR |
NoError |
235 |
Covered |
T1,T2,T3 |
|
transitions | Line No. | Covered | Tests | Exclude Annotation |
AccessError->CheckFailError |
317 |
Excluded |
|
|
AccessError->FsmStateError |
325 |
Covered |
T10,T167,T203 |
|
AccessError->MacroEccCorrError |
221 |
Excluded |
|
|
AccessError->NoError |
235 |
Covered |
T106,T113,T10 |
|
CheckFailError->AccessError |
256 |
Excluded |
|
VC_COV_UNR |
CheckFailError->FsmStateError |
325 |
Excluded |
|
VC_COV_UNR |
CheckFailError->MacroEccCorrError |
221 |
Excluded |
|
|
CheckFailError->NoError |
235 |
Covered |
T108,T151,T152 |
|
FsmStateError->AccessError |
256 |
Excluded |
|
VC_COV_UNR |
FsmStateError->CheckFailError |
317 |
Excluded |
|
VC_COV_UNR |
FsmStateError->MacroEccCorrError |
221 |
Excluded |
|
|
FsmStateError->NoError |
235 |
Covered |
T4,T6,T9 |
|
MacroEccCorrError->AccessError |
256 |
Excluded |
|
|
MacroEccCorrError->CheckFailError |
317 |
Excluded |
|
|
MacroEccCorrError->FsmStateError |
325 |
Excluded |
|
|
MacroEccCorrError->NoError |
235 |
Excluded |
|
|
NoError->AccessError |
256 |
Covered |
T106,T113,T10 |
|
NoError->CheckFailError |
317 |
Covered |
T108,T151,T152 |
|
NoError->FsmStateError |
289 |
Covered |
T4,T6,T9 |
|
NoError->MacroEccCorrError |
221 |
Excluded |
|
|
Branch Coverage for Instance : tb.dut.gen_partitions[0].gen_unbuffered.u_part_unbuf
| Line No. | Total | Covered | Percent |
Branches |
|
43 |
41 |
95.35 |
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 |
20 |
18 |
90.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- | Status | Tests |
1 |
Covered |
T3,T4,T5 |
0 |
Covered |
T1,T2,T3 |
349 assign addr_calc = (otp_addr_sel == DigestAddrSel) ? DigestOffset : {tlul_addr_q, 2'b00};
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T3,T4,T5 |
358 assign otp_size_o = (otp_addr_sel == DigestAddrSel) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T3,T4,T5 |
395 assign init_locked = (~init_done_o) ? MuBi8True : MuBi8False;
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
420 assign digest_locked = (digest_o != '0) ? MuBi8True : MuBi8False;
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T113,T96 |
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;
==>
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;
==>
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- | Status | Tests | Exclude 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 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Not Covered |
|
|
InitWaitSt |
- |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Covered |
T1,T2,T3 |
|
IdleSt |
- |
- |
- |
- |
- |
- |
1 |
- |
- |
- |
- |
- |
- |
- |
- |
Covered |
T3,T4,T5 |
|
IdleSt |
- |
- |
- |
- |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
Covered |
T1,T2,T3 |
|
ReadSt |
- |
- |
- |
- |
- |
- |
- |
1 |
1 |
- |
- |
- |
- |
- |
- |
Covered |
T3,T4,T5 |
|
ReadSt |
- |
- |
- |
- |
- |
- |
- |
1 |
0 |
- |
- |
- |
- |
- |
- |
Covered |
T132,T89,T114 |
|
ReadSt |
- |
- |
- |
- |
- |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
- |
Covered |
T106,T113,T10 |
|
ReadWaitSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
1 |
1 |
1 |
- |
- |
- |
Excluded |
|
VC_COV_UNR |
ReadWaitSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
1 |
1 |
0 |
- |
- |
- |
Covered |
T3,T4,T5 |
|
ReadWaitSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
1 |
0 |
- |
- |
- |
- |
Not Covered |
|
|
ReadWaitSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0 |
- |
- |
- |
- |
- |
Covered |
T3,T4,T5 |
|
ErrorSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
1 |
- |
- |
Covered |
T27,T28,T29 |
|
ErrorSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0 |
- |
- |
Covered |
T4,T6,T9 |
|
ErrorSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
1 |
- |
Covered |
T9,T13,T106 |
|
ErrorSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0 |
1 |
Covered |
T9,T13,T106 |
|
ErrorSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0 |
0 |
Covered |
T4,T6,T9 |
|
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- | Status | Tests |
1 |
1 |
Covered |
T108,T151,T152 |
1 |
0 |
Covered |
T108,T151,T152 |
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- | Status | Tests |
1 |
1 |
Covered |
T4,T6,T9 |
1 |
0 |
Covered |
T4,T6,T9 |
0 |
- |
Covered |
T1,T2,T3 |
461 `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt)
-1-
==>
==>
Branches:
-1- | Status | Tests |
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- | Status | Tests |
1 |
- |
Covered |
T1,T2,T3 |
0 |
1 |
Covered |
T3,T4,T5 |
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- | Status | Tests |
1 |
Covered |
T4,T6,T9 |
0 |
Covered |
T1,T2,T3 |
Assert Coverage for Instance : tb.dut.gen_partitions[0].gen_unbuffered.u_part_unbuf
Assertion Details
AccessKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
DigestKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
DigestOffsetMustBeRepresentable_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1121 |
1121 |
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 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
EccErrorState_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
7636 |
0 |
0 |
T20 |
211160 |
0 |
0 |
0 |
T108 |
9760 |
2710 |
0 |
0 |
T151 |
0 |
2263 |
0 |
0 |
T152 |
0 |
2663 |
0 |
0 |
T175 |
10655 |
0 |
0 |
0 |
T176 |
78034 |
0 |
0 |
0 |
T177 |
21234 |
0 |
0 |
0 |
T178 |
61960 |
0 |
0 |
0 |
T179 |
42087 |
0 |
0 |
0 |
T180 |
51893 |
0 |
0 |
0 |
T181 |
4191 |
0 |
0 |
0 |
T182 |
28742 |
0 |
0 |
0 |
ErrorKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
FsmStateKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
InitDoneKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
InitReadLocksPartition_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
16804387 |
0 |
0 |
T1 |
4713 |
317 |
0 |
0 |
T2 |
4353 |
45 |
0 |
0 |
T3 |
12890 |
961 |
0 |
0 |
T4 |
9919 |
3807 |
0 |
0 |
T5 |
13096 |
183 |
0 |
0 |
T6 |
10777 |
4475 |
0 |
0 |
T7 |
11887 |
204 |
0 |
0 |
T8 |
14599 |
409 |
0 |
0 |
T9 |
86346 |
11565 |
0 |
0 |
T13 |
30320 |
20782 |
0 |
0 |
InitWriteLocksPartition_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
16804387 |
0 |
0 |
T1 |
4713 |
317 |
0 |
0 |
T2 |
4353 |
45 |
0 |
0 |
T3 |
12890 |
961 |
0 |
0 |
T4 |
9919 |
3807 |
0 |
0 |
T5 |
13096 |
183 |
0 |
0 |
T6 |
10777 |
4475 |
0 |
0 |
T7 |
11887 |
204 |
0 |
0 |
T8 |
14599 |
409 |
0 |
0 |
T9 |
86346 |
11565 |
0 |
0 |
T13 |
30320 |
20782 |
0 |
0 |
OffsetMustBeBlockAligned_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1121 |
1121 |
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 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
OtpAddrKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
OtpCmdKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
OtpErrorState_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
0 |
0 |
0 |
OtpReqKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
OtpSizeKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
OtpWdataKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
ReadLockPropagation_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
17131950 |
0 |
0 |
T3 |
12890 |
1587 |
0 |
0 |
T4 |
9919 |
0 |
0 |
0 |
T5 |
13096 |
0 |
0 |
0 |
T6 |
10777 |
0 |
0 |
0 |
T7 |
11887 |
0 |
0 |
0 |
T8 |
14599 |
0 |
0 |
0 |
T9 |
86346 |
1543 |
0 |
0 |
T10 |
0 |
13497 |
0 |
0 |
T13 |
30320 |
0 |
0 |
0 |
T17 |
5523 |
0 |
0 |
0 |
T88 |
0 |
1009 |
0 |
0 |
T95 |
0 |
1148 |
0 |
0 |
T96 |
0 |
27237 |
0 |
0 |
T106 |
0 |
576 |
0 |
0 |
T112 |
4712 |
0 |
0 |
0 |
T113 |
0 |
4570 |
0 |
0 |
T119 |
0 |
8346 |
0 |
0 |
T132 |
0 |
1754 |
0 |
0 |
SizeMustBeBlockAligned_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1121 |
1121 |
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 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
TlulGntKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
TlulRdataKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
TlulReadOnReadLock_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
6238 |
0 |
0 |
T9 |
86346 |
3 |
0 |
0 |
T10 |
0 |
9 |
0 |
0 |
T13 |
30320 |
1 |
0 |
0 |
T17 |
5523 |
0 |
0 |
0 |
T25 |
65064 |
0 |
0 |
0 |
T73 |
0 |
2 |
0 |
0 |
T89 |
0 |
7 |
0 |
0 |
T91 |
10687 |
0 |
0 |
0 |
T95 |
18358 |
0 |
0 |
0 |
T96 |
0 |
5 |
0 |
0 |
T97 |
7637 |
0 |
0 |
0 |
T101 |
12121 |
0 |
0 |
0 |
T106 |
0 |
6 |
0 |
0 |
T112 |
4712 |
0 |
0 |
0 |
T113 |
0 |
2 |
0 |
0 |
T117 |
0 |
9 |
0 |
0 |
T119 |
0 |
5 |
0 |
0 |
T133 |
11192 |
0 |
0 |
0 |
TlulRerrorKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
TlulRvalidKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
WriteLockPropagation_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
2460521 |
0 |
0 |
T11 |
27346 |
0 |
0 |
0 |
T73 |
47563 |
7266 |
0 |
0 |
T74 |
0 |
4304 |
0 |
0 |
T88 |
32488 |
0 |
0 |
0 |
T89 |
65687 |
4411 |
0 |
0 |
T90 |
102365 |
0 |
0 |
0 |
T98 |
0 |
12796 |
0 |
0 |
T99 |
0 |
1158 |
0 |
0 |
T102 |
0 |
4807 |
0 |
0 |
T103 |
0 |
15085 |
0 |
0 |
T116 |
0 |
2761 |
0 |
0 |
T117 |
15268 |
0 |
0 |
0 |
T118 |
4956 |
0 |
0 |
0 |
T119 |
17429 |
0 |
0 |
0 |
T120 |
45439 |
0 |
0 |
0 |
T121 |
29078 |
0 |
0 |
0 |
T125 |
0 |
1082 |
0 |
0 |
T144 |
0 |
7383 |
0 |
0 |
gen_digest_write_lock.DigestWriteLocksPartition_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
33547358 |
0 |
0 |
T4 |
9919 |
2790 |
0 |
0 |
T5 |
13096 |
0 |
0 |
0 |
T6 |
10777 |
0 |
0 |
0 |
T7 |
11887 |
0 |
0 |
0 |
T8 |
14599 |
0 |
0 |
0 |
T9 |
86346 |
0 |
0 |
0 |
T13 |
30320 |
0 |
0 |
0 |
T17 |
5523 |
0 |
0 |
0 |
T25 |
65064 |
0 |
0 |
0 |
T73 |
0 |
25313 |
0 |
0 |
T74 |
0 |
48992 |
0 |
0 |
T89 |
0 |
55080 |
0 |
0 |
T90 |
0 |
32114 |
0 |
0 |
T96 |
0 |
60683 |
0 |
0 |
T102 |
0 |
34787 |
0 |
0 |
T103 |
0 |
106672 |
0 |
0 |
T112 |
4712 |
0 |
0 |
0 |
T113 |
0 |
24293 |
0 |
0 |
T119 |
0 |
3437 |
0 |
0 |
u_state_regs_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
Line Coverage for Instance : tb.dut.gen_partitions[1].gen_unbuffered.u_part_unbuf
| Line No. | Total | Covered | Percent |
TOTAL | | 91 | 91 | 100.00 |
CONT_ASSIGN | 138 | 1 | 1 | 100.00 |
CONT_ASSIGN | 149 | 1 | 1 | 100.00 |
ALWAYS | 164 | 68 | 68 | 100.00 |
CONT_ASSIGN | 334 | 1 | 1 | 100.00 |
CONT_ASSIGN | 336 | 1 | 1 | 100.00 |
CONT_ASSIGN | 342 | 1 | 1 | 100.00 |
CONT_ASSIGN | 349 | 1 | 1 | 100.00 |
CONT_ASSIGN | 350 | 1 | 1 | 100.00 |
CONT_ASSIGN | 354 | 1 | 1 | 100.00 |
CONT_ASSIGN | 358 | 1 | 1 | 100.00 |
CONT_ASSIGN | 395 | 1 | 1 | 100.00 |
CONT_ASSIGN | 420 | 1 | 1 | 100.00 |
CONT_ASSIGN | 454 | 1 | 1 | 100.00 |
ALWAYS | 461 | 3 | 3 | 100.00 |
ALWAYS | 464 | 8 | 8 | 100.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: T4 T153 T154
222 end
MISSING_ELSE
223 end else begin
224 1/1 state_d = ErrorSt;
Tests: T101 T133 T155
225 1/1 error_d = otp_err;
Tests: T101 T133 T155
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: T3 T4 T5
236 1/1 state_d = ReadSt;
Tests: T3 T4 T5
237 1/1 tlul_gnt_o = 1'b1;
Tests: T3 T4 T5
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: T3 T4 T5
247 // Double check the address range.
248 1/1 if (tlul_addr_in_range && mubi8_test_false_strict(access_o.read_lock)) begin
Tests: T3 T4 T5
249 1/1 otp_req_o = 1'b1;
Tests: T4 T5 T6
250 1/1 otp_addr_sel = DataAddrSel;
Tests: T4 T5 T6
251 1/1 if (otp_gnt_i) begin
Tests: T4 T5 T6
252 1/1 state_d = ReadWaitSt;
Tests: T4 T5 T6
253 end
MISSING_ELSE
254 end else begin
255 1/1 state_d = IdleSt;
Tests: T3 T113 T96
256 1/1 error_d = AccessError; // Signal this error, but do not go into terminal error state.
Tests: T3 T113 T96
257 1/1 tlul_rvalid_o = 1'b1;
Tests: T3 T113 T96
258 1/1 tlul_rerror_o = 2'b11; // This causes the TL-UL adapter to return a bus error.
Tests: T3 T113 T96
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: T4 T5 T6
267 1/1 if (otp_rvalid_i) begin
Tests: T4 T5 T6
268 1/1 tlul_rvalid_o = 1'b1;
Tests: T4 T5 T6
269 1/1 if (otp_err inside {NoError, MacroEccCorrError}) begin
Tests: T4 T5 T6
270 1/1 state_d = IdleSt;
Tests: T4 T5 T6
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: T4 T5 T6
273 1/1 error_d = MacroEccCorrError;
Tests: T73 T74 T156
274 end
MISSING_ELSE
275 end else begin
276 1/1 state_d = ErrorSt;
Tests: T157 T158 T159
277 1/1 error_d = otp_err;
Tests: T157 T158 T159
278 // This causes the TL-UL adapter to return a bus error.
279 1/1 tlul_rerror_o = 2'b11;
Tests: T157 T158 T159
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: T4 T6 T9
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: T4 T6 T9
294 1/1 tlul_rerror_o = 2'b11;
Tests: T9 T13 T106
295 1/1 tlul_rvalid_o = 1'b1;
Tests: T9 T13 T106
296 1/1 end else if (tlul_req_i) begin
Tests: T4 T6 T9
297 1/1 tlul_gnt_o = 1'b1;
Tests: T9 T13 T106
298 1/1 pending_tlul_error_d = 1'b1;
Tests: T9 T13 T106
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: T152
316 1/1 if (state_q != ErrorSt) begin
Tests: T152
317 1/1 error_d = CheckFailError;
Tests: T152
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: T4 T6 T9
323 1/1 fsm_err_o = 1'b1;
Tests: T4 T6 T9
324 1/1 if (state_q != ErrorSt) begin
Tests: T4 T6 T9
325 1/1 error_d = FsmStateError;
Tests: T4 T6 T9
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: T3 T4 T5
473 end
MISSING_ELSE
Cond Coverage for Instance : tb.dut.gen_partitions[1].gen_unbuffered.u_part_unbuf
| Total | Covered | Percent |
Conditions | 33 | 33 | 100.00 |
Logical | 33 | 33 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 220
EXPRESSION (otp_err != NoError)
----------1---------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T4,T153,T154 |
LINE 272
EXPRESSION (otp_err != NoError)
----------1---------
-1- | Status | Tests |
0 | Covered | T4,T5,T6 |
1 | Covered | T73,T74,T156 |
LINE 288
EXPRESSION (error_q == NoError)
----------1---------
-1- | Status | Tests |
0 | Covered | T4,T6,T9 |
1 | Covered | T27,T28,T29 |
LINE 316
EXPRESSION (state_q != ErrorSt)
----------1---------
-1- | Status | Tests |
0 | Covered | T152 |
1 | Covered | T152 |
LINE 324
EXPRESSION (state_q != ErrorSt)
----------1---------
-1- | Status | Tests |
0 | Covered | T4,T6,T9 |
1 | Covered | T4,T6,T9 |
LINE 336
EXPRESSION ((tlul_rvalid_o && (tlul_rerror_o == '0)) ? otp_rdata_i[31:0] : '0)
--------------------1-------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T4,T5,T6 |
LINE 336
SUB-EXPRESSION (tlul_rvalid_o && (tlul_rerror_o == '0))
------1------ ----------2----------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T3,T9,T13 |
1 | 1 | Covered | T4,T5,T6 |
LINE 336
SUB-EXPRESSION (tlul_rerror_o == '0)
----------1----------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 342
EXPRESSION (({tlul_addr_q, 2'b0} >= 11'b00001000000) && ({1'b0, tlul_addr_q, 2'b0} < PartEnd))
--------------------1------------------- ------------------2------------------
-1- | -2- | Status | Tests | Exclude Annotation |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Excluded | |
VC_COV_UNR |
1 | 1 | Covered | T3,T4,T5 |
LINE 349
EXPRESSION ((otp_addr_sel == DigestAddrSel) ? DigestOffset : ({tlul_addr_q, 2'b0}))
---------------1---------------
-1- | Status | Tests |
0 | Covered | T4,T5,T6 |
1 | Covered | T1,T2,T3 |
LINE 349
SUB-EXPRESSION (otp_addr_sel == DigestAddrSel)
---------------1---------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | Covered | T4,T5,T6 |
1 | Covered | T1,T2,T3 |
LINE 358
SUB-EXPRESSION (otp_addr_sel == DigestAddrSel)
---------------1---------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 395
EXPRESSION (((~init_done_o)) ? MuBi8True : MuBi8False)
--------1-------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 420
EXPRESSION ((digest_o != '0) ? MuBi8True : MuBi8False)
--------1-------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T9,T95,T101 |
LINE 420
SUB-EXPRESSION (digest_o != '0)
--------1-------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T9,T95,T101 |
FSM Coverage for Instance : tb.dut.gen_partitions[1].gen_unbuffered.u_part_unbuf
Summary for FSM :: state_q
| Total | Covered | Percent | |
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
states | Line No. | Covered | Tests |
ErrorSt |
224 |
Covered |
T4,T6,T9 |
IdleSt |
196 |
Covered |
T1,T2,T3 |
InitSt |
194 |
Covered |
T1,T2,T3 |
InitWaitSt |
207 |
Covered |
T1,T2,T3 |
ReadSt |
236 |
Covered |
T3,T4,T5 |
ReadWaitSt |
252 |
Covered |
T4,T5,T6 |
ResetSt |
190 |
Covered |
T1,T2,T3 |
transitions | Line No. | Covered | Tests | Exclude Annotation |
IdleSt->ErrorSt |
315 |
Covered |
T4,T6,T9 |
|
IdleSt->ReadSt |
236 |
Covered |
T3,T4,T5 |
|
InitSt->ErrorSt |
315 |
Covered |
T200,T201,T202 |
|
InitSt->InitWaitSt |
207 |
Covered |
T1,T2,T3 |
|
InitWaitSt->ErrorSt |
224 |
Covered |
T101,T133,T155 |
|
InitWaitSt->IdleSt |
218 |
Covered |
T1,T2,T3 |
|
ReadSt->ErrorSt |
315 |
Not Covered |
|
|
ReadSt->IdleSt |
255 |
Covered |
T3,T113,T96 |
|
ReadSt->ReadWaitSt |
252 |
Covered |
T4,T5,T6 |
|
ReadWaitSt->ErrorSt |
276 |
Covered |
T157,T158,T159 |
|
ReadWaitSt->IdleSt |
270 |
Covered |
T4,T5,T6 |
|
ResetSt->ErrorSt |
315 |
Covered |
T107,T108,T109 |
|
ResetSt->IdleSt |
196 |
Excluded |
|
VC_COV_UNR |
ResetSt->InitSt |
194 |
Covered |
T1,T2,T3 |
|
Summary for FSM :: error_q
| Total | Covered | Percent | |
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
states | Line No. | Covered | Tests |
AccessError |
256 |
Covered |
T3,T113,T96 |
CheckFailError |
317 |
Covered |
T152 |
FsmStateError |
289 |
Covered |
T4,T6,T9 |
MacroEccCorrError |
221 |
Covered |
T4,T73,T74 |
NoError |
235 |
Covered |
T1,T2,T3 |
transitions | Line No. | Covered | Tests | Exclude Annotation |
AccessError->CheckFailError |
317 |
Excluded |
|
VC_COV_UNR |
AccessError->FsmStateError |
325 |
Covered |
T11,T156,T203 |
|
AccessError->MacroEccCorrError |
221 |
Excluded |
|
VC_COV_UNR |
AccessError->NoError |
235 |
Covered |
T3,T113,T96 |
|
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 |
T152 |
|
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 |
T4,T6,T9 |
|
MacroEccCorrError->AccessError |
256 |
Excluded |
|
VC_COV_UNR |
MacroEccCorrError->CheckFailError |
317 |
Not Covered |
|
|
MacroEccCorrError->FsmStateError |
325 |
Covered |
T4,T156,T166 |
|
MacroEccCorrError->NoError |
235 |
Covered |
T73,T74,T51 |
|
NoError->AccessError |
256 |
Covered |
T3,T113,T96 |
|
NoError->CheckFailError |
317 |
Covered |
T152 |
|
NoError->FsmStateError |
289 |
Covered |
T6,T9,T13 |
|
NoError->MacroEccCorrError |
221 |
Covered |
T4,T73,T74 |
|
Branch Coverage for Instance : tb.dut.gen_partitions[1].gen_unbuffered.u_part_unbuf
| Line No. | Total | Covered | Percent |
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- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T1,T2,T3 |
349 assign addr_calc = (otp_addr_sel == DigestAddrSel) ? DigestOffset : {tlul_addr_q, 2'b00};
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T4,T5,T6 |
358 assign otp_size_o = (otp_addr_sel == DigestAddrSel) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T4,T5,T6 |
395 assign init_locked = (~init_done_o) ? MuBi8True : MuBi8False;
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
420 assign digest_locked = (digest_o != '0) ? MuBi8True : MuBi8False;
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T9,T95,T101 |
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- | Status | Tests |
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 |
T4,T153,T154 |
InitWaitSt |
- |
- |
- |
1 |
1 |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Covered |
T1,T2,T3 |
InitWaitSt |
- |
- |
- |
1 |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Covered |
T101,T133,T155 |
InitWaitSt |
- |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Covered |
T1,T2,T3 |
IdleSt |
- |
- |
- |
- |
- |
- |
1 |
- |
- |
- |
- |
- |
- |
- |
- |
Covered |
T3,T4,T5 |
IdleSt |
- |
- |
- |
- |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
Covered |
T1,T2,T3 |
ReadSt |
- |
- |
- |
- |
- |
- |
- |
1 |
1 |
- |
- |
- |
- |
- |
- |
Covered |
T4,T5,T6 |
ReadSt |
- |
- |
- |
- |
- |
- |
- |
1 |
0 |
- |
- |
- |
- |
- |
- |
Covered |
T132,T89,T199 |
ReadSt |
- |
- |
- |
- |
- |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
- |
Covered |
T3,T113,T96 |
ReadWaitSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
1 |
1 |
1 |
- |
- |
- |
Covered |
T73,T74,T156 |
ReadWaitSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
1 |
1 |
0 |
- |
- |
- |
Covered |
T4,T5,T6 |
ReadWaitSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
1 |
0 |
- |
- |
- |
- |
Covered |
T157,T158,T159 |
ReadWaitSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0 |
- |
- |
- |
- |
- |
Covered |
T4,T5,T6 |
ErrorSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
1 |
- |
- |
Covered |
T27,T28,T29 |
ErrorSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0 |
- |
- |
Covered |
T4,T6,T9 |
ErrorSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
1 |
- |
Covered |
T9,T13,T106 |
ErrorSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0 |
1 |
Covered |
T9,T13,T106 |
ErrorSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0 |
0 |
Covered |
T4,T6,T9 |
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- | Status | Tests |
1 |
1 |
Covered |
T152 |
1 |
0 |
Covered |
T152 |
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- | Status | Tests |
1 |
1 |
Covered |
T4,T6,T9 |
1 |
0 |
Covered |
T4,T6,T9 |
0 |
- |
Covered |
T1,T2,T3 |
461 `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt)
-1-
==>
==>
Branches:
-1- | Status | Tests |
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- | Status | Tests |
1 |
- |
Covered |
T1,T2,T3 |
0 |
1 |
Covered |
T3,T4,T5 |
0 |
0 |
Covered |
T1,T2,T3 |
Assert Coverage for Instance : tb.dut.gen_partitions[1].gen_unbuffered.u_part_unbuf
Assertion Details
AccessKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
DigestKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
DigestOffsetMustBeRepresentable_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1121 |
1121 |
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 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
EccErrorState_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
2663 |
0 |
0 |
T152 |
8715 |
2663 |
0 |
0 |
T183 |
12410 |
0 |
0 |
0 |
T184 |
10751 |
0 |
0 |
0 |
T185 |
16969 |
0 |
0 |
0 |
T186 |
14578 |
0 |
0 |
0 |
T187 |
12721 |
0 |
0 |
0 |
T188 |
16232 |
0 |
0 |
0 |
T189 |
14443 |
0 |
0 |
0 |
T190 |
9344 |
0 |
0 |
0 |
T191 |
16713 |
0 |
0 |
0 |
ErrorKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
FsmStateKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
InitDoneKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
InitReadLocksPartition_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
16986719 |
0 |
0 |
T1 |
4713 |
334 |
0 |
0 |
T2 |
4353 |
62 |
0 |
0 |
T3 |
12890 |
978 |
0 |
0 |
T4 |
9919 |
3858 |
0 |
0 |
T5 |
13096 |
251 |
0 |
0 |
T6 |
10777 |
4509 |
0 |
0 |
T7 |
11887 |
272 |
0 |
0 |
T8 |
14599 |
443 |
0 |
0 |
T9 |
86346 |
11956 |
0 |
0 |
T13 |
30320 |
20850 |
0 |
0 |
InitWriteLocksPartition_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
16986719 |
0 |
0 |
T1 |
4713 |
334 |
0 |
0 |
T2 |
4353 |
62 |
0 |
0 |
T3 |
12890 |
978 |
0 |
0 |
T4 |
9919 |
3858 |
0 |
0 |
T5 |
13096 |
251 |
0 |
0 |
T6 |
10777 |
4509 |
0 |
0 |
T7 |
11887 |
272 |
0 |
0 |
T8 |
14599 |
443 |
0 |
0 |
T9 |
86346 |
11956 |
0 |
0 |
T13 |
30320 |
20850 |
0 |
0 |
OffsetMustBeBlockAligned_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1121 |
1121 |
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 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
OtpAddrKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
OtpCmdKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
OtpErrorState_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
61 |
0 |
0 |
T10 |
20914 |
0 |
0 |
0 |
T101 |
12121 |
1 |
0 |
0 |
T106 |
14328 |
0 |
0 |
0 |
T113 |
36347 |
0 |
0 |
0 |
T129 |
14395 |
0 |
0 |
0 |
T130 |
14658 |
0 |
0 |
0 |
T131 |
36581 |
0 |
0 |
0 |
T133 |
11192 |
1 |
0 |
0 |
T137 |
47741 |
0 |
0 |
0 |
T155 |
0 |
1 |
0 |
0 |
T157 |
0 |
1 |
0 |
0 |
T158 |
0 |
1 |
0 |
0 |
T159 |
0 |
1 |
0 |
0 |
T192 |
0 |
1 |
0 |
0 |
T193 |
0 |
1 |
0 |
0 |
T195 |
0 |
1 |
0 |
0 |
T197 |
0 |
1 |
0 |
0 |
T198 |
5787 |
0 |
0 |
0 |
OtpReqKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
OtpSizeKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
OtpWdataKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
ReadLockPropagation_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
17765933 |
0 |
0 |
T3 |
12890 |
7252 |
0 |
0 |
T4 |
9919 |
0 |
0 |
0 |
T5 |
13096 |
0 |
0 |
0 |
T6 |
10777 |
0 |
0 |
0 |
T7 |
11887 |
0 |
0 |
0 |
T8 |
14599 |
0 |
0 |
0 |
T9 |
86346 |
0 |
0 |
0 |
T11 |
0 |
18860 |
0 |
0 |
T13 |
30320 |
0 |
0 |
0 |
T17 |
5523 |
0 |
0 |
0 |
T89 |
0 |
7067 |
0 |
0 |
T95 |
0 |
1146 |
0 |
0 |
T96 |
0 |
32905 |
0 |
0 |
T102 |
0 |
6918 |
0 |
0 |
T112 |
4712 |
0 |
0 |
0 |
T113 |
0 |
5994 |
0 |
0 |
T119 |
0 |
8338 |
0 |
0 |
T130 |
0 |
4445 |
0 |
0 |
T132 |
0 |
1886 |
0 |
0 |
SizeMustBeBlockAligned_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1121 |
1121 |
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 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
TlulGntKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
TlulRdataKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
TlulReadOnReadLock_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
6412 |
0 |
0 |
T3 |
12890 |
2 |
0 |
0 |
T4 |
9919 |
0 |
0 |
0 |
T5 |
13096 |
0 |
0 |
0 |
T6 |
10777 |
0 |
0 |
0 |
T7 |
11887 |
0 |
0 |
0 |
T8 |
14599 |
0 |
0 |
0 |
T9 |
86346 |
2 |
0 |
0 |
T10 |
0 |
13 |
0 |
0 |
T13 |
30320 |
2 |
0 |
0 |
T17 |
5523 |
0 |
0 |
0 |
T89 |
0 |
10 |
0 |
0 |
T96 |
0 |
10 |
0 |
0 |
T106 |
0 |
2 |
0 |
0 |
T112 |
4712 |
0 |
0 |
0 |
T113 |
0 |
2 |
0 |
0 |
T117 |
0 |
6 |
0 |
0 |
T119 |
0 |
3 |
0 |
0 |
TlulRerrorKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
TlulRvalidKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
WriteLockPropagation_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
3002518 |
0 |
0 |
T10 |
20914 |
0 |
0 |
0 |
T18 |
0 |
10531 |
0 |
0 |
T73 |
47563 |
0 |
0 |
0 |
T82 |
13656 |
0 |
0 |
0 |
T88 |
32488 |
0 |
0 |
0 |
T89 |
0 |
4180 |
0 |
0 |
T96 |
73939 |
0 |
0 |
0 |
T98 |
0 |
12297 |
0 |
0 |
T102 |
0 |
2277 |
0 |
0 |
T103 |
0 |
7810 |
0 |
0 |
T113 |
36347 |
2029 |
0 |
0 |
T114 |
0 |
5590 |
0 |
0 |
T115 |
0 |
1104 |
0 |
0 |
T117 |
15268 |
0 |
0 |
0 |
T124 |
0 |
24624 |
0 |
0 |
T125 |
0 |
5343 |
0 |
0 |
T131 |
36581 |
0 |
0 |
0 |
T132 |
22725 |
0 |
0 |
0 |
T137 |
47741 |
0 |
0 |
0 |
gen_digest_write_lock.DigestWriteLocksPartition_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
31782225 |
0 |
0 |
T9 |
86346 |
6494 |
0 |
0 |
T13 |
30320 |
0 |
0 |
0 |
T17 |
5523 |
0 |
0 |
0 |
T25 |
65064 |
0 |
0 |
0 |
T89 |
0 |
54876 |
0 |
0 |
T90 |
0 |
31995 |
0 |
0 |
T91 |
10687 |
0 |
0 |
0 |
T95 |
18358 |
8663 |
0 |
0 |
T96 |
0 |
60496 |
0 |
0 |
T97 |
7637 |
0 |
0 |
0 |
T101 |
12121 |
2635 |
0 |
0 |
T102 |
0 |
34668 |
0 |
0 |
T112 |
4712 |
0 |
0 |
0 |
T113 |
0 |
15969 |
0 |
0 |
T119 |
0 |
3420 |
0 |
0 |
T133 |
11192 |
2959 |
0 |
0 |
u_state_regs_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
Line Coverage for Instance : tb.dut.gen_partitions[2].gen_unbuffered.u_part_unbuf
| Line No. | Total | Covered | Percent |
TOTAL | | 91 | 91 | 100.00 |
CONT_ASSIGN | 138 | 1 | 1 | 100.00 |
CONT_ASSIGN | 149 | 1 | 1 | 100.00 |
ALWAYS | 164 | 68 | 68 | 100.00 |
CONT_ASSIGN | 334 | 1 | 1 | 100.00 |
CONT_ASSIGN | 336 | 1 | 1 | 100.00 |
CONT_ASSIGN | 342 | 1 | 1 | 100.00 |
CONT_ASSIGN | 349 | 1 | 1 | 100.00 |
CONT_ASSIGN | 350 | 1 | 1 | 100.00 |
CONT_ASSIGN | 354 | 1 | 1 | 100.00 |
CONT_ASSIGN | 358 | 1 | 1 | 100.00 |
CONT_ASSIGN | 395 | 1 | 1 | 100.00 |
CONT_ASSIGN | 420 | 1 | 1 | 100.00 |
CONT_ASSIGN | 454 | 1 | 1 | 100.00 |
ALWAYS | 461 | 3 | 3 | 100.00 |
ALWAYS | 464 | 8 | 8 | 100.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: T160 T69 T161
222 end
MISSING_ELSE
223 end else begin
224 1/1 state_d = ErrorSt;
Tests: T134 T162 T153
225 1/1 error_d = otp_err;
Tests: T134 T162 T153
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: T3 T4 T5
236 1/1 state_d = ReadSt;
Tests: T3 T4 T5
237 1/1 tlul_gnt_o = 1'b1;
Tests: T3 T4 T5
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: T3 T4 T5
247 // Double check the address range.
248 1/1 if (tlul_addr_in_range && mubi8_test_false_strict(access_o.read_lock)) begin
Tests: T3 T4 T5
249 1/1 otp_req_o = 1'b1;
Tests: T4 T5 T6
250 1/1 otp_addr_sel = DataAddrSel;
Tests: T4 T5 T6
251 1/1 if (otp_gnt_i) begin
Tests: T4 T5 T6
252 1/1 state_d = ReadWaitSt;
Tests: T4 T5 T6
253 end
MISSING_ELSE
254 end else begin
255 1/1 state_d = IdleSt;
Tests: T3 T130 T106
256 1/1 error_d = AccessError; // Signal this error, but do not go into terminal error state.
Tests: T3 T130 T106
257 1/1 tlul_rvalid_o = 1'b1;
Tests: T3 T130 T106
258 1/1 tlul_rerror_o = 2'b11; // This causes the TL-UL adapter to return a bus error.
Tests: T3 T130 T106
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: T4 T5 T6
267 1/1 if (otp_rvalid_i) begin
Tests: T4 T5 T6
268 1/1 tlul_rvalid_o = 1'b1;
Tests: T4 T5 T6
269 1/1 if (otp_err inside {NoError, MacroEccCorrError}) begin
Tests: T4 T5 T6
270 1/1 state_d = IdleSt;
Tests: T4 T5 T6
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: T4 T5 T6
273 1/1 error_d = MacroEccCorrError;
Tests: T102 T74 T156
274 end
MISSING_ELSE
275 end else begin
276 1/1 state_d = ErrorSt;
Tests: T9 T156 T157
277 1/1 error_d = otp_err;
Tests: T9 T156 T157
278 // This causes the TL-UL adapter to return a bus error.
279 1/1 tlul_rerror_o = 2'b11;
Tests: T9 T156 T157
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: T4 T6 T9
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: T4 T6 T9
294 1/1 tlul_rerror_o = 2'b11;
Tests: T9 T13 T106
295 1/1 tlul_rvalid_o = 1'b1;
Tests: T9 T13 T106
296 1/1 end else if (tlul_req_i) begin
Tests: T4 T6 T9
297 1/1 tlul_gnt_o = 1'b1;
Tests: T9 T13 T106
298 1/1 pending_tlul_error_d = 1'b1;
Tests: T9 T13 T106
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: T151
316 1/1 if (state_q != ErrorSt) begin
Tests: T151
317 1/1 error_d = CheckFailError;
Tests: T151
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: T4 T6 T9
323 1/1 fsm_err_o = 1'b1;
Tests: T4 T6 T9
324 1/1 if (state_q != ErrorSt) begin
Tests: T4 T6 T9
325 1/1 error_d = FsmStateError;
Tests: T4 T6 T9
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: T3 T4 T5
473 end
MISSING_ELSE
Cond Coverage for Instance : tb.dut.gen_partitions[2].gen_unbuffered.u_part_unbuf
| Total | Covered | Percent |
Conditions | 33 | 33 | 100.00 |
Logical | 33 | 33 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 220
EXPRESSION (otp_err != NoError)
----------1---------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T160,T69,T161 |
LINE 272
EXPRESSION (otp_err != NoError)
----------1---------
-1- | Status | Tests |
0 | Covered | T4,T5,T6 |
1 | Covered | T102,T74,T156 |
LINE 288
EXPRESSION (error_q == NoError)
----------1---------
-1- | Status | Tests |
0 | Covered | T4,T6,T9 |
1 | Covered | T27,T28,T29 |
LINE 316
EXPRESSION (state_q != ErrorSt)
----------1---------
-1- | Status | Tests |
0 | Covered | T151 |
1 | Covered | T151 |
LINE 324
EXPRESSION (state_q != ErrorSt)
----------1---------
-1- | Status | Tests |
0 | Covered | T4,T6,T9 |
1 | Covered | T4,T6,T9 |
LINE 336
EXPRESSION ((tlul_rvalid_o && (tlul_rerror_o == '0)) ? otp_rdata_i[31:0] : '0)
--------------------1-------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T4,T5,T6 |
LINE 336
SUB-EXPRESSION (tlul_rvalid_o && (tlul_rerror_o == '0))
------1------ ----------2----------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T3,T9,T13 |
1 | 1 | Covered | T4,T5,T6 |
LINE 336
SUB-EXPRESSION (tlul_rerror_o == '0)
----------1----------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 342
EXPRESSION (({tlul_addr_q, 2'b0} >= 11'b00110110000) && ({1'b0, tlul_addr_q, 2'b0} < PartEnd))
--------------------1------------------- ------------------2------------------
-1- | -2- | Status | Tests | Exclude Annotation |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Excluded | |
VC_COV_UNR |
1 | 1 | Covered | T3,T4,T5 |
LINE 349
EXPRESSION ((otp_addr_sel == DigestAddrSel) ? DigestOffset : ({tlul_addr_q, 2'b0}))
---------------1---------------
-1- | Status | Tests |
0 | Covered | T4,T5,T6 |
1 | Covered | T1,T2,T3 |
LINE 349
SUB-EXPRESSION (otp_addr_sel == DigestAddrSel)
---------------1---------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | Covered | T4,T5,T6 |
1 | Covered | T1,T2,T3 |
LINE 358
SUB-EXPRESSION (otp_addr_sel == DigestAddrSel)
---------------1---------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 395
EXPRESSION (((~init_done_o)) ? MuBi8True : MuBi8False)
--------1-------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 420
EXPRESSION ((digest_o != '0) ? MuBi8True : MuBi8False)
--------1-------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T9,T95,T130 |
LINE 420
SUB-EXPRESSION (digest_o != '0)
--------1-------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T9,T95,T130 |
FSM Coverage for Instance : tb.dut.gen_partitions[2].gen_unbuffered.u_part_unbuf
Summary for FSM :: state_q
| Total | Covered | Percent | |
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
states | Line No. | Covered | Tests |
ErrorSt |
224 |
Covered |
T4,T6,T9 |
IdleSt |
196 |
Covered |
T1,T2,T3 |
InitSt |
194 |
Covered |
T1,T2,T3 |
InitWaitSt |
207 |
Covered |
T1,T2,T3 |
ReadSt |
236 |
Covered |
T3,T4,T5 |
ReadWaitSt |
252 |
Covered |
T4,T5,T6 |
ResetSt |
190 |
Covered |
T1,T2,T3 |
transitions | Line No. | Covered | Tests | Exclude Annotation |
IdleSt->ErrorSt |
315 |
Covered |
T4,T6,T9 |
|
IdleSt->ReadSt |
236 |
Covered |
T3,T4,T5 |
|
InitSt->ErrorSt |
315 |
Covered |
T200,T204,T201 |
|
InitSt->InitWaitSt |
207 |
Covered |
T1,T2,T3 |
|
InitWaitSt->ErrorSt |
224 |
Covered |
T101,T133,T134 |
|
InitWaitSt->IdleSt |
218 |
Covered |
T1,T2,T3 |
|
ReadSt->ErrorSt |
315 |
Not Covered |
|
|
ReadSt->IdleSt |
255 |
Covered |
T3,T130,T106 |
|
ReadSt->ReadWaitSt |
252 |
Covered |
T4,T5,T6 |
|
ReadWaitSt->ErrorSt |
276 |
Covered |
T9,T156,T157 |
|
ReadWaitSt->IdleSt |
270 |
Covered |
T4,T5,T6 |
|
ResetSt->ErrorSt |
315 |
Covered |
T107,T108,T109 |
|
ResetSt->IdleSt |
196 |
Excluded |
|
VC_COV_UNR |
ResetSt->InitSt |
194 |
Covered |
T1,T2,T3 |
|
Summary for FSM :: error_q
| Total | Covered | Percent | |
States |
5 |
5 |
100.00 |
(Not included in score) |
Transitions |
10 |
10 |
100.00 |
|
Sequences |
0 |
0 |
|
|
State, Transition and Sequence Details for FSM :: error_q
states | Line No. | Covered | Tests |
AccessError |
256 |
Covered |
T3,T130,T106 |
CheckFailError |
317 |
Covered |
T151 |
FsmStateError |
289 |
Covered |
T4,T6,T9 |
MacroEccCorrError |
221 |
Covered |
T102,T74,T156 |
NoError |
235 |
Covered |
T1,T2,T3 |
transitions | Line No. | Covered | Tests | Exclude Annotation |
AccessError->CheckFailError |
317 |
Excluded |
|
VC_COV_UNR |
AccessError->FsmStateError |
325 |
Covered |
T10,T11,T205 |
|
AccessError->MacroEccCorrError |
221 |
Excluded |
|
VC_COV_UNR |
AccessError->NoError |
235 |
Covered |
T3,T130,T106 |
|
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 |
T151 |
|
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 |
T4,T6,T9 |
|
MacroEccCorrError->AccessError |
256 |
Excluded |
|
VC_COV_UNR |
MacroEccCorrError->CheckFailError |
317 |
Excluded |
|
VC_COV_UNR |
MacroEccCorrError->FsmStateError |
325 |
Covered |
T156,T167,T206 |
|
MacroEccCorrError->NoError |
235 |
Covered |
T102,T74,T157 |
|
NoError->AccessError |
256 |
Covered |
T3,T130,T106 |
|
NoError->CheckFailError |
317 |
Covered |
T151 |
|
NoError->FsmStateError |
289 |
Covered |
T4,T6,T9 |
|
NoError->MacroEccCorrError |
221 |
Covered |
T102,T74,T156 |
|
Branch Coverage for Instance : tb.dut.gen_partitions[2].gen_unbuffered.u_part_unbuf
| Line No. | Total | Covered | Percent |
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- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T1,T2,T3 |
349 assign addr_calc = (otp_addr_sel == DigestAddrSel) ? DigestOffset : {tlul_addr_q, 2'b00};
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T4,T5,T6 |
358 assign otp_size_o = (otp_addr_sel == DigestAddrSel) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T4,T5,T6 |
395 assign init_locked = (~init_done_o) ? MuBi8True : MuBi8False;
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
420 assign digest_locked = (digest_o != '0) ? MuBi8True : MuBi8False;
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T9,T95,T130 |
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- | Status | Tests |
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 |
T160,T69,T161 |
InitWaitSt |
- |
- |
- |
1 |
1 |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Covered |
T1,T2,T3 |
InitWaitSt |
- |
- |
- |
1 |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Covered |
T134,T162,T153 |
InitWaitSt |
- |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Covered |
T1,T2,T3 |
IdleSt |
- |
- |
- |
- |
- |
- |
1 |
- |
- |
- |
- |
- |
- |
- |
- |
Covered |
T3,T4,T5 |
IdleSt |
- |
- |
- |
- |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
- |
- |
Covered |
T1,T2,T3 |
ReadSt |
- |
- |
- |
- |
- |
- |
- |
1 |
1 |
- |
- |
- |
- |
- |
- |
Covered |
T4,T5,T6 |
ReadSt |
- |
- |
- |
- |
- |
- |
- |
1 |
0 |
- |
- |
- |
- |
- |
- |
Covered |
T114,T125,T207 |
ReadSt |
- |
- |
- |
- |
- |
- |
- |
0 |
- |
- |
- |
- |
- |
- |
- |
Covered |
T3,T130,T106 |
ReadWaitSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
1 |
1 |
1 |
- |
- |
- |
Covered |
T102,T74,T156 |
ReadWaitSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
1 |
1 |
0 |
- |
- |
- |
Covered |
T4,T5,T6 |
ReadWaitSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
1 |
0 |
- |
- |
- |
- |
Covered |
T9,T156,T157 |
ReadWaitSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0 |
- |
- |
- |
- |
- |
Covered |
T4,T5,T6 |
ErrorSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
1 |
- |
- |
Covered |
T27,T28,T29 |
ErrorSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0 |
- |
- |
Covered |
T4,T6,T9 |
ErrorSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
1 |
- |
Covered |
T9,T13,T106 |
ErrorSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0 |
1 |
Covered |
T9,T13,T106 |
ErrorSt |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
0 |
0 |
Covered |
T4,T6,T9 |
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- | Status | Tests |
1 |
1 |
Covered |
T151 |
1 |
0 |
Covered |
T151 |
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- | Status | Tests |
1 |
1 |
Covered |
T4,T6,T9 |
1 |
0 |
Covered |
T4,T6,T9 |
0 |
- |
Covered |
T1,T2,T3 |
461 `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt)
-1-
==>
==>
Branches:
-1- | Status | Tests |
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- | Status | Tests |
1 |
- |
Covered |
T1,T2,T3 |
0 |
1 |
Covered |
T3,T4,T5 |
0 |
0 |
Covered |
T1,T2,T3 |
Assert Coverage for Instance : tb.dut.gen_partitions[2].gen_unbuffered.u_part_unbuf
Assertion Details
AccessKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
DigestKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
DigestOffsetMustBeRepresentable_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1121 |
1121 |
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 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
EccErrorState_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
2263 |
0 |
0 |
T151 |
9528 |
2263 |
0 |
0 |
T208 |
11425 |
0 |
0 |
0 |
T209 |
17297 |
0 |
0 |
0 |
T210 |
157135 |
0 |
0 |
0 |
T211 |
13247 |
0 |
0 |
0 |
T212 |
126789 |
0 |
0 |
0 |
T213 |
9825 |
0 |
0 |
0 |
T214 |
13163 |
0 |
0 |
0 |
T215 |
16962 |
0 |
0 |
0 |
T216 |
10207 |
0 |
0 |
0 |
ErrorKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
FsmStateKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
InitDoneKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
InitReadLocksPartition_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
17167973 |
0 |
0 |
T1 |
4713 |
351 |
0 |
0 |
T2 |
4353 |
79 |
0 |
0 |
T3 |
12890 |
995 |
0 |
0 |
T4 |
9919 |
3909 |
0 |
0 |
T5 |
13096 |
319 |
0 |
0 |
T6 |
10777 |
4543 |
0 |
0 |
T7 |
11887 |
340 |
0 |
0 |
T8 |
14599 |
477 |
0 |
0 |
T9 |
86346 |
12349 |
0 |
0 |
T13 |
30320 |
20918 |
0 |
0 |
InitWriteLocksPartition_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
17167973 |
0 |
0 |
T1 |
4713 |
351 |
0 |
0 |
T2 |
4353 |
79 |
0 |
0 |
T3 |
12890 |
995 |
0 |
0 |
T4 |
9919 |
3909 |
0 |
0 |
T5 |
13096 |
319 |
0 |
0 |
T6 |
10777 |
4543 |
0 |
0 |
T7 |
11887 |
340 |
0 |
0 |
T8 |
14599 |
477 |
0 |
0 |
T9 |
86346 |
12349 |
0 |
0 |
T13 |
30320 |
20918 |
0 |
0 |
OffsetMustBeBlockAligned_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1121 |
1121 |
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 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
OtpAddrKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
OtpCmdKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
OtpErrorState_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
57 |
0 |
0 |
T9 |
86346 |
1 |
0 |
0 |
T13 |
30320 |
0 |
0 |
0 |
T17 |
5523 |
0 |
0 |
0 |
T25 |
65064 |
0 |
0 |
0 |
T91 |
10687 |
0 |
0 |
0 |
T95 |
18358 |
0 |
0 |
0 |
T97 |
7637 |
0 |
0 |
0 |
T101 |
12121 |
0 |
0 |
0 |
T112 |
4712 |
0 |
0 |
0 |
T133 |
11192 |
0 |
0 |
0 |
T134 |
0 |
1 |
0 |
0 |
T153 |
0 |
1 |
0 |
0 |
T156 |
0 |
1 |
0 |
0 |
T157 |
0 |
1 |
0 |
0 |
T162 |
0 |
1 |
0 |
0 |
T166 |
0 |
1 |
0 |
0 |
T167 |
0 |
1 |
0 |
0 |
T193 |
0 |
1 |
0 |
0 |
T196 |
0 |
1 |
0 |
0 |
OtpReqKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
OtpSizeKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
OtpWdataKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
ReadLockPropagation_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
16924921 |
0 |
0 |
T3 |
12890 |
7246 |
0 |
0 |
T4 |
9919 |
0 |
0 |
0 |
T5 |
13096 |
0 |
0 |
0 |
T6 |
10777 |
0 |
0 |
0 |
T7 |
11887 |
0 |
0 |
0 |
T8 |
14599 |
0 |
0 |
0 |
T9 |
86346 |
1539 |
0 |
0 |
T10 |
0 |
13495 |
0 |
0 |
T13 |
30320 |
0 |
0 |
0 |
T17 |
5523 |
0 |
0 |
0 |
T73 |
0 |
2276 |
0 |
0 |
T95 |
0 |
1144 |
0 |
0 |
T96 |
0 |
29613 |
0 |
0 |
T106 |
0 |
574 |
0 |
0 |
T112 |
4712 |
0 |
0 |
0 |
T113 |
0 |
5972 |
0 |
0 |
T130 |
0 |
5916 |
0 |
0 |
T132 |
0 |
1000 |
0 |
0 |
SizeMustBeBlockAligned_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1121 |
1121 |
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 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
TlulGntKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
TlulRdataKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
TlulReadOnReadLock_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
6766 |
0 |
0 |
T3 |
12890 |
3 |
0 |
0 |
T4 |
9919 |
0 |
0 |
0 |
T5 |
13096 |
0 |
0 |
0 |
T6 |
10777 |
0 |
0 |
0 |
T7 |
11887 |
0 |
0 |
0 |
T8 |
14599 |
0 |
0 |
0 |
T9 |
86346 |
1 |
0 |
0 |
T10 |
0 |
9 |
0 |
0 |
T13 |
30320 |
3 |
0 |
0 |
T17 |
5523 |
0 |
0 |
0 |
T96 |
0 |
3 |
0 |
0 |
T106 |
0 |
5 |
0 |
0 |
T112 |
4712 |
0 |
0 |
0 |
T113 |
0 |
3 |
0 |
0 |
T117 |
0 |
4 |
0 |
0 |
T130 |
0 |
3 |
0 |
0 |
T132 |
0 |
1 |
0 |
0 |
TlulRerrorKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
TlulRvalidKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |
WriteLockPropagation_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
1808404 |
0 |
0 |
T11 |
27346 |
0 |
0 |
0 |
T19 |
0 |
14874 |
0 |
0 |
T51 |
0 |
9031 |
0 |
0 |
T73 |
47563 |
7266 |
0 |
0 |
T88 |
32488 |
0 |
0 |
0 |
T89 |
65687 |
0 |
0 |
0 |
T90 |
102365 |
0 |
0 |
0 |
T103 |
0 |
15193 |
0 |
0 |
T115 |
0 |
1196 |
0 |
0 |
T117 |
15268 |
0 |
0 |
0 |
T118 |
4956 |
0 |
0 |
0 |
T119 |
17429 |
0 |
0 |
0 |
T120 |
45439 |
0 |
0 |
0 |
T121 |
29078 |
0 |
0 |
0 |
T123 |
0 |
2533 |
0 |
0 |
T124 |
0 |
22516 |
0 |
0 |
T125 |
0 |
2373 |
0 |
0 |
T126 |
0 |
8075 |
0 |
0 |
T171 |
0 |
2214 |
0 |
0 |
gen_digest_write_lock.DigestWriteLocksPartition_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
19287546 |
0 |
0 |
T9 |
86346 |
6460 |
0 |
0 |
T13 |
30320 |
0 |
0 |
0 |
T17 |
5523 |
0 |
0 |
0 |
T25 |
65064 |
0 |
0 |
0 |
T73 |
0 |
25177 |
0 |
0 |
T89 |
0 |
54672 |
0 |
0 |
T91 |
10687 |
0 |
0 |
0 |
T95 |
18358 |
8629 |
0 |
0 |
T97 |
7637 |
0 |
0 |
0 |
T98 |
0 |
57970 |
0 |
0 |
T101 |
12121 |
0 |
0 |
0 |
T102 |
0 |
34549 |
0 |
0 |
T103 |
0 |
106162 |
0 |
0 |
T112 |
4712 |
0 |
0 |
0 |
T119 |
0 |
3403 |
0 |
0 |
T123 |
0 |
27627 |
0 |
0 |
T130 |
0 |
5183 |
0 |
0 |
T133 |
11192 |
0 |
0 |
0 |
u_state_regs_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
92371666 |
91498716 |
0 |
0 |
T1 |
4713 |
4658 |
0 |
0 |
T2 |
4353 |
4301 |
0 |
0 |
T3 |
12890 |
12187 |
0 |
0 |
T4 |
9919 |
9692 |
0 |
0 |
T5 |
13096 |
12831 |
0 |
0 |
T6 |
10777 |
10485 |
0 |
0 |
T7 |
11887 |
11643 |
0 |
0 |
T8 |
14599 |
14326 |
0 |
0 |
T9 |
86346 |
84582 |
0 |
0 |
T13 |
30320 |
30018 |
0 |
0 |