dashboard | hierarchy | modlist | groups | tests | asserts

Module Instance : tb.dut.top_earlgrey.u_sensor_ctrl_aon.u_reg.u_reg_if.u_err

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
83.23 96.15 74.29 62.50 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
83.23 96.15 74.29 62.50 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
93.91 97.37 78.26 100.00 100.00 u_reg_if


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
no children


Module Instance : tb.dut.top_earlgrey.u_rv_plic.u_reg.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
99.46 100.00 97.83 100.00 100.00 u_reg_if


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
no children


Module Instance : tb.dut.top_earlgrey.u_rv_core_ibex.u_reg_cfg.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
99.46 100.00 97.83 100.00 100.00 u_reg_if


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
no children

Go back
Module Instances:
tb.dut.top_earlgrey.u_sensor_ctrl_aon.u_reg.u_reg_if.u_err
tb.dut.top_earlgrey.u_rv_plic.u_reg.u_reg_if.u_err
tb.dut.top_earlgrey.u_rv_core_ibex.u_reg_cfg.u_reg_if.u_err
Line Coverage for Instance : tb.dut.top_earlgrey.u_sensor_ctrl_aon.u_reg.u_reg_if.u_err
Line No.TotalCoveredPercent
TOTAL262596.15
CONT_ASSIGN2611100.00
CONT_ASSIGN2711100.00
CONT_ASSIGN2811100.00
CONT_ASSIGN3211100.00
CONT_ASSIGN3611100.00
CONT_ASSIGN3911100.00
CONT_ASSIGN4211100.00
CONT_ASSIGN54100.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 0/1 ==> assign mask = MaskOne << tl_i.a_address[SubAW-1:0]; 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: T23 T24 T25  65 1/1 mask_chk = ~|(tl_i.a_mask & ~mask); Tests: T23 T24 T25  66 1/1 fulldata_chk = |(tl_i.a_mask & mask); Tests: T23 T24 T25  67 end 68 69 'h1: begin // 2 Byte 70 1/1 addr_sz_chk = ~tl_i.a_address[0]; Tests: T23 T24 T25  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: T23 T24 T25  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: T23 T24 T25  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.top_earlgrey.u_sensor_ctrl_aon.u_reg.u_reg_if.u_err
TotalCoveredPercent
Conditions352674.29
Logical352674.29
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
1CoveredT37,T59,T97

 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
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
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
000Not Covered
001CoveredT1,T2,T3
010CoveredT37,T59,T97
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
1CoveredT37,T59,T97

 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
0CoveredT23,T24,T25
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
0CoveredT23,T24,T25
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,T2,T3

 LINE       96
 SUB-EXPRESSION (op_get | op_partial | fulldata_chk)
                 ---1--   -----2----   ------3-----
-1--2--3-StatusTests
000CoveredT1,T2,T3
001CoveredT73,T172,T160
010CoveredT37,T59,T97
100CoveredT1,T2,T3

Branch Coverage for Instance : tb.dut.top_earlgrey.u_sensor_ctrl_aon.u_reg.u_reg_if.u_err
Line No.TotalCoveredPercent
Branches 8 5 62.50
IF 61 8 5 62.50


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 T23,T24,T25
1 'h1 1 - Not Covered
1 'h1 0 - Covered T23,T24,T25
1 'h1 - 1 Not Covered
1 'h1 - 0 Covered T23,T24,T25
1 'h00000002 - - Covered T1,T2,T3
1 default - - Not Covered
0 - - - Covered T1,T2,T3


Assert Coverage for Instance : tb.dut.top_earlgrey.u_sensor_ctrl_aon.u_reg.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 1018 1018 0 0


dataWidthOnly32_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1018 1018 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
T10 1 1 0 0
T35 1 1 0 0

Line Coverage for Instance : tb.dut.top_earlgrey.u_rv_plic.u_reg.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: T2 T5 T8  27 1/1 assign op_partial = (tl_i.a_opcode == PutPartialData); Tests: T2 T5 T8  28 1/1 assign op_get = (tl_i.a_opcode == Get); Tests: T2 T5 T8  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: T2 T5 T8  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: T2 T5 T8  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: T2 T5 T8  40 41 // opcode check 42 1/1 assign opcode_allowed = (tl_i.a_opcode == PutFullData) Tests: T2 T5 T8  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: T94 T95 T96  55 56 always_comb begin 57 1/1 addr_sz_chk = 1'b0; Tests: T2 T5 T8  58 1/1 mask_chk = 1'b0; Tests: T2 T5 T8  59 1/1 fulldata_chk = 1'b0; // Only valid when opcode is PutFullData Tests: T2 T5 T8  60 61 1/1 if (tl_i.a_valid) begin Tests: T2 T5 T8  62 1/1 unique case (tl_i.a_size) Tests: T2 T5 T8  63 'h0: begin // 1 Byte 64 1/1 addr_sz_chk = 1'b1; Tests: T94 T95 T96  65 1/1 mask_chk = ~|(tl_i.a_mask & ~mask); Tests: T94 T95 T96  66 1/1 fulldata_chk = |(tl_i.a_mask & mask); Tests: T94 T95 T96  67 end 68 69 'h1: begin // 2 Byte 70 1/1 addr_sz_chk = ~tl_i.a_address[0]; Tests: T94 T95 T98  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: T94 T95 T98  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: T94 T95 T98  75 end 76 77 'h2: begin // 4 Byte 78 1/1 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0]; Tests: T2 T5 T8  79 1/1 mask_chk = 1'b1; Tests: T2 T5 T8  80 1/1 fulldata_chk = &tl_i.a_mask[3:0]; Tests: T2 T5 T8  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: T2 T5 T8  91 1/1 mask_chk = 1'b0; Tests: T2 T5 T8  92 1/1 fulldata_chk = 1'b0; Tests: T2 T5 T8  93 end 94 end 95 96 1/1 assign a_config_allowed = addr_sz_chk Tests: T2 T5 T8 

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

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

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

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

 LINE       39
 EXPRESSION (( ~ (opcode_allowed & a_config_allowed) ) | instr_wr_err | instr_type_err)
             --------------------1--------------------   ------2-----   -------3------
-1--2--3-StatusTests
000CoveredT2,T5,T8
001CoveredT158,T241,T459
010CoveredT549,T553,T404
100CoveredT158,T241,T459

 LINE       39
 SUB-EXPRESSION (opcode_allowed & a_config_allowed)
                 -------1------   --------2-------
-1--2-StatusTests
01CoveredT241,T546,T551
10CoveredT1,T2,T3
11CoveredT2,T5,T8

 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
000CoveredT158,T241,T459
001CoveredT2,T5,T8
010CoveredT94,T95,T96
100CoveredT1,T2,T3

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

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

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

 LINE       72
 EXPRESSION (tl_i.a_address[1] ? ((~|(tl_i.a_mask & 4'b0011))) : ((~|(tl_i.a_mask & 4'b1100))))
             --------1--------
-1-StatusTests
0CoveredT94,T158,T241
1CoveredT94,T95,T98

 LINE       74
 EXPRESSION (tl_i.a_address[1] ? ((&tl_i.a_mask[3:2])) : ((&tl_i.a_mask[1:0])))
             --------1--------
-1-StatusTests
0CoveredT94,T158,T241
1CoveredT94,T95,T98

 LINE       96
 EXPRESSION (addr_sz_chk & mask_chk & (op_get | op_partial | fulldata_chk))
             -----1-----   ----2---   ------------------3-----------------
-1--2--3-StatusTests
011CoveredT241,T546,T569
101CoveredT158,T241,T459
110CoveredT158,T241,T459
111CoveredT2,T5,T8

 LINE       96
 SUB-EXPRESSION (op_get | op_partial | fulldata_chk)
                 ---1--   -----2----   ------3-----
-1--2--3-StatusTests
000CoveredT1,T2,T3
001CoveredT2,T5,T8
010CoveredT94,T95,T98
100CoveredT94,T96,T98

Branch Coverage for Instance : tb.dut.top_earlgrey.u_rv_plic.u_reg.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 T94,T95,T96
1 'h1 1 - Covered T94,T95,T98
1 'h1 0 - Covered T94,T158,T241
1 'h1 - 1 Covered T94,T95,T98
1 'h1 - 0 Covered T94,T158,T241
1 'h00000002 - - Covered T2,T5,T8
1 default - - Covered T158,T241,T459
0 - - - Covered T2,T5,T8


Assert Coverage for Instance : tb.dut.top_earlgrey.u_rv_plic.u_reg.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 2926 2926 0 0


dataWidthOnly32_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 2926 2926 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
T10 1 1 0 0
T35 1 1 0 0

Line Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex.u_reg_cfg.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: T2 T3 T4  27 1/1 assign op_partial = (tl_i.a_opcode == PutPartialData); Tests: T2 T3 T4  28 1/1 assign op_get = (tl_i.a_opcode == Get); Tests: T2 T3 T4  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: T2 T3 T4  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: T94 T95 T96  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 T4  63 'h0: begin // 1 Byte 64 1/1 addr_sz_chk = 1'b1; Tests: T94 T96 T98  65 1/1 mask_chk = ~|(tl_i.a_mask & ~mask); Tests: T94 T96 T98  66 1/1 fulldata_chk = |(tl_i.a_mask & mask); Tests: T94 T96 T98  67 end 68 69 'h1: begin // 2 Byte 70 1/1 addr_sz_chk = ~tl_i.a_address[0]; Tests: T94 T95 T96  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: T94 T95 T96  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: T94 T95 T96  75 end 76 77 'h2: begin // 4 Byte 78 1/1 addr_sz_chk = ~|tl_i.a_address[SubAW-1:0]; Tests: T2 T3 T4  79 1/1 mask_chk = 1'b1; Tests: T2 T3 T4  80 1/1 fulldata_chk = &tl_i.a_mask[3:0]; Tests: T2 T3 T4  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.top_earlgrey.u_rv_core_ibex.u_reg_cfg.u_reg_if.u_err
TotalCoveredPercent
Conditions3535100.00
Logical3535100.00
Non-Logical00
Event00

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

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

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

 LINE       39
 EXPRESSION (( ~ (opcode_allowed & a_config_allowed) ) | instr_wr_err | instr_type_err)
             --------------------1--------------------   ------2-----   -------3------
-1--2--3-StatusTests
000CoveredT2,T3,T4
001CoveredT158,T241,T546
010CoveredT546,T549,T553
100CoveredT1,T2,T3

 LINE       39
 SUB-EXPRESSION (opcode_allowed & a_config_allowed)
                 -------1------   --------2-------
-1--2-StatusTests
01CoveredT241,T546,T551
10CoveredT1,T2,T3
11CoveredT2,T3,T4

 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
000CoveredT158,T241,T459
001CoveredT2,T3,T4
010CoveredT94,T96,T98
100CoveredT1,T2,T3

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

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

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

 LINE       72
 EXPRESSION (tl_i.a_address[1] ? ((~|(tl_i.a_mask & 4'b0011))) : ((~|(tl_i.a_mask & 4'b1100))))
             --------1--------
-1-StatusTests
0CoveredT95,T98,T158
1CoveredT94,T96,T98

 LINE       74
 EXPRESSION (tl_i.a_address[1] ? ((&tl_i.a_mask[3:2])) : ((&tl_i.a_mask[1:0])))
             --------1--------
-1-StatusTests
0CoveredT95,T98,T158
1CoveredT94,T96,T98

 LINE       96
 EXPRESSION (addr_sz_chk & mask_chk & (op_get | op_partial | fulldata_chk))
             -----1-----   ----2---   ------------------3-----------------
-1--2--3-StatusTests
011CoveredT158,T241,T459
101CoveredT158,T241,T459
110CoveredT241,T459,T546
111CoveredT2,T3,T4

 LINE       96
 SUB-EXPRESSION (op_get | op_partial | fulldata_chk)
                 ---1--   -----2----   ------3-----
-1--2--3-StatusTests
000CoveredT1,T2,T3
001CoveredT43,T44,T81
010CoveredT94,T96,T98
100CoveredT94,T96,T98

Branch Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex.u_reg_cfg.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 T94,T96,T98
1 'h1 1 - Covered T94,T96,T98
1 'h1 0 - Covered T95,T98,T158
1 'h1 - 1 Covered T94,T96,T98
1 'h1 - 0 Covered T95,T98,T158
1 'h00000002 - - Covered T2,T3,T4
1 default - - Covered T158,T241,T546
0 - - - Covered T1,T2,T3


Assert Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex.u_reg_cfg.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 2926 2926 0 0


dataWidthOnly32_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 2926 2926 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
T10 1 1 0 0
T35 1 1 0 0

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