dashboard | hierarchy | modlist | groups | tests | asserts

Module Instance : tb.dut.top_earlgrey.u_pinmux_aon.u_reg.u_reg_if

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
98.98 100.00 95.92 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
98.69 97.14 97.62 100.00 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
99.26 99.77 97.26 100.00 100.00 u_reg


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
u_err 100.00 100.00 100.00 100.00 100.00
u_rsp_intg_gen 83.33 66.67 100.00


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

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.91 97.37 78.26 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
89.30 94.29 76.54 86.36 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
92.75 100.00 71.00 100.00 100.00 u_reg


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
u_err 83.23 96.15 74.29 62.50 100.00
u_rsp_intg_gen 83.33 66.67 100.00


Module Instance : tb.dut.top_earlgrey.u_rv_plic.u_reg.u_reg_if

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
99.46 100.00 97.83 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
98.98 97.14 98.77 100.00 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
99.98 100.00 99.90 100.00 100.00 u_reg


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
u_err 100.00 100.00 100.00 100.00 100.00
u_rsp_intg_gen 83.33 66.67 100.00


Module Instance : tb.dut.top_earlgrey.u_rv_core_ibex.u_reg_cfg.u_reg_if

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
98.91 100.00 95.65 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
98.67 97.14 97.53 100.00 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
99.92 100.00 99.68 100.00 100.00 u_reg_cfg


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
u_err 100.00 100.00 100.00 100.00 100.00
u_rsp_intg_gen 83.33 66.67 100.00

Go back
Module Instances:
tb.dut.top_earlgrey.u_pinmux_aon.u_reg.u_reg_if
tb.dut.top_earlgrey.u_sensor_ctrl_aon.u_reg.u_reg_if
tb.dut.top_earlgrey.u_rv_plic.u_reg.u_reg_if
tb.dut.top_earlgrey.u_rv_core_ibex.u_reg_cfg.u_reg_if
Line Coverage for Instance : tb.dut.top_earlgrey.u_pinmux_aon.u_reg.u_reg_if
Line No.TotalCoveredPercent
TOTAL3838100.00
CONT_ASSIGN7711100.00
CONT_ASSIGN7811100.00
CONT_ASSIGN8011100.00
CONT_ASSIGN8111100.00
CONT_ASSIGN8311100.00
CONT_ASSIGN8411100.00
CONT_ASSIGN8511100.00
CONT_ASSIGN8611100.00
CONT_ASSIGN9111100.00
ALWAYS9566100.00
ALWAYS10188100.00
ALWAYS14166100.00
CONT_ASSIGN14911100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15411100.00
CONT_ASSIGN20411100.00
CONT_ASSIGN20811100.00
CONT_ASSIGN21111100.00
ALWAYS21833100.00

76 77 1/1 assign a_ack = tl_i.a_valid & tl_o.a_ready; Tests: T1 T2 T3  78 1/1 assign d_ack = tl_o.d_valid & tl_i.d_ready; Tests: T1 T2 T3  79 // Request signal 80 1/1 assign wr_req = a_ack & ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData)); Tests: T1 T2 T3  81 1/1 assign rd_req = a_ack & (tl_i.a_opcode == Get); Tests: T1 T2 T3  82 83 1/1 assign we_o = wr_req & ~err_internal; Tests: T1 T2 T3  84 1/1 assign re_o = rd_req & ~err_internal; Tests: T1 T2 T3  85 1/1 assign wdata_o = tl_i.a_data; Tests: T1 T2 T3  86 1/1 assign be_o = tl_i.a_mask; Tests: T1 T2 T3  87 88 if (RegAw <= 2) begin : gen_only_one_reg 89 assign addr_o = '0; 90 end else begin : gen_more_regs 91 1/1 assign addr_o = {tl_i.a_address[RegAw-1:2], 2'b00}; // generate always word-align Tests: T1 T2 T3  92 end 93 94 always_ff @(posedge clk_i or negedge rst_ni) begin 95 2/2 if (!rst_ni) outstanding_q <= 1'b0; Tests: T1 T2 T3  | T1 T2 T3  96 2/2 else if (a_ack) outstanding_q <= 1'b1; Tests: T1 T2 T3  | T1 T2 T3  97 2/2 else if (d_ack) outstanding_q <= 1'b0; Tests: T1 T2 T3  | T1 T2 T3  MISSING_ELSE 98 end 99 100 always_ff @(posedge clk_i or negedge rst_ni) begin 101 1/1 if (!rst_ni) begin Tests: T1 T2 T3  102 1/1 reqid_q <= '0; Tests: T1 T2 T3  103 1/1 reqsz_q <= '0; Tests: T1 T2 T3  104 1/1 rspop_q <= AccessAck; Tests: T1 T2 T3  105 1/1 end else if (a_ack) begin Tests: T1 T2 T3  106 1/1 reqid_q <= tl_i.a_source; Tests: T1 T2 T3  107 1/1 reqsz_q <= tl_i.a_size; Tests: T1 T2 T3  108 // Return AccessAckData regardless of error 109 1/1 rspop_q <= (rd_req) ? AccessAckData : AccessAck ; Tests: T1 T2 T3  110 end MISSING_ELSE 111 end 112 113 if (AccessLatency == 1) begin : gen_access_latency1 114 logic wr_req_q, rd_req_q; 115 always_ff @(posedge clk_i or negedge rst_ni) begin 116 if (!rst_ni) begin 117 rdata_q <= '0; 118 error_q <= 1'b0; 119 wr_req_q <= 1'b0; 120 rd_req_q <= 1'b0; 121 end else begin 122 rd_req_q <= rd_req; 123 wr_req_q <= wr_req; 124 // Addressing phase 125 if (a_ack) begin 126 error_q <= err_internal; 127 // Response phase 128 end else begin 129 error_q <= error; 130 rdata_q <= rdata; 131 end 132 end 133 end 134 assign rdata = (error_i || error_q || wr_req_q) ? '1 : 135 (rd_req_q) ? rdata_i : 136 rdata_q; // backpressure case 137 assign error = (rd_req_q || wr_req_q) ? (error_q || error_i) : 138 error_q; // backpressure case 139 end else begin : gen_access_latency0 140 always_ff @(posedge clk_i or negedge rst_ni) begin 141 1/1 if (!rst_ni) begin Tests: T1 T2 T3  142 1/1 rdata_q <= '0; Tests: T1 T2 T3  143 1/1 error_q <= 1'b0; Tests: T1 T2 T3  144 1/1 end else if (a_ack) begin Tests: T1 T2 T3  145 1/1 rdata_q <= (error_i || err_internal || wr_req) ? '1 : rdata_i; Tests: T1 T2 T3  146 1/1 error_q <= error_i || err_internal; Tests: T1 T2 T3  147 end MISSING_ELSE 148 end 149 1/1 assign rdata = rdata_q; Tests: T1 T2 T3  150 1/1 assign error = error_q; Tests: T401 T402 T562  151 end 152 153 tlul_pkg::tl_d2h_t tl_o_pre; 154 1/1 assign tl_o_pre = '{ Tests: T1 T2 T3  155 // busy is selected based on address 156 // thus if there is no valid transaction, we should ignore busy 157 a_ready: ~(outstanding_q | tl_i.a_valid & busy_i), 158 d_valid: outstanding_q, 159 d_opcode: rspop_q, 160 d_param: '0, 161 d_size: reqsz_q, 162 d_source: reqid_q, 163 d_sink: '0, 164 d_data: rdata, 165 d_user: '0, 166 d_error: error 167 }; 168 169 // outgoing integrity generation 170 tlul_rsp_intg_gen #( 171 .EnableRspIntgGen(EnableRspIntgGen), 172 .EnableDataIntgGen(EnableDataIntgGen) 173 ) u_rsp_intg_gen ( 174 .tl_i(tl_o_pre), 175 .tl_o(tl_o) 176 ); 177 178 if (CmdIntgCheck) begin : gen_cmd_intg_check 179 logic intg_error_q; 180 tlul_cmd_intg_chk u_cmd_intg_chk ( 181 .tl_i(tl_i), 182 .err_o(intg_error) 183 ); 184 // permanently latch integrity error until reset 185 always_ff @(posedge clk_i or negedge rst_ni) begin 186 if (!rst_ni) begin 187 intg_error_q <= 1'b0; 188 end else if (intg_error) begin 189 intg_error_q <= 1'b1; 190 end 191 end 192 assign intg_error_o = intg_error_q; 193 end else begin : gen_no_cmd_intg_check 194 assign intg_error = 1'b0; 195 assign intg_error_o = 1'b0; 196 end 197 198 //////////////////// 199 // Error Handling // 200 //////////////////// 201 202 // An instruction type transaction is only valid if en_ifetch is enabled 203 // If the instruction type is completely invalid, also considered an instruction error 204 1/1 assign instr_error = prim_mubi_pkg::mubi4_test_invalid(tl_i.a_user.instr_type) | Tests: T1 T2 T3  205 (prim_mubi_pkg::mubi4_test_true_strict(tl_i.a_user.instr_type) & 206 prim_mubi_pkg::mubi4_test_false_loose(en_ifetch_i)); 207 208 1/1 assign err_internal = addr_align_err | malformed_meta_err | tl_err | instr_error | intg_error; Tests: T1 T2 T3  209 210 // Don't allow unsupported values. 211 1/1 assign malformed_meta_err = tl_a_user_chk(tl_i.a_user); Tests: T1 T2 T3  212 213 // addr_align_err 214 // Raised if addr isn't aligned with the size 215 // Read size error is checked in tlul_assert.sv 216 // Here is it added due to the limitation of register interface. 217 always_comb begin 218 1/1 if (wr_req) begin Tests: T1 T2 T3  219 // Only word-align is accepted based on comportability spec 220 1/1 addr_align_err = |tl_i.a_address[1:0]; Tests: T1 T2 T3  221 end else begin 222 // No request 223 1/1 addr_align_err = 1'b0; Tests: T1 T2 T3 

Cond Coverage for Instance : tb.dut.top_earlgrey.u_pinmux_aon.u_reg.u_reg_if
TotalCoveredPercent
Conditions494795.92
Logical494795.92
Non-Logical00
Event00

 LINE       77
 EXPRESSION (tl_i.a_valid & tl_o.a_ready)
             ------1-----   ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT5,T23,T26
11CoveredT1,T2,T3

 LINE       78
 EXPRESSION (tl_o.d_valid & tl_i.d_ready)
             ------1-----   ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT54,T55,T56
11CoveredT1,T2,T3

 LINE       80
 EXPRESSION (a_ack & ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData)))
             --1--   ----------------------------------2---------------------------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       80
 SUB-EXPRESSION ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData))
                 ---------------1--------------   ----------------2----------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT35,T97,T98
10CoveredT1,T2,T3

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

 LINE       80
 SUB-EXPRESSION (tl_i.a_opcode == PutPartialData)
                ----------------1----------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT35,T97,T98

 LINE       81
 EXPRESSION (a_ack & (tl_i.a_opcode == Get))
             --1--   -----------2----------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT1,T2,T3
11CoveredT1,T2,T3

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

 LINE       83
 EXPRESSION (wr_req & ((~err_internal)))
             ---1--   --------2--------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT95,T96,T99
11CoveredT1,T2,T3

 LINE       84
 EXPRESSION (rd_req & ((~err_internal)))
             ---1--   --------2--------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT278,T279,T443
11CoveredT1,T2,T3

 LINE       109
 EXPRESSION (rd_req ? AccessAckData : AccessAck)
             ---1--
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       145
 EXPRESSION ((error_i || err_internal || wr_req) ? '1 : rdata_i)
             -----------------1-----------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       145
 SUB-EXPRESSION (error_i || err_internal || wr_req)
                 ---1---    ------2-----    ---3--
-1--2--3-StatusTests
000CoveredT1,T2,T3
001CoveredT1,T2,T3
010CoveredT557
100Not Covered

 LINE       146
 EXPRESSION (error_i || err_internal)
             ---1---    ------2-----
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT401,T402,T562
10CoveredT401,T402,T562

 LINE       154
 SUB-EXPRESSION (outstanding_q | (tl_i.a_valid & busy_i))
                 ------1------   -----------2-----------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT5,T23,T26
10CoveredT1,T2,T3

 LINE       154
 SUB-EXPRESSION (tl_i.a_valid & busy_i)
                 ------1-----   ---2--
-1--2-StatusTests
01CoveredT182,T183,T396
10CoveredT1,T2,T3
11CoveredT5,T23,T26

 LINE       208
 EXPRESSION (addr_align_err | malformed_meta_err | tl_err | instr_error | intg_error)
             -------1------   ---------2--------   ---3--   -----4-----   -----5----
-1--2--3--4--5-StatusTests
00000CoveredT1,T2,T3
00001Unreachable
00010CoveredT635,T617,T636
00100CoveredT1,T2,T3
01000Not Covered
10000CoveredT95,T96,T99

Branch Coverage for Instance : tb.dut.top_earlgrey.u_pinmux_aon.u_reg.u_reg_if
Line No.TotalCoveredPercent
Branches 14 14 100.00
IF 95 4 4 100.00
IF 101 4 4 100.00
IF 218 2 2 100.00
IF 141 4 4 100.00


95 if (!rst_ni) outstanding_q <= 1'b0; -1- ==> 96 else if (a_ack) outstanding_q <= 1'b1; -2- ==> 97 else if (d_ack) outstanding_q <= 1'b0; -3- ==> MISSING_ELSE ==>

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


101 if (!rst_ni) begin -1- 102 reqid_q <= '0; ==> 103 reqsz_q <= '0; 104 rspop_q <= AccessAck; 105 end else if (a_ack) begin -2- 106 reqid_q <= tl_i.a_source; 107 reqsz_q <= tl_i.a_size; 108 // Return AccessAckData regardless of error 109 rspop_q <= (rd_req) ? AccessAckData : AccessAck ; -3- ==> ==> 110 end MISSING_ELSE ==>

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


218 if (wr_req) begin -1- 219 // Only word-align is accepted based on comportability spec 220 addr_align_err = |tl_i.a_address[1:0]; ==> 221 end else begin 222 // No request 223 addr_align_err = 1'b0; ==>

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


141 if (!rst_ni) begin -1- 142 rdata_q <= '0; ==> 143 error_q <= 1'b0; 144 end else if (a_ack) begin -2- 145 rdata_q <= (error_i || err_internal || wr_req) ? '1 : rdata_i; -3- ==> ==> 146 error_q <= error_i || err_internal; 147 end MISSING_ELSE ==>

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


Assert Coverage for Instance : tb.dut.top_earlgrey.u_pinmux_aon.u_reg.u_reg_if
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 2 2 100.00 2 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 2 2 100.00 2 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
AllowedLatency_A 2918 2918 0 0
MatchedWidthAssert 2918 2918 0 0


AllowedLatency_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 2918 2918 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
T30 1 1 0 0
T68 1 1 0 0
T104 1 1 0 0
T105 1 1 0 0

MatchedWidthAssert
NameAttemptsReal SuccessesFailuresIncomplete
Total 2918 2918 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
T30 1 1 0 0
T68 1 1 0 0
T104 1 1 0 0
T105 1 1 0 0

Line Coverage for Instance : tb.dut.top_earlgrey.u_sensor_ctrl_aon.u_reg.u_reg_if
Line No.TotalCoveredPercent
TOTAL383797.37
CONT_ASSIGN7711100.00
CONT_ASSIGN7811100.00
CONT_ASSIGN8011100.00
CONT_ASSIGN8111100.00
CONT_ASSIGN8311100.00
CONT_ASSIGN8411100.00
CONT_ASSIGN8511100.00
CONT_ASSIGN8611100.00
CONT_ASSIGN9111100.00
ALWAYS9566100.00
ALWAYS10188100.00
ALWAYS14166100.00
CONT_ASSIGN14911100.00
CONT_ASSIGN150100.00
CONT_ASSIGN15411100.00
CONT_ASSIGN20411100.00
CONT_ASSIGN20811100.00
CONT_ASSIGN21111100.00
ALWAYS21833100.00

76 77 1/1 assign a_ack = tl_i.a_valid & tl_o.a_ready; Tests: T1 T2 T3  78 1/1 assign d_ack = tl_o.d_valid & tl_i.d_ready; Tests: T1 T2 T3  79 // Request signal 80 1/1 assign wr_req = a_ack & ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData)); Tests: T1 T2 T3  81 1/1 assign rd_req = a_ack & (tl_i.a_opcode == Get); Tests: T1 T2 T3  82 83 1/1 assign we_o = wr_req & ~err_internal; Tests: T1 T2 T3  84 1/1 assign re_o = rd_req & ~err_internal; Tests: T1 T2 T3  85 1/1 assign wdata_o = tl_i.a_data; Tests: T1 T2 T3  86 1/1 assign be_o = tl_i.a_mask; Tests: T1 T2 T3  87 88 if (RegAw <= 2) begin : gen_only_one_reg 89 assign addr_o = '0; 90 end else begin : gen_more_regs 91 1/1 assign addr_o = {tl_i.a_address[RegAw-1:2], 2'b00}; // generate always word-align Tests: T1 T2 T3  92 end 93 94 always_ff @(posedge clk_i or negedge rst_ni) begin 95 2/2 if (!rst_ni) outstanding_q <= 1'b0; Tests: T1 T2 T3  | T1 T2 T3  96 2/2 else if (a_ack) outstanding_q <= 1'b1; Tests: T1 T2 T3  | T1 T2 T3  97 2/2 else if (d_ack) outstanding_q <= 1'b0; Tests: T1 T2 T3  | T1 T2 T3  MISSING_ELSE 98 end 99 100 always_ff @(posedge clk_i or negedge rst_ni) begin 101 1/1 if (!rst_ni) begin Tests: T1 T2 T3  102 1/1 reqid_q <= '0; Tests: T1 T2 T3  103 1/1 reqsz_q <= '0; Tests: T1 T2 T3  104 1/1 rspop_q <= AccessAck; Tests: T1 T2 T3  105 1/1 end else if (a_ack) begin Tests: T1 T2 T3  106 1/1 reqid_q <= tl_i.a_source; Tests: T1 T2 T3  107 1/1 reqsz_q <= tl_i.a_size; Tests: T1 T2 T3  108 // Return AccessAckData regardless of error 109 1/1 rspop_q <= (rd_req) ? AccessAckData : AccessAck ; Tests: T1 T2 T3  110 end MISSING_ELSE 111 end 112 113 if (AccessLatency == 1) begin : gen_access_latency1 114 logic wr_req_q, rd_req_q; 115 always_ff @(posedge clk_i or negedge rst_ni) begin 116 if (!rst_ni) begin 117 rdata_q <= '0; 118 error_q <= 1'b0; 119 wr_req_q <= 1'b0; 120 rd_req_q <= 1'b0; 121 end else begin 122 rd_req_q <= rd_req; 123 wr_req_q <= wr_req; 124 // Addressing phase 125 if (a_ack) begin 126 error_q <= err_internal; 127 // Response phase 128 end else begin 129 error_q <= error; 130 rdata_q <= rdata; 131 end 132 end 133 end 134 assign rdata = (error_i || error_q || wr_req_q) ? '1 : 135 (rd_req_q) ? rdata_i : 136 rdata_q; // backpressure case 137 assign error = (rd_req_q || wr_req_q) ? (error_q || error_i) : 138 error_q; // backpressure case 139 end else begin : gen_access_latency0 140 always_ff @(posedge clk_i or negedge rst_ni) begin 141 1/1 if (!rst_ni) begin Tests: T1 T2 T3  142 1/1 rdata_q <= '0; Tests: T1 T2 T3  143 1/1 error_q <= 1'b0; Tests: T1 T2 T3  144 1/1 end else if (a_ack) begin Tests: T1 T2 T3  145 1/1 rdata_q <= (error_i || err_internal || wr_req) ? '1 : rdata_i; Tests: T1 T2 T3  146 1/1 error_q <= error_i || err_internal; Tests: T1 T2 T3  147 end MISSING_ELSE 148 end 149 1/1 assign rdata = rdata_q; Tests: T1 T2 T3  150 0/1 ==> assign error = error_q; 151 end 152 153 tlul_pkg::tl_d2h_t tl_o_pre; 154 1/1 assign tl_o_pre = '{ Tests: T1 T2 T3  155 // busy is selected based on address 156 // thus if there is no valid transaction, we should ignore busy 157 a_ready: ~(outstanding_q | tl_i.a_valid & busy_i), 158 d_valid: outstanding_q, 159 d_opcode: rspop_q, 160 d_param: '0, 161 d_size: reqsz_q, 162 d_source: reqid_q, 163 d_sink: '0, 164 d_data: rdata, 165 d_user: '0, 166 d_error: error 167 }; 168 169 // outgoing integrity generation 170 tlul_rsp_intg_gen #( 171 .EnableRspIntgGen(EnableRspIntgGen), 172 .EnableDataIntgGen(EnableDataIntgGen) 173 ) u_rsp_intg_gen ( 174 .tl_i(tl_o_pre), 175 .tl_o(tl_o) 176 ); 177 178 if (CmdIntgCheck) begin : gen_cmd_intg_check 179 logic intg_error_q; 180 tlul_cmd_intg_chk u_cmd_intg_chk ( 181 .tl_i(tl_i), 182 .err_o(intg_error) 183 ); 184 // permanently latch integrity error until reset 185 always_ff @(posedge clk_i or negedge rst_ni) begin 186 if (!rst_ni) begin 187 intg_error_q <= 1'b0; 188 end else if (intg_error) begin 189 intg_error_q <= 1'b1; 190 end 191 end 192 assign intg_error_o = intg_error_q; 193 end else begin : gen_no_cmd_intg_check 194 assign intg_error = 1'b0; 195 assign intg_error_o = 1'b0; 196 end 197 198 //////////////////// 199 // Error Handling // 200 //////////////////// 201 202 // An instruction type transaction is only valid if en_ifetch is enabled 203 // If the instruction type is completely invalid, also considered an instruction error 204 1/1 assign instr_error = prim_mubi_pkg::mubi4_test_invalid(tl_i.a_user.instr_type) | Tests: T1 T2 T3  205 (prim_mubi_pkg::mubi4_test_true_strict(tl_i.a_user.instr_type) & 206 prim_mubi_pkg::mubi4_test_false_loose(en_ifetch_i)); 207 208 1/1 assign err_internal = addr_align_err | malformed_meta_err | tl_err | instr_error | intg_error; Tests: T1 T2 T3  209 210 // Don't allow unsupported values. 211 1/1 assign malformed_meta_err = tl_a_user_chk(tl_i.a_user); Tests: T1 T2 T3  212 213 // addr_align_err 214 // Raised if addr isn't aligned with the size 215 // Read size error is checked in tlul_assert.sv 216 // Here is it added due to the limitation of register interface. 217 always_comb begin 218 1/1 if (wr_req) begin Tests: T75 T179 T164  219 // Only word-align is accepted based on comportability spec 220 1/1 addr_align_err = |tl_i.a_address[1:0]; Tests: T75 T179 T164  221 end else begin 222 // No request 223 1/1 addr_align_err = 1'b0; Tests: T75 T179 T164 

Cond Coverage for Instance : tb.dut.top_earlgrey.u_sensor_ctrl_aon.u_reg.u_reg_if
TotalCoveredPercent
Conditions463678.26
Logical463678.26
Non-Logical00
Event00

 LINE       77
 EXPRESSION (tl_i.a_valid & tl_o.a_ready)
             ------1-----   ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10Not Covered
11CoveredT1,T2,T3

 LINE       78
 EXPRESSION (tl_o.d_valid & tl_i.d_ready)
             ------1-----   ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT177,T20,T21
11CoveredT1,T2,T3

 LINE       80
 EXPRESSION (a_ack & ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData)))
             --1--   ----------------------------------2---------------------------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT1,T2,T3
11CoveredT75,T179,T164

 LINE       80
 SUB-EXPRESSION ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData))
                 ---------------1--------------   ----------------2----------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT35,T97,T98
10CoveredT1,T2,T3

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

 LINE       80
 SUB-EXPRESSION (tl_i.a_opcode == PutPartialData)
                ----------------1----------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT35,T97,T98

 LINE       81
 EXPRESSION (a_ack & (tl_i.a_opcode == Get))
             --1--   -----------2----------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT75,T179,T164
11CoveredT1,T2,T3

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

 LINE       83
 EXPRESSION (wr_req & ((~err_internal)))
             ---1--   --------2--------
-1--2-StatusTests
01CoveredT1,T2,T3
10Not Covered
11CoveredT75,T179,T164

 LINE       84
 EXPRESSION (rd_req & ((~err_internal)))
             ---1--   --------2--------
-1--2-StatusTests
01CoveredT75,T179,T164
10Not Covered
11CoveredT1,T2,T3

 LINE       109
 EXPRESSION (rd_req ? AccessAckData : AccessAck)
             ---1--
-1-StatusTests
0CoveredT75,T179,T164
1CoveredT1,T2,T3

 LINE       145
 EXPRESSION ((error_i || err_internal || wr_req) ? '1 : rdata_i)
             -----------------1-----------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT75,T179,T164

 LINE       145
 SUB-EXPRESSION (error_i || err_internal || wr_req)
                 ---1---    ------2-----    ---3--
-1--2--3-StatusTests
000CoveredT1,T2,T3
001CoveredT75,T179,T164
010Not Covered
100Not Covered

 LINE       146
 EXPRESSION (error_i || err_internal)
             ---1---    ------2-----
-1--2-StatusTests
00CoveredT1,T2,T3
01Not Covered
10Not Covered

 LINE       154
 SUB-EXPRESSION (outstanding_q | (tl_i.a_valid & busy_i))
                 ------1------   -----------2-----------
-1--2-StatusTests
00CoveredT1,T2,T3
01Unreachable
10CoveredT1,T2,T3

 LINE       154
 SUB-EXPRESSION (tl_i.a_valid & busy_i)
                 ------1-----   ---2--
-1--2-StatusTests
01Unreachable
10CoveredT1,T2,T3
11Unreachable

 LINE       208
 EXPRESSION (addr_align_err | malformed_meta_err | tl_err | instr_error | intg_error)
             -------1------   ---------2--------   ---3--   -----4-----   -----5----
-1--2--3--4--5-StatusTests
00000CoveredT1,T2,T3
00001Unreachable
00010Not Covered
00100CoveredT1,T2,T3
01000Not Covered
10000Not Covered

Branch Coverage for Instance : tb.dut.top_earlgrey.u_sensor_ctrl_aon.u_reg.u_reg_if
Line No.TotalCoveredPercent
Branches 14 14 100.00
IF 95 4 4 100.00
IF 101 4 4 100.00
IF 218 2 2 100.00
IF 141 4 4 100.00


95 if (!rst_ni) outstanding_q <= 1'b0; -1- ==> 96 else if (a_ack) outstanding_q <= 1'b1; -2- ==> 97 else if (d_ack) outstanding_q <= 1'b0; -3- ==> MISSING_ELSE ==>

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


101 if (!rst_ni) begin -1- 102 reqid_q <= '0; ==> 103 reqsz_q <= '0; 104 rspop_q <= AccessAck; 105 end else if (a_ack) begin -2- 106 reqid_q <= tl_i.a_source; 107 reqsz_q <= tl_i.a_size; 108 // Return AccessAckData regardless of error 109 rspop_q <= (rd_req) ? AccessAckData : AccessAck ; -3- ==> ==> 110 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
1 - - Covered T1,T2,T3
0 1 1 Covered T1,T2,T3
0 1 0 Covered T75,T179,T164
0 0 - Covered T1,T2,T3


218 if (wr_req) begin -1- 219 // Only word-align is accepted based on comportability spec 220 addr_align_err = |tl_i.a_address[1:0]; ==> 221 end else begin 222 // No request 223 addr_align_err = 1'b0; ==>

Branches:
-1-StatusTests
1 Covered T75,T179,T164
0 Covered T75,T179,T164


141 if (!rst_ni) begin -1- 142 rdata_q <= '0; ==> 143 error_q <= 1'b0; 144 end else if (a_ack) begin -2- 145 rdata_q <= (error_i || err_internal || wr_req) ? '1 : rdata_i; -3- ==> ==> 146 error_q <= error_i || err_internal; 147 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
1 - - Covered T1,T2,T3
0 1 1 Covered T75,T179,T164
0 1 0 Covered T1,T2,T3
0 0 - Covered T1,T2,T3


Assert Coverage for Instance : tb.dut.top_earlgrey.u_sensor_ctrl_aon.u_reg.u_reg_if
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 2 2 100.00 2 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 2 2 100.00 2 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
AllowedLatency_A 1010 1010 0 0
MatchedWidthAssert 1010 1010 0 0


AllowedLatency_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1010 1010 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
T30 1 1 0 0
T68 1 1 0 0
T104 1 1 0 0
T105 1 1 0 0

MatchedWidthAssert
NameAttemptsReal SuccessesFailuresIncomplete
Total 1010 1010 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
T30 1 1 0 0
T68 1 1 0 0
T104 1 1 0 0
T105 1 1 0 0

Line Coverage for Instance : tb.dut.top_earlgrey.u_rv_plic.u_reg.u_reg_if
Line No.TotalCoveredPercent
TOTAL3838100.00
CONT_ASSIGN7711100.00
CONT_ASSIGN7811100.00
CONT_ASSIGN8011100.00
CONT_ASSIGN8111100.00
CONT_ASSIGN8311100.00
CONT_ASSIGN8411100.00
CONT_ASSIGN8511100.00
CONT_ASSIGN8611100.00
CONT_ASSIGN9111100.00
ALWAYS9566100.00
ALWAYS10188100.00
ALWAYS14166100.00
CONT_ASSIGN14911100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15411100.00
CONT_ASSIGN20411100.00
CONT_ASSIGN20811100.00
CONT_ASSIGN21111100.00
ALWAYS21833100.00

76 77 1/1 assign a_ack = tl_i.a_valid & tl_o.a_ready; Tests: T2 T3 T5  78 1/1 assign d_ack = tl_o.d_valid & tl_i.d_ready; Tests: T1 T2 T3  79 // Request signal 80 1/1 assign wr_req = a_ack & ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData)); Tests: T2 T3 T5  81 1/1 assign rd_req = a_ack & (tl_i.a_opcode == Get); Tests: T2 T3 T5  82 83 1/1 assign we_o = wr_req & ~err_internal; Tests: T2 T3 T5  84 1/1 assign re_o = rd_req & ~err_internal; Tests: T2 T3 T5  85 1/1 assign wdata_o = tl_i.a_data; Tests: T2 T3 T5  86 1/1 assign be_o = tl_i.a_mask; Tests: T2 T3 T5  87 88 if (RegAw <= 2) begin : gen_only_one_reg 89 assign addr_o = '0; 90 end else begin : gen_more_regs 91 1/1 assign addr_o = {tl_i.a_address[RegAw-1:2], 2'b00}; // generate always word-align Tests: T2 T3 T5  92 end 93 94 always_ff @(posedge clk_i or negedge rst_ni) begin 95 2/2 if (!rst_ni) outstanding_q <= 1'b0; Tests: T1 T2 T3  | T1 T2 T3  96 2/2 else if (a_ack) outstanding_q <= 1'b1; Tests: T1 T2 T3  | T2 T3 T5  97 2/2 else if (d_ack) outstanding_q <= 1'b0; Tests: T1 T2 T3  | T2 T3 T5  MISSING_ELSE 98 end 99 100 always_ff @(posedge clk_i or negedge rst_ni) begin 101 1/1 if (!rst_ni) begin Tests: T1 T2 T3  102 1/1 reqid_q <= '0; Tests: T1 T2 T3  103 1/1 reqsz_q <= '0; Tests: T1 T2 T3  104 1/1 rspop_q <= AccessAck; Tests: T1 T2 T3  105 1/1 end else if (a_ack) begin Tests: T1 T2 T3  106 1/1 reqid_q <= tl_i.a_source; Tests: T2 T3 T5  107 1/1 reqsz_q <= tl_i.a_size; Tests: T2 T3 T5  108 // Return AccessAckData regardless of error 109 1/1 rspop_q <= (rd_req) ? AccessAckData : AccessAck ; Tests: T2 T3 T5  110 end MISSING_ELSE 111 end 112 113 if (AccessLatency == 1) begin : gen_access_latency1 114 logic wr_req_q, rd_req_q; 115 always_ff @(posedge clk_i or negedge rst_ni) begin 116 if (!rst_ni) begin 117 rdata_q <= '0; 118 error_q <= 1'b0; 119 wr_req_q <= 1'b0; 120 rd_req_q <= 1'b0; 121 end else begin 122 rd_req_q <= rd_req; 123 wr_req_q <= wr_req; 124 // Addressing phase 125 if (a_ack) begin 126 error_q <= err_internal; 127 // Response phase 128 end else begin 129 error_q <= error; 130 rdata_q <= rdata; 131 end 132 end 133 end 134 assign rdata = (error_i || error_q || wr_req_q) ? '1 : 135 (rd_req_q) ? rdata_i : 136 rdata_q; // backpressure case 137 assign error = (rd_req_q || wr_req_q) ? (error_q || error_i) : 138 error_q; // backpressure case 139 end else begin : gen_access_latency0 140 always_ff @(posedge clk_i or negedge rst_ni) begin 141 1/1 if (!rst_ni) begin Tests: T1 T2 T3  142 1/1 rdata_q <= '0; Tests: T1 T2 T3  143 1/1 error_q <= 1'b0; Tests: T1 T2 T3  144 1/1 end else if (a_ack) begin Tests: T1 T2 T3  145 1/1 rdata_q <= (error_i || err_internal || wr_req) ? '1 : rdata_i; Tests: T2 T3 T5  146 1/1 error_q <= error_i || err_internal; Tests: T2 T3 T5  147 end MISSING_ELSE 148 end 149 1/1 assign rdata = rdata_q; Tests: T2 T3 T5  150 1/1 assign error = error_q; Tests: T401 T402 T562  151 end 152 153 tlul_pkg::tl_d2h_t tl_o_pre; 154 1/1 assign tl_o_pre = '{ Tests: T2 T3 T5  155 // busy is selected based on address 156 // thus if there is no valid transaction, we should ignore busy 157 a_ready: ~(outstanding_q | tl_i.a_valid & busy_i), 158 d_valid: outstanding_q, 159 d_opcode: rspop_q, 160 d_param: '0, 161 d_size: reqsz_q, 162 d_source: reqid_q, 163 d_sink: '0, 164 d_data: rdata, 165 d_user: '0, 166 d_error: error 167 }; 168 169 // outgoing integrity generation 170 tlul_rsp_intg_gen #( 171 .EnableRspIntgGen(EnableRspIntgGen), 172 .EnableDataIntgGen(EnableDataIntgGen) 173 ) u_rsp_intg_gen ( 174 .tl_i(tl_o_pre), 175 .tl_o(tl_o) 176 ); 177 178 if (CmdIntgCheck) begin : gen_cmd_intg_check 179 logic intg_error_q; 180 tlul_cmd_intg_chk u_cmd_intg_chk ( 181 .tl_i(tl_i), 182 .err_o(intg_error) 183 ); 184 // permanently latch integrity error until reset 185 always_ff @(posedge clk_i or negedge rst_ni) begin 186 if (!rst_ni) begin 187 intg_error_q <= 1'b0; 188 end else if (intg_error) begin 189 intg_error_q <= 1'b1; 190 end 191 end 192 assign intg_error_o = intg_error_q; 193 end else begin : gen_no_cmd_intg_check 194 assign intg_error = 1'b0; 195 assign intg_error_o = 1'b0; 196 end 197 198 //////////////////// 199 // Error Handling // 200 //////////////////// 201 202 // An instruction type transaction is only valid if en_ifetch is enabled 203 // If the instruction type is completely invalid, also considered an instruction error 204 1/1 assign instr_error = prim_mubi_pkg::mubi4_test_invalid(tl_i.a_user.instr_type) | Tests: T2 T3 T5  205 (prim_mubi_pkg::mubi4_test_true_strict(tl_i.a_user.instr_type) & 206 prim_mubi_pkg::mubi4_test_false_loose(en_ifetch_i)); 207 208 1/1 assign err_internal = addr_align_err | malformed_meta_err | tl_err | instr_error | intg_error; Tests: T2 T3 T5  209 210 // Don't allow unsupported values. 211 1/1 assign malformed_meta_err = tl_a_user_chk(tl_i.a_user); Tests: T2 T3 T5  212 213 // addr_align_err 214 // Raised if addr isn't aligned with the size 215 // Read size error is checked in tlul_assert.sv 216 // Here is it added due to the limitation of register interface. 217 always_comb begin 218 1/1 if (wr_req) begin Tests: T2 T3 T5  219 // Only word-align is accepted based on comportability spec 220 1/1 addr_align_err = |tl_i.a_address[1:0]; Tests: T2 T3 T5  221 end else begin 222 // No request 223 1/1 addr_align_err = 1'b0; Tests: T2 T3 T5 

Cond Coverage for Instance : tb.dut.top_earlgrey.u_rv_plic.u_reg.u_reg_if
TotalCoveredPercent
Conditions464597.83
Logical464597.83
Non-Logical00
Event00

 LINE       77
 EXPRESSION (tl_i.a_valid & tl_o.a_ready)
             ------1-----   ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT402,T175,T404
11CoveredT2,T3,T5

 LINE       78
 EXPRESSION (tl_o.d_valid & tl_i.d_ready)
             ------1-----   ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT402,T183,T175
11CoveredT2,T3,T5

 LINE       80
 EXPRESSION (a_ack & ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData)))
             --1--   ----------------------------------2---------------------------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT2,T3,T5
11CoveredT2,T3,T5

 LINE       80
 SUB-EXPRESSION ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData))
                 ---------------1--------------   ----------------2----------------
-1--2-StatusTests
00CoveredT2,T3,T5
01CoveredT94,T95,T96
10CoveredT1,T2,T3

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

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

 LINE       81
 EXPRESSION (a_ack & (tl_i.a_opcode == Get))
             --1--   -----------2----------
-1--2-StatusTests
01CoveredT175,T405,T538
10CoveredT2,T3,T5
11CoveredT2,T3,T5

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

 LINE       83
 EXPRESSION (wr_req & ((~err_internal)))
             ---1--   --------2--------
-1--2-StatusTests
01CoveredT2,T3,T5
10CoveredT94,T95,T96
11CoveredT2,T3,T5

 LINE       84
 EXPRESSION (rd_req & ((~err_internal)))
             ---1--   --------2--------
-1--2-StatusTests
01CoveredT2,T3,T5
10CoveredT278,T279,T443
11CoveredT2,T3,T5

 LINE       109
 EXPRESSION (rd_req ? AccessAckData : AccessAck)
             ---1--
-1-StatusTests
0CoveredT2,T3,T5
1CoveredT2,T3,T5

 LINE       145
 EXPRESSION ((error_i || err_internal || wr_req) ? '1 : rdata_i)
             -----------------1-----------------
-1-StatusTests
0CoveredT2,T3,T5
1CoveredT2,T3,T5

 LINE       145
 SUB-EXPRESSION (error_i || err_internal || wr_req)
                 ---1---    ------2-----    ---3--
-1--2--3-StatusTests
000CoveredT2,T3,T5
001CoveredT2,T3,T5
010CoveredT401,T562,T556
100CoveredT634

 LINE       146
 EXPRESSION (error_i || err_internal)
             ---1---    ------2-----
-1--2-StatusTests
00CoveredT2,T3,T5
01CoveredT401,T402,T562
10CoveredT401,T402,T562

 LINE       154
 SUB-EXPRESSION (outstanding_q | (tl_i.a_valid & busy_i))
                 ------1------   -----------2-----------
-1--2-StatusTests
00CoveredT1,T2,T3
01Unreachable
10CoveredT2,T3,T5

 LINE       154
 SUB-EXPRESSION (tl_i.a_valid & busy_i)
                 ------1-----   ---2--
-1--2-StatusTests
01Unreachable
10CoveredT2,T3,T5
11Unreachable

 LINE       208
 EXPRESSION (addr_align_err | malformed_meta_err | tl_err | instr_error | intg_error)
             -------1------   ---------2--------   ---3--   -----4-----   -----5----
-1--2--3--4--5-StatusTests
00000CoveredT2,T3,T5
00001Unreachable
00010CoveredT446,T600,T612
00100CoveredT278,T443,T548
01000Not Covered
10000CoveredT94,T95,T96

Branch Coverage for Instance : tb.dut.top_earlgrey.u_rv_plic.u_reg.u_reg_if
Line No.TotalCoveredPercent
Branches 14 14 100.00
IF 95 4 4 100.00
IF 101 4 4 100.00
IF 218 2 2 100.00
IF 141 4 4 100.00


95 if (!rst_ni) outstanding_q <= 1'b0; -1- ==> 96 else if (a_ack) outstanding_q <= 1'b1; -2- ==> 97 else if (d_ack) outstanding_q <= 1'b0; -3- ==> MISSING_ELSE ==>

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


101 if (!rst_ni) begin -1- 102 reqid_q <= '0; ==> 103 reqsz_q <= '0; 104 rspop_q <= AccessAck; 105 end else if (a_ack) begin -2- 106 reqid_q <= tl_i.a_source; 107 reqsz_q <= tl_i.a_size; 108 // Return AccessAckData regardless of error 109 rspop_q <= (rd_req) ? AccessAckData : AccessAck ; -3- ==> ==> 110 end MISSING_ELSE ==>

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


218 if (wr_req) begin -1- 219 // Only word-align is accepted based on comportability spec 220 addr_align_err = |tl_i.a_address[1:0]; ==> 221 end else begin 222 // No request 223 addr_align_err = 1'b0; ==>

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


141 if (!rst_ni) begin -1- 142 rdata_q <= '0; ==> 143 error_q <= 1'b0; 144 end else if (a_ack) begin -2- 145 rdata_q <= (error_i || err_internal || wr_req) ? '1 : rdata_i; -3- ==> ==> 146 error_q <= error_i || err_internal; 147 end MISSING_ELSE ==>

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


Assert Coverage for Instance : tb.dut.top_earlgrey.u_rv_plic.u_reg.u_reg_if
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 2 2 100.00 2 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 2 2 100.00 2 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
AllowedLatency_A 2918 2918 0 0
MatchedWidthAssert 2918 2918 0 0


AllowedLatency_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 2918 2918 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
T30 1 1 0 0
T68 1 1 0 0
T104 1 1 0 0
T105 1 1 0 0

MatchedWidthAssert
NameAttemptsReal SuccessesFailuresIncomplete
Total 2918 2918 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
T30 1 1 0 0
T68 1 1 0 0
T104 1 1 0 0
T105 1 1 0 0

Line Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex.u_reg_cfg.u_reg_if
Line No.TotalCoveredPercent
TOTAL3838100.00
CONT_ASSIGN7711100.00
CONT_ASSIGN7811100.00
CONT_ASSIGN8011100.00
CONT_ASSIGN8111100.00
CONT_ASSIGN8311100.00
CONT_ASSIGN8411100.00
CONT_ASSIGN8511100.00
CONT_ASSIGN8611100.00
CONT_ASSIGN9111100.00
ALWAYS9566100.00
ALWAYS10188100.00
ALWAYS14166100.00
CONT_ASSIGN14911100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15411100.00
CONT_ASSIGN20411100.00
CONT_ASSIGN20811100.00
CONT_ASSIGN21111100.00
ALWAYS21833100.00

76 77 1/1 assign a_ack = tl_i.a_valid & tl_o.a_ready; Tests: T1 T2 T3  78 1/1 assign d_ack = tl_o.d_valid & tl_i.d_ready; Tests: T1 T2 T3  79 // Request signal 80 1/1 assign wr_req = a_ack & ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData)); Tests: T1 T2 T3  81 1/1 assign rd_req = a_ack & (tl_i.a_opcode == Get); Tests: T1 T2 T3  82 83 1/1 assign we_o = wr_req & ~err_internal; Tests: T1 T2 T3  84 1/1 assign re_o = rd_req & ~err_internal; Tests: T1 T2 T3  85 1/1 assign wdata_o = tl_i.a_data; Tests: T1 T2 T3  86 1/1 assign be_o = tl_i.a_mask; Tests: T1 T2 T3  87 88 if (RegAw <= 2) begin : gen_only_one_reg 89 assign addr_o = '0; 90 end else begin : gen_more_regs 91 1/1 assign addr_o = {tl_i.a_address[RegAw-1:2], 2'b00}; // generate always word-align Tests: T1 T2 T3  92 end 93 94 always_ff @(posedge clk_i or negedge rst_ni) begin 95 2/2 if (!rst_ni) outstanding_q <= 1'b0; Tests: T1 T2 T3  | T1 T2 T3  96 2/2 else if (a_ack) outstanding_q <= 1'b1; Tests: T1 T2 T3  | T2 T3 T4  97 2/2 else if (d_ack) outstanding_q <= 1'b0; Tests: T1 T2 T3  | T2 T3 T4  MISSING_ELSE 98 end 99 100 always_ff @(posedge clk_i or negedge rst_ni) begin 101 1/1 if (!rst_ni) begin Tests: T1 T2 T3  102 1/1 reqid_q <= '0; Tests: T1 T2 T3  103 1/1 reqsz_q <= '0; Tests: T1 T2 T3  104 1/1 rspop_q <= AccessAck; Tests: T1 T2 T3  105 1/1 end else if (a_ack) begin Tests: T1 T2 T3  106 1/1 reqid_q <= tl_i.a_source; Tests: T2 T3 T4  107 1/1 reqsz_q <= tl_i.a_size; Tests: T2 T3 T4  108 // Return AccessAckData regardless of error 109 1/1 rspop_q <= (rd_req) ? AccessAckData : AccessAck ; Tests: T2 T3 T4  110 end MISSING_ELSE 111 end 112 113 if (AccessLatency == 1) begin : gen_access_latency1 114 logic wr_req_q, rd_req_q; 115 always_ff @(posedge clk_i or negedge rst_ni) begin 116 if (!rst_ni) begin 117 rdata_q <= '0; 118 error_q <= 1'b0; 119 wr_req_q <= 1'b0; 120 rd_req_q <= 1'b0; 121 end else begin 122 rd_req_q <= rd_req; 123 wr_req_q <= wr_req; 124 // Addressing phase 125 if (a_ack) begin 126 error_q <= err_internal; 127 // Response phase 128 end else begin 129 error_q <= error; 130 rdata_q <= rdata; 131 end 132 end 133 end 134 assign rdata = (error_i || error_q || wr_req_q) ? '1 : 135 (rd_req_q) ? rdata_i : 136 rdata_q; // backpressure case 137 assign error = (rd_req_q || wr_req_q) ? (error_q || error_i) : 138 error_q; // backpressure case 139 end else begin : gen_access_latency0 140 always_ff @(posedge clk_i or negedge rst_ni) begin 141 1/1 if (!rst_ni) begin Tests: T1 T2 T3  142 1/1 rdata_q <= '0; Tests: T1 T2 T3  143 1/1 error_q <= 1'b0; Tests: T1 T2 T3  144 1/1 end else if (a_ack) begin Tests: T1 T2 T3  145 1/1 rdata_q <= (error_i || err_internal || wr_req) ? '1 : rdata_i; Tests: T2 T3 T4  146 1/1 error_q <= error_i || err_internal; Tests: T2 T3 T4  147 end MISSING_ELSE 148 end 149 1/1 assign rdata = rdata_q; Tests: T2 T3 T5  150 1/1 assign error = error_q; Tests: T401 T402 T562  151 end 152 153 tlul_pkg::tl_d2h_t tl_o_pre; 154 1/1 assign tl_o_pre = '{ Tests: T1 T2 T3  155 // busy is selected based on address 156 // thus if there is no valid transaction, we should ignore busy 157 a_ready: ~(outstanding_q | tl_i.a_valid & busy_i), 158 d_valid: outstanding_q, 159 d_opcode: rspop_q, 160 d_param: '0, 161 d_size: reqsz_q, 162 d_source: reqid_q, 163 d_sink: '0, 164 d_data: rdata, 165 d_user: '0, 166 d_error: error 167 }; 168 169 // outgoing integrity generation 170 tlul_rsp_intg_gen #( 171 .EnableRspIntgGen(EnableRspIntgGen), 172 .EnableDataIntgGen(EnableDataIntgGen) 173 ) u_rsp_intg_gen ( 174 .tl_i(tl_o_pre), 175 .tl_o(tl_o) 176 ); 177 178 if (CmdIntgCheck) begin : gen_cmd_intg_check 179 logic intg_error_q; 180 tlul_cmd_intg_chk u_cmd_intg_chk ( 181 .tl_i(tl_i), 182 .err_o(intg_error) 183 ); 184 // permanently latch integrity error until reset 185 always_ff @(posedge clk_i or negedge rst_ni) begin 186 if (!rst_ni) begin 187 intg_error_q <= 1'b0; 188 end else if (intg_error) begin 189 intg_error_q <= 1'b1; 190 end 191 end 192 assign intg_error_o = intg_error_q; 193 end else begin : gen_no_cmd_intg_check 194 assign intg_error = 1'b0; 195 assign intg_error_o = 1'b0; 196 end 197 198 //////////////////// 199 // Error Handling // 200 //////////////////// 201 202 // An instruction type transaction is only valid if en_ifetch is enabled 203 // If the instruction type is completely invalid, also considered an instruction error 204 1/1 assign instr_error = prim_mubi_pkg::mubi4_test_invalid(tl_i.a_user.instr_type) | Tests: T1 T2 T3  205 (prim_mubi_pkg::mubi4_test_true_strict(tl_i.a_user.instr_type) & 206 prim_mubi_pkg::mubi4_test_false_loose(en_ifetch_i)); 207 208 1/1 assign err_internal = addr_align_err | malformed_meta_err | tl_err | instr_error | intg_error; Tests: T1 T2 T3  209 210 // Don't allow unsupported values. 211 1/1 assign malformed_meta_err = tl_a_user_chk(tl_i.a_user); Tests: T1 T2 T3  212 213 // addr_align_err 214 // Raised if addr isn't aligned with the size 215 // Read size error is checked in tlul_assert.sv 216 // Here is it added due to the limitation of register interface. 217 always_comb begin 218 1/1 if (wr_req) begin Tests: T1 T2 T3  219 // Only word-align is accepted based on comportability spec 220 1/1 addr_align_err = |tl_i.a_address[1:0]; Tests: T43 T81 T83  221 end else begin 222 // No request 223 1/1 addr_align_err = 1'b0; Tests: T1 T2 T3 

Cond Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex.u_reg_cfg.u_reg_if
TotalCoveredPercent
Conditions464495.65
Logical464495.65
Non-Logical00
Event00

 LINE       77
 EXPRESSION (tl_i.a_valid & tl_o.a_ready)
             ------1-----   ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT394,T395,T403
11CoveredT2,T3,T4

 LINE       78
 EXPRESSION (tl_o.d_valid & tl_i.d_ready)
             ------1-----   ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT183,T404,T405
11CoveredT2,T3,T4

 LINE       80
 EXPRESSION (a_ack & ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData)))
             --1--   ----------------------------------2---------------------------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT2,T3,T4
11CoveredT43,T81,T83

 LINE       80
 SUB-EXPRESSION ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData))
                 ---------------1--------------   ----------------2----------------
-1--2-StatusTests
00CoveredT2,T3,T4
01CoveredT95,T96,T99
10CoveredT1,T2,T3

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

 LINE       80
 SUB-EXPRESSION (tl_i.a_opcode == PutPartialData)
                ----------------1----------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT95,T96,T99

 LINE       81
 EXPRESSION (a_ack & (tl_i.a_opcode == Get))
             --1--   -----------2----------
-1--2-StatusTests
01CoveredT94,T95,T96
10CoveredT43,T81,T83
11CoveredT2,T3,T4

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

 LINE       83
 EXPRESSION (wr_req & ((~err_internal)))
             ---1--   --------2--------
-1--2-StatusTests
01CoveredT2,T3,T4
10CoveredT95,T96,T99
11CoveredT43,T81,T83

 LINE       84
 EXPRESSION (rd_req & ((~err_internal)))
             ---1--   --------2--------
-1--2-StatusTests
01CoveredT43,T81,T83
10CoveredT278,T279,T443
11CoveredT2,T3,T4

 LINE       109
 EXPRESSION (rd_req ? AccessAckData : AccessAck)
             ---1--
-1-StatusTests
0CoveredT43,T81,T83
1CoveredT2,T3,T4

 LINE       145
 EXPRESSION ((error_i || err_internal || wr_req) ? '1 : rdata_i)
             -----------------1-----------------
-1-StatusTests
0CoveredT2,T3,T4
1CoveredT43,T81,T83

 LINE       145
 SUB-EXPRESSION (error_i || err_internal || wr_req)
                 ---1---    ------2-----    ---3--
-1--2--3-StatusTests
000CoveredT2,T3,T4
001CoveredT43,T81,T83
010CoveredT401,T556,T557
100Not Covered

 LINE       146
 EXPRESSION (error_i || err_internal)
             ---1---    ------2-----
-1--2-StatusTests
00CoveredT2,T3,T4
01CoveredT401,T402,T562
10CoveredT401,T402,T562

 LINE       154
 SUB-EXPRESSION (outstanding_q | (tl_i.a_valid & busy_i))
                 ------1------   -----------2-----------
-1--2-StatusTests
00CoveredT1,T2,T3
01Unreachable
10CoveredT2,T3,T4

 LINE       154
 SUB-EXPRESSION (tl_i.a_valid & busy_i)
                 ------1-----   ---2--
-1--2-StatusTests
01Unreachable
10CoveredT2,T3,T4
11Unreachable

 LINE       208
 EXPRESSION (addr_align_err | malformed_meta_err | tl_err | instr_error | intg_error)
             -------1------   ---------2--------   ---3--   -----4-----   -----5----
-1--2--3--4--5-StatusTests
00000CoveredT2,T3,T4
00001Unreachable
00010CoveredT637,T638,T639
00100CoveredT1,T2,T3
01000Not Covered
10000CoveredT95,T96,T99

Branch Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex.u_reg_cfg.u_reg_if
Line No.TotalCoveredPercent
Branches 14 14 100.00
IF 95 4 4 100.00
IF 101 4 4 100.00
IF 218 2 2 100.00
IF 141 4 4 100.00


95 if (!rst_ni) outstanding_q <= 1'b0; -1- ==> 96 else if (a_ack) outstanding_q <= 1'b1; -2- ==> 97 else if (d_ack) outstanding_q <= 1'b0; -3- ==> MISSING_ELSE ==>

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


101 if (!rst_ni) begin -1- 102 reqid_q <= '0; ==> 103 reqsz_q <= '0; 104 rspop_q <= AccessAck; 105 end else if (a_ack) begin -2- 106 reqid_q <= tl_i.a_source; 107 reqsz_q <= tl_i.a_size; 108 // Return AccessAckData regardless of error 109 rspop_q <= (rd_req) ? AccessAckData : AccessAck ; -3- ==> ==> 110 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
1 - - Covered T1,T2,T3
0 1 1 Covered T2,T3,T4
0 1 0 Covered T43,T81,T83
0 0 - Covered T1,T2,T3


218 if (wr_req) begin -1- 219 // Only word-align is accepted based on comportability spec 220 addr_align_err = |tl_i.a_address[1:0]; ==> 221 end else begin 222 // No request 223 addr_align_err = 1'b0; ==>

Branches:
-1-StatusTests
1 Covered T43,T81,T83
0 Covered T1,T2,T3


141 if (!rst_ni) begin -1- 142 rdata_q <= '0; ==> 143 error_q <= 1'b0; 144 end else if (a_ack) begin -2- 145 rdata_q <= (error_i || err_internal || wr_req) ? '1 : rdata_i; -3- ==> ==> 146 error_q <= error_i || err_internal; 147 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
1 - - Covered T1,T2,T3
0 1 1 Covered T43,T81,T83
0 1 0 Covered T2,T3,T4
0 0 - Covered T1,T2,T3


Assert Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex.u_reg_cfg.u_reg_if
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 2 2 100.00 2 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 2 2 100.00 2 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
AllowedLatency_A 2918 2918 0 0
MatchedWidthAssert 2918 2918 0 0


AllowedLatency_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 2918 2918 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
T30 1 1 0 0
T68 1 1 0 0
T104 1 1 0 0
T105 1 1 0 0

MatchedWidthAssert
NameAttemptsReal SuccessesFailuresIncomplete
Total 2918 2918 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
T30 1 1 0 0
T68 1 1 0 0
T104 1 1 0 0
T105 1 1 0 0

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