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

Module : adc_ctrl_intr
SCORELINECONDTOGGLEFSMBRANCHASSERT
100.00 100.00 100.00 100.00

Source File(s) :
/workspaces/repo/scratch/os_regression_2024_09_23/adc_ctrl-sim-vcs/default/sim-vcs/../src/lowrisc_ip_adc_ctrl_1.0/rtl/adc_ctrl_intr.sv

Module self-instances :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
tb.dut.u_adc_ctrl_core.u_adc_ctrl_intr 100.00 100.00 100.00 100.00



Module Instance : tb.dut.u_adc_ctrl_core.u_adc_ctrl_intr

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
100.00 100.00 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
99.00 100.00 96.00 100.00 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
100.00 100.00 100.00 100.00 100.00 u_adc_ctrl_core


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
i_adc_ctrl_intr_o 100.00 100.00 100.00 100.00 100.00
u_match_sync 93.75 100.00 75.00 100.00 100.00


Since this is the module's only instance, the coverage report is the same as for the module.
Line Coverage for Module : adc_ctrl_intr
Line No.TotalCoveredPercent
TOTAL2626100.00
CONT_ASSIGN3911100.00
ALWAYS5166100.00
CONT_ASSIGN6411100.00
ALWAYS6866100.00
ALWAYS9566100.00
CONT_ASSIGN10611100.00
CONT_ASSIGN11111100.00
CONT_ASSIGN11211100.00
CONT_ASSIGN11311100.00
CONT_ASSIGN11511100.00
CONT_ASSIGN11911100.00

38 logic [NumAonIntrEvents-1:0] aon_reqs; 39 1/1 assign aon_reqs = {aon_fsm_trans_i, aon_filter_match_i}; Tests: T1 T2 T3  40 41 // aon interrupt requests are split into staging and request portions. 42 // The staging portion always absorbs the incoming event pulse. 43 // The request portion on the other hand does not change until 44 // a request/ack handshake cycle has completed. 45 logic [NumAonIntrEvents-1:0] aon_staging_reqs_q; 46 logic aon_ld_req; 47 48 // staging portion takes on the value of the incoming event match 49 // and clears when it is snapshot into request hold. 50 always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin 51 1/1 if (!rst_aon_ni) begin Tests: T1 T2 T3  52 1/1 aon_staging_reqs_q <= '0; Tests: T1 T2 T3  53 1/1 end else if (aon_ld_req) begin Tests: T1 T2 T3  54 1/1 aon_staging_reqs_q <= aon_reqs; Tests: T8 T13 T14  55 1/1 end else if (|aon_reqs) begin Tests: T1 T2 T3  56 1/1 aon_staging_reqs_q <= aon_staging_reqs_q | aon_reqs; Tests: T8 T13 T14  57 end MISSING_ELSE 58 end 59 60 logic [NumAonIntrEvents-1:0] aon_req_hold_q; 61 logic aon_ack; 62 63 // staging has pending requsts 64 1/1 assign aon_ld_req = (aon_req_hold_q == '0) && |aon_staging_reqs_q; Tests: T1 T2 T3  65 66 // request hold self clears when the handshake cycle is complete 67 always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin 68 1/1 if (!rst_aon_ni) begin Tests: T1 T2 T3  69 1/1 aon_req_hold_q <= '0; Tests: T1 T2 T3  70 1/1 end else if (aon_ld_req) begin Tests: T1 T2 T3  71 1/1 aon_req_hold_q <= aon_staging_reqs_q; Tests: T8 T13 T14  72 1/1 end else if (aon_ack) begin Tests: T1 T2 T3  73 1/1 aon_req_hold_q <= '0; Tests: T8 T13 T14  74 end MISSING_ELSE 75 end 76 77 logic dst_ack; 78 prim_sync_reqack u_match_sync ( 79 .clk_src_i(clk_aon_i), 80 .rst_src_ni(rst_aon_ni), 81 .clk_dst_i(clk_i), 82 .rst_dst_ni(rst_ni), 83 .req_chk_i(1'b1), 84 .src_req_i(|aon_req_hold_q), 85 .src_ack_o(aon_ack), 86 .dst_req_o(dst_ack), 87 .dst_ack_i(dst_ack) 88 ); 89 90 // Holding reg after the CDC. Note that aon_req_hold_q does not change until the handshake has 91 // been completed, hence we can sample it safely upon a dst_ack pulse. 92 logic dst_ack_q; 93 logic [NumAonIntrEvents-1:0] req_hold_q; 94 always_ff @(posedge clk_i or negedge rst_ni) begin 95 1/1 if (!rst_ni) begin Tests: T1 T2 T3  96 1/1 req_hold_q <= '0; Tests: T1 T2 T3  97 1/1 dst_ack_q <= 1'b0; Tests: T1 T2 T3  98 end else begin 99 1/1 dst_ack_q <= dst_ack; Tests: T1 T2 T3  100 1/1 if (dst_ack) begin Tests: T1 T2 T3  101 1/1 req_hold_q <= aon_req_hold_q; Tests: T8 T13 T14  102 end MISSING_ELSE 103 end 104 end 105 106 1/1 assign adc_intr_status_o.trans.de = cfg_intr_trans_en_i && dst_ack_q && req_hold_q[8]; Tests: T1 T2 T3  107 assign adc_intr_status_o.trans.d = 1'b1; 108 // Since interrupt events are pulsed, when successive events arrive we need to make sure to 109 // hold the previously latched values 110 logic [NumAdcFilter-1:0] match_events; 111 1/1 assign match_events = cfg_intr_en_i & {NumAdcFilter{dst_ack_q}} & req_hold_q[NumAdcFilter-1:0]; Tests: T1 T2 T3  112 1/1 assign adc_intr_status_o.match.de = |match_events; Tests: T1 T2 T3  113 1/1 assign adc_intr_status_o.match.d = match_events | adc_intr_status_i.match.q; Tests: T1 T2 T3  114 // Note that we're also adding the non-AON interrupt source cfg_oneshot_done_i at this point. 115 1/1 assign adc_intr_status_o.oneshot.de = cfg_oneshot_done_i && cfg_oneshot_done_en_i; Tests: T1 T2 T3  116 assign adc_intr_status_o.oneshot.d = 1'b1; 117 118 logic status_irq_value; 119 1/1 assign status_irq_value = |{adc_intr_status_i.oneshot.q, Tests: T1 T2 T3 

Cond Coverage for Module : adc_ctrl_intr
TotalCoveredPercent
Conditions1212100.00
Logical1212100.00
Non-Logical00
Event00

 LINE       64
 EXPRESSION ((aon_req_hold_q == '0) && ((|aon_staging_reqs_q)))
             -----------1----------    -----------2-----------
-1--2-StatusTests
01CoveredT8,T13,T50
10CoveredT1,T2,T3
11CoveredT8,T13,T14

 LINE       64
 SUB-EXPRESSION (aon_req_hold_q == '0)
                -----------1----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       106
 EXPRESSION (cfg_intr_trans_en_i && dst_ack_q && req_hold_q[8])
             ---------1---------    ----2----    ------3------
-1--2--3-StatusTests
011CoveredT8,T37,T38
101CoveredT50,T126,T35
110CoveredT13,T16,T17
111CoveredT50,T126,T35

 LINE       115
 EXPRESSION (cfg_oneshot_done_i && cfg_oneshot_done_en_i)
             ---------1--------    ----------2----------
-1--2-StatusTests
01CoveredT2,T3,T8
10CoveredT4,T5,T6
11CoveredT2,T3,T10

Branch Coverage for Module : adc_ctrl_intr
Line No.TotalCoveredPercent
Branches 11 11 100.00
IF 51 4 4 100.00
IF 68 4 4 100.00
IF 95 3 3 100.00


51 if (!rst_aon_ni) begin -1- 52 aon_staging_reqs_q <= '0; ==> 53 end else if (aon_ld_req) begin -2- 54 aon_staging_reqs_q <= aon_reqs; ==> 55 end else if (|aon_reqs) begin -3- 56 aon_staging_reqs_q <= aon_staging_reqs_q | aon_reqs; ==> 57 end MISSING_ELSE ==>

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


68 if (!rst_aon_ni) begin -1- 69 aon_req_hold_q <= '0; ==> 70 end else if (aon_ld_req) begin -2- 71 aon_req_hold_q <= aon_staging_reqs_q; ==> 72 end else if (aon_ack) begin -3- 73 aon_req_hold_q <= '0; ==> 74 end MISSING_ELSE ==>

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


95 if (!rst_ni) begin -1- 96 req_hold_q <= '0; ==> 97 dst_ack_q <= 1'b0; 98 end else begin 99 dst_ack_q <= dst_ack; 100 if (dst_ack) begin -2- 101 req_hold_q <= aon_req_hold_q; ==> 102 end MISSING_ELSE ==>

Branches:
-1--2-StatusTests
1 - Covered T1,T2,T3
0 1 Covered T8,T13,T14
0 0 Covered T1,T2,T3

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