Module Definition
dashboard | hierarchy | modlist | groups | tests | asserts



Module Instance : tb.dut.u_to_rd_fifo.u_err

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
66.91 76.92 65.71 25.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
66.91 76.92 65.71 25.00 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
88.86 95.83 73.39 86.21 100.00 u_to_rd_fifo


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
no children



Module Instance : tb.dut.u_to_prog_fifo.u_err

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
67.62 76.92 68.57 25.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
67.62 76.92 68.57 25.00 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
78.34 92.65 64.66 71.43 84.62 u_to_prog_fifo


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
no children



Module Instance : tb.dut.u_tl_adapter_eflash.u_err

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
67.62 76.92 68.57 25.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
67.62 76.92 68.57 25.00 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
91.44 97.18 78.91 89.66 100.00 u_tl_adapter_eflash


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
no children



Module Instance : tb.dut.u_reg_core.u_reg_if.u_err

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
100.00 100.00 100.00 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
100.00 100.00 100.00 100.00 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
97.96 100.00 91.84 100.00 100.00 u_reg_if


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
no children



Module Instance : tb.dut.u_eflash.u_flash.gen_generic.u_impl_generic.u_reg_top.u_reg_if.u_err

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
100.00 100.00 100.00 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
100.00 100.00 100.00 100.00 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
98.91 100.00 95.65 100.00 100.00 u_reg_if


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
no children

Line Coverage for Module : tlul_err
Line No.TotalCoveredPercent
TOTAL2626100.00
CONT_ASSIGN2611100.00
CONT_ASSIGN2711100.00
CONT_ASSIGN2811100.00
CONT_ASSIGN3211100.00
CONT_ASSIGN3611100.00
CONT_ASSIGN3911100.00
CONT_ASSIGN4211100.00
CONT_ASSIGN5411100.00
ALWAYS571717100.00
CONT_ASSIGN9611100.00

25 logic op_full, op_partial, op_get; 26 1/1 assign op_full = (tl_i.a_opcode == PutFullData); Tests: T1 T2 T3  27 1/1 assign op_partial = (tl_i.a_opcode == PutPartialData); Tests: T1 T2 T3  28 1/1 assign op_get = (tl_i.a_opcode == Get); Tests: T1 T2 T3  29 30 // An instruction type transaction cannot be write 31 logic instr_wr_err; 32 1/1 assign instr_wr_err = prim_mubi_pkg::mubi4_test_true_strict(tl_i.a_user.instr_type) & Tests: T1 T2 T3  33 (op_full | op_partial); 34 35 logic instr_type_err; 36 1/1 assign instr_type_err = prim_mubi_pkg::mubi4_test_invalid(tl_i.a_user.instr_type); Tests: T1 T2 T3  37 38 // Anything that doesn't fall into the permitted category, it raises an error 39 1/1 assign err_o = ~(opcode_allowed & a_config_allowed) | instr_wr_err | instr_type_err; Tests: T1 T2 T3  40 41 // opcode check 42 1/1 assign opcode_allowed = (tl_i.a_opcode == PutFullData) Tests: T1 T2 T3  43 | (tl_i.a_opcode == PutPartialData) 44 | (tl_i.a_opcode == Get); 45 46 // a channel configuration check 47 logic addr_sz_chk; // address and size alignment check 48 logic mask_chk; // inactive lane a_mask check 49 logic fulldata_chk; // PutFullData should have size match to mask 50 51 localparam bit [MW-1:0] MaskOne = 1; 52 logic [MW-1:0] mask; 53 54 1/1 assign mask = MaskOne << tl_i.a_address[SubAW-1:0]; Tests: T1 T2 T3  55 56 always_comb begin 57 1/1 addr_sz_chk = 1'b0; Tests: T1 T2 T3  58 1/1 mask_chk = 1'b0; Tests: T1 T2 T3  59 1/1 fulldata_chk = 1'b0; // Only valid when opcode is PutFullData Tests: T1 T2 T3  60 61 1/1 if (tl_i.a_valid) begin Tests: T1 T2 T3  62 1/1 unique case (tl_i.a_size) Tests: T1 T2 T3  63 'h0: begin // 1 Byte 64 1/1 addr_sz_chk = 1'b1; Tests: T1 T2 T3  65 1/1 mask_chk = ~|(tl_i.a_mask & ~mask); Tests: T1 T2 T3  66 1/1 fulldata_chk = |(tl_i.a_mask & mask); Tests: T1 T2 T3  67 end 68 69 'h1: begin // 2 Byte 70 1/1 addr_sz_chk = ~tl_i.a_address[0]; Tests: T1 T2 T3  71 // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0] 72 1/1 mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011) Tests: T1 T2 T3  73 : ~|(tl_i.a_mask & 4'b1100); 74 1/1 fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ; Tests: T1 T2 T3  75 end 76 77 'h2: begin // 4 Byte 78 1/1 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0]; Tests: T1 T2 T3  79 1/1 mask_chk = 1'b1; Tests: T1 T2 T3  80 1/1 fulldata_chk = &tl_i.a_mask[3:0]; Tests: T1 T2 T3  81 end 82 83 default: begin // else 84 addr_sz_chk = 1'b0; 85 mask_chk = 1'b0; 86 fulldata_chk = 1'b0; 87 end 88 endcase 89 end else begin 90 1/1 addr_sz_chk = 1'b0; Tests: T1 T2 T3  91 1/1 mask_chk = 1'b0; Tests: T1 T2 T3  92 1/1 fulldata_chk = 1'b0; Tests: T1 T2 T3  93 end 94 end 95 96 1/1 assign a_config_allowed = addr_sz_chk Tests: T1 T2 T3 

Cond Coverage for Module : tlul_err
TotalCoveredPercent
Conditions3535100.00
Logical3535100.00
Non-Logical00
Event00

 LINE       26
 EXPRESSION (tl_i.a_opcode == PutFullData)
            ---------------1--------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       27
 EXPRESSION (tl_i.a_opcode == PutPartialData)
            ----------------1----------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       28
 EXPRESSION (tl_i.a_opcode == Get)
            -----------1----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       39
 EXPRESSION (( ~ (opcode_allowed & a_config_allowed) ) | instr_wr_err | instr_type_err)
             --------------------1--------------------   ------2-----   -------3------
-1--2--3-StatusTests
000CoveredT1,T2,T3
001CoveredT3,T46,T9
010CoveredT74,T121,T76
100CoveredT1,T2,T3

 LINE       39
 SUB-EXPRESSION (opcode_allowed & a_config_allowed)
                 -------1------   --------2-------
-1--2-StatusTests
01CoveredT74,T121,T76
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       42
 EXPRESSION ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData) | (tl_i.a_opcode == Get))
             ---------------1--------------   ----------------2----------------   -----------3----------
-1--2--3-StatusTests
000CoveredT74,T121,T76
001CoveredT1,T2,T3
010CoveredT1,T2,T3
100CoveredT1,T2,T3

 LINE       42
 SUB-EXPRESSION (tl_i.a_opcode == PutFullData)
                ---------------1--------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       42
 SUB-EXPRESSION (tl_i.a_opcode == PutPartialData)
                ----------------1----------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       42
 SUB-EXPRESSION (tl_i.a_opcode == Get)
                -----------1----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       72
 EXPRESSION (tl_i.a_address[1] ? ((~|(tl_i.a_mask & 4'b0011))) : ((~|(tl_i.a_mask & 4'b1100))))
             --------1--------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT3,T10,T17

 LINE       74
 EXPRESSION (tl_i.a_address[1] ? ((&tl_i.a_mask[3:2])) : ((&tl_i.a_mask[1:0])))
             --------1--------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT3,T10,T17

 LINE       96
 EXPRESSION (addr_sz_chk & mask_chk & (op_get | op_partial | fulldata_chk))
             -----1-----   ----2---   ------------------3-----------------
-1--2--3-StatusTests
011CoveredT74,T121,T76
101CoveredT74,T121,T76
110CoveredT74,T121,T76
111CoveredT1,T2,T3

 LINE       96
 SUB-EXPRESSION (op_get | op_partial | fulldata_chk)
                 ---1--   -----2----   ------3-----
-1--2--3-StatusTests
000CoveredT1,T2,T3
001CoveredT1,T2,T3
010CoveredT1,T2,T3
100CoveredT1,T2,T3

Branch Coverage for Module : tlul_err
Line No.TotalCoveredPercent
Branches 8 8 100.00
IF 61 8 8 100.00


61 if (tl_i.a_valid) begin -1- 62 unique case (tl_i.a_size) -2- 63 'h0: begin // 1 Byte 64 addr_sz_chk = 1'b1; ==> 65 mask_chk = ~|(tl_i.a_mask & ~mask); 66 fulldata_chk = |(tl_i.a_mask & mask); 67 end 68 69 'h1: begin // 2 Byte 70 addr_sz_chk = ~tl_i.a_address[0]; 71 // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0] 72 mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011) -3- ==> ==> 73 : ~|(tl_i.a_mask & 4'b1100); 74 fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ; -4- ==> ==> 75 end 76 77 'h2: begin // 4 Byte 78 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0]; ==> 79 mask_chk = 1'b1; 80 fulldata_chk = &tl_i.a_mask[3:0]; 81 end 82 83 default: begin // else 84 addr_sz_chk = 1'b0; ==> 85 mask_chk = 1'b0; 86 fulldata_chk = 1'b0; 87 end 88 endcase 89 end else begin 90 addr_sz_chk = 1'b0; ==>

Branches:
-1--2--3--4-StatusTests
1 'h0 - - Covered T1,T2,T3
1 'h1 1 - Covered T3,T10,T17
1 'h1 0 - Covered T1,T2,T3
1 'h1 - 1 Covered T3,T10,T17
1 'h1 - 0 Covered T1,T2,T3
1 'h00000002 - - Covered T1,T2,T3
1 default - - Covered T74,T121,T76
0 - - - Covered T1,T2,T3


Assert Coverage for Module : tlul_err
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 1 1 100.00 1 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 1 1 100.00 1 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
dataWidthOnly32_A 5695 5695 0 0


dataWidthOnly32_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 5695 5695 0 0
T1 5 5 0 0
T2 5 5 0 0
T3 5 5 0 0
T4 5 5 0 0
T10 5 5 0 0
T11 5 5 0 0
T16 5 5 0 0
T17 5 5 0 0
T18 5 5 0 0
T19 5 5 0 0

Line Coverage for Instance : tb.dut.u_to_rd_fifo.u_err
Line No.TotalCoveredPercent
TOTAL262076.92
CONT_ASSIGN2611100.00
CONT_ASSIGN2711100.00
CONT_ASSIGN2811100.00
CONT_ASSIGN3211100.00
CONT_ASSIGN3611100.00
CONT_ASSIGN3911100.00
CONT_ASSIGN4211100.00
CONT_ASSIGN5411100.00
ALWAYS57171164.71
CONT_ASSIGN9611100.00

25 logic op_full, op_partial, op_get; 26 1/1 assign op_full = (tl_i.a_opcode == PutFullData); Tests: T1 T2 T3  27 1/1 assign op_partial = (tl_i.a_opcode == PutPartialData); Tests: T1 T2 T3  28 1/1 assign op_get = (tl_i.a_opcode == Get); Tests: T1 T2 T3  29 30 // An instruction type transaction cannot be write 31 logic instr_wr_err; 32 1/1 assign instr_wr_err = prim_mubi_pkg::mubi4_test_true_strict(tl_i.a_user.instr_type) & Tests: T1 T2 T3  33 (op_full | op_partial); 34 35 logic instr_type_err; 36 1/1 assign instr_type_err = prim_mubi_pkg::mubi4_test_invalid(tl_i.a_user.instr_type); Tests: T1 T2 T3  37 38 // Anything that doesn't fall into the permitted category, it raises an error 39 1/1 assign err_o = ~(opcode_allowed & a_config_allowed) | instr_wr_err | instr_type_err; Tests: T1 T2 T3  40 41 // opcode check 42 1/1 assign opcode_allowed = (tl_i.a_opcode == PutFullData) Tests: T1 T2 T3  43 | (tl_i.a_opcode == PutPartialData) 44 | (tl_i.a_opcode == Get); 45 46 // a channel configuration check 47 logic addr_sz_chk; // address and size alignment check 48 logic mask_chk; // inactive lane a_mask check 49 logic fulldata_chk; // PutFullData should have size match to mask 50 51 localparam bit [MW-1:0] MaskOne = 1; 52 logic [MW-1:0] mask; 53 54 1/1 assign mask = MaskOne << tl_i.a_address[SubAW-1:0]; Tests: T1 T2 T3  55 56 always_comb begin 57 1/1 addr_sz_chk = 1'b0; Tests: T1 T2 T3  58 1/1 mask_chk = 1'b0; Tests: T1 T2 T3  59 1/1 fulldata_chk = 1'b0; // Only valid when opcode is PutFullData Tests: T1 T2 T3  60 61 1/1 if (tl_i.a_valid) begin Tests: T1 T2 T3  62 1/1 unique case (tl_i.a_size) Tests: T2 T3 T16  63 'h0: begin // 1 Byte 64 0/1 ==> addr_sz_chk = 1'b1; 65 0/1 ==> mask_chk = ~|(tl_i.a_mask & ~mask); 66 0/1 ==> fulldata_chk = |(tl_i.a_mask & mask); 67 end 68 69 'h1: begin // 2 Byte 70 0/1 ==> addr_sz_chk = ~tl_i.a_address[0]; 71 // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0] 72 0/1 ==> mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011) 73 : ~|(tl_i.a_mask & 4'b1100); 74 0/1 ==> fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ; 75 end 76 77 'h2: begin // 4 Byte 78 1/1 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0]; Tests: T2 T3 T16  79 1/1 mask_chk = 1'b1; Tests: T2 T3 T16  80 1/1 fulldata_chk = &tl_i.a_mask[3:0]; Tests: T2 T3 T16  81 end 82 83 default: begin // else 84 addr_sz_chk = 1'b0; 85 mask_chk = 1'b0; 86 fulldata_chk = 1'b0; 87 end 88 endcase 89 end else begin 90 1/1 addr_sz_chk = 1'b0; Tests: T1 T2 T3  91 1/1 mask_chk = 1'b0; Tests: T1 T2 T3  92 1/1 fulldata_chk = 1'b0; Tests: T1 T2 T3  93 end 94 end 95 96 1/1 assign a_config_allowed = addr_sz_chk Tests: T1 T2 T3 

Cond Coverage for Instance : tb.dut.u_to_rd_fifo.u_err
TotalCoveredPercent
Conditions352365.71
Logical352365.71
Non-Logical00
Event00

 LINE       26
 EXPRESSION (tl_i.a_opcode == PutFullData)
            ---------------1--------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       27
 EXPRESSION (tl_i.a_opcode == PutPartialData)
            ----------------1----------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       28
 EXPRESSION (tl_i.a_opcode == Get)
            -----------1----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       39
 EXPRESSION (( ~ (opcode_allowed & a_config_allowed) ) | instr_wr_err | instr_type_err)
             --------------------1--------------------   ------2-----   -------3------
-1--2--3-StatusTests
000CoveredT2,T3,T16
001Not Covered
010Not Covered
100CoveredT1,T2,T3

 LINE       39
 SUB-EXPRESSION (opcode_allowed & a_config_allowed)
                 -------1------   --------2-------
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT2,T3,T16

 LINE       42
 EXPRESSION ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData) | (tl_i.a_opcode == Get))
             ---------------1--------------   ----------------2----------------   -----------3----------
-1--2--3-StatusTests
000Not Covered
001CoveredT1,T2,T3
010CoveredT1,T2,T3
100CoveredT1,T2,T3

 LINE       42
 SUB-EXPRESSION (tl_i.a_opcode == PutFullData)
                ---------------1--------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       42
 SUB-EXPRESSION (tl_i.a_opcode == PutPartialData)
                ----------------1----------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       42
 SUB-EXPRESSION (tl_i.a_opcode == Get)
                -----------1----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       72
 EXPRESSION (tl_i.a_address[1] ? ((~|(tl_i.a_mask & 4'b0011))) : ((~|(tl_i.a_mask & 4'b1100))))
             --------1--------
-1-StatusTests
0Not Covered
1Not Covered

 LINE       74
 EXPRESSION (tl_i.a_address[1] ? ((&tl_i.a_mask[3:2])) : ((&tl_i.a_mask[1:0])))
             --------1--------
-1-StatusTests
0Not Covered
1Not Covered

 LINE       96
 EXPRESSION (addr_sz_chk & mask_chk & (op_get | op_partial | fulldata_chk))
             -----1-----   ----2---   ------------------3-----------------
-1--2--3-StatusTests
011Not Covered
101Not Covered
110Not Covered
111CoveredT2,T3,T16

 LINE       96
 SUB-EXPRESSION (op_get | op_partial | fulldata_chk)
                 ---1--   -----2----   ------3-----
-1--2--3-StatusTests
000CoveredT1,T2,T3
001Not Covered
010CoveredT1,T2,T3
100CoveredT1,T2,T3

Branch Coverage for Instance : tb.dut.u_to_rd_fifo.u_err
Line No.TotalCoveredPercent
Branches 8 2 25.00
IF 61 8 2 25.00


61 if (tl_i.a_valid) begin -1- 62 unique case (tl_i.a_size) -2- 63 'h0: begin // 1 Byte 64 addr_sz_chk = 1'b1; ==> 65 mask_chk = ~|(tl_i.a_mask & ~mask); 66 fulldata_chk = |(tl_i.a_mask & mask); 67 end 68 69 'h1: begin // 2 Byte 70 addr_sz_chk = ~tl_i.a_address[0]; 71 // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0] 72 mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011) -3- ==> ==> 73 : ~|(tl_i.a_mask & 4'b1100); 74 fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ; -4- ==> ==> 75 end 76 77 'h2: begin // 4 Byte 78 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0]; ==> 79 mask_chk = 1'b1; 80 fulldata_chk = &tl_i.a_mask[3:0]; 81 end 82 83 default: begin // else 84 addr_sz_chk = 1'b0; ==> 85 mask_chk = 1'b0; 86 fulldata_chk = 1'b0; 87 end 88 endcase 89 end else begin 90 addr_sz_chk = 1'b0; ==>

Branches:
-1--2--3--4-StatusTests
1 'h0 - - Not Covered
1 'h1 1 - Not Covered
1 'h1 0 - Not Covered
1 'h1 - 1 Not Covered
1 'h1 - 0 Not Covered
1 'h00000002 - - Covered T2,T3,T16
1 default - - Not Covered
0 - - - Covered T1,T2,T3


Assert Coverage for Instance : tb.dut.u_to_rd_fifo.u_err
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 1 1 100.00 1 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 1 1 100.00 1 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
dataWidthOnly32_A 1053 1053 0 0


dataWidthOnly32_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1053 1053 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T10 1 1 0 0
T11 1 1 0 0
T16 1 1 0 0
T17 1 1 0 0
T18 1 1 0 0
T19 1 1 0 0

Line Coverage for Instance : tb.dut.u_to_prog_fifo.u_err
Line No.TotalCoveredPercent
TOTAL262076.92
CONT_ASSIGN2611100.00
CONT_ASSIGN2711100.00
CONT_ASSIGN2811100.00
CONT_ASSIGN3211100.00
CONT_ASSIGN3611100.00
CONT_ASSIGN3911100.00
CONT_ASSIGN4211100.00
CONT_ASSIGN5411100.00
ALWAYS57171164.71
CONT_ASSIGN9611100.00

25 logic op_full, op_partial, op_get; 26 1/1 assign op_full = (tl_i.a_opcode == PutFullData); Tests: T1 T2 T3  27 1/1 assign op_partial = (tl_i.a_opcode == PutPartialData); Tests: T1 T2 T3  28 1/1 assign op_get = (tl_i.a_opcode == Get); Tests: T1 T2 T3  29 30 // An instruction type transaction cannot be write 31 logic instr_wr_err; 32 1/1 assign instr_wr_err = prim_mubi_pkg::mubi4_test_true_strict(tl_i.a_user.instr_type) & Tests: T1 T2 T3  33 (op_full | op_partial); 34 35 logic instr_type_err; 36 1/1 assign instr_type_err = prim_mubi_pkg::mubi4_test_invalid(tl_i.a_user.instr_type); Tests: T1 T2 T3  37 38 // Anything that doesn't fall into the permitted category, it raises an error 39 1/1 assign err_o = ~(opcode_allowed & a_config_allowed) | instr_wr_err | instr_type_err; Tests: T1 T2 T3  40 41 // opcode check 42 1/1 assign opcode_allowed = (tl_i.a_opcode == PutFullData) Tests: T1 T2 T3  43 | (tl_i.a_opcode == PutPartialData) 44 | (tl_i.a_opcode == Get); 45 46 // a channel configuration check 47 logic addr_sz_chk; // address and size alignment check 48 logic mask_chk; // inactive lane a_mask check 49 logic fulldata_chk; // PutFullData should have size match to mask 50 51 localparam bit [MW-1:0] MaskOne = 1; 52 logic [MW-1:0] mask; 53 54 1/1 assign mask = MaskOne << tl_i.a_address[SubAW-1:0]; Tests: T1 T2 T3  55 56 always_comb begin 57 1/1 addr_sz_chk = 1'b0; Tests: T1 T2 T3  58 1/1 mask_chk = 1'b0; Tests: T1 T2 T3  59 1/1 fulldata_chk = 1'b0; // Only valid when opcode is PutFullData Tests: T1 T2 T3  60 61 1/1 if (tl_i.a_valid) begin Tests: T1 T2 T3  62 1/1 unique case (tl_i.a_size) Tests: T2 T10 T18  63 'h0: begin // 1 Byte 64 0/1 ==> addr_sz_chk = 1'b1; 65 0/1 ==> mask_chk = ~|(tl_i.a_mask & ~mask); 66 0/1 ==> fulldata_chk = |(tl_i.a_mask & mask); 67 end 68 69 'h1: begin // 2 Byte 70 0/1 ==> addr_sz_chk = ~tl_i.a_address[0]; 71 // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0] 72 0/1 ==> mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011) 73 : ~|(tl_i.a_mask & 4'b1100); 74 0/1 ==> fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ; 75 end 76 77 'h2: begin // 4 Byte 78 1/1 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0]; Tests: T2 T10 T18  79 1/1 mask_chk = 1'b1; Tests: T2 T10 T18  80 1/1 fulldata_chk = &tl_i.a_mask[3:0]; Tests: T2 T10 T18  81 end 82 83 default: begin // else 84 addr_sz_chk = 1'b0; 85 mask_chk = 1'b0; 86 fulldata_chk = 1'b0; 87 end 88 endcase 89 end else begin 90 1/1 addr_sz_chk = 1'b0; Tests: T1 T2 T3  91 1/1 mask_chk = 1'b0; Tests: T1 T2 T3  92 1/1 fulldata_chk = 1'b0; Tests: T1 T2 T3  93 end 94 end 95 96 1/1 assign a_config_allowed = addr_sz_chk Tests: T1 T2 T3 

Cond Coverage for Instance : tb.dut.u_to_prog_fifo.u_err
TotalCoveredPercent
Conditions352468.57
Logical352468.57
Non-Logical00
Event00

 LINE       26
 EXPRESSION (tl_i.a_opcode == PutFullData)
            ---------------1--------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       27
 EXPRESSION (tl_i.a_opcode == PutPartialData)
            ----------------1----------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       28
 EXPRESSION (tl_i.a_opcode == Get)
            -----------1----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       39
 EXPRESSION (( ~ (opcode_allowed & a_config_allowed) ) | instr_wr_err | instr_type_err)
             --------------------1--------------------   ------2-----   -------3------
-1--2--3-StatusTests
000CoveredT2,T10,T18
001Not Covered
010Not Covered
100CoveredT1,T2,T3

 LINE       39
 SUB-EXPRESSION (opcode_allowed & a_config_allowed)
                 -------1------   --------2-------
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT2,T10,T18

 LINE       42
 EXPRESSION ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData) | (tl_i.a_opcode == Get))
             ---------------1--------------   ----------------2----------------   -----------3----------
-1--2--3-StatusTests
000Not Covered
001CoveredT1,T2,T3
010CoveredT1,T2,T3
100CoveredT1,T2,T3

 LINE       42
 SUB-EXPRESSION (tl_i.a_opcode == PutFullData)
                ---------------1--------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       42
 SUB-EXPRESSION (tl_i.a_opcode == PutPartialData)
                ----------------1----------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       42
 SUB-EXPRESSION (tl_i.a_opcode == Get)
                -----------1----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       72
 EXPRESSION (tl_i.a_address[1] ? ((~|(tl_i.a_mask & 4'b0011))) : ((~|(tl_i.a_mask & 4'b1100))))
             --------1--------
-1-StatusTests
0Not Covered
1Not Covered

 LINE       74
 EXPRESSION (tl_i.a_address[1] ? ((&tl_i.a_mask[3:2])) : ((&tl_i.a_mask[1:0])))
             --------1--------
-1-StatusTests
0Not Covered
1Not Covered

 LINE       96
 EXPRESSION (addr_sz_chk & mask_chk & (op_get | op_partial | fulldata_chk))
             -----1-----   ----2---   ------------------3-----------------
-1--2--3-StatusTests
011Not Covered
101Not Covered
110Not Covered
111CoveredT2,T10,T18

 LINE       96
 SUB-EXPRESSION (op_get | op_partial | fulldata_chk)
                 ---1--   -----2----   ------3-----
-1--2--3-StatusTests
000CoveredT1,T2,T3
001CoveredT2,T10,T18
010CoveredT1,T2,T3
100CoveredT1,T2,T3

Branch Coverage for Instance : tb.dut.u_to_prog_fifo.u_err
Line No.TotalCoveredPercent
Branches 8 2 25.00
IF 61 8 2 25.00


61 if (tl_i.a_valid) begin -1- 62 unique case (tl_i.a_size) -2- 63 'h0: begin // 1 Byte 64 addr_sz_chk = 1'b1; ==> 65 mask_chk = ~|(tl_i.a_mask & ~mask); 66 fulldata_chk = |(tl_i.a_mask & mask); 67 end 68 69 'h1: begin // 2 Byte 70 addr_sz_chk = ~tl_i.a_address[0]; 71 // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0] 72 mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011) -3- ==> ==> 73 : ~|(tl_i.a_mask & 4'b1100); 74 fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ; -4- ==> ==> 75 end 76 77 'h2: begin // 4 Byte 78 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0]; ==> 79 mask_chk = 1'b1; 80 fulldata_chk = &tl_i.a_mask[3:0]; 81 end 82 83 default: begin // else 84 addr_sz_chk = 1'b0; ==> 85 mask_chk = 1'b0; 86 fulldata_chk = 1'b0; 87 end 88 endcase 89 end else begin 90 addr_sz_chk = 1'b0; ==>

Branches:
-1--2--3--4-StatusTests
1 'h0 - - Not Covered
1 'h1 1 - Not Covered
1 'h1 0 - Not Covered
1 'h1 - 1 Not Covered
1 'h1 - 0 Not Covered
1 'h00000002 - - Covered T2,T10,T18
1 default - - Not Covered
0 - - - Covered T1,T2,T3


Assert Coverage for Instance : tb.dut.u_to_prog_fifo.u_err
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 1 1 100.00 1 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 1 1 100.00 1 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
dataWidthOnly32_A 1053 1053 0 0


dataWidthOnly32_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1053 1053 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T10 1 1 0 0
T11 1 1 0 0
T16 1 1 0 0
T17 1 1 0 0
T18 1 1 0 0
T19 1 1 0 0

Line Coverage for Instance : tb.dut.u_tl_adapter_eflash.u_err
Line No.TotalCoveredPercent
TOTAL262076.92
CONT_ASSIGN2611100.00
CONT_ASSIGN2711100.00
CONT_ASSIGN2811100.00
CONT_ASSIGN3211100.00
CONT_ASSIGN3611100.00
CONT_ASSIGN3911100.00
CONT_ASSIGN4211100.00
CONT_ASSIGN5411100.00
ALWAYS57171164.71
CONT_ASSIGN9611100.00

25 logic op_full, op_partial, op_get; 26 1/1 assign op_full = (tl_i.a_opcode == PutFullData); Tests: T1 T2 T3  27 1/1 assign op_partial = (tl_i.a_opcode == PutPartialData); Tests: T1 T2 T3  28 1/1 assign op_get = (tl_i.a_opcode == Get); Tests: T1 T2 T3  29 30 // An instruction type transaction cannot be write 31 logic instr_wr_err; 32 1/1 assign instr_wr_err = prim_mubi_pkg::mubi4_test_true_strict(tl_i.a_user.instr_type) & Tests: T1 T2 T3  33 (op_full | op_partial); 34 35 logic instr_type_err; 36 1/1 assign instr_type_err = prim_mubi_pkg::mubi4_test_invalid(tl_i.a_user.instr_type); Tests: T1 T2 T3  37 38 // Anything that doesn't fall into the permitted category, it raises an error 39 1/1 assign err_o = ~(opcode_allowed & a_config_allowed) | instr_wr_err | instr_type_err; Tests: T1 T2 T3  40 41 // opcode check 42 1/1 assign opcode_allowed = (tl_i.a_opcode == PutFullData) Tests: T1 T2 T3  43 | (tl_i.a_opcode == PutPartialData) 44 | (tl_i.a_opcode == Get); 45 46 // a channel configuration check 47 logic addr_sz_chk; // address and size alignment check 48 logic mask_chk; // inactive lane a_mask check 49 logic fulldata_chk; // PutFullData should have size match to mask 50 51 localparam bit [MW-1:0] MaskOne = 1; 52 logic [MW-1:0] mask; 53 54 1/1 assign mask = MaskOne << tl_i.a_address[SubAW-1:0]; Tests: T1 T2 T3  55 56 always_comb begin 57 1/1 addr_sz_chk = 1'b0; Tests: T1 T2 T3  58 1/1 mask_chk = 1'b0; Tests: T1 T2 T3  59 1/1 fulldata_chk = 1'b0; // Only valid when opcode is PutFullData Tests: T1 T2 T3  60 61 1/1 if (tl_i.a_valid) begin Tests: T1 T2 T3  62 1/1 unique case (tl_i.a_size) Tests: T1 T3 T11  63 'h0: begin // 1 Byte 64 0/1 ==> addr_sz_chk = 1'b1; 65 0/1 ==> mask_chk = ~|(tl_i.a_mask & ~mask); 66 0/1 ==> fulldata_chk = |(tl_i.a_mask & mask); 67 end 68 69 'h1: begin // 2 Byte 70 0/1 ==> addr_sz_chk = ~tl_i.a_address[0]; 71 // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0] 72 0/1 ==> mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011) 73 : ~|(tl_i.a_mask & 4'b1100); 74 0/1 ==> fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ; 75 end 76 77 'h2: begin // 4 Byte 78 1/1 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0]; Tests: T1 T3 T11  79 1/1 mask_chk = 1'b1; Tests: T1 T3 T11  80 1/1 fulldata_chk = &tl_i.a_mask[3:0]; Tests: T1 T3 T11  81 end 82 83 default: begin // else 84 addr_sz_chk = 1'b0; 85 mask_chk = 1'b0; 86 fulldata_chk = 1'b0; 87 end 88 endcase 89 end else begin 90 1/1 addr_sz_chk = 1'b0; Tests: T1 T2 T3  91 1/1 mask_chk = 1'b0; Tests: T1 T2 T3  92 1/1 fulldata_chk = 1'b0; Tests: T1 T2 T3  93 end 94 end 95 96 1/1 assign a_config_allowed = addr_sz_chk Tests: T1 T2 T3 

Cond Coverage for Instance : tb.dut.u_tl_adapter_eflash.u_err
TotalCoveredPercent
Conditions352468.57
Logical352468.57
Non-Logical00
Event00

 LINE       26
 EXPRESSION (tl_i.a_opcode == PutFullData)
            ---------------1--------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       27
 EXPRESSION (tl_i.a_opcode == PutPartialData)
            ----------------1----------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T3,T29

 LINE       28
 EXPRESSION (tl_i.a_opcode == Get)
            -----------1----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T3,T18

 LINE       39
 EXPRESSION (( ~ (opcode_allowed & a_config_allowed) ) | instr_wr_err | instr_type_err)
             --------------------1--------------------   ------2-----   -------3------
-1--2--3-StatusTests
000CoveredT1,T3,T11
001CoveredT3,T46,T9
010Not Covered
100CoveredT1,T3,T18

 LINE       39
 SUB-EXPRESSION (opcode_allowed & a_config_allowed)
                 -------1------   --------2-------
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT1,T3,T11

 LINE       42
 EXPRESSION ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData) | (tl_i.a_opcode == Get))
             ---------------1--------------   ----------------2----------------   -----------3----------
-1--2--3-StatusTests
000Not Covered
001CoveredT1,T3,T18
010CoveredT1,T3,T29
100CoveredT1,T2,T3

 LINE       42
 SUB-EXPRESSION (tl_i.a_opcode == PutFullData)
                ---------------1--------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       42
 SUB-EXPRESSION (tl_i.a_opcode == PutPartialData)
                ----------------1----------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T3,T29

 LINE       42
 SUB-EXPRESSION (tl_i.a_opcode == Get)
                -----------1----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T3,T18

 LINE       72
 EXPRESSION (tl_i.a_address[1] ? ((~|(tl_i.a_mask & 4'b0011))) : ((~|(tl_i.a_mask & 4'b1100))))
             --------1--------
-1-StatusTests
0Not Covered
1Not Covered

 LINE       74
 EXPRESSION (tl_i.a_address[1] ? ((&tl_i.a_mask[3:2])) : ((&tl_i.a_mask[1:0])))
             --------1--------
-1-StatusTests
0Not Covered
1Not Covered

 LINE       96
 EXPRESSION (addr_sz_chk & mask_chk & (op_get | op_partial | fulldata_chk))
             -----1-----   ----2---   ------------------3-----------------
-1--2--3-StatusTests
011Not Covered
101Not Covered
110Not Covered
111CoveredT1,T3,T11

 LINE       96
 SUB-EXPRESSION (op_get | op_partial | fulldata_chk)
                 ---1--   -----2----   ------3-----
-1--2--3-StatusTests
000CoveredT1,T2,T3
001Not Covered
010CoveredT1,T3,T29
100CoveredT1,T3,T18

Branch Coverage for Instance : tb.dut.u_tl_adapter_eflash.u_err
Line No.TotalCoveredPercent
Branches 8 2 25.00
IF 61 8 2 25.00


61 if (tl_i.a_valid) begin -1- 62 unique case (tl_i.a_size) -2- 63 'h0: begin // 1 Byte 64 addr_sz_chk = 1'b1; ==> 65 mask_chk = ~|(tl_i.a_mask & ~mask); 66 fulldata_chk = |(tl_i.a_mask & mask); 67 end 68 69 'h1: begin // 2 Byte 70 addr_sz_chk = ~tl_i.a_address[0]; 71 // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0] 72 mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011) -3- ==> ==> 73 : ~|(tl_i.a_mask & 4'b1100); 74 fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ; -4- ==> ==> 75 end 76 77 'h2: begin // 4 Byte 78 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0]; ==> 79 mask_chk = 1'b1; 80 fulldata_chk = &tl_i.a_mask[3:0]; 81 end 82 83 default: begin // else 84 addr_sz_chk = 1'b0; ==> 85 mask_chk = 1'b0; 86 fulldata_chk = 1'b0; 87 end 88 endcase 89 end else begin 90 addr_sz_chk = 1'b0; ==>

Branches:
-1--2--3--4-StatusTests
1 'h0 - - Not Covered
1 'h1 1 - Not Covered
1 'h1 0 - Not Covered
1 'h1 - 1 Not Covered
1 'h1 - 0 Not Covered
1 'h00000002 - - Covered T1,T3,T11
1 default - - Not Covered
0 - - - Covered T1,T2,T3


Assert Coverage for Instance : tb.dut.u_tl_adapter_eflash.u_err
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 1 1 100.00 1 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 1 1 100.00 1 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
dataWidthOnly32_A 1053 1053 0 0


dataWidthOnly32_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1053 1053 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T10 1 1 0 0
T11 1 1 0 0
T16 1 1 0 0
T17 1 1 0 0
T18 1 1 0 0
T19 1 1 0 0

Line Coverage for Instance : tb.dut.u_reg_core.u_reg_if.u_err
Line No.TotalCoveredPercent
TOTAL2626100.00
CONT_ASSIGN2611100.00
CONT_ASSIGN2711100.00
CONT_ASSIGN2811100.00
CONT_ASSIGN3211100.00
CONT_ASSIGN3611100.00
CONT_ASSIGN3911100.00
CONT_ASSIGN4211100.00
CONT_ASSIGN5411100.00
ALWAYS571717100.00
CONT_ASSIGN9611100.00

25 logic op_full, op_partial, op_get; 26 1/1 assign op_full = (tl_i.a_opcode == PutFullData); Tests: T1 T2 T3  27 1/1 assign op_partial = (tl_i.a_opcode == PutPartialData); Tests: T1 T2 T3  28 1/1 assign op_get = (tl_i.a_opcode == Get); Tests: T1 T2 T3  29 30 // An instruction type transaction cannot be write 31 logic instr_wr_err; 32 1/1 assign instr_wr_err = prim_mubi_pkg::mubi4_test_true_strict(tl_i.a_user.instr_type) & Tests: T1 T2 T3  33 (op_full | op_partial); 34 35 logic instr_type_err; 36 1/1 assign instr_type_err = prim_mubi_pkg::mubi4_test_invalid(tl_i.a_user.instr_type); Tests: T1 T2 T3  37 38 // Anything that doesn't fall into the permitted category, it raises an error 39 1/1 assign err_o = ~(opcode_allowed & a_config_allowed) | instr_wr_err | instr_type_err; Tests: T1 T2 T3  40 41 // opcode check 42 1/1 assign opcode_allowed = (tl_i.a_opcode == PutFullData) Tests: T1 T2 T3  43 | (tl_i.a_opcode == PutPartialData) 44 | (tl_i.a_opcode == Get); 45 46 // a channel configuration check 47 logic addr_sz_chk; // address and size alignment check 48 logic mask_chk; // inactive lane a_mask check 49 logic fulldata_chk; // PutFullData should have size match to mask 50 51 localparam bit [MW-1:0] MaskOne = 1; 52 logic [MW-1:0] mask; 53 54 1/1 assign mask = MaskOne << tl_i.a_address[SubAW-1:0]; Tests: T1 T2 T3  55 56 always_comb begin 57 1/1 addr_sz_chk = 1'b0; Tests: T1 T2 T3  58 1/1 mask_chk = 1'b0; Tests: T1 T2 T3  59 1/1 fulldata_chk = 1'b0; // Only valid when opcode is PutFullData Tests: T1 T2 T3  60 61 1/1 if (tl_i.a_valid) begin Tests: T1 T2 T3  62 1/1 unique case (tl_i.a_size) Tests: T1 T2 T3  63 'h0: begin // 1 Byte 64 1/1 addr_sz_chk = 1'b1; Tests: T1 T2 T3  65 1/1 mask_chk = ~|(tl_i.a_mask & ~mask); Tests: T1 T2 T3  66 1/1 fulldata_chk = |(tl_i.a_mask & mask); Tests: T1 T2 T3  67 end 68 69 'h1: begin // 2 Byte 70 1/1 addr_sz_chk = ~tl_i.a_address[0]; Tests: T1 T2 T3  71 // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0] 72 1/1 mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011) Tests: T1 T2 T3  73 : ~|(tl_i.a_mask & 4'b1100); 74 1/1 fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ; Tests: T1 T2 T3  75 end 76 77 'h2: begin // 4 Byte 78 1/1 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0]; Tests: T1 T2 T3  79 1/1 mask_chk = 1'b1; Tests: T1 T2 T3  80 1/1 fulldata_chk = &tl_i.a_mask[3:0]; Tests: T1 T2 T3  81 end 82 83 default: begin // else 84 addr_sz_chk = 1'b0; 85 mask_chk = 1'b0; 86 fulldata_chk = 1'b0; 87 end 88 endcase 89 end else begin 90 1/1 addr_sz_chk = 1'b0; Tests: T1 T2 T3  91 1/1 mask_chk = 1'b0; Tests: T1 T2 T3  92 1/1 fulldata_chk = 1'b0; Tests: T1 T2 T3  93 end 94 end 95 96 1/1 assign a_config_allowed = addr_sz_chk Tests: T1 T2 T3 

Cond Coverage for Instance : tb.dut.u_reg_core.u_reg_if.u_err
TotalCoveredPercent
Conditions3535100.00
Logical3535100.00
Non-Logical00
Event00

 LINE       26
 EXPRESSION (tl_i.a_opcode == PutFullData)
            ---------------1--------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       27
 EXPRESSION (tl_i.a_opcode == PutPartialData)
            ----------------1----------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       28
 EXPRESSION (tl_i.a_opcode == Get)
            -----------1----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       39
 EXPRESSION (( ~ (opcode_allowed & a_config_allowed) ) | instr_wr_err | instr_type_err)
             --------------------1--------------------   ------2-----   -------3------
-1--2--3-StatusTests
000CoveredT1,T2,T3
001CoveredT74,T121,T76
010CoveredT74,T121,T76
100CoveredT2,T3,T16

 LINE       39
 SUB-EXPRESSION (opcode_allowed & a_config_allowed)
                 -------1------   --------2-------
-1--2-StatusTests
01CoveredT74,T121,T122
10CoveredT2,T3,T16
11CoveredT1,T2,T3

 LINE       42
 EXPRESSION ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData) | (tl_i.a_opcode == Get))
             ---------------1--------------   ----------------2----------------   -----------3----------
-1--2--3-StatusTests
000CoveredT74,T121,T76
001CoveredT1,T2,T3
010CoveredT1,T2,T3
100CoveredT1,T2,T3

 LINE       42
 SUB-EXPRESSION (tl_i.a_opcode == PutFullData)
                ---------------1--------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       42
 SUB-EXPRESSION (tl_i.a_opcode == PutPartialData)
                ----------------1----------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       42
 SUB-EXPRESSION (tl_i.a_opcode == Get)
                -----------1----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       72
 EXPRESSION (tl_i.a_address[1] ? ((~|(tl_i.a_mask & 4'b0011))) : ((~|(tl_i.a_mask & 4'b1100))))
             --------1--------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT3,T10,T17

 LINE       74
 EXPRESSION (tl_i.a_address[1] ? ((&tl_i.a_mask[3:2])) : ((&tl_i.a_mask[1:0])))
             --------1--------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT3,T10,T17

 LINE       96
 EXPRESSION (addr_sz_chk & mask_chk & (op_get | op_partial | fulldata_chk))
             -----1-----   ----2---   ------------------3-----------------
-1--2--3-StatusTests
011CoveredT74,T121,T76
101CoveredT74,T121,T76
110CoveredT74,T121,T76
111CoveredT1,T2,T3

 LINE       96
 SUB-EXPRESSION (op_get | op_partial | fulldata_chk)
                 ---1--   -----2----   ------3-----
-1--2--3-StatusTests
000CoveredT2,T3,T16
001CoveredT1,T2,T3
010CoveredT2,T3,T16
100CoveredT1,T2,T3

Branch Coverage for Instance : tb.dut.u_reg_core.u_reg_if.u_err
Line No.TotalCoveredPercent
Branches 8 8 100.00
IF 61 8 8 100.00


61 if (tl_i.a_valid) begin -1- 62 unique case (tl_i.a_size) -2- 63 'h0: begin // 1 Byte 64 addr_sz_chk = 1'b1; ==> 65 mask_chk = ~|(tl_i.a_mask & ~mask); 66 fulldata_chk = |(tl_i.a_mask & mask); 67 end 68 69 'h1: begin // 2 Byte 70 addr_sz_chk = ~tl_i.a_address[0]; 71 // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0] 72 mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011) -3- ==> ==> 73 : ~|(tl_i.a_mask & 4'b1100); 74 fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ; -4- ==> ==> 75 end 76 77 'h2: begin // 4 Byte 78 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0]; ==> 79 mask_chk = 1'b1; 80 fulldata_chk = &tl_i.a_mask[3:0]; 81 end 82 83 default: begin // else 84 addr_sz_chk = 1'b0; ==> 85 mask_chk = 1'b0; 86 fulldata_chk = 1'b0; 87 end 88 endcase 89 end else begin 90 addr_sz_chk = 1'b0; ==>

Branches:
-1--2--3--4-StatusTests
1 'h0 - - Covered T1,T2,T3
1 'h1 1 - Covered T3,T10,T17
1 'h1 0 - Covered T1,T2,T3
1 'h1 - 1 Covered T3,T10,T17
1 'h1 - 0 Covered T1,T2,T3
1 'h00000002 - - Covered T1,T2,T3
1 default - - Covered T74,T121,T76
0 - - - Covered T1,T2,T3


Assert Coverage for Instance : tb.dut.u_reg_core.u_reg_if.u_err
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 1 1 100.00 1 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 1 1 100.00 1 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
dataWidthOnly32_A 1268 1268 0 0


dataWidthOnly32_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1268 1268 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T10 1 1 0 0
T11 1 1 0 0
T16 1 1 0 0
T17 1 1 0 0
T18 1 1 0 0
T19 1 1 0 0

Line Coverage for Instance : tb.dut.u_eflash.u_flash.gen_generic.u_impl_generic.u_reg_top.u_reg_if.u_err
Line No.TotalCoveredPercent
TOTAL2626100.00
CONT_ASSIGN2611100.00
CONT_ASSIGN2711100.00
CONT_ASSIGN2811100.00
CONT_ASSIGN3211100.00
CONT_ASSIGN3611100.00
CONT_ASSIGN3911100.00
CONT_ASSIGN4211100.00
CONT_ASSIGN5411100.00
ALWAYS571717100.00
CONT_ASSIGN9611100.00

25 logic op_full, op_partial, op_get; 26 1/1 assign op_full = (tl_i.a_opcode == PutFullData); Tests: T30 T60 T44  27 1/1 assign op_partial = (tl_i.a_opcode == PutPartialData); Tests: T30 T60 T44  28 1/1 assign op_get = (tl_i.a_opcode == Get); Tests: T30 T60 T44  29 30 // An instruction type transaction cannot be write 31 logic instr_wr_err; 32 1/1 assign instr_wr_err = prim_mubi_pkg::mubi4_test_true_strict(tl_i.a_user.instr_type) & Tests: T30 T60 T44  33 (op_full | op_partial); 34 35 logic instr_type_err; 36 1/1 assign instr_type_err = prim_mubi_pkg::mubi4_test_invalid(tl_i.a_user.instr_type); Tests: T30 T44 T117  37 38 // Anything that doesn't fall into the permitted category, it raises an error 39 1/1 assign err_o = ~(opcode_allowed & a_config_allowed) | instr_wr_err | instr_type_err; Tests: T30 T117 T120  40 41 // opcode check 42 1/1 assign opcode_allowed = (tl_i.a_opcode == PutFullData) Tests: T30 T60 T44  43 | (tl_i.a_opcode == PutPartialData) 44 | (tl_i.a_opcode == Get); 45 46 // a channel configuration check 47 logic addr_sz_chk; // address and size alignment check 48 logic mask_chk; // inactive lane a_mask check 49 logic fulldata_chk; // PutFullData should have size match to mask 50 51 localparam bit [MW-1:0] MaskOne = 1; 52 logic [MW-1:0] mask; 53 54 1/1 assign mask = MaskOne << tl_i.a_address[SubAW-1:0]; Tests: T30 T60 T44  55 56 always_comb begin 57 1/1 addr_sz_chk = 1'b0; Tests: T30 T60 T44  58 1/1 mask_chk = 1'b0; Tests: T30 T60 T44  59 1/1 fulldata_chk = 1'b0; // Only valid when opcode is PutFullData Tests: T30 T60 T44  60 61 1/1 if (tl_i.a_valid) begin Tests: T30 T60 T44  62 1/1 unique case (tl_i.a_size) Tests: T73 T74 T121  63 'h0: begin // 1 Byte 64 1/1 addr_sz_chk = 1'b1; Tests: T73 T74 T121  65 1/1 mask_chk = ~|(tl_i.a_mask & ~mask); Tests: T73 T74 T121  66 1/1 fulldata_chk = |(tl_i.a_mask & mask); Tests: T73 T74 T121  67 end 68 69 'h1: begin // 2 Byte 70 1/1 addr_sz_chk = ~tl_i.a_address[0]; Tests: T73 T74 T121  71 // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0] 72 1/1 mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011) Tests: T73 T74 T121  73 : ~|(tl_i.a_mask & 4'b1100); 74 1/1 fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ; Tests: T73 T74 T121  75 end 76 77 'h2: begin // 4 Byte 78 1/1 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0]; Tests: T73 T74 T121  79 1/1 mask_chk = 1'b1; Tests: T73 T74 T121  80 1/1 fulldata_chk = &tl_i.a_mask[3:0]; Tests: T73 T74 T121  81 end 82 83 default: begin // else 84 addr_sz_chk = 1'b0; 85 mask_chk = 1'b0; 86 fulldata_chk = 1'b0; 87 end 88 endcase 89 end else begin 90 1/1 addr_sz_chk = 1'b0; Tests: T30 T60 T44  91 1/1 mask_chk = 1'b0; Tests: T30 T60 T44  92 1/1 fulldata_chk = 1'b0; Tests: T30 T60 T44  93 end 94 end 95 96 1/1 assign a_config_allowed = addr_sz_chk Tests: T30 T60 T44 

Cond Coverage for Instance : tb.dut.u_eflash.u_flash.gen_generic.u_impl_generic.u_reg_top.u_reg_if.u_err
TotalCoveredPercent
Conditions3535100.00
Logical3535100.00
Non-Logical00
Event00

 LINE       26
 EXPRESSION (tl_i.a_opcode == PutFullData)
            ---------------1--------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT60,T44,T117

 LINE       27
 EXPRESSION (tl_i.a_opcode == PutPartialData)
            ----------------1----------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT30,T117,T120

 LINE       28
 EXPRESSION (tl_i.a_opcode == Get)
            -----------1----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT30,T60,T44

 LINE       39
 EXPRESSION (( ~ (opcode_allowed & a_config_allowed) ) | instr_wr_err | instr_type_err)
             --------------------1--------------------   ------2-----   -------3------
-1--2--3-StatusTests
000CoveredT73,T74,T121
001CoveredT74,T121,T76
010CoveredT74,T121,T76
100CoveredT30,T60,T44

 LINE       39
 SUB-EXPRESSION (opcode_allowed & a_config_allowed)
                 -------1------   --------2-------
-1--2-StatusTests
01CoveredT74,T121,T76
10CoveredT30,T60,T44
11CoveredT73,T74,T121

 LINE       42
 EXPRESSION ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData) | (tl_i.a_opcode == Get))
             ---------------1--------------   ----------------2----------------   -----------3----------
-1--2--3-StatusTests
000CoveredT74,T121,T76
001CoveredT30,T60,T44
010CoveredT30,T117,T120
100CoveredT60,T44,T117

 LINE       42
 SUB-EXPRESSION (tl_i.a_opcode == PutFullData)
                ---------------1--------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT60,T44,T117

 LINE       42
 SUB-EXPRESSION (tl_i.a_opcode == PutPartialData)
                ----------------1----------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT30,T117,T120

 LINE       42
 SUB-EXPRESSION (tl_i.a_opcode == Get)
                -----------1----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT30,T60,T44

 LINE       72
 EXPRESSION (tl_i.a_address[1] ? ((~|(tl_i.a_mask & 4'b0011))) : ((~|(tl_i.a_mask & 4'b1100))))
             --------1--------
-1-StatusTests
0CoveredT73,T74,T121
1CoveredT73,T74,T121

 LINE       74
 EXPRESSION (tl_i.a_address[1] ? ((&tl_i.a_mask[3:2])) : ((&tl_i.a_mask[1:0])))
             --------1--------
-1-StatusTests
0CoveredT73,T74,T121
1CoveredT73,T74,T121

 LINE       96
 EXPRESSION (addr_sz_chk & mask_chk & (op_get | op_partial | fulldata_chk))
             -----1-----   ----2---   ------------------3-----------------
-1--2--3-StatusTests
011CoveredT74,T121,T76
101CoveredT74,T121,T76
110CoveredT74,T121,T76
111CoveredT73,T74,T121

 LINE       96
 SUB-EXPRESSION (op_get | op_partial | fulldata_chk)
                 ---1--   -----2----   ------3-----
-1--2--3-StatusTests
000CoveredT60,T44,T117
001CoveredT73,T74,T121
010CoveredT30,T117,T120
100CoveredT30,T60,T44

Branch Coverage for Instance : tb.dut.u_eflash.u_flash.gen_generic.u_impl_generic.u_reg_top.u_reg_if.u_err
Line No.TotalCoveredPercent
Branches 8 8 100.00
IF 61 8 8 100.00


61 if (tl_i.a_valid) begin -1- 62 unique case (tl_i.a_size) -2- 63 'h0: begin // 1 Byte 64 addr_sz_chk = 1'b1; ==> 65 mask_chk = ~|(tl_i.a_mask & ~mask); 66 fulldata_chk = |(tl_i.a_mask & mask); 67 end 68 69 'h1: begin // 2 Byte 70 addr_sz_chk = ~tl_i.a_address[0]; 71 // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0] 72 mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011) -3- ==> ==> 73 : ~|(tl_i.a_mask & 4'b1100); 74 fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ; -4- ==> ==> 75 end 76 77 'h2: begin // 4 Byte 78 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0]; ==> 79 mask_chk = 1'b1; 80 fulldata_chk = &tl_i.a_mask[3:0]; 81 end 82 83 default: begin // else 84 addr_sz_chk = 1'b0; ==> 85 mask_chk = 1'b0; 86 fulldata_chk = 1'b0; 87 end 88 endcase 89 end else begin 90 addr_sz_chk = 1'b0; ==>

Branches:
-1--2--3--4-StatusTests
1 'h0 - - Covered T73,T74,T121
1 'h1 1 - Covered T73,T74,T121
1 'h1 0 - Covered T73,T74,T121
1 'h1 - 1 Covered T73,T74,T121
1 'h1 - 0 Covered T73,T74,T121
1 'h00000002 - - Covered T73,T74,T121
1 default - - Covered T74,T121,T76
0 - - - Covered T30,T60,T44


Assert Coverage for Instance : tb.dut.u_eflash.u_flash.gen_generic.u_impl_generic.u_reg_top.u_reg_if.u_err
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 1 1 100.00 1 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 1 1 100.00 1 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
dataWidthOnly32_A 1268 1268 0 0


dataWidthOnly32_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1268 1268 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T10 1 1 0 0
T11 1 1 0 0
T16 1 1 0 0
T17 1 1 0 0
T18 1 1 0 0
T19 1 1 0 0

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