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



Module Instance : tb.dut.u_eflash.gen_flash_cores[0].u_core.u_rd.u_valid_random

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
92.50 92.31 97.69 100.00 80.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
92.50 92.31 97.69 100.00 80.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
97.49 100.00 89.96 100.00 100.00 u_rd


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
no children



Module Instance : tb.dut.u_eflash.gen_flash_cores[1].u_core.u_rd.u_valid_random

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
92.50 92.31 97.69 100.00 80.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
92.50 92.31 97.69 100.00 80.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
97.71 100.00 90.83 100.00 100.00 u_rd


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
no children



Module Instance : tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_op.gen_input_bufs[0].gen_rr_arbiter.u_arb

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
95.50 100.00 88.24 100.00 93.75


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
95.50 100.00 88.24 100.00 93.75


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
100.00 100.00 100.00 100.00 u_prim_arbiter_tree_op


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
no children



Module Instance : tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_op.gen_input_bufs[1].gen_rr_arbiter.u_arb

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
97.46 100.00 96.08 100.00 93.75


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
97.46 100.00 96.08 100.00 93.75


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
100.00 100.00 100.00 100.00 u_prim_arbiter_tree_op


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
no children



Module Instance : tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_calc.gen_input_bufs[0].gen_rr_arbiter.u_arb

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
97.86 100.00 97.67 100.00 93.75


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
97.86 100.00 97.67 100.00 93.75


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
100.00 100.00 100.00 100.00 u_prim_arbiter_tree_calc


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
no children



Module Instance : tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_calc.gen_input_bufs[1].gen_rr_arbiter.u_arb

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
97.86 100.00 97.67 100.00 93.75


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
97.86 100.00 97.67 100.00 93.75


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
100.00 100.00 100.00 100.00 u_prim_arbiter_tree_calc


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
no children

Line Coverage for Module : prim_arbiter_tree ( parameter N=4,DW=2,EnDataPort=0,IdxW=2,gen_normal_case.gen_tree[0].gen_level[0].Pa=0,gen_normal_case.gen_tree[0].gen_level[0].C0=1,gen_normal_case.gen_tree[0].gen_level[0].C1=2,gen_normal_case.gen_tree[1].gen_level[0].Pa=1,gen_normal_case.gen_tree[1].gen_level[0].C0=3,gen_normal_case.gen_tree[1].gen_level[0].C1=4,gen_normal_case.gen_tree[1].gen_level[1].Pa=2,gen_normal_case.gen_tree[1].gen_level[1].C0=5,gen_normal_case.gen_tree[1].gen_level[1].C1=6,gen_normal_case.gen_tree[2].gen_level[0].Pa=3,gen_normal_case.gen_tree[2].gen_level[0].C0=7,gen_normal_case.gen_tree[2].gen_level[0].C1=8,gen_normal_case.gen_tree[2].gen_level[1].Pa=4,gen_normal_case.gen_tree[2].gen_level[1].C0=9,gen_normal_case.gen_tree[2].gen_level[1].C1=10,gen_normal_case.gen_tree[2].gen_level[2].Pa=5,gen_normal_case.gen_tree[2].gen_level[2].C0=11,gen_normal_case.gen_tree[2].gen_level[2].C1=12,gen_normal_case.gen_tree[2].gen_level[3].Pa=6,gen_normal_case.gen_tree[2].gen_level[3].C0=13,gen_normal_case.gen_tree[2].gen_level[3].C1=14 )
Line Coverage for Module self-instances :
SCORELINE
92.50 92.31
tb.dut.u_eflash.gen_flash_cores[0].u_core.u_rd.u_valid_random

SCORELINE
92.50 92.31
tb.dut.u_eflash.gen_flash_cores[1].u_core.u_rd.u_valid_random

Line No.TotalCoveredPercent
TOTAL524892.31
CONT_ASSIGN6200
CONT_ASSIGN11211100.00
CONT_ASSIGN11211100.00
CONT_ASSIGN11211100.00
CONT_ASSIGN11211100.00
CONT_ASSIGN11811100.00
CONT_ASSIGN11811100.00
CONT_ASSIGN11811100.00
CONT_ASSIGN11811100.00
CONT_ASSIGN122100.00
CONT_ASSIGN122100.00
CONT_ASSIGN122100.00
CONT_ASSIGN122100.00
CONT_ASSIGN12611100.00
CONT_ASSIGN12611100.00
CONT_ASSIGN12611100.00
CONT_ASSIGN12611100.00
CONT_ASSIGN12811100.00
CONT_ASSIGN12811100.00
CONT_ASSIGN12811100.00
CONT_ASSIGN12811100.00
CONT_ASSIGN14811100.00
CONT_ASSIGN14811100.00
CONT_ASSIGN14811100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15111100.00
CONT_ASSIGN15111100.00
CONT_ASSIGN15111100.00
CONT_ASSIGN15511100.00
CONT_ASSIGN15511100.00
CONT_ASSIGN15511100.00
CONT_ASSIGN15611100.00
CONT_ASSIGN15611100.00
CONT_ASSIGN15611100.00
CONT_ASSIGN16011100.00
CONT_ASSIGN16011100.00
CONT_ASSIGN16011100.00
CONT_ASSIGN16111100.00
CONT_ASSIGN16111100.00
CONT_ASSIGN16111100.00
CONT_ASSIGN16300
CONT_ASSIGN16300
CONT_ASSIGN16311100.00
CONT_ASSIGN16411100.00
CONT_ASSIGN16411100.00
CONT_ASSIGN16411100.00
CONT_ASSIGN17411100.00
CONT_ASSIGN18011100.00
CONT_ASSIGN18211100.00
CONT_ASSIGN18311100.00
ALWAYS19133100.00

61 logic unused_req_chk; 62 unreachable assign unused_req_chk = req_chk_i; 63 64 `ASSERT_INIT(CheckNGreaterZero_A, N > 0) 65 66 // this case is basically just a bypass 67 if (N == 1) begin : gen_degenerate_case 68 69 assign valid_o = req_i[0]; 70 assign data_o = data_i[0]; 71 assign gnt_o[0] = valid_o & ready_i; 72 assign idx_o = '0; 73 74 end else begin : gen_normal_case 75 76 // align to powers of 2 for simplicity 77 // a full binary tree with N levels has 2**N + 2**N-1 nodes 78 logic [2**(IdxW+1)-2:0] req_tree; 79 logic [2**(IdxW+1)-2:0] prio_tree; 80 logic [2**(IdxW+1)-2:0] sel_tree; 81 logic [2**(IdxW+1)-2:0] mask_tree; 82 logic [2**(IdxW+1)-2:0][IdxW-1:0] idx_tree; 83 logic [2**(IdxW+1)-2:0][DW-1:0] data_tree; 84 logic [N-1:0] prio_mask_d, prio_mask_q; 85 86 for (genvar level = 0; level < IdxW+1; level++) begin : gen_tree 87 // 88 // level+1 C0 C1 <- "Base1" points to the first node on "level+1", 89 // \ / these nodes are the children of the nodes one level below 90 // level Pa <- "Base0", points to the first node on "level", 91 // these nodes are the parents of the nodes one level above 92 // 93 // hence we have the following indices for the Pa, C0, C1 nodes: 94 // Pa = 2**level - 1 + offset = Base0 + offset 95 // C0 = 2**(level+1) - 1 + 2*offset = Base1 + 2*offset 96 // C1 = 2**(level+1) - 1 + 2*offset + 1 = Base1 + 2*offset + 1 97 // 98 localparam int Base0 = (2**level)-1; 99 localparam int Base1 = (2**(level+1))-1; 100 101 for (genvar offset = 0; offset < 2**level; offset++) begin : gen_level 102 localparam int Pa = Base0 + offset; 103 localparam int C0 = Base1 + 2*offset; 104 localparam int C1 = Base1 + 2*offset + 1; 105 106 // this assigns the gated interrupt source signals, their 107 // corresponding IDs and priorities to the tree leafs 108 if (level == IdxW) begin : gen_leafs 109 if (offset < N) begin : gen_assign 110 // forward path (requests and data) 111 // all requests inputs are assigned to the request tree 112 4/4 assign req_tree[Pa] = req_i[offset]; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  | T1 T2 T3  113 // we basically split the incoming request vector into two halves with the following 114 // priority assignment. the prio_mask_q register contains a prefix sum that has been 115 // computed using the last winning index, and hence masks out all requests at offsets 116 // lower or equal the previously granted index. hence, all higher indices are considered 117 // first in the arbitration tree nodes below, before considering the lower indices. 118 4/4 assign prio_tree[Pa] = req_i[offset] & prio_mask_q[offset]; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  | T1 T2 T3  119 // input for the index muxes (used to compute the winner index) 120 assign idx_tree[Pa] = offset; 121 // input for the data muxes 122 0/4 ==> assign data_tree[Pa] = data_i[offset]; 123 124 // backward path (grants and prefix sum) 125 // grant if selected, ready and request asserted 126 4/4 assign gnt_o[offset] = req_i[offset] & sel_tree[Pa] & ready_i; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  | T1 T2 T3  127 // only update mask if there is a valid request 128 4/4 assign prio_mask_d[offset] = (|req_i) ? Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  | T1 T2 T3  129 mask_tree[Pa] | sel_tree[Pa] & ~ready_i : 130 prio_mask_q[offset]; 131 end else begin : gen_tie_off 132 // forward path 133 assign req_tree[Pa] = '0; 134 assign prio_tree[Pa] = '0; 135 assign idx_tree[Pa] = '0; 136 assign data_tree[Pa] = '0; 137 logic unused_sigs; 138 assign unused_sigs = ^{mask_tree[Pa], 139 sel_tree[Pa]}; 140 end 141 // this creates the node assignments 142 end else begin : gen_nodes 143 // local helper variable 144 logic sel; 145 146 // forward path (requests and data) 147 // each node looks at its two children, and selects the one with higher priority 148 3/3 assign sel = ~req_tree[C0] | ~prio_tree[C0] & prio_tree[C1]; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  149 // propagate requests 150 3/3 assign req_tree[Pa] = req_tree[C0] | req_tree[C1]; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  151 3/3 assign prio_tree[Pa] = prio_tree[C1] | prio_tree[C0]; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  152 // data and index muxes 153 // Note: these ternaries have triggered a synthesis bug in Vivado versions older 154 // than 2020.2. If the problem resurfaces again, have a look at issue #1408. 155 3/3 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0]; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  156 3/3 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0]; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  157 158 // backward path (grants and prefix sum) 159 // this propagates the selction index back and computes a hot one mask 160 3/3 assign sel_tree[C0] = sel_tree[Pa] & ~sel; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  161 3/3 assign sel_tree[C1] = sel_tree[Pa] & sel; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  162 // this performs a prefix sum for masking the input requests in the next cycle 163 1/1(2 unreachable) assign mask_tree[C0] = mask_tree[Pa]; Tests: T1 T2 T3  164 3/3 assign mask_tree[C1] = mask_tree[Pa] | sel_tree[C0]; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  165 end 166 end : gen_level 167 end : gen_tree 168 169 // the results can be found at the tree root 170 if (EnDataPort) begin : gen_data_port 171 assign data_o = data_tree[0]; 172 end else begin : gen_no_dataport 173 logic [DW-1:0] unused_data; 174 1/1 assign unused_data = data_tree[0]; Tests: T1 T2 T3  175 assign data_o = '1; 176 end 177 178 // This index is unused. 179 logic unused_prio_tree; 180 1/1 assign unused_prio_tree = prio_tree[0]; Tests: T1 T2 T3  181 182 1/1 assign idx_o = idx_tree[0]; Tests: T1 T2 T3  183 1/1 assign valid_o = req_tree[0]; Tests: T1 T2 T3  184 185 // the select tree computes a hot one signal that indicates which request is currently selected 186 assign sel_tree[0] = 1'b1; 187 // the mask tree is basically a prefix sum of the hot one select signal computed above 188 assign mask_tree[0] = 1'b0; 189 190 always_ff @(posedge clk_i or negedge rst_ni) begin : p_mask_reg 191 1/1 if (!rst_ni) begin Tests: T1 T2 T3  192 1/1 prio_mask_q <= '0; Tests: T1 T2 T3  193 end else begin 194 1/1 prio_mask_q <= prio_mask_d; Tests: T1 T2 T3 

Line Coverage for Module : prim_arbiter_tree ( parameter N=2,DW=16,EnDataPort=1,IdxW=1,gen_normal_case.gen_tree[0].gen_level[0].Pa=0,gen_normal_case.gen_tree[0].gen_level[0].C0=1,gen_normal_case.gen_tree[0].gen_level[0].C1=2,gen_normal_case.gen_tree[1].gen_level[0].Pa=1,gen_normal_case.gen_tree[1].gen_level[0].C0=3,gen_normal_case.gen_tree[1].gen_level[0].C1=4,gen_normal_case.gen_tree[1].gen_level[1].Pa=2,gen_normal_case.gen_tree[1].gen_level[1].C0=5,gen_normal_case.gen_tree[1].gen_level[1].C1=6 + N=2,DW=129,EnDataPort=1,IdxW=1,gen_normal_case.gen_tree[0].gen_level[0].Pa=0,gen_normal_case.gen_tree[0].gen_level[0].C0=1,gen_normal_case.gen_tree[0].gen_level[0].C1=2,gen_normal_case.gen_tree[1].gen_level[0].Pa=1,gen_normal_case.gen_tree[1].gen_level[0].C0=3,gen_normal_case.gen_tree[1].gen_level[0].C1=4,gen_normal_case.gen_tree[1].gen_level[1].Pa=2,gen_normal_case.gen_tree[1].gen_level[1].C0=5,gen_normal_case.gen_tree[1].gen_level[1].C1=6 )
Line Coverage for Module self-instances :
SCORELINE
97.86 100.00
tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_calc.gen_input_bufs[0].gen_rr_arbiter.u_arb

SCORELINE
97.86 100.00
tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_calc.gen_input_bufs[1].gen_rr_arbiter.u_arb

SCORELINE
95.50 100.00
tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_op.gen_input_bufs[0].gen_rr_arbiter.u_arb

SCORELINE
97.46 100.00
tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_op.gen_input_bufs[1].gen_rr_arbiter.u_arb

Line No.TotalCoveredPercent
TOTAL2525100.00
CONT_ASSIGN6200
CONT_ASSIGN11211100.00
CONT_ASSIGN11211100.00
CONT_ASSIGN11811100.00
CONT_ASSIGN11811100.00
CONT_ASSIGN12211100.00
CONT_ASSIGN12211100.00
CONT_ASSIGN12611100.00
CONT_ASSIGN12611100.00
CONT_ASSIGN12811100.00
CONT_ASSIGN12811100.00
CONT_ASSIGN14811100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15111100.00
CONT_ASSIGN15511100.00
CONT_ASSIGN15611100.00
CONT_ASSIGN16011100.00
CONT_ASSIGN16111100.00
CONT_ASSIGN16300
CONT_ASSIGN16411100.00
CONT_ASSIGN17111100.00
CONT_ASSIGN18011100.00
CONT_ASSIGN18211100.00
CONT_ASSIGN18311100.00
ALWAYS19133100.00

61 logic unused_req_chk; 62 unreachable assign unused_req_chk = req_chk_i; 63 64 `ASSERT_INIT(CheckNGreaterZero_A, N > 0) 65 66 // this case is basically just a bypass 67 if (N == 1) begin : gen_degenerate_case 68 69 assign valid_o = req_i[0]; 70 assign data_o = data_i[0]; 71 assign gnt_o[0] = valid_o & ready_i; 72 assign idx_o = '0; 73 74 end else begin : gen_normal_case 75 76 // align to powers of 2 for simplicity 77 // a full binary tree with N levels has 2**N + 2**N-1 nodes 78 logic [2**(IdxW+1)-2:0] req_tree; 79 logic [2**(IdxW+1)-2:0] prio_tree; 80 logic [2**(IdxW+1)-2:0] sel_tree; 81 logic [2**(IdxW+1)-2:0] mask_tree; 82 logic [2**(IdxW+1)-2:0][IdxW-1:0] idx_tree; 83 logic [2**(IdxW+1)-2:0][DW-1:0] data_tree; 84 logic [N-1:0] prio_mask_d, prio_mask_q; 85 86 for (genvar level = 0; level < IdxW+1; level++) begin : gen_tree 87 // 88 // level+1 C0 C1 <- "Base1" points to the first node on "level+1", 89 // \ / these nodes are the children of the nodes one level below 90 // level Pa <- "Base0", points to the first node on "level", 91 // these nodes are the parents of the nodes one level above 92 // 93 // hence we have the following indices for the Pa, C0, C1 nodes: 94 // Pa = 2**level - 1 + offset = Base0 + offset 95 // C0 = 2**(level+1) - 1 + 2*offset = Base1 + 2*offset 96 // C1 = 2**(level+1) - 1 + 2*offset + 1 = Base1 + 2*offset + 1 97 // 98 localparam int Base0 = (2**level)-1; 99 localparam int Base1 = (2**(level+1))-1; 100 101 for (genvar offset = 0; offset < 2**level; offset++) begin : gen_level 102 localparam int Pa = Base0 + offset; 103 localparam int C0 = Base1 + 2*offset; 104 localparam int C1 = Base1 + 2*offset + 1; 105 106 // this assigns the gated interrupt source signals, their 107 // corresponding IDs and priorities to the tree leafs 108 if (level == IdxW) begin : gen_leafs 109 if (offset < N) begin : gen_assign 110 // forward path (requests and data) 111 // all requests inputs are assigned to the request tree 112 2/2 assign req_tree[Pa] = req_i[offset]; Tests: T1 T2 T3  | T1 T2 T3  113 // we basically split the incoming request vector into two halves with the following 114 // priority assignment. the prio_mask_q register contains a prefix sum that has been 115 // computed using the last winning index, and hence masks out all requests at offsets 116 // lower or equal the previously granted index. hence, all higher indices are considered 117 // first in the arbitration tree nodes below, before considering the lower indices. 118 2/2 assign prio_tree[Pa] = req_i[offset] & prio_mask_q[offset]; Tests: T1 T2 T3  | T1 T2 T3  119 // input for the index muxes (used to compute the winner index) 120 assign idx_tree[Pa] = offset; 121 // input for the data muxes 122 2/2 assign data_tree[Pa] = data_i[offset]; Tests: T1 T2 T3  | T1 T2 T3  123 124 // backward path (grants and prefix sum) 125 // grant if selected, ready and request asserted 126 2/2 assign gnt_o[offset] = req_i[offset] & sel_tree[Pa] & ready_i; Tests: T1 T2 T3  | T1 T2 T3  127 // only update mask if there is a valid request 128 2/2 assign prio_mask_d[offset] = (|req_i) ? Tests: T1 T2 T3  | T1 T2 T3  129 mask_tree[Pa] | sel_tree[Pa] & ~ready_i : 130 prio_mask_q[offset]; 131 end else begin : gen_tie_off 132 // forward path 133 assign req_tree[Pa] = '0; 134 assign prio_tree[Pa] = '0; 135 assign idx_tree[Pa] = '0; 136 assign data_tree[Pa] = '0; 137 logic unused_sigs; 138 assign unused_sigs = ^{mask_tree[Pa], 139 sel_tree[Pa]}; 140 end 141 // this creates the node assignments 142 end else begin : gen_nodes 143 // local helper variable 144 logic sel; 145 146 // forward path (requests and data) 147 // each node looks at its two children, and selects the one with higher priority 148 1/1 assign sel = ~req_tree[C0] | ~prio_tree[C0] & prio_tree[C1]; Tests: T1 T2 T3  149 // propagate requests 150 1/1 assign req_tree[Pa] = req_tree[C0] | req_tree[C1]; Tests: T1 T2 T3  151 1/1 assign prio_tree[Pa] = prio_tree[C1] | prio_tree[C0]; Tests: T1 T2 T3  152 // data and index muxes 153 // Note: these ternaries have triggered a synthesis bug in Vivado versions older 154 // than 2020.2. If the problem resurfaces again, have a look at issue #1408. 155 1/1 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0]; Tests: T1 T2 T3  156 1/1 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0]; Tests: T1 T2 T3  157 158 // backward path (grants and prefix sum) 159 // this propagates the selction index back and computes a hot one mask 160 1/1 assign sel_tree[C0] = sel_tree[Pa] & ~sel; Tests: T1 T2 T3  161 1/1 assign sel_tree[C1] = sel_tree[Pa] & sel; Tests: T1 T2 T3  162 // this performs a prefix sum for masking the input requests in the next cycle 163 unreachable assign mask_tree[C0] = mask_tree[Pa]; 164 1/1 assign mask_tree[C1] = mask_tree[Pa] | sel_tree[C0]; Tests: T1 T2 T3  165 end 166 end : gen_level 167 end : gen_tree 168 169 // the results can be found at the tree root 170 if (EnDataPort) begin : gen_data_port 171 1/1 assign data_o = data_tree[0]; Tests: T1 T2 T3  172 end else begin : gen_no_dataport 173 logic [DW-1:0] unused_data; 174 assign unused_data = data_tree[0]; 175 assign data_o = '1; 176 end 177 178 // This index is unused. 179 logic unused_prio_tree; 180 1/1 assign unused_prio_tree = prio_tree[0]; Tests: T1 T2 T3  181 182 1/1 assign idx_o = idx_tree[0]; Tests: T1 T2 T3  183 1/1 assign valid_o = req_tree[0]; Tests: T1 T2 T3  184 185 // the select tree computes a hot one signal that indicates which request is currently selected 186 assign sel_tree[0] = 1'b1; 187 // the mask tree is basically a prefix sum of the hot one select signal computed above 188 assign mask_tree[0] = 1'b0; 189 190 always_ff @(posedge clk_i or negedge rst_ni) begin : p_mask_reg 191 1/1 if (!rst_ni) begin Tests: T1 T2 T3  192 1/1 prio_mask_q <= '0; Tests: T1 T2 T3  193 end else begin 194 1/1 prio_mask_q <= prio_mask_d; Tests: T1 T2 T3 

Cond Coverage for Module : prim_arbiter_tree ( parameter N=2,DW=16,EnDataPort=1,IdxW=1,gen_normal_case.gen_tree[0].gen_level[0].Pa=0,gen_normal_case.gen_tree[0].gen_level[0].C0=1,gen_normal_case.gen_tree[0].gen_level[0].C1=2,gen_normal_case.gen_tree[1].gen_level[0].Pa=1,gen_normal_case.gen_tree[1].gen_level[0].C0=3,gen_normal_case.gen_tree[1].gen_level[0].C1=4,gen_normal_case.gen_tree[1].gen_level[1].Pa=2,gen_normal_case.gen_tree[1].gen_level[1].C0=5,gen_normal_case.gen_tree[1].gen_level[1].C1=6 )
Cond Coverage for Module self-instances :
SCORECOND
97.86 97.67
tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_calc.gen_input_bufs[0].gen_rr_arbiter.u_arb

SCORECOND
97.86 97.67
tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_calc.gen_input_bufs[1].gen_rr_arbiter.u_arb

TotalCoveredPercent
Conditions434297.67
Logical434297.67
Non-Logical00
Event00

 LINE       118
 EXPRESSION (req_i[0] & gen_normal_case.prio_mask_q[0])
             ----1---   ---------------2--------------
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       118
 EXPRESSION (req_i[1] & gen_normal_case.prio_mask_q[1])
             ----1---   ---------------2--------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT55,T22,T23
11CoveredT55,T22,T23

 LINE       126
 EXPRESSION (req_i[0] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ready_i)
             ----1---   ----------------------------------2----------------------------------   ---3---
-1--2--3-StatusTests
011Unreachable
101UnreachableT14,T43,T68
110CoveredT1,T2,T3
111UnreachableT1,T2,T3

 LINE       126
 EXPRESSION (req_i[1] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ready_i)
             ----1---   ----------------------------------2----------------------------------   ---3---
-1--2--3-StatusTests
011Unreachable
101UnreachableT14,T43,T38
110CoveredT55,T22,T23
111UnreachableT55,T22,T23

 LINE       128
 EXPRESSION 
 Number  Term
      1  ((|req_i)) ? (gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ((~ready_i)))) : gen_normal_case.prio_mask_q[0])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       128
 SUB-EXPRESSION 
 Number  Term
      1  gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] | 
      2  (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ((~ready_i))))
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T2,T3
10Unreachable

 LINE       128
 SUB-EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ((~ready_i)))
                 ----------------------------------1----------------------------------   ------2-----
-1--2-StatusTests
01CoveredT55,T22,T23
10UnreachableT1,T2,T3
11CoveredT1,T2,T3

 LINE       128
 EXPRESSION 
 Number  Term
      1  ((|req_i)) ? (gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ((~ready_i)))) : gen_normal_case.prio_mask_q[1])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       128
 SUB-EXPRESSION 
 Number  Term
      1  gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] | 
      2  (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ((~ready_i))))
-1--2-StatusTests
00CoveredT55,T22,T23
01CoveredT55,T22,T23
10CoveredT1,T2,T3

 LINE       128
 SUB-EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ((~ready_i)))
                 ----------------------------------1----------------------------------   ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10UnreachableT55,T22,T23
11CoveredT55,T22,T23

 LINE       148
 EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) | 
      2  (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1]))
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT14,T43,T68
10CoveredT1,T2,T3

 LINE       148
 SUB-EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) & 
      2  gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1])
-1--2-StatusTests
01CoveredT14,T43,T38
10CoveredT1,T2,T3
11CoveredT55,T22,T23

 LINE       150
 EXPRESSION (gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C1])
             ----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT55,T22,T23
10CoveredT1,T2,T3

 LINE       151
 EXPRESSION (gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
             -----------------------------------1----------------------------------   -----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T2,T3
10CoveredT55,T22,T23

 LINE       155
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel ? gen_normal_case.idx_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] : gen_normal_case.idx_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       156
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel ? gen_normal_case.data_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] : gen_normal_case.data_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       160
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] & ((~gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel)))
             ----------------------------------1----------------------------------   -----------------------------2-----------------------------
-1--2-StatusTests
01Unreachable
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       161
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] & gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel)
             ----------------------------------1----------------------------------   ---------------------------2--------------------------
-1--2-StatusTests
01Unreachable
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       164
 EXPRESSION (gen_normal_case.mask_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
             -----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T2,T3
10Unreachable

Cond Coverage for Module : prim_arbiter_tree ( parameter N=2,DW=129,EnDataPort=1,IdxW=1,gen_normal_case.gen_tree[0].gen_level[0].Pa=0,gen_normal_case.gen_tree[0].gen_level[0].C0=1,gen_normal_case.gen_tree[0].gen_level[0].C1=2,gen_normal_case.gen_tree[1].gen_level[0].Pa=1,gen_normal_case.gen_tree[1].gen_level[0].C0=3,gen_normal_case.gen_tree[1].gen_level[0].C1=4,gen_normal_case.gen_tree[1].gen_level[1].Pa=2,gen_normal_case.gen_tree[1].gen_level[1].C0=5,gen_normal_case.gen_tree[1].gen_level[1].C1=6 )
Cond Coverage for Module self-instances :
SCORECOND
95.50 88.24
tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_op.gen_input_bufs[0].gen_rr_arbiter.u_arb

SCORECOND
97.46 96.08
tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_op.gen_input_bufs[1].gen_rr_arbiter.u_arb

TotalCoveredPercent
Conditions514996.08
Logical514996.08
Non-Logical00
Event00

 LINE       118
 EXPRESSION (req_i[0] & gen_normal_case.prio_mask_q[0])
             ----1---   ---------------2--------------
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       118
 EXPRESSION (req_i[1] & gen_normal_case.prio_mask_q[1])
             ----1---   ---------------2--------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT55,T22,T23
11CoveredT55,T22,T23

 LINE       126
 EXPRESSION (req_i[0] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ready_i)
             ----1---   ----------------------------------2----------------------------------   ---3---
-1--2--3-StatusTests
011Not Covered
101CoveredT86,T87
110CoveredT1,T2,T3
111CoveredT1,T2,T3

 LINE       126
 EXPRESSION (req_i[1] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ready_i)
             ----1---   ----------------------------------2----------------------------------   ---3---
-1--2--3-StatusTests
011CoveredT86,T87
101CoveredT86,T87
110CoveredT55,T22,T23
111CoveredT55,T22,T23

 LINE       128
 EXPRESSION 
 Number  Term
      1  ((|req_i)) ? (gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ((~ready_i)))) : gen_normal_case.prio_mask_q[0])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       128
 SUB-EXPRESSION 
 Number  Term
      1  gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] | 
      2  (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ((~ready_i))))
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T2,T3
10Unreachable

 LINE       128
 SUB-EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ((~ready_i)))
                 ----------------------------------1----------------------------------   ------2-----
-1--2-StatusTests
01CoveredT55,T22,T23
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       128
 EXPRESSION 
 Number  Term
      1  ((|req_i)) ? (gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ((~ready_i)))) : gen_normal_case.prio_mask_q[1])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       128
 SUB-EXPRESSION 
 Number  Term
      1  gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] | 
      2  (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ((~ready_i))))
-1--2-StatusTests
00CoveredT55,T22,T23
01CoveredT55,T22,T23
10CoveredT1,T2,T3

 LINE       128
 SUB-EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ((~ready_i)))
                 ----------------------------------1----------------------------------   ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT55,T22,T23
11CoveredT55,T22,T23

 LINE       148
 EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) | 
      2  (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1]))
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT86,T87
10CoveredT1,T2,T3

 LINE       148
 SUB-EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) & 
      2  gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1])
-1--2-StatusTests
01CoveredT86,T87
10CoveredT1,T2,T3
11CoveredT55,T22,T23

 LINE       150
 EXPRESSION (gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C1])
             ----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT55,T22,T23
10CoveredT1,T2,T3

 LINE       151
 EXPRESSION (gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
             -----------------------------------1----------------------------------   -----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T2,T3
10CoveredT55,T22,T23

 LINE       155
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel ? gen_normal_case.idx_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] : gen_normal_case.idx_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       156
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel ? gen_normal_case.data_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] : gen_normal_case.data_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       160
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] & ((~gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel)))
             ----------------------------------1----------------------------------   -----------------------------2-----------------------------
-1--2-StatusTests
01Unreachable
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       161
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] & gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel)
             ----------------------------------1----------------------------------   ---------------------------2--------------------------
-1--2-StatusTests
01Unreachable
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       164
 EXPRESSION (gen_normal_case.mask_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
             -----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T2,T3
10Unreachable

Cond Coverage for Module : prim_arbiter_tree ( parameter N=4,DW=2,EnDataPort=0,IdxW=2,gen_normal_case.gen_tree[0].gen_level[0].Pa=0,gen_normal_case.gen_tree[0].gen_level[0].C0=1,gen_normal_case.gen_tree[0].gen_level[0].C1=2,gen_normal_case.gen_tree[1].gen_level[0].Pa=1,gen_normal_case.gen_tree[1].gen_level[0].C0=3,gen_normal_case.gen_tree[1].gen_level[0].C1=4,gen_normal_case.gen_tree[1].gen_level[1].Pa=2,gen_normal_case.gen_tree[1].gen_level[1].C0=5,gen_normal_case.gen_tree[1].gen_level[1].C1=6,gen_normal_case.gen_tree[2].gen_level[0].Pa=3,gen_normal_case.gen_tree[2].gen_level[0].C0=7,gen_normal_case.gen_tree[2].gen_level[0].C1=8,gen_normal_case.gen_tree[2].gen_level[1].Pa=4,gen_normal_case.gen_tree[2].gen_level[1].C0=9,gen_normal_case.gen_tree[2].gen_level[1].C1=10,gen_normal_case.gen_tree[2].gen_level[2].Pa=5,gen_normal_case.gen_tree[2].gen_level[2].C0=11,gen_normal_case.gen_tree[2].gen_level[2].C1=12,gen_normal_case.gen_tree[2].gen_level[3].Pa=6,gen_normal_case.gen_tree[2].gen_level[3].C0=13,gen_normal_case.gen_tree[2].gen_level[3].C1=14 )
Cond Coverage for Module self-instances :
SCORECOND
92.50 97.69
tb.dut.u_eflash.gen_flash_cores[0].u_core.u_rd.u_valid_random

SCORECOND
92.50 97.69
tb.dut.u_eflash.gen_flash_cores[1].u_core.u_rd.u_valid_random

TotalCoveredPercent
Conditions13012797.69
Logical13012797.69
Non-Logical00
Event00

 LINE       118
 EXPRESSION (req_i[0] & gen_normal_case.prio_mask_q[0])
             ----1---   ---------------2--------------
-1--2-StatusTests
01CoveredT22,T23,T43
10CoveredT1,T3,T12
11CoveredT1,T3,T12

 LINE       118
 EXPRESSION (req_i[1] & gen_normal_case.prio_mask_q[1])
             ----1---   ---------------2--------------
-1--2-StatusTests
01CoveredT12,T22,T23
10CoveredT1,T3,T12
11CoveredT1,T3,T12

 LINE       118
 EXPRESSION (req_i[2] & gen_normal_case.prio_mask_q[2])
             ----1---   ---------------2--------------
-1--2-StatusTests
01CoveredT12,T22,T23
10CoveredT1,T3,T12
11CoveredT1,T3,T12

 LINE       118
 EXPRESSION (req_i[3] & gen_normal_case.prio_mask_q[3])
             ----1---   ---------------2--------------
-1--2-StatusTests
01CoveredT1,T3,T12
10CoveredT68,T89,T207
11CoveredT1,T3,T12

 LINE       126
 EXPRESSION (req_i[0] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[0].Pa] & ready_i)
             ----1---   ----------------------------------2----------------------------------   ---3---
-1--2--3-StatusTests
011Not Covered
101CoveredT1,T12,T13
110CoveredT1,T3,T12
111CoveredT1,T3,T12

 LINE       126
 EXPRESSION (req_i[1] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[1].Pa] & ready_i)
             ----1---   ----------------------------------2----------------------------------   ---3---
-1--2--3-StatusTests
011Not Covered
101CoveredT1,T3,T12
110CoveredT1,T3,T12
111CoveredT1,T12,T13

 LINE       126
 EXPRESSION (req_i[2] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[2].Pa] & ready_i)
             ----1---   ----------------------------------2----------------------------------   ---3---
-1--2--3-StatusTests
011Not Covered
101CoveredT1,T3,T12
110CoveredT1,T12,T13
111CoveredT1,T13,T17

 LINE       126
 EXPRESSION (req_i[3] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[3].Pa] & ready_i)
             ----1---   ----------------------------------2----------------------------------   ---3---
-1--2--3-StatusTests
011CoveredT1,T2,T3
101CoveredT1,T3,T12
110CoveredT1,T13,T17
111CoveredT1,T13,T17

 LINE       128
 EXPRESSION 
 Number  Term
      1  ((|req_i)) ? (gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[0].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[0].Pa] & ((~ready_i)))) : gen_normal_case.prio_mask_q[0])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T3,T12

 LINE       128
 SUB-EXPRESSION 
 Number  Term
      1  gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[0].Pa] | 
      2  (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[0].Pa] & ((~ready_i))))
-1--2-StatusTests
00CoveredT1,T3,T12
01CoveredT1,T3,T12
10Unreachable

 LINE       128
 SUB-EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[0].Pa] & ((~ready_i)))
                 ----------------------------------1----------------------------------   ------2-----
-1--2-StatusTests
01CoveredT1,T3,T12
10CoveredT1,T3,T12
11CoveredT1,T3,T12

 LINE       128
 EXPRESSION 
 Number  Term
      1  ((|req_i)) ? (gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[1].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[1].Pa] & ((~ready_i)))) : gen_normal_case.prio_mask_q[1])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T3,T12

 LINE       128
 SUB-EXPRESSION 
 Number  Term
      1  gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[1].Pa] | 
      2  (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[1].Pa] & ((~ready_i))))
-1--2-StatusTests
00CoveredT1,T12,T13
01CoveredT1,T3,T12
10CoveredT1,T3,T12

 LINE       128
 SUB-EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[1].Pa] & ((~ready_i)))
                 ----------------------------------1----------------------------------   ------2-----
-1--2-StatusTests
01CoveredT1,T3,T12
10CoveredT1,T12,T13
11CoveredT1,T3,T12

 LINE       128
 EXPRESSION 
 Number  Term
      1  ((|req_i)) ? (gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[2].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[2].Pa] & ((~ready_i)))) : gen_normal_case.prio_mask_q[2])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T3,T12

 LINE       128
 SUB-EXPRESSION 
 Number  Term
      1  gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[2].Pa] | 
      2  (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[2].Pa] & ((~ready_i))))
-1--2-StatusTests
00CoveredT1,T13,T17
01CoveredT1,T12,T13
10CoveredT1,T3,T12

 LINE       128
 SUB-EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[2].Pa] & ((~ready_i)))
                 ----------------------------------1----------------------------------   ------2-----
-1--2-StatusTests
01CoveredT1,T3,T12
10CoveredT1,T13,T17
11CoveredT1,T12,T13

 LINE       128
 EXPRESSION 
 Number  Term
      1  ((|req_i)) ? (gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[3].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[3].Pa] & ((~ready_i)))) : gen_normal_case.prio_mask_q[3])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T3,T12

 LINE       128
 SUB-EXPRESSION 
 Number  Term
      1  gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[3].Pa] | 
      2  (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[3].Pa] & ((~ready_i))))
-1--2-StatusTests
00CoveredT1,T13,T17
01CoveredT1,T13,T17
10CoveredT1,T3,T12

 LINE       128
 SUB-EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[3].Pa] & ((~ready_i)))
                 ----------------------------------1----------------------------------   ------2-----
-1--2-StatusTests
01CoveredT1,T3,T12
10CoveredT1,T13,T17
11CoveredT1,T13,T17

 LINE       148
 EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) | 
      2  (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1]))
-1--2-StatusTests
00CoveredT1,T3,T12
01CoveredT1,T12,T13
10CoveredT1,T2,T3

 LINE       148
 SUB-EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) & 
      2  gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1])
-1--2-StatusTests
01CoveredT1,T3,T12
10CoveredT1,T2,T3
11CoveredT1,T12,T13

 LINE       148
 EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.req_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])) | 
      2  (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C1]))
-1--2-StatusTests
00CoveredT1,T3,T12
01CoveredT1,T3,T12
10CoveredT1,T2,T3

 LINE       148
 SUB-EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])) & 
      2  gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C1])
-1--2-StatusTests
01CoveredT1,T3,T12
10CoveredT1,T2,T3
11CoveredT1,T3,T12

 LINE       148
 EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.req_tree[gen_normal_case.gen_tree[1].gen_level[1].C0])) | 
      2  (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[1].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[1].C1]))
-1--2-StatusTests
00CoveredT1,T3,T12
01CoveredT1,T13,T17
10CoveredT1,T2,T3

 LINE       148
 SUB-EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[1].C0])) & 
      2  gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[1].C1])
-1--2-StatusTests
01CoveredT1,T3,T12
10CoveredT1,T2,T3
11CoveredT1,T13,T17

 LINE       150
 EXPRESSION (gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C1])
             ----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT38,T67,T68
10CoveredT38,T67,T68

 LINE       150
 EXPRESSION (gen_normal_case.req_tree[gen_normal_case.gen_tree[1].gen_level[0].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[1].gen_level[0].C1])
             ----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T3,T12
10CoveredT1,T12,T13

 LINE       150
 EXPRESSION (gen_normal_case.req_tree[gen_normal_case.gen_tree[1].gen_level[1].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[1].gen_level[1].C1])
             ----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T13,T17
10CoveredT1,T3,T12

 LINE       151
 EXPRESSION (gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
             -----------------------------------1----------------------------------   -----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT38,T67,T68
10CoveredT1,T12,T13

 LINE       151
 EXPRESSION (gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])
             -----------------------------------1----------------------------------   -----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT43,T38,T68
10CoveredT1,T3,T12

 LINE       151
 EXPRESSION (gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[1].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[1].C0])
             -----------------------------------1----------------------------------   -----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T3,T12
10CoveredT1,T13,T17

 LINE       155
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel ? gen_normal_case.idx_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] : gen_normal_case.idx_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
-1-StatusTests
0CoveredT1,T3,T12
1CoveredT1,T2,T3

 LINE       155
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[1].gen_level[0].gen_nodes.sel ? gen_normal_case.idx_tree[gen_normal_case.gen_tree[1].gen_level[0].C1] : gen_normal_case.idx_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])
-1-StatusTests
0CoveredT1,T3,T12
1CoveredT1,T2,T3

 LINE       155
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[1].gen_level[1].gen_nodes.sel ? gen_normal_case.idx_tree[gen_normal_case.gen_tree[1].gen_level[1].C1] : gen_normal_case.idx_tree[gen_normal_case.gen_tree[1].gen_level[1].C0])
-1-StatusTests
0CoveredT1,T3,T12
1CoveredT1,T2,T3

 LINE       156
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel ? gen_normal_case.data_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] : gen_normal_case.data_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
-1-StatusTests
0CoveredT1,T3,T12
1CoveredT1,T2,T3

 LINE       156
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[1].gen_level[0].gen_nodes.sel ? gen_normal_case.data_tree[gen_normal_case.gen_tree[1].gen_level[0].C1] : gen_normal_case.data_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])
-1-StatusTests
0CoveredT1,T3,T12
1CoveredT1,T2,T3

 LINE       156
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[1].gen_level[1].gen_nodes.sel ? gen_normal_case.data_tree[gen_normal_case.gen_tree[1].gen_level[1].C1] : gen_normal_case.data_tree[gen_normal_case.gen_tree[1].gen_level[1].C0])
-1-StatusTests
0CoveredT1,T3,T12
1CoveredT1,T2,T3

 LINE       160
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] & ((~gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel)))
             ----------------------------------1----------------------------------   -----------------------------2-----------------------------
-1--2-StatusTests
01Unreachable
10CoveredT1,T2,T3
11CoveredT1,T3,T12

 LINE       160
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ((~gen_normal_case.gen_tree[1].gen_level[0].gen_nodes.sel)))
             ----------------------------------1----------------------------------   -----------------------------2-----------------------------
-1--2-StatusTests
01CoveredT1,T12,T13
10CoveredT1,T3,T12
11CoveredT1,T3,T12

 LINE       160
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ((~gen_normal_case.gen_tree[1].gen_level[1].gen_nodes.sel)))
             ----------------------------------1----------------------------------   -----------------------------2-----------------------------
-1--2-StatusTests
01CoveredT1,T3,T12
10CoveredT1,T2,T3
11CoveredT1,T12,T13

 LINE       161
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] & gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel)
             ----------------------------------1----------------------------------   ---------------------------2--------------------------
-1--2-StatusTests
01Unreachable
10CoveredT1,T3,T12
11CoveredT1,T2,T3

 LINE       161
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & gen_normal_case.gen_tree[1].gen_level[0].gen_nodes.sel)
             ----------------------------------1----------------------------------   ---------------------------2--------------------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT1,T3,T12
11CoveredT1,T3,T12

 LINE       161
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & gen_normal_case.gen_tree[1].gen_level[1].gen_nodes.sel)
             ----------------------------------1----------------------------------   ---------------------------2--------------------------
-1--2-StatusTests
01CoveredT23,T43,T38
10CoveredT1,T12,T13
11CoveredT1,T2,T3

 LINE       164
 EXPRESSION (gen_normal_case.mask_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
             -----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T3,T12
10Unreachable

 LINE       164
 EXPRESSION (gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])
             -----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T3,T12
10Unreachable

 LINE       164
 EXPRESSION (gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].C0])
             -----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T12,T13
10CoveredT1,T3,T12

Branch Coverage for Module : prim_arbiter_tree ( parameter N=4,DW=2,EnDataPort=0,IdxW=2,gen_normal_case.gen_tree[0].gen_level[0].Pa=0,gen_normal_case.gen_tree[0].gen_level[0].C0=1,gen_normal_case.gen_tree[0].gen_level[0].C1=2,gen_normal_case.gen_tree[1].gen_level[0].Pa=1,gen_normal_case.gen_tree[1].gen_level[0].C0=3,gen_normal_case.gen_tree[1].gen_level[0].C1=4,gen_normal_case.gen_tree[1].gen_level[1].Pa=2,gen_normal_case.gen_tree[1].gen_level[1].C0=5,gen_normal_case.gen_tree[1].gen_level[1].C1=6,gen_normal_case.gen_tree[2].gen_level[0].Pa=3,gen_normal_case.gen_tree[2].gen_level[0].C0=7,gen_normal_case.gen_tree[2].gen_level[0].C1=8,gen_normal_case.gen_tree[2].gen_level[1].Pa=4,gen_normal_case.gen_tree[2].gen_level[1].C0=9,gen_normal_case.gen_tree[2].gen_level[1].C1=10,gen_normal_case.gen_tree[2].gen_level[2].Pa=5,gen_normal_case.gen_tree[2].gen_level[2].C0=11,gen_normal_case.gen_tree[2].gen_level[2].C1=12,gen_normal_case.gen_tree[2].gen_level[3].Pa=6,gen_normal_case.gen_tree[2].gen_level[3].C0=13,gen_normal_case.gen_tree[2].gen_level[3].C1=14 )
Branch Coverage for Module self-instances :
SCOREBRANCH
92.50 100.00
tb.dut.u_eflash.gen_flash_cores[0].u_core.u_rd.u_valid_random

SCOREBRANCH
92.50 100.00
tb.dut.u_eflash.gen_flash_cores[1].u_core.u_rd.u_valid_random

Line No.TotalCoveredPercent
Branches 22 22 100.00
TERNARY 155 2 2 100.00
TERNARY 156 2 2 100.00
TERNARY 155 2 2 100.00
TERNARY 156 2 2 100.00
TERNARY 155 2 2 100.00
TERNARY 156 2 2 100.00
TERNARY 128 2 2 100.00
TERNARY 128 2 2 100.00
TERNARY 128 2 2 100.00
TERNARY 128 2 2 100.00
IF 191 2 2 100.00


155 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0]; -1- ==> ==>

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


156 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0]; -1- ==> ==>

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


155 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0]; -1- ==> ==>

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


156 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0]; -1- ==> ==>

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


155 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0]; -1- ==> ==>

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


156 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0]; -1- ==> ==>

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


128 assign prio_mask_d[offset] = (|req_i) ? -1- ==> ==>

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


128 assign prio_mask_d[offset] = (|req_i) ? -1- ==> ==>

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


128 assign prio_mask_d[offset] = (|req_i) ? -1- ==> ==>

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


128 assign prio_mask_d[offset] = (|req_i) ? -1- ==> ==>

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


191 if (!rst_ni) begin -1- 192 prio_mask_q <= '0; ==> 193 end else begin 194 prio_mask_q <= prio_mask_d; ==>

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


Branch Coverage for Module : prim_arbiter_tree ( parameter N=2,DW=16,EnDataPort=1,IdxW=1,gen_normal_case.gen_tree[0].gen_level[0].Pa=0,gen_normal_case.gen_tree[0].gen_level[0].C0=1,gen_normal_case.gen_tree[0].gen_level[0].C1=2,gen_normal_case.gen_tree[1].gen_level[0].Pa=1,gen_normal_case.gen_tree[1].gen_level[0].C0=3,gen_normal_case.gen_tree[1].gen_level[0].C1=4,gen_normal_case.gen_tree[1].gen_level[1].Pa=2,gen_normal_case.gen_tree[1].gen_level[1].C0=5,gen_normal_case.gen_tree[1].gen_level[1].C1=6 + N=2,DW=129,EnDataPort=1,IdxW=1,gen_normal_case.gen_tree[0].gen_level[0].Pa=0,gen_normal_case.gen_tree[0].gen_level[0].C0=1,gen_normal_case.gen_tree[0].gen_level[0].C1=2,gen_normal_case.gen_tree[1].gen_level[0].Pa=1,gen_normal_case.gen_tree[1].gen_level[0].C0=3,gen_normal_case.gen_tree[1].gen_level[0].C1=4,gen_normal_case.gen_tree[1].gen_level[1].Pa=2,gen_normal_case.gen_tree[1].gen_level[1].C0=5,gen_normal_case.gen_tree[1].gen_level[1].C1=6 )
Branch Coverage for Module self-instances :
SCOREBRANCH
97.86 100.00
tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_calc.gen_input_bufs[0].gen_rr_arbiter.u_arb

SCOREBRANCH
97.86 100.00
tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_calc.gen_input_bufs[1].gen_rr_arbiter.u_arb

SCOREBRANCH
95.50 100.00
tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_op.gen_input_bufs[0].gen_rr_arbiter.u_arb

SCOREBRANCH
97.46 100.00
tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_op.gen_input_bufs[1].gen_rr_arbiter.u_arb

Line No.TotalCoveredPercent
Branches 10 10 100.00
TERNARY 155 2 2 100.00
TERNARY 156 2 2 100.00
TERNARY 128 2 2 100.00
TERNARY 128 2 2 100.00
IF 191 2 2 100.00


155 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0]; -1- ==> ==>

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


156 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0]; -1- ==> ==>

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


128 assign prio_mask_d[offset] = (|req_i) ? -1- ==> ==>

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


128 assign prio_mask_d[offset] = (|req_i) ? -1- ==> ==>

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


191 if (!rst_ni) begin -1- 192 prio_mask_q <= '0; ==> 193 end else begin 194 prio_mask_q <= prio_mask_d; ==>

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


Assert Coverage for Module : prim_arbiter_tree
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 16 16 100.00 15 93.75
Cover properties 0 0 0
Cover sequences 0 0 0
Total 16 16 100.00 15 93.75




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
CheckHotOne_A 2147483647 2147483647 0 0
CheckNGreaterZero_A 6348 6348 0 0
GntImpliesReady_A 2147483647 71099736 0 0
GntImpliesValid_A 2147483647 71099736 0 0
GrantKnown_A 2147483647 2147483647 0 0
IdxKnown_A 2147483647 2147483647 0 0
IndexIsCorrect_A 2147483647 71099736 0 0
LockArbDecision_A 2147483647 66055888 0 0
NoReadyValidNoGrant_A 2147483647 1898492336 0 0
ReadyAndValidImplyGrant_A 2147483647 71099736 0 0
ReqAndReadyImplyGrant_A 2147483647 71099736 0 0
ReqImpliesValid_A 2147483647 329309094 0 0
ReqStaysHighUntilGranted0_M 2147483647 66055354 0 0
RoundRobin_A 2147483647 0 0 6318
ValidKnown_A 2147483647 2147483647 0 0
gen_data_port_assertion.DataFlow_A 1495183812 66056550 0 0


CheckHotOne_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 2147483647 2147483647 0 0
T1 13920 13602 0 0
T2 21150 20742 0 0
T3 7314 6936 0 0
T4 8598 8070 0 0
T7 8112 7554 0 0
T8 26214 23418 0 0
T11 12318 11370 0 0
T12 15612 15168 0 0
T13 205698 205242 0 0
T17 10974 10476 0 0

CheckNGreaterZero_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 6348 6348 0 0
T1 6 6 0 0
T2 6 6 0 0
T3 6 6 0 0
T4 6 6 0 0
T7 6 6 0 0
T8 6 6 0 0
T11 6 6 0 0
T12 6 6 0 0
T13 6 6 0 0
T17 6 6 0 0

GntImpliesReady_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 2147483647 71099736 0 0
T1 11600 198 0 0
T2 17625 128 0 0
T3 6095 129 0 0
T4 8598 128 0 0
T7 6760 144 0 0
T8 26214 796 0 0
T9 656 7 0 0
T11 10265 258 0 0
T12 13010 130 0 0
T13 205698 641 0 0
T15 844 0 0 0
T17 10974 489 0 0
T20 0 143 0 0
T22 1774 12 0 0
T23 7375 79 0 0
T24 1511 32 0 0
T37 0 144 0 0
T38 0 523 0 0
T43 0 32 0 0
T55 6654 107 0 0
T73 0 366 0 0

GntImpliesValid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 2147483647 71099736 0 0
T1 11600 198 0 0
T2 17625 128 0 0
T3 6095 129 0 0
T4 8598 128 0 0
T7 6760 144 0 0
T8 26214 796 0 0
T9 656 7 0 0
T11 10265 258 0 0
T12 13010 130 0 0
T13 205698 641 0 0
T15 844 0 0 0
T17 10974 489 0 0
T20 0 143 0 0
T22 1774 12 0 0
T23 7375 79 0 0
T24 1511 32 0 0
T37 0 144 0 0
T38 0 523 0 0
T43 0 32 0 0
T55 6654 107 0 0
T73 0 366 0 0

GrantKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 2147483647 2147483647 0 0
T1 13920 13602 0 0
T2 21150 20742 0 0
T3 7314 6936 0 0
T4 8598 8070 0 0
T7 8112 7554 0 0
T8 26214 23418 0 0
T11 12318 11370 0 0
T12 15612 15168 0 0
T13 205698 205242 0 0
T17 10974 10476 0 0

IdxKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 2147483647 2147483647 0 0
T1 13920 13602 0 0
T2 21150 20742 0 0
T3 7314 6936 0 0
T4 8598 8070 0 0
T7 8112 7554 0 0
T8 26214 23418 0 0
T11 12318 11370 0 0
T12 15612 15168 0 0
T13 205698 205242 0 0
T17 10974 10476 0 0

IndexIsCorrect_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 2147483647 71099736 0 0
T1 11600 198 0 0
T2 17625 128 0 0
T3 6095 129 0 0
T4 8598 128 0 0
T7 6760 144 0 0
T8 26214 796 0 0
T9 656 7 0 0
T11 10265 258 0 0
T12 13010 130 0 0
T13 205698 641 0 0
T15 844 0 0 0
T17 10974 489 0 0
T20 0 143 0 0
T22 1774 12 0 0
T23 7375 79 0 0
T24 1511 32 0 0
T37 0 144 0 0
T38 0 523 0 0
T43 0 32 0 0
T55 6654 107 0 0
T73 0 366 0 0

LockArbDecision_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 2147483647 66055888 0 0
T1 9280 128 0 0
T2 14100 128 0 0
T3 4876 128 0 0
T4 5732 128 0 0
T7 5408 144 0 0
T8 17476 796 0 0
T11 8212 258 0 0
T12 10408 128 0 0
T13 137132 128 0 0
T17 7316 420 0 0

NoReadyValidNoGrant_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 2147483647 1898492336 0 0
T1 13920 11479 0 0
T2 21150 20454 0 0
T3 7314 5810 0 0
T4 8598 7782 0 0
T7 8112 7234 0 0
T8 26214 21634 0 0
T11 12318 10790 0 0
T12 15612 13562 0 0
T13 205698 138495 0 0
T17 10974 8309 0 0

ReadyAndValidImplyGrant_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 2147483647 71099736 0 0
T1 11600 198 0 0
T2 17625 128 0 0
T3 6095 129 0 0
T4 8598 128 0 0
T7 6760 144 0 0
T8 26214 796 0 0
T9 656 7 0 0
T11 10265 258 0 0
T12 13010 130 0 0
T13 205698 641 0 0
T15 844 0 0 0
T17 10974 489 0 0
T20 0 143 0 0
T22 1774 12 0 0
T23 7375 79 0 0
T24 1511 32 0 0
T37 0 144 0 0
T38 0 523 0 0
T43 0 32 0 0
T55 6654 107 0 0
T73 0 366 0 0

ReqAndReadyImplyGrant_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 2147483647 71099736 0 0
T1 11600 198 0 0
T2 17625 128 0 0
T3 6095 129 0 0
T4 8598 128 0 0
T7 6760 144 0 0
T8 26214 796 0 0
T9 656 7 0 0
T11 10265 258 0 0
T12 13010 130 0 0
T13 205698 641 0 0
T15 844 0 0 0
T17 10974 489 0 0
T20 0 143 0 0
T22 1774 12 0 0
T23 7375 79 0 0
T24 1511 32 0 0
T37 0 144 0 0
T38 0 523 0 0
T43 0 32 0 0
T55 6654 107 0 0
T73 0 366 0 0

ReqImpliesValid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 2147483647 329309094 0 0
T1 11600 2087 0 0
T2 17625 256 0 0
T3 6095 1090 0 0
T4 8598 256 0 0
T7 6760 288 0 0
T8 26214 1592 0 0
T9 656 135 0 0
T11 10265 516 0 0
T12 13010 1566 0 0
T13 205698 66707 0 0
T14 0 624 0 0
T15 844 0 0 0
T17 10974 2131 0 0
T20 0 34930 0 0
T22 1774 1282 0 0
T23 7375 7576 0 0
T24 1511 794 0 0
T37 0 13857 0 0
T43 0 12258 0 0
T55 6654 1739 0 0

ReqStaysHighUntilGranted0_M
NameAttemptsReal SuccessesFailuresIncomplete
Total 2147483647 66055354 0 0
T1 9280 128 0 0
T2 14100 128 0 0
T3 4876 128 0 0
T4 5732 128 0 0
T7 5408 144 0 0
T8 17476 796 0 0
T11 8212 258 0 0
T12 10408 128 0 0
T13 137132 128 0 0
T17 7316 420 0 0

RoundRobin_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 2147483647 0 0 6318

ValidKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 2147483647 2147483647 0 0
T1 13920 13602 0 0
T2 21150 20742 0 0
T3 7314 6936 0 0
T4 8598 8070 0 0
T7 8112 7554 0 0
T8 26214 23418 0 0
T11 12318 11370 0 0
T12 15612 15168 0 0
T13 205698 205242 0 0
T17 10974 10476 0 0

gen_data_port_assertion.DataFlow_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1495183812 66056550 0 0
T1 9280 128 0 0
T2 14100 128 0 0
T3 4876 128 0 0
T4 5732 128 0 0
T7 5408 144 0 0
T8 17476 796 0 0
T11 8212 258 0 0
T12 10408 128 0 0
T13 137132 128 0 0
T17 7316 420 0 0

Line Coverage for Instance : tb.dut.u_eflash.gen_flash_cores[0].u_core.u_rd.u_valid_random
Line No.TotalCoveredPercent
TOTAL524892.31
CONT_ASSIGN6200
CONT_ASSIGN11211100.00
CONT_ASSIGN11211100.00
CONT_ASSIGN11211100.00
CONT_ASSIGN11211100.00
CONT_ASSIGN11811100.00
CONT_ASSIGN11811100.00
CONT_ASSIGN11811100.00
CONT_ASSIGN11811100.00
CONT_ASSIGN122100.00
CONT_ASSIGN122100.00
CONT_ASSIGN122100.00
CONT_ASSIGN122100.00
CONT_ASSIGN12611100.00
CONT_ASSIGN12611100.00
CONT_ASSIGN12611100.00
CONT_ASSIGN12611100.00
CONT_ASSIGN12811100.00
CONT_ASSIGN12811100.00
CONT_ASSIGN12811100.00
CONT_ASSIGN12811100.00
CONT_ASSIGN14811100.00
CONT_ASSIGN14811100.00
CONT_ASSIGN14811100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15111100.00
CONT_ASSIGN15111100.00
CONT_ASSIGN15111100.00
CONT_ASSIGN15511100.00
CONT_ASSIGN15511100.00
CONT_ASSIGN15511100.00
CONT_ASSIGN15611100.00
CONT_ASSIGN15611100.00
CONT_ASSIGN15611100.00
CONT_ASSIGN16011100.00
CONT_ASSIGN16011100.00
CONT_ASSIGN16011100.00
CONT_ASSIGN16111100.00
CONT_ASSIGN16111100.00
CONT_ASSIGN16111100.00
CONT_ASSIGN16300
CONT_ASSIGN16300
CONT_ASSIGN16311100.00
CONT_ASSIGN16411100.00
CONT_ASSIGN16411100.00
CONT_ASSIGN16411100.00
CONT_ASSIGN17411100.00
CONT_ASSIGN18011100.00
CONT_ASSIGN18211100.00
CONT_ASSIGN18311100.00
ALWAYS19133100.00

61 logic unused_req_chk; 62 unreachable assign unused_req_chk = req_chk_i; 63 64 `ASSERT_INIT(CheckNGreaterZero_A, N > 0) 65 66 // this case is basically just a bypass 67 if (N == 1) begin : gen_degenerate_case 68 69 assign valid_o = req_i[0]; 70 assign data_o = data_i[0]; 71 assign gnt_o[0] = valid_o & ready_i; 72 assign idx_o = '0; 73 74 end else begin : gen_normal_case 75 76 // align to powers of 2 for simplicity 77 // a full binary tree with N levels has 2**N + 2**N-1 nodes 78 logic [2**(IdxW+1)-2:0] req_tree; 79 logic [2**(IdxW+1)-2:0] prio_tree; 80 logic [2**(IdxW+1)-2:0] sel_tree; 81 logic [2**(IdxW+1)-2:0] mask_tree; 82 logic [2**(IdxW+1)-2:0][IdxW-1:0] idx_tree; 83 logic [2**(IdxW+1)-2:0][DW-1:0] data_tree; 84 logic [N-1:0] prio_mask_d, prio_mask_q; 85 86 for (genvar level = 0; level < IdxW+1; level++) begin : gen_tree 87 // 88 // level+1 C0 C1 <- "Base1" points to the first node on "level+1", 89 // \ / these nodes are the children of the nodes one level below 90 // level Pa <- "Base0", points to the first node on "level", 91 // these nodes are the parents of the nodes one level above 92 // 93 // hence we have the following indices for the Pa, C0, C1 nodes: 94 // Pa = 2**level - 1 + offset = Base0 + offset 95 // C0 = 2**(level+1) - 1 + 2*offset = Base1 + 2*offset 96 // C1 = 2**(level+1) - 1 + 2*offset + 1 = Base1 + 2*offset + 1 97 // 98 localparam int Base0 = (2**level)-1; 99 localparam int Base1 = (2**(level+1))-1; 100 101 for (genvar offset = 0; offset < 2**level; offset++) begin : gen_level 102 localparam int Pa = Base0 + offset; 103 localparam int C0 = Base1 + 2*offset; 104 localparam int C1 = Base1 + 2*offset + 1; 105 106 // this assigns the gated interrupt source signals, their 107 // corresponding IDs and priorities to the tree leafs 108 if (level == IdxW) begin : gen_leafs 109 if (offset < N) begin : gen_assign 110 // forward path (requests and data) 111 // all requests inputs are assigned to the request tree 112 4/4 assign req_tree[Pa] = req_i[offset]; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  | T1 T2 T3  113 // we basically split the incoming request vector into two halves with the following 114 // priority assignment. the prio_mask_q register contains a prefix sum that has been 115 // computed using the last winning index, and hence masks out all requests at offsets 116 // lower or equal the previously granted index. hence, all higher indices are considered 117 // first in the arbitration tree nodes below, before considering the lower indices. 118 4/4 assign prio_tree[Pa] = req_i[offset] & prio_mask_q[offset]; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  | T1 T2 T3  119 // input for the index muxes (used to compute the winner index) 120 assign idx_tree[Pa] = offset; 121 // input for the data muxes 122 0/4 ==> assign data_tree[Pa] = data_i[offset]; 123 124 // backward path (grants and prefix sum) 125 // grant if selected, ready and request asserted 126 4/4 assign gnt_o[offset] = req_i[offset] & sel_tree[Pa] & ready_i; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  | T1 T2 T3  127 // only update mask if there is a valid request 128 4/4 assign prio_mask_d[offset] = (|req_i) ? Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  | T1 T2 T3  129 mask_tree[Pa] | sel_tree[Pa] & ~ready_i : 130 prio_mask_q[offset]; 131 end else begin : gen_tie_off 132 // forward path 133 assign req_tree[Pa] = '0; 134 assign prio_tree[Pa] = '0; 135 assign idx_tree[Pa] = '0; 136 assign data_tree[Pa] = '0; 137 logic unused_sigs; 138 assign unused_sigs = ^{mask_tree[Pa], 139 sel_tree[Pa]}; 140 end 141 // this creates the node assignments 142 end else begin : gen_nodes 143 // local helper variable 144 logic sel; 145 146 // forward path (requests and data) 147 // each node looks at its two children, and selects the one with higher priority 148 3/3 assign sel = ~req_tree[C0] | ~prio_tree[C0] & prio_tree[C1]; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  149 // propagate requests 150 3/3 assign req_tree[Pa] = req_tree[C0] | req_tree[C1]; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  151 3/3 assign prio_tree[Pa] = prio_tree[C1] | prio_tree[C0]; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  152 // data and index muxes 153 // Note: these ternaries have triggered a synthesis bug in Vivado versions older 154 // than 2020.2. If the problem resurfaces again, have a look at issue #1408. 155 3/3 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0]; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  156 3/3 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0]; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  157 158 // backward path (grants and prefix sum) 159 // this propagates the selction index back and computes a hot one mask 160 3/3 assign sel_tree[C0] = sel_tree[Pa] & ~sel; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  161 3/3 assign sel_tree[C1] = sel_tree[Pa] & sel; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  162 // this performs a prefix sum for masking the input requests in the next cycle 163 1/1(2 unreachable) assign mask_tree[C0] = mask_tree[Pa]; Tests: T1 T2 T3  164 3/3 assign mask_tree[C1] = mask_tree[Pa] | sel_tree[C0]; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  165 end 166 end : gen_level 167 end : gen_tree 168 169 // the results can be found at the tree root 170 if (EnDataPort) begin : gen_data_port 171 assign data_o = data_tree[0]; 172 end else begin : gen_no_dataport 173 logic [DW-1:0] unused_data; 174 1/1 assign unused_data = data_tree[0]; Tests: T1 T2 T3  175 assign data_o = '1; 176 end 177 178 // This index is unused. 179 logic unused_prio_tree; 180 1/1 assign unused_prio_tree = prio_tree[0]; Tests: T1 T2 T3  181 182 1/1 assign idx_o = idx_tree[0]; Tests: T1 T2 T3  183 1/1 assign valid_o = req_tree[0]; Tests: T1 T2 T3  184 185 // the select tree computes a hot one signal that indicates which request is currently selected 186 assign sel_tree[0] = 1'b1; 187 // the mask tree is basically a prefix sum of the hot one select signal computed above 188 assign mask_tree[0] = 1'b0; 189 190 always_ff @(posedge clk_i or negedge rst_ni) begin : p_mask_reg 191 1/1 if (!rst_ni) begin Tests: T1 T2 T3  192 1/1 prio_mask_q <= '0; Tests: T1 T2 T3  193 end else begin 194 1/1 prio_mask_q <= prio_mask_d; Tests: T1 T2 T3 

Cond Coverage for Instance : tb.dut.u_eflash.gen_flash_cores[0].u_core.u_rd.u_valid_random
TotalCoveredPercent
Conditions13012797.69
Logical13012797.69
Non-Logical00
Event00

 LINE       118
 EXPRESSION (req_i[0] & gen_normal_case.prio_mask_q[0])
             ----1---   ---------------2--------------
-1--2-StatusTests
01CoveredT22,T23,T59
10CoveredT1,T3,T12
11CoveredT1,T3,T12

 LINE       118
 EXPRESSION (req_i[1] & gen_normal_case.prio_mask_q[1])
             ----1---   ---------------2--------------
-1--2-StatusTests
01CoveredT12,T22,T23
10CoveredT1,T3,T12
11CoveredT1,T3,T12

 LINE       118
 EXPRESSION (req_i[2] & gen_normal_case.prio_mask_q[2])
             ----1---   ---------------2--------------
-1--2-StatusTests
01CoveredT12,T22,T23
10CoveredT1,T3,T12
11CoveredT1,T3,T12

 LINE       118
 EXPRESSION (req_i[3] & gen_normal_case.prio_mask_q[3])
             ----1---   ---------------2--------------
-1--2-StatusTests
01CoveredT1,T3,T12
10CoveredT68,T89,T207
11CoveredT1,T3,T12

 LINE       126
 EXPRESSION (req_i[0] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[0].Pa] & ready_i)
             ----1---   ----------------------------------2----------------------------------   ---3---
-1--2--3-StatusTests
011Not Covered
101CoveredT1,T12,T13
110CoveredT1,T3,T12
111CoveredT1,T3,T12

 LINE       126
 EXPRESSION (req_i[1] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[1].Pa] & ready_i)
             ----1---   ----------------------------------2----------------------------------   ---3---
-1--2--3-StatusTests
011Not Covered
101CoveredT1,T3,T12
110CoveredT1,T3,T12
111CoveredT1,T12,T13

 LINE       126
 EXPRESSION (req_i[2] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[2].Pa] & ready_i)
             ----1---   ----------------------------------2----------------------------------   ---3---
-1--2--3-StatusTests
011Not Covered
101CoveredT1,T3,T12
110CoveredT1,T12,T13
111CoveredT1,T13,T17

 LINE       126
 EXPRESSION (req_i[3] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[3].Pa] & ready_i)
             ----1---   ----------------------------------2----------------------------------   ---3---
-1--2--3-StatusTests
011CoveredT1,T2,T3
101CoveredT1,T3,T12
110CoveredT1,T13,T17
111CoveredT1,T13,T17

 LINE       128
 EXPRESSION 
 Number  Term
      1  ((|req_i)) ? (gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[0].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[0].Pa] & ((~ready_i)))) : gen_normal_case.prio_mask_q[0])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T3,T12

 LINE       128
 SUB-EXPRESSION 
 Number  Term
      1  gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[0].Pa] | 
      2  (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[0].Pa] & ((~ready_i))))
-1--2-StatusTests
00CoveredT1,T3,T12
01CoveredT1,T3,T12
10Unreachable

 LINE       128
 SUB-EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[0].Pa] & ((~ready_i)))
                 ----------------------------------1----------------------------------   ------2-----
-1--2-StatusTests
01CoveredT1,T3,T12
10CoveredT1,T3,T12
11CoveredT1,T3,T12

 LINE       128
 EXPRESSION 
 Number  Term
      1  ((|req_i)) ? (gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[1].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[1].Pa] & ((~ready_i)))) : gen_normal_case.prio_mask_q[1])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T3,T12

 LINE       128
 SUB-EXPRESSION 
 Number  Term
      1  gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[1].Pa] | 
      2  (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[1].Pa] & ((~ready_i))))
-1--2-StatusTests
00CoveredT1,T12,T13
01CoveredT1,T3,T12
10CoveredT1,T3,T12

 LINE       128
 SUB-EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[1].Pa] & ((~ready_i)))
                 ----------------------------------1----------------------------------   ------2-----
-1--2-StatusTests
01CoveredT1,T3,T12
10CoveredT1,T12,T13
11CoveredT1,T3,T12

 LINE       128
 EXPRESSION 
 Number  Term
      1  ((|req_i)) ? (gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[2].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[2].Pa] & ((~ready_i)))) : gen_normal_case.prio_mask_q[2])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T3,T12

 LINE       128
 SUB-EXPRESSION 
 Number  Term
      1  gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[2].Pa] | 
      2  (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[2].Pa] & ((~ready_i))))
-1--2-StatusTests
00CoveredT1,T13,T17
01CoveredT1,T12,T13
10CoveredT1,T3,T12

 LINE       128
 SUB-EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[2].Pa] & ((~ready_i)))
                 ----------------------------------1----------------------------------   ------2-----
-1--2-StatusTests
01CoveredT1,T3,T12
10CoveredT1,T13,T17
11CoveredT1,T12,T13

 LINE       128
 EXPRESSION 
 Number  Term
      1  ((|req_i)) ? (gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[3].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[3].Pa] & ((~ready_i)))) : gen_normal_case.prio_mask_q[3])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T3,T12

 LINE       128
 SUB-EXPRESSION 
 Number  Term
      1  gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[3].Pa] | 
      2  (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[3].Pa] & ((~ready_i))))
-1--2-StatusTests
00CoveredT1,T13,T17
01CoveredT1,T13,T17
10CoveredT1,T3,T12

 LINE       128
 SUB-EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[3].Pa] & ((~ready_i)))
                 ----------------------------------1----------------------------------   ------2-----
-1--2-StatusTests
01CoveredT1,T3,T12
10CoveredT1,T13,T17
11CoveredT1,T13,T17

 LINE       148
 EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) | 
      2  (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1]))
-1--2-StatusTests
00CoveredT1,T3,T12
01CoveredT1,T12,T13
10CoveredT1,T2,T3

 LINE       148
 SUB-EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) & 
      2  gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1])
-1--2-StatusTests
01CoveredT1,T3,T12
10CoveredT1,T2,T3
11CoveredT1,T12,T13

 LINE       148
 EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.req_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])) | 
      2  (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C1]))
-1--2-StatusTests
00CoveredT1,T3,T12
01CoveredT1,T3,T12
10CoveredT1,T2,T3

 LINE       148
 SUB-EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])) & 
      2  gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C1])
-1--2-StatusTests
01CoveredT1,T3,T12
10CoveredT1,T2,T3
11CoveredT1,T3,T12

 LINE       148
 EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.req_tree[gen_normal_case.gen_tree[1].gen_level[1].C0])) | 
      2  (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[1].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[1].C1]))
-1--2-StatusTests
00CoveredT1,T3,T12
01CoveredT1,T13,T17
10CoveredT1,T2,T3

 LINE       148
 SUB-EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[1].C0])) & 
      2  gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[1].C1])
-1--2-StatusTests
01CoveredT1,T3,T12
10CoveredT1,T2,T3
11CoveredT1,T13,T17

 LINE       150
 EXPRESSION (gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C1])
             ----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT38,T67,T68
10CoveredT38,T67,T68

 LINE       150
 EXPRESSION (gen_normal_case.req_tree[gen_normal_case.gen_tree[1].gen_level[0].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[1].gen_level[0].C1])
             ----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T3,T12
10CoveredT1,T12,T13

 LINE       150
 EXPRESSION (gen_normal_case.req_tree[gen_normal_case.gen_tree[1].gen_level[1].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[1].gen_level[1].C1])
             ----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T13,T17
10CoveredT1,T3,T12

 LINE       151
 EXPRESSION (gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
             -----------------------------------1----------------------------------   -----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT38,T67,T68
10CoveredT1,T12,T13

 LINE       151
 EXPRESSION (gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])
             -----------------------------------1----------------------------------   -----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT43,T38,T68
10CoveredT1,T3,T12

 LINE       151
 EXPRESSION (gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[1].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[1].C0])
             -----------------------------------1----------------------------------   -----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T3,T12
10CoveredT1,T13,T17

 LINE       155
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel ? gen_normal_case.idx_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] : gen_normal_case.idx_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
-1-StatusTests
0CoveredT1,T3,T12
1CoveredT1,T2,T3

 LINE       155
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[1].gen_level[0].gen_nodes.sel ? gen_normal_case.idx_tree[gen_normal_case.gen_tree[1].gen_level[0].C1] : gen_normal_case.idx_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])
-1-StatusTests
0CoveredT1,T3,T12
1CoveredT1,T2,T3

 LINE       155
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[1].gen_level[1].gen_nodes.sel ? gen_normal_case.idx_tree[gen_normal_case.gen_tree[1].gen_level[1].C1] : gen_normal_case.idx_tree[gen_normal_case.gen_tree[1].gen_level[1].C0])
-1-StatusTests
0CoveredT1,T3,T12
1CoveredT1,T2,T3

 LINE       156
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel ? gen_normal_case.data_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] : gen_normal_case.data_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
-1-StatusTests
0CoveredT1,T3,T12
1CoveredT1,T2,T3

 LINE       156
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[1].gen_level[0].gen_nodes.sel ? gen_normal_case.data_tree[gen_normal_case.gen_tree[1].gen_level[0].C1] : gen_normal_case.data_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])
-1-StatusTests
0CoveredT1,T3,T12
1CoveredT1,T2,T3

 LINE       156
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[1].gen_level[1].gen_nodes.sel ? gen_normal_case.data_tree[gen_normal_case.gen_tree[1].gen_level[1].C1] : gen_normal_case.data_tree[gen_normal_case.gen_tree[1].gen_level[1].C0])
-1-StatusTests
0CoveredT1,T3,T12
1CoveredT1,T2,T3

 LINE       160
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] & ((~gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel)))
             ----------------------------------1----------------------------------   -----------------------------2-----------------------------
-1--2-StatusTests
01Unreachable
10CoveredT1,T2,T3
11CoveredT1,T3,T12

 LINE       160
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ((~gen_normal_case.gen_tree[1].gen_level[0].gen_nodes.sel)))
             ----------------------------------1----------------------------------   -----------------------------2-----------------------------
-1--2-StatusTests
01CoveredT1,T12,T13
10CoveredT1,T3,T12
11CoveredT1,T3,T12

 LINE       160
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ((~gen_normal_case.gen_tree[1].gen_level[1].gen_nodes.sel)))
             ----------------------------------1----------------------------------   -----------------------------2-----------------------------
-1--2-StatusTests
01CoveredT1,T3,T12
10CoveredT1,T2,T3
11CoveredT1,T12,T13

 LINE       161
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] & gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel)
             ----------------------------------1----------------------------------   ---------------------------2--------------------------
-1--2-StatusTests
01Unreachable
10CoveredT1,T3,T12
11CoveredT1,T2,T3

 LINE       161
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & gen_normal_case.gen_tree[1].gen_level[0].gen_nodes.sel)
             ----------------------------------1----------------------------------   ---------------------------2--------------------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT1,T3,T12
11CoveredT1,T3,T12

 LINE       161
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & gen_normal_case.gen_tree[1].gen_level[1].gen_nodes.sel)
             ----------------------------------1----------------------------------   ---------------------------2--------------------------
-1--2-StatusTests
01CoveredT23,T43,T38
10CoveredT1,T12,T13
11CoveredT1,T2,T3

 LINE       164
 EXPRESSION (gen_normal_case.mask_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
             -----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T3,T12
10Unreachable

 LINE       164
 EXPRESSION (gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])
             -----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T3,T12
10Unreachable

 LINE       164
 EXPRESSION (gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].C0])
             -----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T12,T13
10CoveredT1,T3,T12

Branch Coverage for Instance : tb.dut.u_eflash.gen_flash_cores[0].u_core.u_rd.u_valid_random
Line No.TotalCoveredPercent
Branches 22 22 100.00
TERNARY 155 2 2 100.00
TERNARY 156 2 2 100.00
TERNARY 155 2 2 100.00
TERNARY 156 2 2 100.00
TERNARY 155 2 2 100.00
TERNARY 156 2 2 100.00
TERNARY 128 2 2 100.00
TERNARY 128 2 2 100.00
TERNARY 128 2 2 100.00
TERNARY 128 2 2 100.00
IF 191 2 2 100.00


155 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0]; -1- ==> ==>

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


156 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0]; -1- ==> ==>

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


155 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0]; -1- ==> ==>

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


156 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0]; -1- ==> ==>

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


155 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0]; -1- ==> ==>

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


156 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0]; -1- ==> ==>

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


128 assign prio_mask_d[offset] = (|req_i) ? -1- ==> ==>

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


128 assign prio_mask_d[offset] = (|req_i) ? -1- ==> ==>

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


128 assign prio_mask_d[offset] = (|req_i) ? -1- ==> ==>

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


128 assign prio_mask_d[offset] = (|req_i) ? -1- ==> ==>

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


191 if (!rst_ni) begin -1- 192 prio_mask_q <= '0; ==> 193 end else begin 194 prio_mask_q <= prio_mask_d; ==>

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


Assert Coverage for Instance : tb.dut.u_eflash.gen_flash_cores[0].u_core.u_rd.u_valid_random
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 15 15 100.00 12 80.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 15 15 100.00 12 80.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
CheckHotOne_A 373795953 372949494 0 0
CheckNGreaterZero_A 1058 1058 0 0
GntImpliesReady_A 373795953 2686594 0 0
GntImpliesValid_A 373795953 2686594 0 0
GrantKnown_A 373795953 372949494 0 0
IdxKnown_A 373795953 372949494 0 0
IndexIsCorrect_A 373795953 2686594 0 0
LockArbDecision_A 373795953 0 0 0
NoReadyValidNoGrant_A 373795953 265832267 0 0
ReadyAndValidImplyGrant_A 373795953 2686594 0 0
ReqAndReadyImplyGrant_A 373795953 2686594 0 0
ReqImpliesValid_A 373795953 101838398 0 0
ReqStaysHighUntilGranted0_M 373795953 0 0 0
RoundRobin_A 373795953 0 0 1053
ValidKnown_A 373795953 372949494 0 0


CheckHotOne_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 372949494 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 34207 0 0
T17 1829 1746 0 0

CheckNGreaterZero_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1058 1058 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T7 1 1 0 0
T8 1 1 0 0
T11 1 1 0 0
T12 1 1 0 0
T13 1 1 0 0
T17 1 1 0 0

GntImpliesReady_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 2686594 0 0
T1 2320 70 0 0
T2 3525 0 0 0
T3 1219 1 0 0
T4 1433 0 0 0
T7 1352 0 0 0
T8 4369 0 0 0
T9 0 4 0 0
T11 2053 0 0 0
T12 2602 2 0 0
T13 34283 269 0 0
T17 1829 69 0 0
T22 0 12 0 0
T23 0 67 0 0
T24 0 31 0 0
T55 0 86 0 0

GntImpliesValid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 2686594 0 0
T1 2320 70 0 0
T2 3525 0 0 0
T3 1219 1 0 0
T4 1433 0 0 0
T7 1352 0 0 0
T8 4369 0 0 0
T9 0 4 0 0
T11 2053 0 0 0
T12 2602 2 0 0
T13 34283 269 0 0
T17 1829 69 0 0
T22 0 12 0 0
T23 0 67 0 0
T24 0 31 0 0
T55 0 86 0 0

GrantKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 372949494 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 34207 0 0
T17 1829 1746 0 0

IdxKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 372949494 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 34207 0 0
T17 1829 1746 0 0

IndexIsCorrect_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 2686594 0 0
T1 2320 70 0 0
T2 3525 0 0 0
T3 1219 1 0 0
T4 1433 0 0 0
T7 1352 0 0 0
T8 4369 0 0 0
T9 0 4 0 0
T11 2053 0 0 0
T12 2602 2 0 0
T13 34283 269 0 0
T17 1829 69 0 0
T22 0 12 0 0
T23 0 67 0 0
T24 0 31 0 0
T55 0 86 0 0

LockArbDecision_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 0 0 0

NoReadyValidNoGrant_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 265832267 0 0
T1 2320 400 0 0
T2 3525 3425 0 0
T3 1219 286 0 0
T4 1433 1313 0 0
T7 1352 1227 0 0
T8 4369 3711 0 0
T11 2053 1831 0 0
T12 2602 1178 0 0
T13 34283 1265 0 0
T17 1829 419 0 0

ReadyAndValidImplyGrant_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 2686594 0 0
T1 2320 70 0 0
T2 3525 0 0 0
T3 1219 1 0 0
T4 1433 0 0 0
T7 1352 0 0 0
T8 4369 0 0 0
T9 0 4 0 0
T11 2053 0 0 0
T12 2602 2 0 0
T13 34283 269 0 0
T17 1829 69 0 0
T22 0 12 0 0
T23 0 67 0 0
T24 0 31 0 0
T55 0 86 0 0

ReqAndReadyImplyGrant_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 2686594 0 0
T1 2320 70 0 0
T2 3525 0 0 0
T3 1219 1 0 0
T4 1433 0 0 0
T7 1352 0 0 0
T8 4369 0 0 0
T9 0 4 0 0
T11 2053 0 0 0
T12 2602 2 0 0
T13 34283 269 0 0
T17 1829 69 0 0
T22 0 12 0 0
T23 0 67 0 0
T24 0 31 0 0
T55 0 86 0 0

ReqImpliesValid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 101838398 0 0
T1 2320 1831 0 0
T2 3525 0 0 0
T3 1219 834 0 0
T4 1433 0 0 0
T7 1352 0 0 0
T8 4369 0 0 0
T9 0 67 0 0
T11 2053 0 0 0
T12 2602 1310 0 0
T13 34283 32906 0 0
T17 1829 1291 0 0
T22 0 647 0 0
T23 0 2922 0 0
T24 0 592 0 0
T55 0 1394 0 0

ReqStaysHighUntilGranted0_M
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 0 0 0

RoundRobin_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 0 0 1053

ValidKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 372949494 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 34207 0 0
T17 1829 1746 0 0

Line Coverage for Instance : tb.dut.u_eflash.gen_flash_cores[1].u_core.u_rd.u_valid_random
Line No.TotalCoveredPercent
TOTAL524892.31
CONT_ASSIGN6200
CONT_ASSIGN11211100.00
CONT_ASSIGN11211100.00
CONT_ASSIGN11211100.00
CONT_ASSIGN11211100.00
CONT_ASSIGN11811100.00
CONT_ASSIGN11811100.00
CONT_ASSIGN11811100.00
CONT_ASSIGN11811100.00
CONT_ASSIGN122100.00
CONT_ASSIGN122100.00
CONT_ASSIGN122100.00
CONT_ASSIGN122100.00
CONT_ASSIGN12611100.00
CONT_ASSIGN12611100.00
CONT_ASSIGN12611100.00
CONT_ASSIGN12611100.00
CONT_ASSIGN12811100.00
CONT_ASSIGN12811100.00
CONT_ASSIGN12811100.00
CONT_ASSIGN12811100.00
CONT_ASSIGN14811100.00
CONT_ASSIGN14811100.00
CONT_ASSIGN14811100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15111100.00
CONT_ASSIGN15111100.00
CONT_ASSIGN15111100.00
CONT_ASSIGN15511100.00
CONT_ASSIGN15511100.00
CONT_ASSIGN15511100.00
CONT_ASSIGN15611100.00
CONT_ASSIGN15611100.00
CONT_ASSIGN15611100.00
CONT_ASSIGN16011100.00
CONT_ASSIGN16011100.00
CONT_ASSIGN16011100.00
CONT_ASSIGN16111100.00
CONT_ASSIGN16111100.00
CONT_ASSIGN16111100.00
CONT_ASSIGN16300
CONT_ASSIGN16300
CONT_ASSIGN16311100.00
CONT_ASSIGN16411100.00
CONT_ASSIGN16411100.00
CONT_ASSIGN16411100.00
CONT_ASSIGN17411100.00
CONT_ASSIGN18011100.00
CONT_ASSIGN18211100.00
CONT_ASSIGN18311100.00
ALWAYS19133100.00

61 logic unused_req_chk; 62 unreachable assign unused_req_chk = req_chk_i; 63 64 `ASSERT_INIT(CheckNGreaterZero_A, N > 0) 65 66 // this case is basically just a bypass 67 if (N == 1) begin : gen_degenerate_case 68 69 assign valid_o = req_i[0]; 70 assign data_o = data_i[0]; 71 assign gnt_o[0] = valid_o & ready_i; 72 assign idx_o = '0; 73 74 end else begin : gen_normal_case 75 76 // align to powers of 2 for simplicity 77 // a full binary tree with N levels has 2**N + 2**N-1 nodes 78 logic [2**(IdxW+1)-2:0] req_tree; 79 logic [2**(IdxW+1)-2:0] prio_tree; 80 logic [2**(IdxW+1)-2:0] sel_tree; 81 logic [2**(IdxW+1)-2:0] mask_tree; 82 logic [2**(IdxW+1)-2:0][IdxW-1:0] idx_tree; 83 logic [2**(IdxW+1)-2:0][DW-1:0] data_tree; 84 logic [N-1:0] prio_mask_d, prio_mask_q; 85 86 for (genvar level = 0; level < IdxW+1; level++) begin : gen_tree 87 // 88 // level+1 C0 C1 <- "Base1" points to the first node on "level+1", 89 // \ / these nodes are the children of the nodes one level below 90 // level Pa <- "Base0", points to the first node on "level", 91 // these nodes are the parents of the nodes one level above 92 // 93 // hence we have the following indices for the Pa, C0, C1 nodes: 94 // Pa = 2**level - 1 + offset = Base0 + offset 95 // C0 = 2**(level+1) - 1 + 2*offset = Base1 + 2*offset 96 // C1 = 2**(level+1) - 1 + 2*offset + 1 = Base1 + 2*offset + 1 97 // 98 localparam int Base0 = (2**level)-1; 99 localparam int Base1 = (2**(level+1))-1; 100 101 for (genvar offset = 0; offset < 2**level; offset++) begin : gen_level 102 localparam int Pa = Base0 + offset; 103 localparam int C0 = Base1 + 2*offset; 104 localparam int C1 = Base1 + 2*offset + 1; 105 106 // this assigns the gated interrupt source signals, their 107 // corresponding IDs and priorities to the tree leafs 108 if (level == IdxW) begin : gen_leafs 109 if (offset < N) begin : gen_assign 110 // forward path (requests and data) 111 // all requests inputs are assigned to the request tree 112 4/4 assign req_tree[Pa] = req_i[offset]; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  | T1 T2 T3  113 // we basically split the incoming request vector into two halves with the following 114 // priority assignment. the prio_mask_q register contains a prefix sum that has been 115 // computed using the last winning index, and hence masks out all requests at offsets 116 // lower or equal the previously granted index. hence, all higher indices are considered 117 // first in the arbitration tree nodes below, before considering the lower indices. 118 4/4 assign prio_tree[Pa] = req_i[offset] & prio_mask_q[offset]; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  | T1 T2 T3  119 // input for the index muxes (used to compute the winner index) 120 assign idx_tree[Pa] = offset; 121 // input for the data muxes 122 0/4 ==> assign data_tree[Pa] = data_i[offset]; 123 124 // backward path (grants and prefix sum) 125 // grant if selected, ready and request asserted 126 4/4 assign gnt_o[offset] = req_i[offset] & sel_tree[Pa] & ready_i; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  | T1 T2 T3  127 // only update mask if there is a valid request 128 4/4 assign prio_mask_d[offset] = (|req_i) ? Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  | T1 T2 T3  129 mask_tree[Pa] | sel_tree[Pa] & ~ready_i : 130 prio_mask_q[offset]; 131 end else begin : gen_tie_off 132 // forward path 133 assign req_tree[Pa] = '0; 134 assign prio_tree[Pa] = '0; 135 assign idx_tree[Pa] = '0; 136 assign data_tree[Pa] = '0; 137 logic unused_sigs; 138 assign unused_sigs = ^{mask_tree[Pa], 139 sel_tree[Pa]}; 140 end 141 // this creates the node assignments 142 end else begin : gen_nodes 143 // local helper variable 144 logic sel; 145 146 // forward path (requests and data) 147 // each node looks at its two children, and selects the one with higher priority 148 3/3 assign sel = ~req_tree[C0] | ~prio_tree[C0] & prio_tree[C1]; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  149 // propagate requests 150 3/3 assign req_tree[Pa] = req_tree[C0] | req_tree[C1]; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  151 3/3 assign prio_tree[Pa] = prio_tree[C1] | prio_tree[C0]; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  152 // data and index muxes 153 // Note: these ternaries have triggered a synthesis bug in Vivado versions older 154 // than 2020.2. If the problem resurfaces again, have a look at issue #1408. 155 3/3 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0]; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  156 3/3 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0]; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  157 158 // backward path (grants and prefix sum) 159 // this propagates the selction index back and computes a hot one mask 160 3/3 assign sel_tree[C0] = sel_tree[Pa] & ~sel; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  161 3/3 assign sel_tree[C1] = sel_tree[Pa] & sel; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  162 // this performs a prefix sum for masking the input requests in the next cycle 163 1/1(2 unreachable) assign mask_tree[C0] = mask_tree[Pa]; Tests: T1 T2 T3  164 3/3 assign mask_tree[C1] = mask_tree[Pa] | sel_tree[C0]; Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3  165 end 166 end : gen_level 167 end : gen_tree 168 169 // the results can be found at the tree root 170 if (EnDataPort) begin : gen_data_port 171 assign data_o = data_tree[0]; 172 end else begin : gen_no_dataport 173 logic [DW-1:0] unused_data; 174 1/1 assign unused_data = data_tree[0]; Tests: T1 T2 T3  175 assign data_o = '1; 176 end 177 178 // This index is unused. 179 logic unused_prio_tree; 180 1/1 assign unused_prio_tree = prio_tree[0]; Tests: T1 T2 T3  181 182 1/1 assign idx_o = idx_tree[0]; Tests: T1 T2 T3  183 1/1 assign valid_o = req_tree[0]; Tests: T1 T2 T3  184 185 // the select tree computes a hot one signal that indicates which request is currently selected 186 assign sel_tree[0] = 1'b1; 187 // the mask tree is basically a prefix sum of the hot one select signal computed above 188 assign mask_tree[0] = 1'b0; 189 190 always_ff @(posedge clk_i or negedge rst_ni) begin : p_mask_reg 191 1/1 if (!rst_ni) begin Tests: T1 T2 T3  192 1/1 prio_mask_q <= '0; Tests: T1 T2 T3  193 end else begin 194 1/1 prio_mask_q <= prio_mask_d; Tests: T1 T2 T3 

Cond Coverage for Instance : tb.dut.u_eflash.gen_flash_cores[1].u_core.u_rd.u_valid_random
TotalCoveredPercent
Conditions13012797.69
Logical13012797.69
Non-Logical00
Event00

 LINE       118
 EXPRESSION (req_i[0] & gen_normal_case.prio_mask_q[0])
             ----1---   ---------------2--------------
-1--2-StatusTests
01CoveredT43,T73,T68
10CoveredT13,T9,T55
11CoveredT13,T9,T55

 LINE       118
 EXPRESSION (req_i[1] & gen_normal_case.prio_mask_q[1])
             ----1---   ---------------2--------------
-1--2-StatusTests
01CoveredT43,T73,T68
10CoveredT13,T9,T55
11CoveredT13,T9,T55

 LINE       118
 EXPRESSION (req_i[2] & gen_normal_case.prio_mask_q[2])
             ----1---   ---------------2--------------
-1--2-StatusTests
01CoveredT43,T73,T45
10CoveredT13,T9,T55
11CoveredT13,T9,T55

 LINE       118
 EXPRESSION (req_i[3] & gen_normal_case.prio_mask_q[3])
             ----1---   ---------------2--------------
-1--2-StatusTests
01CoveredT13,T9,T55
10CoveredT68,T89,T207
11CoveredT13,T9,T55

 LINE       126
 EXPRESSION (req_i[0] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[0].Pa] & ready_i)
             ----1---   ----------------------------------2----------------------------------   ---3---
-1--2--3-StatusTests
011Not Covered
101CoveredT13,T9,T55
110CoveredT13,T9,T55
111CoveredT13,T9,T55

 LINE       126
 EXPRESSION (req_i[1] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[1].Pa] & ready_i)
             ----1---   ----------------------------------2----------------------------------   ---3---
-1--2--3-StatusTests
011Not Covered
101CoveredT13,T9,T55
110CoveredT13,T9,T55
111CoveredT13,T9,T55

 LINE       126
 EXPRESSION (req_i[2] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[2].Pa] & ready_i)
             ----1---   ----------------------------------2----------------------------------   ---3---
-1--2--3-StatusTests
011Not Covered
101CoveredT13,T9,T55
110CoveredT13,T9,T55
111CoveredT13,T9,T55

 LINE       126
 EXPRESSION (req_i[3] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[3].Pa] & ready_i)
             ----1---   ----------------------------------2----------------------------------   ---3---
-1--2--3-StatusTests
011CoveredT13,T9,T55
101CoveredT13,T9,T55
110CoveredT13,T9,T55
111CoveredT13,T55,T23

 LINE       128
 EXPRESSION 
 Number  Term
      1  ((|req_i)) ? (gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[0].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[0].Pa] & ((~ready_i)))) : gen_normal_case.prio_mask_q[0])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT13,T9,T55

 LINE       128
 SUB-EXPRESSION 
 Number  Term
      1  gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[0].Pa] | 
      2  (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[0].Pa] & ((~ready_i))))
-1--2-StatusTests
00CoveredT13,T9,T55
01CoveredT13,T9,T55
10Unreachable

 LINE       128
 SUB-EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[0].Pa] & ((~ready_i)))
                 ----------------------------------1----------------------------------   ------2-----
-1--2-StatusTests
01CoveredT13,T9,T55
10CoveredT13,T9,T55
11CoveredT13,T9,T55

 LINE       128
 EXPRESSION 
 Number  Term
      1  ((|req_i)) ? (gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[1].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[1].Pa] & ((~ready_i)))) : gen_normal_case.prio_mask_q[1])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT13,T9,T55

 LINE       128
 SUB-EXPRESSION 
 Number  Term
      1  gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[1].Pa] | 
      2  (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[1].Pa] & ((~ready_i))))
-1--2-StatusTests
00CoveredT13,T9,T55
01CoveredT13,T9,T55
10CoveredT13,T9,T55

 LINE       128
 SUB-EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[1].Pa] & ((~ready_i)))
                 ----------------------------------1----------------------------------   ------2-----
-1--2-StatusTests
01CoveredT13,T9,T55
10CoveredT13,T9,T55
11CoveredT13,T9,T55

 LINE       128
 EXPRESSION 
 Number  Term
      1  ((|req_i)) ? (gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[2].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[2].Pa] & ((~ready_i)))) : gen_normal_case.prio_mask_q[2])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT13,T9,T55

 LINE       128
 SUB-EXPRESSION 
 Number  Term
      1  gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[2].Pa] | 
      2  (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[2].Pa] & ((~ready_i))))
-1--2-StatusTests
00CoveredT13,T9,T55
01CoveredT13,T9,T55
10CoveredT13,T9,T55

 LINE       128
 SUB-EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[2].Pa] & ((~ready_i)))
                 ----------------------------------1----------------------------------   ------2-----
-1--2-StatusTests
01CoveredT13,T9,T55
10CoveredT13,T9,T55
11CoveredT13,T9,T55

 LINE       128
 EXPRESSION 
 Number  Term
      1  ((|req_i)) ? (gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[3].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[3].Pa] & ((~ready_i)))) : gen_normal_case.prio_mask_q[3])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT13,T9,T55

 LINE       128
 SUB-EXPRESSION 
 Number  Term
      1  gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[3].Pa] | 
      2  (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[3].Pa] & ((~ready_i))))
-1--2-StatusTests
00CoveredT13,T55,T23
01CoveredT13,T9,T55
10CoveredT13,T9,T55

 LINE       128
 SUB-EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[3].Pa] & ((~ready_i)))
                 ----------------------------------1----------------------------------   ------2-----
-1--2-StatusTests
01CoveredT13,T9,T55
10CoveredT13,T55,T23
11CoveredT13,T9,T55

 LINE       148
 EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) | 
      2  (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1]))
-1--2-StatusTests
00CoveredT13,T9,T55
01CoveredT13,T9,T55
10CoveredT1,T2,T3

 LINE       148
 SUB-EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) & 
      2  gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1])
-1--2-StatusTests
01CoveredT13,T9,T55
10CoveredT1,T2,T3
11CoveredT13,T9,T55

 LINE       148
 EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.req_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])) | 
      2  (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C1]))
-1--2-StatusTests
00CoveredT13,T9,T55
01CoveredT13,T55,T23
10CoveredT1,T2,T3

 LINE       148
 SUB-EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])) & 
      2  gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C1])
-1--2-StatusTests
01CoveredT13,T9,T55
10CoveredT1,T2,T3
11CoveredT13,T9,T55

 LINE       148
 EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.req_tree[gen_normal_case.gen_tree[1].gen_level[1].C0])) | 
      2  (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[1].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[1].C1]))
-1--2-StatusTests
00CoveredT13,T9,T55
01CoveredT13,T9,T55
10CoveredT1,T2,T3

 LINE       148
 SUB-EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[1].C0])) & 
      2  gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[1].C1])
-1--2-StatusTests
01CoveredT13,T9,T55
10CoveredT1,T2,T3
11CoveredT13,T9,T55

 LINE       150
 EXPRESSION (gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C1])
             ----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT68,T39,T66
10CoveredT68,T39,T66

 LINE       150
 EXPRESSION (gen_normal_case.req_tree[gen_normal_case.gen_tree[1].gen_level[0].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[1].gen_level[0].C1])
             ----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT13,T9,T55
10CoveredT13,T9,T55

 LINE       150
 EXPRESSION (gen_normal_case.req_tree[gen_normal_case.gen_tree[1].gen_level[1].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[1].gen_level[1].C1])
             ----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT13,T9,T55
10CoveredT13,T9,T55

 LINE       151
 EXPRESSION (gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
             -----------------------------------1----------------------------------   -----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT68,T39,T66
10CoveredT13,T9,T55

 LINE       151
 EXPRESSION (gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])
             -----------------------------------1----------------------------------   -----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT68,T69,T39
10CoveredT13,T9,T55

 LINE       151
 EXPRESSION (gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[1].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[1].C0])
             -----------------------------------1----------------------------------   -----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT13,T9,T55
10CoveredT13,T9,T55

 LINE       155
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel ? gen_normal_case.idx_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] : gen_normal_case.idx_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
-1-StatusTests
0CoveredT13,T9,T55
1CoveredT1,T2,T3

 LINE       155
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[1].gen_level[0].gen_nodes.sel ? gen_normal_case.idx_tree[gen_normal_case.gen_tree[1].gen_level[0].C1] : gen_normal_case.idx_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])
-1-StatusTests
0CoveredT13,T9,T55
1CoveredT1,T2,T3

 LINE       155
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[1].gen_level[1].gen_nodes.sel ? gen_normal_case.idx_tree[gen_normal_case.gen_tree[1].gen_level[1].C1] : gen_normal_case.idx_tree[gen_normal_case.gen_tree[1].gen_level[1].C0])
-1-StatusTests
0CoveredT13,T9,T55
1CoveredT1,T2,T3

 LINE       156
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel ? gen_normal_case.data_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] : gen_normal_case.data_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
-1-StatusTests
0CoveredT13,T9,T55
1CoveredT1,T2,T3

 LINE       156
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[1].gen_level[0].gen_nodes.sel ? gen_normal_case.data_tree[gen_normal_case.gen_tree[1].gen_level[0].C1] : gen_normal_case.data_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])
-1-StatusTests
0CoveredT13,T9,T55
1CoveredT1,T2,T3

 LINE       156
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[1].gen_level[1].gen_nodes.sel ? gen_normal_case.data_tree[gen_normal_case.gen_tree[1].gen_level[1].C1] : gen_normal_case.data_tree[gen_normal_case.gen_tree[1].gen_level[1].C0])
-1-StatusTests
0CoveredT13,T9,T55
1CoveredT1,T2,T3

 LINE       160
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] & ((~gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel)))
             ----------------------------------1----------------------------------   -----------------------------2-----------------------------
-1--2-StatusTests
01Unreachable
10CoveredT1,T2,T3
11CoveredT13,T9,T55

 LINE       160
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ((~gen_normal_case.gen_tree[1].gen_level[0].gen_nodes.sel)))
             ----------------------------------1----------------------------------   -----------------------------2-----------------------------
-1--2-StatusTests
01CoveredT13,T9,T55
10CoveredT13,T9,T55
11CoveredT13,T9,T55

 LINE       160
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ((~gen_normal_case.gen_tree[1].gen_level[1].gen_nodes.sel)))
             ----------------------------------1----------------------------------   -----------------------------2-----------------------------
-1--2-StatusTests
01CoveredT13,T9,T55
10CoveredT1,T2,T3
11CoveredT13,T9,T55

 LINE       161
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] & gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel)
             ----------------------------------1----------------------------------   ---------------------------2--------------------------
-1--2-StatusTests
01Unreachable
10CoveredT13,T9,T55
11CoveredT1,T2,T3

 LINE       161
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & gen_normal_case.gen_tree[1].gen_level[0].gen_nodes.sel)
             ----------------------------------1----------------------------------   ---------------------------2--------------------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT13,T9,T55
11CoveredT13,T9,T55

 LINE       161
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & gen_normal_case.gen_tree[1].gen_level[1].gen_nodes.sel)
             ----------------------------------1----------------------------------   ---------------------------2--------------------------
-1--2-StatusTests
01CoveredT43,T68,T69
10CoveredT13,T9,T55
11CoveredT1,T2,T3

 LINE       164
 EXPRESSION (gen_normal_case.mask_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
             -----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT13,T9,T55
10Unreachable

 LINE       164
 EXPRESSION (gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])
             -----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT13,T9,T55
10Unreachable

 LINE       164
 EXPRESSION (gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].C0])
             -----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT13,T9,T55
10CoveredT13,T9,T55

Branch Coverage for Instance : tb.dut.u_eflash.gen_flash_cores[1].u_core.u_rd.u_valid_random
Line No.TotalCoveredPercent
Branches 22 22 100.00
TERNARY 155 2 2 100.00
TERNARY 156 2 2 100.00
TERNARY 155 2 2 100.00
TERNARY 156 2 2 100.00
TERNARY 155 2 2 100.00
TERNARY 156 2 2 100.00
TERNARY 128 2 2 100.00
TERNARY 128 2 2 100.00
TERNARY 128 2 2 100.00
TERNARY 128 2 2 100.00
IF 191 2 2 100.00


155 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0]; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T13,T9,T55


156 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0]; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T13,T9,T55


155 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0]; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T13,T9,T55


156 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0]; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T13,T9,T55


155 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0]; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T13,T9,T55


156 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0]; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T13,T9,T55


128 assign prio_mask_d[offset] = (|req_i) ? -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T13,T9,T55
0 Covered T1,T2,T3


128 assign prio_mask_d[offset] = (|req_i) ? -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T13,T9,T55
0 Covered T1,T2,T3


128 assign prio_mask_d[offset] = (|req_i) ? -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T13,T9,T55
0 Covered T1,T2,T3


128 assign prio_mask_d[offset] = (|req_i) ? -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T13,T9,T55
0 Covered T1,T2,T3


191 if (!rst_ni) begin -1- 192 prio_mask_q <= '0; ==> 193 end else begin 194 prio_mask_q <= prio_mask_d; ==>

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


Assert Coverage for Instance : tb.dut.u_eflash.gen_flash_cores[1].u_core.u_rd.u_valid_random
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 15 15 100.00 12 80.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 15 15 100.00 12 80.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
CheckHotOne_A 373795953 372949494 0 0
CheckNGreaterZero_A 1058 1058 0 0
GntImpliesReady_A 373795953 2356592 0 0
GntImpliesValid_A 373795953 2356592 0 0
GrantKnown_A 373795953 372949494 0 0
IdxKnown_A 373795953 372949494 0 0
IndexIsCorrect_A 373795953 2356592 0 0
LockArbDecision_A 373795953 0 0 0
NoReadyValidNoGrant_A 373795953 272975492 0 0
ReadyAndValidImplyGrant_A 373795953 2356592 0 0
ReqAndReadyImplyGrant_A 373795953 2356592 0 0
ReqImpliesValid_A 373795953 95357373 0 0
ReqStaysHighUntilGranted0_M 373795953 0 0 0
RoundRobin_A 373795953 0 0 1053
ValidKnown_A 373795953 372949494 0 0


CheckHotOne_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 372949494 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 34207 0 0
T17 1829 1746 0 0

CheckNGreaterZero_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1058 1058 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T7 1 1 0 0
T8 1 1 0 0
T11 1 1 0 0
T12 1 1 0 0
T13 1 1 0 0
T17 1 1 0 0

GntImpliesReady_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 2356592 0 0
T4 1433 0 0 0
T8 4369 0 0 0
T9 656 3 0 0
T13 34283 244 0 0
T15 844 0 0 0
T17 1829 0 0 0
T20 0 143 0 0
T22 1774 0 0 0
T23 7375 12 0 0
T24 1511 1 0 0
T37 0 144 0 0
T38 0 523 0 0
T43 0 32 0 0
T55 6654 21 0 0
T73 0 366 0 0

GntImpliesValid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 2356592 0 0
T4 1433 0 0 0
T8 4369 0 0 0
T9 656 3 0 0
T13 34283 244 0 0
T15 844 0 0 0
T17 1829 0 0 0
T20 0 143 0 0
T22 1774 0 0 0
T23 7375 12 0 0
T24 1511 1 0 0
T37 0 144 0 0
T38 0 523 0 0
T43 0 32 0 0
T55 6654 21 0 0
T73 0 366 0 0

GrantKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 372949494 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 34207 0 0
T17 1829 1746 0 0

IdxKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 372949494 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 34207 0 0
T17 1829 1746 0 0

IndexIsCorrect_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 2356592 0 0
T4 1433 0 0 0
T8 4369 0 0 0
T9 656 3 0 0
T13 34283 244 0 0
T15 844 0 0 0
T17 1829 0 0 0
T20 0 143 0 0
T22 1774 0 0 0
T23 7375 12 0 0
T24 1511 1 0 0
T37 0 144 0 0
T38 0 523 0 0
T43 0 32 0 0
T55 6654 21 0 0
T73 0 366 0 0

LockArbDecision_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 0 0 0

NoReadyValidNoGrant_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 272975492 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 658 0 0
T17 1829 1746 0 0

ReadyAndValidImplyGrant_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 2356592 0 0
T4 1433 0 0 0
T8 4369 0 0 0
T9 656 3 0 0
T13 34283 244 0 0
T15 844 0 0 0
T17 1829 0 0 0
T20 0 143 0 0
T22 1774 0 0 0
T23 7375 12 0 0
T24 1511 1 0 0
T37 0 144 0 0
T38 0 523 0 0
T43 0 32 0 0
T55 6654 21 0 0
T73 0 366 0 0

ReqAndReadyImplyGrant_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 2356592 0 0
T4 1433 0 0 0
T8 4369 0 0 0
T9 656 3 0 0
T13 34283 244 0 0
T15 844 0 0 0
T17 1829 0 0 0
T20 0 143 0 0
T22 1774 0 0 0
T23 7375 12 0 0
T24 1511 1 0 0
T37 0 144 0 0
T38 0 523 0 0
T43 0 32 0 0
T55 6654 21 0 0
T73 0 366 0 0

ReqImpliesValid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 95357373 0 0
T4 1433 0 0 0
T8 4369 0 0 0
T9 656 68 0 0
T13 34283 33545 0 0
T14 0 624 0 0
T15 844 0 0 0
T17 1829 0 0 0
T20 0 34930 0 0
T22 1774 635 0 0
T23 7375 4654 0 0
T24 1511 202 0 0
T37 0 13857 0 0
T43 0 12258 0 0
T55 6654 345 0 0

ReqStaysHighUntilGranted0_M
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 0 0 0

RoundRobin_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 0 0 1053

ValidKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 372949494 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 34207 0 0
T17 1829 1746 0 0

Line Coverage for Instance : tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_op.gen_input_bufs[0].gen_rr_arbiter.u_arb
Line No.TotalCoveredPercent
TOTAL2525100.00
CONT_ASSIGN6200
CONT_ASSIGN11211100.00
CONT_ASSIGN11211100.00
CONT_ASSIGN11811100.00
CONT_ASSIGN11811100.00
CONT_ASSIGN12211100.00
CONT_ASSIGN12211100.00
CONT_ASSIGN12611100.00
CONT_ASSIGN12611100.00
CONT_ASSIGN12811100.00
CONT_ASSIGN12811100.00
CONT_ASSIGN14811100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15111100.00
CONT_ASSIGN15511100.00
CONT_ASSIGN15611100.00
CONT_ASSIGN16011100.00
CONT_ASSIGN16111100.00
CONT_ASSIGN16300
CONT_ASSIGN16411100.00
CONT_ASSIGN17111100.00
CONT_ASSIGN18011100.00
CONT_ASSIGN18211100.00
CONT_ASSIGN18311100.00
ALWAYS19133100.00

61 logic unused_req_chk; 62 unreachable assign unused_req_chk = req_chk_i; 63 64 `ASSERT_INIT(CheckNGreaterZero_A, N > 0) 65 66 // this case is basically just a bypass 67 if (N == 1) begin : gen_degenerate_case 68 69 assign valid_o = req_i[0]; 70 assign data_o = data_i[0]; 71 assign gnt_o[0] = valid_o & ready_i; 72 assign idx_o = '0; 73 74 end else begin : gen_normal_case 75 76 // align to powers of 2 for simplicity 77 // a full binary tree with N levels has 2**N + 2**N-1 nodes 78 logic [2**(IdxW+1)-2:0] req_tree; 79 logic [2**(IdxW+1)-2:0] prio_tree; 80 logic [2**(IdxW+1)-2:0] sel_tree; 81 logic [2**(IdxW+1)-2:0] mask_tree; 82 logic [2**(IdxW+1)-2:0][IdxW-1:0] idx_tree; 83 logic [2**(IdxW+1)-2:0][DW-1:0] data_tree; 84 logic [N-1:0] prio_mask_d, prio_mask_q; 85 86 for (genvar level = 0; level < IdxW+1; level++) begin : gen_tree 87 // 88 // level+1 C0 C1 <- "Base1" points to the first node on "level+1", 89 // \ / these nodes are the children of the nodes one level below 90 // level Pa <- "Base0", points to the first node on "level", 91 // these nodes are the parents of the nodes one level above 92 // 93 // hence we have the following indices for the Pa, C0, C1 nodes: 94 // Pa = 2**level - 1 + offset = Base0 + offset 95 // C0 = 2**(level+1) - 1 + 2*offset = Base1 + 2*offset 96 // C1 = 2**(level+1) - 1 + 2*offset + 1 = Base1 + 2*offset + 1 97 // 98 localparam int Base0 = (2**level)-1; 99 localparam int Base1 = (2**(level+1))-1; 100 101 for (genvar offset = 0; offset < 2**level; offset++) begin : gen_level 102 localparam int Pa = Base0 + offset; 103 localparam int C0 = Base1 + 2*offset; 104 localparam int C1 = Base1 + 2*offset + 1; 105 106 // this assigns the gated interrupt source signals, their 107 // corresponding IDs and priorities to the tree leafs 108 if (level == IdxW) begin : gen_leafs 109 if (offset < N) begin : gen_assign 110 // forward path (requests and data) 111 // all requests inputs are assigned to the request tree 112 2/2 assign req_tree[Pa] = req_i[offset]; Tests: T1 T2 T3  | T1 T2 T3  113 // we basically split the incoming request vector into two halves with the following 114 // priority assignment. the prio_mask_q register contains a prefix sum that has been 115 // computed using the last winning index, and hence masks out all requests at offsets 116 // lower or equal the previously granted index. hence, all higher indices are considered 117 // first in the arbitration tree nodes below, before considering the lower indices. 118 2/2 assign prio_tree[Pa] = req_i[offset] & prio_mask_q[offset]; Tests: T1 T2 T3  | T1 T2 T3  119 // input for the index muxes (used to compute the winner index) 120 assign idx_tree[Pa] = offset; 121 // input for the data muxes 122 2/2 assign data_tree[Pa] = data_i[offset]; Tests: T1 T2 T3  | T1 T2 T3  123 124 // backward path (grants and prefix sum) 125 // grant if selected, ready and request asserted 126 2/2 assign gnt_o[offset] = req_i[offset] & sel_tree[Pa] & ready_i; Tests: T1 T2 T3  | T1 T2 T3  127 // only update mask if there is a valid request 128 2/2 assign prio_mask_d[offset] = (|req_i) ? Tests: T1 T2 T3  | T1 T2 T3  129 mask_tree[Pa] | sel_tree[Pa] & ~ready_i : 130 prio_mask_q[offset]; 131 end else begin : gen_tie_off 132 // forward path 133 assign req_tree[Pa] = '0; 134 assign prio_tree[Pa] = '0; 135 assign idx_tree[Pa] = '0; 136 assign data_tree[Pa] = '0; 137 logic unused_sigs; 138 assign unused_sigs = ^{mask_tree[Pa], 139 sel_tree[Pa]}; 140 end 141 // this creates the node assignments 142 end else begin : gen_nodes 143 // local helper variable 144 logic sel; 145 146 // forward path (requests and data) 147 // each node looks at its two children, and selects the one with higher priority 148 1/1 assign sel = ~req_tree[C0] | ~prio_tree[C0] & prio_tree[C1]; Tests: T1 T2 T3  149 // propagate requests 150 1/1 assign req_tree[Pa] = req_tree[C0] | req_tree[C1]; Tests: T1 T2 T3  151 1/1 assign prio_tree[Pa] = prio_tree[C1] | prio_tree[C0]; Tests: T1 T2 T3  152 // data and index muxes 153 // Note: these ternaries have triggered a synthesis bug in Vivado versions older 154 // than 2020.2. If the problem resurfaces again, have a look at issue #1408. 155 1/1 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0]; Tests: T1 T2 T3  156 1/1 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0]; Tests: T1 T2 T3  157 158 // backward path (grants and prefix sum) 159 // this propagates the selction index back and computes a hot one mask 160 1/1 assign sel_tree[C0] = sel_tree[Pa] & ~sel; Tests: T1 T2 T3  161 1/1 assign sel_tree[C1] = sel_tree[Pa] & sel; Tests: T1 T2 T3  162 // this performs a prefix sum for masking the input requests in the next cycle 163 unreachable assign mask_tree[C0] = mask_tree[Pa]; 164 1/1 assign mask_tree[C1] = mask_tree[Pa] | sel_tree[C0]; Tests: T1 T2 T3  165 end 166 end : gen_level 167 end : gen_tree 168 169 // the results can be found at the tree root 170 if (EnDataPort) begin : gen_data_port 171 1/1 assign data_o = data_tree[0]; Tests: T1 T2 T3  172 end else begin : gen_no_dataport 173 logic [DW-1:0] unused_data; 174 assign unused_data = data_tree[0]; 175 assign data_o = '1; 176 end 177 178 // This index is unused. 179 logic unused_prio_tree; 180 1/1 assign unused_prio_tree = prio_tree[0]; Tests: T1 T2 T3  181 182 1/1 assign idx_o = idx_tree[0]; Tests: T1 T2 T3  183 1/1 assign valid_o = req_tree[0]; Tests: T1 T2 T3  184 185 // the select tree computes a hot one signal that indicates which request is currently selected 186 assign sel_tree[0] = 1'b1; 187 // the mask tree is basically a prefix sum of the hot one select signal computed above 188 assign mask_tree[0] = 1'b0; 189 190 always_ff @(posedge clk_i or negedge rst_ni) begin : p_mask_reg 191 1/1 if (!rst_ni) begin Tests: T1 T2 T3  192 1/1 prio_mask_q <= '0; Tests: T1 T2 T3  193 end else begin 194 1/1 prio_mask_q <= prio_mask_d; Tests: T1 T2 T3 

Cond Coverage for Instance : tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_op.gen_input_bufs[0].gen_rr_arbiter.u_arb
TotalCoveredPercent
Conditions514588.24
Logical514588.24
Non-Logical00
Event00

 LINE       118
 EXPRESSION (req_i[0] & gen_normal_case.prio_mask_q[0])
             ----1---   ---------------2--------------
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       118
 EXPRESSION (req_i[1] & gen_normal_case.prio_mask_q[1])
             ----1---   ---------------2--------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT55,T22,T23
11CoveredT55,T22,T23

 LINE       126
 EXPRESSION (req_i[0] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ready_i)
             ----1---   ----------------------------------2----------------------------------   ---3---
-1--2--3-StatusTests
011Not Covered
101Not Covered
110CoveredT1,T2,T3
111CoveredT1,T2,T3

 LINE       126
 EXPRESSION (req_i[1] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ready_i)
             ----1---   ----------------------------------2----------------------------------   ---3---
-1--2--3-StatusTests
011CoveredT86,T87
101Not Covered
110CoveredT55,T22,T23
111CoveredT55,T22,T23

 LINE       128
 EXPRESSION 
 Number  Term
      1  ((|req_i)) ? (gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ((~ready_i)))) : gen_normal_case.prio_mask_q[0])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       128
 SUB-EXPRESSION 
 Number  Term
      1  gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] | 
      2  (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ((~ready_i))))
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T2,T3
10Unreachable

 LINE       128
 SUB-EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ((~ready_i)))
                 ----------------------------------1----------------------------------   ------2-----
-1--2-StatusTests
01CoveredT55,T22,T23
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       128
 EXPRESSION 
 Number  Term
      1  ((|req_i)) ? (gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ((~ready_i)))) : gen_normal_case.prio_mask_q[1])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       128
 SUB-EXPRESSION 
 Number  Term
      1  gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] | 
      2  (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ((~ready_i))))
-1--2-StatusTests
00CoveredT55,T22,T23
01CoveredT55,T22,T23
10CoveredT1,T2,T3

 LINE       128
 SUB-EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ((~ready_i)))
                 ----------------------------------1----------------------------------   ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT55,T22,T23
11CoveredT55,T22,T23

 LINE       148
 EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) | 
      2  (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1]))
-1--2-StatusTests
00CoveredT1,T2,T3
01Not Covered
10CoveredT1,T2,T3

 LINE       148
 SUB-EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) & 
      2  gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1])
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT55,T22,T23

 LINE       150
 EXPRESSION (gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C1])
             ----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT55,T22,T23
10CoveredT1,T2,T3

 LINE       151
 EXPRESSION (gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
             -----------------------------------1----------------------------------   -----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T2,T3
10CoveredT55,T22,T23

 LINE       155
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel ? gen_normal_case.idx_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] : gen_normal_case.idx_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       156
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel ? gen_normal_case.data_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] : gen_normal_case.data_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       160
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] & ((~gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel)))
             ----------------------------------1----------------------------------   -----------------------------2-----------------------------
-1--2-StatusTests
01Unreachable
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       161
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] & gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel)
             ----------------------------------1----------------------------------   ---------------------------2--------------------------
-1--2-StatusTests
01Unreachable
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       164
 EXPRESSION (gen_normal_case.mask_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
             -----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T2,T3
10Unreachable

Branch Coverage for Instance : tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_op.gen_input_bufs[0].gen_rr_arbiter.u_arb
Line No.TotalCoveredPercent
Branches 10 10 100.00
TERNARY 155 2 2 100.00
TERNARY 156 2 2 100.00
TERNARY 128 2 2 100.00
TERNARY 128 2 2 100.00
IF 191 2 2 100.00


155 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0]; -1- ==> ==>

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


156 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0]; -1- ==> ==>

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


128 assign prio_mask_d[offset] = (|req_i) ? -1- ==> ==>

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


128 assign prio_mask_d[offset] = (|req_i) ? -1- ==> ==>

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


191 if (!rst_ni) begin -1- 192 prio_mask_q <= '0; ==> 193 end else begin 194 prio_mask_q <= prio_mask_d; ==>

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


Assert Coverage for Instance : tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_op.gen_input_bufs[0].gen_rr_arbiter.u_arb
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 16 16 100.00 15 93.75
Cover properties 0 0 0
Cover sequences 0 0 0
Total 16 16 100.00 15 93.75




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
CheckHotOne_A 373795953 372949494 0 0
CheckNGreaterZero_A 1058 1058 0 0
GntImpliesReady_A 373795953 15761289 0 0
GntImpliesValid_A 373795953 15761289 0 0
GrantKnown_A 373795953 372949494 0 0
IdxKnown_A 373795953 372949494 0 0
IndexIsCorrect_A 373795953 15761289 0 0
LockArbDecision_A 373795798 15761289 0 0
NoReadyValidNoGrant_A 373795953 341426831 0 0
ReadyAndValidImplyGrant_A 373795953 15761289 0 0
ReqAndReadyImplyGrant_A 373795953 15761289 0 0
ReqImpliesValid_A 373795953 31522588 0 0
ReqStaysHighUntilGranted0_M 373697989 15761221 0 0
RoundRobin_A 373795953 0 0 1053
ValidKnown_A 373795953 372949494 0 0
gen_data_port_assertion.DataFlow_A 373795953 15761289 0 0


CheckHotOne_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 372949494 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 34207 0 0
T17 1829 1746 0 0

CheckNGreaterZero_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1058 1058 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T7 1 1 0 0
T8 1 1 0 0
T11 1 1 0 0
T12 1 1 0 0
T13 1 1 0 0
T17 1 1 0 0

GntImpliesReady_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 15761289 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 64 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

GntImpliesValid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 15761289 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 64 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

GrantKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 372949494 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 34207 0 0
T17 1829 1746 0 0

IdxKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 372949494 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 34207 0 0
T17 1829 1746 0 0

IndexIsCorrect_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 15761289 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 64 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

LockArbDecision_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795798 15761289 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 64 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

NoReadyValidNoGrant_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 341426831 0 0
T1 2320 2203 0 0
T2 3525 3393 0 0
T3 1219 1092 0 0
T4 1433 1281 0 0
T7 1352 1187 0 0
T8 4369 3505 0 0
T11 2053 1767 0 0
T12 2602 2464 0 0
T13 34283 34143 0 0
T17 1829 1536 0 0

ReadyAndValidImplyGrant_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 15761289 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 64 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

ReqAndReadyImplyGrant_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 15761289 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 64 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

ReqImpliesValid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 31522588 0 0
T1 2320 64 0 0
T2 3525 64 0 0
T3 1219 64 0 0
T4 1433 64 0 0
T7 1352 72 0 0
T8 4369 398 0 0
T11 2053 128 0 0
T12 2602 64 0 0
T13 34283 64 0 0
T17 1829 210 0 0

ReqStaysHighUntilGranted0_M
NameAttemptsReal SuccessesFailuresIncomplete
Total 373697989 15761221 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 64 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

RoundRobin_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 0 0 1053

ValidKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 372949494 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 34207 0 0
T17 1829 1746 0 0

gen_data_port_assertion.DataFlow_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 15761289 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 64 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

Line Coverage for Instance : tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_op.gen_input_bufs[1].gen_rr_arbiter.u_arb
Line No.TotalCoveredPercent
TOTAL2525100.00
CONT_ASSIGN6200
CONT_ASSIGN11211100.00
CONT_ASSIGN11211100.00
CONT_ASSIGN11811100.00
CONT_ASSIGN11811100.00
CONT_ASSIGN12211100.00
CONT_ASSIGN12211100.00
CONT_ASSIGN12611100.00
CONT_ASSIGN12611100.00
CONT_ASSIGN12811100.00
CONT_ASSIGN12811100.00
CONT_ASSIGN14811100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15111100.00
CONT_ASSIGN15511100.00
CONT_ASSIGN15611100.00
CONT_ASSIGN16011100.00
CONT_ASSIGN16111100.00
CONT_ASSIGN16300
CONT_ASSIGN16411100.00
CONT_ASSIGN17111100.00
CONT_ASSIGN18011100.00
CONT_ASSIGN18211100.00
CONT_ASSIGN18311100.00
ALWAYS19133100.00

61 logic unused_req_chk; 62 unreachable assign unused_req_chk = req_chk_i; 63 64 `ASSERT_INIT(CheckNGreaterZero_A, N > 0) 65 66 // this case is basically just a bypass 67 if (N == 1) begin : gen_degenerate_case 68 69 assign valid_o = req_i[0]; 70 assign data_o = data_i[0]; 71 assign gnt_o[0] = valid_o & ready_i; 72 assign idx_o = '0; 73 74 end else begin : gen_normal_case 75 76 // align to powers of 2 for simplicity 77 // a full binary tree with N levels has 2**N + 2**N-1 nodes 78 logic [2**(IdxW+1)-2:0] req_tree; 79 logic [2**(IdxW+1)-2:0] prio_tree; 80 logic [2**(IdxW+1)-2:0] sel_tree; 81 logic [2**(IdxW+1)-2:0] mask_tree; 82 logic [2**(IdxW+1)-2:0][IdxW-1:0] idx_tree; 83 logic [2**(IdxW+1)-2:0][DW-1:0] data_tree; 84 logic [N-1:0] prio_mask_d, prio_mask_q; 85 86 for (genvar level = 0; level < IdxW+1; level++) begin : gen_tree 87 // 88 // level+1 C0 C1 <- "Base1" points to the first node on "level+1", 89 // \ / these nodes are the children of the nodes one level below 90 // level Pa <- "Base0", points to the first node on "level", 91 // these nodes are the parents of the nodes one level above 92 // 93 // hence we have the following indices for the Pa, C0, C1 nodes: 94 // Pa = 2**level - 1 + offset = Base0 + offset 95 // C0 = 2**(level+1) - 1 + 2*offset = Base1 + 2*offset 96 // C1 = 2**(level+1) - 1 + 2*offset + 1 = Base1 + 2*offset + 1 97 // 98 localparam int Base0 = (2**level)-1; 99 localparam int Base1 = (2**(level+1))-1; 100 101 for (genvar offset = 0; offset < 2**level; offset++) begin : gen_level 102 localparam int Pa = Base0 + offset; 103 localparam int C0 = Base1 + 2*offset; 104 localparam int C1 = Base1 + 2*offset + 1; 105 106 // this assigns the gated interrupt source signals, their 107 // corresponding IDs and priorities to the tree leafs 108 if (level == IdxW) begin : gen_leafs 109 if (offset < N) begin : gen_assign 110 // forward path (requests and data) 111 // all requests inputs are assigned to the request tree 112 2/2 assign req_tree[Pa] = req_i[offset]; Tests: T1 T2 T3  | T1 T2 T3  113 // we basically split the incoming request vector into two halves with the following 114 // priority assignment. the prio_mask_q register contains a prefix sum that has been 115 // computed using the last winning index, and hence masks out all requests at offsets 116 // lower or equal the previously granted index. hence, all higher indices are considered 117 // first in the arbitration tree nodes below, before considering the lower indices. 118 2/2 assign prio_tree[Pa] = req_i[offset] & prio_mask_q[offset]; Tests: T1 T2 T3  | T1 T2 T3  119 // input for the index muxes (used to compute the winner index) 120 assign idx_tree[Pa] = offset; 121 // input for the data muxes 122 2/2 assign data_tree[Pa] = data_i[offset]; Tests: T1 T2 T3  | T1 T2 T3  123 124 // backward path (grants and prefix sum) 125 // grant if selected, ready and request asserted 126 2/2 assign gnt_o[offset] = req_i[offset] & sel_tree[Pa] & ready_i; Tests: T1 T2 T3  | T1 T2 T3  127 // only update mask if there is a valid request 128 2/2 assign prio_mask_d[offset] = (|req_i) ? Tests: T1 T2 T3  | T1 T2 T3  129 mask_tree[Pa] | sel_tree[Pa] & ~ready_i : 130 prio_mask_q[offset]; 131 end else begin : gen_tie_off 132 // forward path 133 assign req_tree[Pa] = '0; 134 assign prio_tree[Pa] = '0; 135 assign idx_tree[Pa] = '0; 136 assign data_tree[Pa] = '0; 137 logic unused_sigs; 138 assign unused_sigs = ^{mask_tree[Pa], 139 sel_tree[Pa]}; 140 end 141 // this creates the node assignments 142 end else begin : gen_nodes 143 // local helper variable 144 logic sel; 145 146 // forward path (requests and data) 147 // each node looks at its two children, and selects the one with higher priority 148 1/1 assign sel = ~req_tree[C0] | ~prio_tree[C0] & prio_tree[C1]; Tests: T1 T2 T3  149 // propagate requests 150 1/1 assign req_tree[Pa] = req_tree[C0] | req_tree[C1]; Tests: T1 T2 T3  151 1/1 assign prio_tree[Pa] = prio_tree[C1] | prio_tree[C0]; Tests: T1 T2 T3  152 // data and index muxes 153 // Note: these ternaries have triggered a synthesis bug in Vivado versions older 154 // than 2020.2. If the problem resurfaces again, have a look at issue #1408. 155 1/1 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0]; Tests: T1 T2 T3  156 1/1 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0]; Tests: T1 T2 T3  157 158 // backward path (grants and prefix sum) 159 // this propagates the selction index back and computes a hot one mask 160 1/1 assign sel_tree[C0] = sel_tree[Pa] & ~sel; Tests: T1 T2 T3  161 1/1 assign sel_tree[C1] = sel_tree[Pa] & sel; Tests: T1 T2 T3  162 // this performs a prefix sum for masking the input requests in the next cycle 163 unreachable assign mask_tree[C0] = mask_tree[Pa]; 164 1/1 assign mask_tree[C1] = mask_tree[Pa] | sel_tree[C0]; Tests: T1 T2 T3  165 end 166 end : gen_level 167 end : gen_tree 168 169 // the results can be found at the tree root 170 if (EnDataPort) begin : gen_data_port 171 1/1 assign data_o = data_tree[0]; Tests: T1 T2 T3  172 end else begin : gen_no_dataport 173 logic [DW-1:0] unused_data; 174 assign unused_data = data_tree[0]; 175 assign data_o = '1; 176 end 177 178 // This index is unused. 179 logic unused_prio_tree; 180 1/1 assign unused_prio_tree = prio_tree[0]; Tests: T1 T2 T3  181 182 1/1 assign idx_o = idx_tree[0]; Tests: T1 T2 T3  183 1/1 assign valid_o = req_tree[0]; Tests: T1 T2 T3  184 185 // the select tree computes a hot one signal that indicates which request is currently selected 186 assign sel_tree[0] = 1'b1; 187 // the mask tree is basically a prefix sum of the hot one select signal computed above 188 assign mask_tree[0] = 1'b0; 189 190 always_ff @(posedge clk_i or negedge rst_ni) begin : p_mask_reg 191 1/1 if (!rst_ni) begin Tests: T1 T2 T3  192 1/1 prio_mask_q <= '0; Tests: T1 T2 T3  193 end else begin 194 1/1 prio_mask_q <= prio_mask_d; Tests: T1 T2 T3 

Cond Coverage for Instance : tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_op.gen_input_bufs[1].gen_rr_arbiter.u_arb
TotalCoveredPercent
Conditions514996.08
Logical514996.08
Non-Logical00
Event00

 LINE       118
 EXPRESSION (req_i[0] & gen_normal_case.prio_mask_q[0])
             ----1---   ---------------2--------------
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       118
 EXPRESSION (req_i[1] & gen_normal_case.prio_mask_q[1])
             ----1---   ---------------2--------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT55,T22,T23
11CoveredT55,T22,T23

 LINE       126
 EXPRESSION (req_i[0] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ready_i)
             ----1---   ----------------------------------2----------------------------------   ---3---
-1--2--3-StatusTests
011Not Covered
101CoveredT86,T87
110CoveredT1,T2,T3
111CoveredT1,T2,T3

 LINE       126
 EXPRESSION (req_i[1] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ready_i)
             ----1---   ----------------------------------2----------------------------------   ---3---
-1--2--3-StatusTests
011CoveredT86
101CoveredT86,T87
110CoveredT55,T22,T23
111CoveredT55,T22,T23

 LINE       128
 EXPRESSION 
 Number  Term
      1  ((|req_i)) ? (gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ((~ready_i)))) : gen_normal_case.prio_mask_q[0])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       128
 SUB-EXPRESSION 
 Number  Term
      1  gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] | 
      2  (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ((~ready_i))))
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T2,T3
10Unreachable

 LINE       128
 SUB-EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ((~ready_i)))
                 ----------------------------------1----------------------------------   ------2-----
-1--2-StatusTests
01CoveredT55,T22,T23
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       128
 EXPRESSION 
 Number  Term
      1  ((|req_i)) ? (gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ((~ready_i)))) : gen_normal_case.prio_mask_q[1])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       128
 SUB-EXPRESSION 
 Number  Term
      1  gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] | 
      2  (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ((~ready_i))))
-1--2-StatusTests
00CoveredT55,T22,T23
01CoveredT55,T22,T23
10CoveredT1,T2,T3

 LINE       128
 SUB-EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ((~ready_i)))
                 ----------------------------------1----------------------------------   ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT55,T22,T23
11CoveredT55,T22,T23

 LINE       148
 EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) | 
      2  (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1]))
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT86,T87
10CoveredT1,T2,T3

 LINE       148
 SUB-EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) & 
      2  gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1])
-1--2-StatusTests
01CoveredT86,T87
10CoveredT1,T2,T3
11CoveredT55,T22,T23

 LINE       150
 EXPRESSION (gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C1])
             ----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT55,T22,T23
10CoveredT1,T2,T3

 LINE       151
 EXPRESSION (gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
             -----------------------------------1----------------------------------   -----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T2,T3
10CoveredT55,T22,T23

 LINE       155
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel ? gen_normal_case.idx_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] : gen_normal_case.idx_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       156
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel ? gen_normal_case.data_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] : gen_normal_case.data_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       160
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] & ((~gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel)))
             ----------------------------------1----------------------------------   -----------------------------2-----------------------------
-1--2-StatusTests
01Unreachable
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       161
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] & gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel)
             ----------------------------------1----------------------------------   ---------------------------2--------------------------
-1--2-StatusTests
01Unreachable
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       164
 EXPRESSION (gen_normal_case.mask_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
             -----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T2,T3
10Unreachable

Branch Coverage for Instance : tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_op.gen_input_bufs[1].gen_rr_arbiter.u_arb
Line No.TotalCoveredPercent
Branches 10 10 100.00
TERNARY 155 2 2 100.00
TERNARY 156 2 2 100.00
TERNARY 128 2 2 100.00
TERNARY 128 2 2 100.00
IF 191 2 2 100.00


155 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0]; -1- ==> ==>

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


156 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0]; -1- ==> ==>

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


128 assign prio_mask_d[offset] = (|req_i) ? -1- ==> ==>

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


128 assign prio_mask_d[offset] = (|req_i) ? -1- ==> ==>

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


191 if (!rst_ni) begin -1- 192 prio_mask_q <= '0; ==> 193 end else begin 194 prio_mask_q <= prio_mask_d; ==>

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


Assert Coverage for Instance : tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_op.gen_input_bufs[1].gen_rr_arbiter.u_arb
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 16 16 100.00 15 93.75
Cover properties 0 0 0
Cover sequences 0 0 0
Total 16 16 100.00 15 93.75




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
CheckHotOne_A 373795953 372949494 0 0
CheckNGreaterZero_A 1058 1058 0 0
GntImpliesReady_A 373795953 15761363 0 0
GntImpliesValid_A 373795953 15761363 0 0
GrantKnown_A 373795953 372949494 0 0
IdxKnown_A 373795953 372949494 0 0
IndexIsCorrect_A 373795953 15761363 0 0
LockArbDecision_A 373795798 15761289 0 0
NoReadyValidNoGrant_A 373795953 341426756 0 0
ReadyAndValidImplyGrant_A 373795953 15761363 0 0
ReqAndReadyImplyGrant_A 373795953 15761363 0 0
ReqImpliesValid_A 373795953 31522737 0 0
ReqStaysHighUntilGranted0_M 373697989 15761221 0 0
RoundRobin_A 373795953 0 0 1053
ValidKnown_A 373795953 372949494 0 0
gen_data_port_assertion.DataFlow_A 373795953 15761363 0 0


CheckHotOne_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 372949494 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 34207 0 0
T17 1829 1746 0 0

CheckNGreaterZero_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1058 1058 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T7 1 1 0 0
T8 1 1 0 0
T11 1 1 0 0
T12 1 1 0 0
T13 1 1 0 0
T17 1 1 0 0

GntImpliesReady_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 15761363 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 64 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

GntImpliesValid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 15761363 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 64 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

GrantKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 372949494 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 34207 0 0
T17 1829 1746 0 0

IdxKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 372949494 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 34207 0 0
T17 1829 1746 0 0

IndexIsCorrect_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 15761363 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 64 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

LockArbDecision_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795798 15761289 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 64 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

NoReadyValidNoGrant_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 341426756 0 0
T1 2320 2203 0 0
T2 3525 3393 0 0
T3 1219 1092 0 0
T4 1433 1281 0 0
T7 1352 1187 0 0
T8 4369 3505 0 0
T11 2053 1767 0 0
T12 2602 2464 0 0
T13 34283 34143 0 0
T17 1829 1536 0 0

ReadyAndValidImplyGrant_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 15761363 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 64 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

ReqAndReadyImplyGrant_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 15761363 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 64 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

ReqImpliesValid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 31522737 0 0
T1 2320 64 0 0
T2 3525 64 0 0
T3 1219 64 0 0
T4 1433 64 0 0
T7 1352 72 0 0
T8 4369 398 0 0
T11 2053 128 0 0
T12 2602 64 0 0
T13 34283 64 0 0
T17 1829 210 0 0

ReqStaysHighUntilGranted0_M
NameAttemptsReal SuccessesFailuresIncomplete
Total 373697989 15761221 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 64 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

RoundRobin_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 0 0 1053

ValidKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 372949494 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 34207 0 0
T17 1829 1746 0 0

gen_data_port_assertion.DataFlow_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 15761363 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 64 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

Line Coverage for Instance : tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_calc.gen_input_bufs[0].gen_rr_arbiter.u_arb
Line No.TotalCoveredPercent
TOTAL2323100.00
CONT_ASSIGN6200
CONT_ASSIGN11211100.00
CONT_ASSIGN11211100.00
CONT_ASSIGN11811100.00
CONT_ASSIGN11811100.00
CONT_ASSIGN12211100.00
CONT_ASSIGN12211100.00
CONT_ASSIGN12600
CONT_ASSIGN12600
CONT_ASSIGN12811100.00
CONT_ASSIGN12811100.00
CONT_ASSIGN14811100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15111100.00
CONT_ASSIGN15511100.00
CONT_ASSIGN15611100.00
CONT_ASSIGN16011100.00
CONT_ASSIGN16111100.00
CONT_ASSIGN16300
CONT_ASSIGN16411100.00
CONT_ASSIGN17111100.00
CONT_ASSIGN18011100.00
CONT_ASSIGN18211100.00
CONT_ASSIGN18311100.00
ALWAYS19133100.00

61 logic unused_req_chk; 62 unreachable assign unused_req_chk = req_chk_i; 63 64 `ASSERT_INIT(CheckNGreaterZero_A, N > 0) 65 66 // this case is basically just a bypass 67 if (N == 1) begin : gen_degenerate_case 68 69 assign valid_o = req_i[0]; 70 assign data_o = data_i[0]; 71 assign gnt_o[0] = valid_o & ready_i; 72 assign idx_o = '0; 73 74 end else begin : gen_normal_case 75 76 // align to powers of 2 for simplicity 77 // a full binary tree with N levels has 2**N + 2**N-1 nodes 78 logic [2**(IdxW+1)-2:0] req_tree; 79 logic [2**(IdxW+1)-2:0] prio_tree; 80 logic [2**(IdxW+1)-2:0] sel_tree; 81 logic [2**(IdxW+1)-2:0] mask_tree; 82 logic [2**(IdxW+1)-2:0][IdxW-1:0] idx_tree; 83 logic [2**(IdxW+1)-2:0][DW-1:0] data_tree; 84 logic [N-1:0] prio_mask_d, prio_mask_q; 85 86 for (genvar level = 0; level < IdxW+1; level++) begin : gen_tree 87 // 88 // level+1 C0 C1 <- "Base1" points to the first node on "level+1", 89 // \ / these nodes are the children of the nodes one level below 90 // level Pa <- "Base0", points to the first node on "level", 91 // these nodes are the parents of the nodes one level above 92 // 93 // hence we have the following indices for the Pa, C0, C1 nodes: 94 // Pa = 2**level - 1 + offset = Base0 + offset 95 // C0 = 2**(level+1) - 1 + 2*offset = Base1 + 2*offset 96 // C1 = 2**(level+1) - 1 + 2*offset + 1 = Base1 + 2*offset + 1 97 // 98 localparam int Base0 = (2**level)-1; 99 localparam int Base1 = (2**(level+1))-1; 100 101 for (genvar offset = 0; offset < 2**level; offset++) begin : gen_level 102 localparam int Pa = Base0 + offset; 103 localparam int C0 = Base1 + 2*offset; 104 localparam int C1 = Base1 + 2*offset + 1; 105 106 // this assigns the gated interrupt source signals, their 107 // corresponding IDs and priorities to the tree leafs 108 if (level == IdxW) begin : gen_leafs 109 if (offset < N) begin : gen_assign 110 // forward path (requests and data) 111 // all requests inputs are assigned to the request tree 112 2/2 assign req_tree[Pa] = req_i[offset]; Tests: T1 T2 T3  | T1 T2 T3  113 // we basically split the incoming request vector into two halves with the following 114 // priority assignment. the prio_mask_q register contains a prefix sum that has been 115 // computed using the last winning index, and hence masks out all requests at offsets 116 // lower or equal the previously granted index. hence, all higher indices are considered 117 // first in the arbitration tree nodes below, before considering the lower indices. 118 2/2 assign prio_tree[Pa] = req_i[offset] & prio_mask_q[offset]; Tests: T1 T2 T3  | T1 T2 T3  119 // input for the index muxes (used to compute the winner index) 120 assign idx_tree[Pa] = offset; 121 // input for the data muxes 122 2/2 assign data_tree[Pa] = data_i[offset]; Tests: T1 T2 T3  | T1 T2 T3  123 124 // backward path (grants and prefix sum) 125 // grant if selected, ready and request asserted 126 unreachable assign gnt_o[offset] = req_i[offset] & sel_tree[Pa] & ready_i; 127 // only update mask if there is a valid request 128 2/2 assign prio_mask_d[offset] = (|req_i) ? Tests: T1 T2 T3  | T1 T2 T3  129 mask_tree[Pa] | sel_tree[Pa] & ~ready_i : 130 prio_mask_q[offset]; 131 end else begin : gen_tie_off 132 // forward path 133 assign req_tree[Pa] = '0; 134 assign prio_tree[Pa] = '0; 135 assign idx_tree[Pa] = '0; 136 assign data_tree[Pa] = '0; 137 logic unused_sigs; 138 assign unused_sigs = ^{mask_tree[Pa], 139 sel_tree[Pa]}; 140 end 141 // this creates the node assignments 142 end else begin : gen_nodes 143 // local helper variable 144 logic sel; 145 146 // forward path (requests and data) 147 // each node looks at its two children, and selects the one with higher priority 148 1/1 assign sel = ~req_tree[C0] | ~prio_tree[C0] & prio_tree[C1]; Tests: T1 T2 T3  149 // propagate requests 150 1/1 assign req_tree[Pa] = req_tree[C0] | req_tree[C1]; Tests: T1 T2 T3  151 1/1 assign prio_tree[Pa] = prio_tree[C1] | prio_tree[C0]; Tests: T1 T2 T3  152 // data and index muxes 153 // Note: these ternaries have triggered a synthesis bug in Vivado versions older 154 // than 2020.2. If the problem resurfaces again, have a look at issue #1408. 155 1/1 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0]; Tests: T1 T2 T3  156 1/1 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0]; Tests: T1 T2 T3  157 158 // backward path (grants and prefix sum) 159 // this propagates the selction index back and computes a hot one mask 160 1/1 assign sel_tree[C0] = sel_tree[Pa] & ~sel; Tests: T1 T2 T3  161 1/1 assign sel_tree[C1] = sel_tree[Pa] & sel; Tests: T1 T2 T3  162 // this performs a prefix sum for masking the input requests in the next cycle 163 unreachable assign mask_tree[C0] = mask_tree[Pa]; 164 1/1 assign mask_tree[C1] = mask_tree[Pa] | sel_tree[C0]; Tests: T1 T2 T3  165 end 166 end : gen_level 167 end : gen_tree 168 169 // the results can be found at the tree root 170 if (EnDataPort) begin : gen_data_port 171 1/1 assign data_o = data_tree[0]; Tests: T1 T2 T3  172 end else begin : gen_no_dataport 173 logic [DW-1:0] unused_data; 174 assign unused_data = data_tree[0]; 175 assign data_o = '1; 176 end 177 178 // This index is unused. 179 logic unused_prio_tree; 180 1/1 assign unused_prio_tree = prio_tree[0]; Tests: T1 T2 T3  181 182 1/1 assign idx_o = idx_tree[0]; Tests: T1 T2 T3  183 1/1 assign valid_o = req_tree[0]; Tests: T1 T2 T3  184 185 // the select tree computes a hot one signal that indicates which request is currently selected 186 assign sel_tree[0] = 1'b1; 187 // the mask tree is basically a prefix sum of the hot one select signal computed above 188 assign mask_tree[0] = 1'b0; 189 190 always_ff @(posedge clk_i or negedge rst_ni) begin : p_mask_reg 191 1/1 if (!rst_ni) begin Tests: T1 T2 T3  192 1/1 prio_mask_q <= '0; Tests: T1 T2 T3  193 end else begin 194 1/1 prio_mask_q <= prio_mask_d; Tests: T1 T2 T3 

Cond Coverage for Instance : tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_calc.gen_input_bufs[0].gen_rr_arbiter.u_arb
TotalCoveredPercent
Conditions434297.67
Logical434297.67
Non-Logical00
Event00

 LINE       118
 EXPRESSION (req_i[0] & gen_normal_case.prio_mask_q[0])
             ----1---   ---------------2--------------
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       118
 EXPRESSION (req_i[1] & gen_normal_case.prio_mask_q[1])
             ----1---   ---------------2--------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT55,T22,T23
11CoveredT55,T22,T23

 LINE       126
 EXPRESSION (req_i[0] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ready_i)
             ----1---   ----------------------------------2----------------------------------   ---3---
-1--2--3-StatusTests
011Unreachable
101UnreachableT14,T43,T68
110CoveredT1,T2,T3
111UnreachableT1,T2,T3

 LINE       126
 EXPRESSION (req_i[1] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ready_i)
             ----1---   ----------------------------------2----------------------------------   ---3---
-1--2--3-StatusTests
011Unreachable
101UnreachableT14,T43,T38
110CoveredT55,T22,T23
111UnreachableT55,T22,T23

 LINE       128
 EXPRESSION 
 Number  Term
      1  ((|req_i)) ? (gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ((~ready_i)))) : gen_normal_case.prio_mask_q[0])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       128
 SUB-EXPRESSION 
 Number  Term
      1  gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] | 
      2  (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ((~ready_i))))
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T2,T3
10Unreachable

 LINE       128
 SUB-EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ((~ready_i)))
                 ----------------------------------1----------------------------------   ------2-----
-1--2-StatusTests
01CoveredT55,T22,T23
10UnreachableT1,T2,T3
11CoveredT1,T2,T3

 LINE       128
 EXPRESSION 
 Number  Term
      1  ((|req_i)) ? (gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ((~ready_i)))) : gen_normal_case.prio_mask_q[1])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       128
 SUB-EXPRESSION 
 Number  Term
      1  gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] | 
      2  (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ((~ready_i))))
-1--2-StatusTests
00CoveredT55,T22,T23
01CoveredT55,T22,T23
10CoveredT1,T2,T3

 LINE       128
 SUB-EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ((~ready_i)))
                 ----------------------------------1----------------------------------   ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10UnreachableT55,T22,T23
11CoveredT55,T22,T23

 LINE       148
 EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) | 
      2  (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1]))
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT14,T43,T68
10CoveredT1,T2,T3

 LINE       148
 SUB-EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) & 
      2  gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1])
-1--2-StatusTests
01CoveredT14,T43,T38
10CoveredT1,T2,T3
11CoveredT55,T22,T23

 LINE       150
 EXPRESSION (gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C1])
             ----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT55,T22,T23
10CoveredT1,T2,T3

 LINE       151
 EXPRESSION (gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
             -----------------------------------1----------------------------------   -----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T2,T3
10CoveredT55,T22,T23

 LINE       155
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel ? gen_normal_case.idx_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] : gen_normal_case.idx_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       156
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel ? gen_normal_case.data_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] : gen_normal_case.data_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       160
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] & ((~gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel)))
             ----------------------------------1----------------------------------   -----------------------------2-----------------------------
-1--2-StatusTests
01Unreachable
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       161
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] & gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel)
             ----------------------------------1----------------------------------   ---------------------------2--------------------------
-1--2-StatusTests
01Unreachable
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       164
 EXPRESSION (gen_normal_case.mask_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
             -----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T2,T3
10Unreachable

Branch Coverage for Instance : tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_calc.gen_input_bufs[0].gen_rr_arbiter.u_arb
Line No.TotalCoveredPercent
Branches 10 10 100.00
TERNARY 155 2 2 100.00
TERNARY 156 2 2 100.00
TERNARY 128 2 2 100.00
TERNARY 128 2 2 100.00
IF 191 2 2 100.00


155 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0]; -1- ==> ==>

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


156 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0]; -1- ==> ==>

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


128 assign prio_mask_d[offset] = (|req_i) ? -1- ==> ==>

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


128 assign prio_mask_d[offset] = (|req_i) ? -1- ==> ==>

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


191 if (!rst_ni) begin -1- 192 prio_mask_q <= '0; ==> 193 end else begin 194 prio_mask_q <= prio_mask_d; ==>

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


Assert Coverage for Instance : tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_calc.gen_input_bufs[0].gen_rr_arbiter.u_arb
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 16 16 100.00 15 93.75
Cover properties 0 0 0
Cover sequences 0 0 0
Total 16 16 100.00 15 93.75




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
CheckHotOne_A 373795953 372949494 0 0
CheckNGreaterZero_A 1058 1058 0 0
GntImpliesReady_A 373795953 17266949 0 0
GntImpliesValid_A 373795953 17266949 0 0
GrantKnown_A 373795953 372949494 0 0
IdxKnown_A 373795953 372949494 0 0
IndexIsCorrect_A 373795953 17266949 0 0
LockArbDecision_A 373788146 17266655 0 0
NoReadyValidNoGrant_A 373795953 338415408 0 0
ReadyAndValidImplyGrant_A 373795953 17266949 0 0
ReqAndReadyImplyGrant_A 373795953 17266949 0 0
ReqImpliesValid_A 373795953 34534086 0 0
ReqStaysHighUntilGranted0_M 373775390 17266456 0 0
RoundRobin_A 373795953 0 0 1053
ValidKnown_A 373795953 372949494 0 0
gen_data_port_assertion.DataFlow_A 373795953 17266949 0 0


CheckHotOne_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 372949494 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 34207 0 0
T17 1829 1746 0 0

CheckNGreaterZero_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1058 1058 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T7 1 1 0 0
T8 1 1 0 0
T11 1 1 0 0
T12 1 1 0 0
T13 1 1 0 0
T17 1 1 0 0

GntImpliesReady_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 17266949 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 65 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

GntImpliesValid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 17266949 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 65 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

GrantKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 372949494 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 34207 0 0
T17 1829 1746 0 0

IdxKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 372949494 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 34207 0 0
T17 1829 1746 0 0

IndexIsCorrect_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 17266949 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 65 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

LockArbDecision_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373788146 17266655 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 65 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

NoReadyValidNoGrant_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 338415408 0 0
T1 2320 2203 0 0
T2 3525 3393 0 0
T3 1219 1092 0 0
T4 1433 1281 0 0
T7 1352 1187 0 0
T8 4369 3505 0 0
T11 2053 1765 0 0
T12 2602 2464 0 0
T13 34283 34143 0 0
T17 1829 1536 0 0

ReadyAndValidImplyGrant_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 17266949 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 65 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

ReqAndReadyImplyGrant_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 17266949 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 65 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

ReqImpliesValid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 34534086 0 0
T1 2320 64 0 0
T2 3525 64 0 0
T3 1219 64 0 0
T4 1433 64 0 0
T7 1352 72 0 0
T8 4369 398 0 0
T11 2053 130 0 0
T12 2602 64 0 0
T13 34283 64 0 0
T17 1829 210 0 0

ReqStaysHighUntilGranted0_M
NameAttemptsReal SuccessesFailuresIncomplete
Total 373775390 17266456 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 65 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

RoundRobin_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 0 0 1053

ValidKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 372949494 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 34207 0 0
T17 1829 1746 0 0

gen_data_port_assertion.DataFlow_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 17266949 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 65 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

Line Coverage for Instance : tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_calc.gen_input_bufs[1].gen_rr_arbiter.u_arb
Line No.TotalCoveredPercent
TOTAL2323100.00
CONT_ASSIGN6200
CONT_ASSIGN11211100.00
CONT_ASSIGN11211100.00
CONT_ASSIGN11811100.00
CONT_ASSIGN11811100.00
CONT_ASSIGN12211100.00
CONT_ASSIGN12211100.00
CONT_ASSIGN12600
CONT_ASSIGN12600
CONT_ASSIGN12811100.00
CONT_ASSIGN12811100.00
CONT_ASSIGN14811100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15111100.00
CONT_ASSIGN15511100.00
CONT_ASSIGN15611100.00
CONT_ASSIGN16011100.00
CONT_ASSIGN16111100.00
CONT_ASSIGN16300
CONT_ASSIGN16411100.00
CONT_ASSIGN17111100.00
CONT_ASSIGN18011100.00
CONT_ASSIGN18211100.00
CONT_ASSIGN18311100.00
ALWAYS19133100.00

61 logic unused_req_chk; 62 unreachable assign unused_req_chk = req_chk_i; 63 64 `ASSERT_INIT(CheckNGreaterZero_A, N > 0) 65 66 // this case is basically just a bypass 67 if (N == 1) begin : gen_degenerate_case 68 69 assign valid_o = req_i[0]; 70 assign data_o = data_i[0]; 71 assign gnt_o[0] = valid_o & ready_i; 72 assign idx_o = '0; 73 74 end else begin : gen_normal_case 75 76 // align to powers of 2 for simplicity 77 // a full binary tree with N levels has 2**N + 2**N-1 nodes 78 logic [2**(IdxW+1)-2:0] req_tree; 79 logic [2**(IdxW+1)-2:0] prio_tree; 80 logic [2**(IdxW+1)-2:0] sel_tree; 81 logic [2**(IdxW+1)-2:0] mask_tree; 82 logic [2**(IdxW+1)-2:0][IdxW-1:0] idx_tree; 83 logic [2**(IdxW+1)-2:0][DW-1:0] data_tree; 84 logic [N-1:0] prio_mask_d, prio_mask_q; 85 86 for (genvar level = 0; level < IdxW+1; level++) begin : gen_tree 87 // 88 // level+1 C0 C1 <- "Base1" points to the first node on "level+1", 89 // \ / these nodes are the children of the nodes one level below 90 // level Pa <- "Base0", points to the first node on "level", 91 // these nodes are the parents of the nodes one level above 92 // 93 // hence we have the following indices for the Pa, C0, C1 nodes: 94 // Pa = 2**level - 1 + offset = Base0 + offset 95 // C0 = 2**(level+1) - 1 + 2*offset = Base1 + 2*offset 96 // C1 = 2**(level+1) - 1 + 2*offset + 1 = Base1 + 2*offset + 1 97 // 98 localparam int Base0 = (2**level)-1; 99 localparam int Base1 = (2**(level+1))-1; 100 101 for (genvar offset = 0; offset < 2**level; offset++) begin : gen_level 102 localparam int Pa = Base0 + offset; 103 localparam int C0 = Base1 + 2*offset; 104 localparam int C1 = Base1 + 2*offset + 1; 105 106 // this assigns the gated interrupt source signals, their 107 // corresponding IDs and priorities to the tree leafs 108 if (level == IdxW) begin : gen_leafs 109 if (offset < N) begin : gen_assign 110 // forward path (requests and data) 111 // all requests inputs are assigned to the request tree 112 2/2 assign req_tree[Pa] = req_i[offset]; Tests: T1 T2 T3  | T1 T2 T3  113 // we basically split the incoming request vector into two halves with the following 114 // priority assignment. the prio_mask_q register contains a prefix sum that has been 115 // computed using the last winning index, and hence masks out all requests at offsets 116 // lower or equal the previously granted index. hence, all higher indices are considered 117 // first in the arbitration tree nodes below, before considering the lower indices. 118 2/2 assign prio_tree[Pa] = req_i[offset] & prio_mask_q[offset]; Tests: T1 T2 T3  | T1 T2 T3  119 // input for the index muxes (used to compute the winner index) 120 assign idx_tree[Pa] = offset; 121 // input for the data muxes 122 2/2 assign data_tree[Pa] = data_i[offset]; Tests: T1 T2 T3  | T1 T2 T3  123 124 // backward path (grants and prefix sum) 125 // grant if selected, ready and request asserted 126 unreachable assign gnt_o[offset] = req_i[offset] & sel_tree[Pa] & ready_i; 127 // only update mask if there is a valid request 128 2/2 assign prio_mask_d[offset] = (|req_i) ? Tests: T1 T2 T3  | T1 T2 T3  129 mask_tree[Pa] | sel_tree[Pa] & ~ready_i : 130 prio_mask_q[offset]; 131 end else begin : gen_tie_off 132 // forward path 133 assign req_tree[Pa] = '0; 134 assign prio_tree[Pa] = '0; 135 assign idx_tree[Pa] = '0; 136 assign data_tree[Pa] = '0; 137 logic unused_sigs; 138 assign unused_sigs = ^{mask_tree[Pa], 139 sel_tree[Pa]}; 140 end 141 // this creates the node assignments 142 end else begin : gen_nodes 143 // local helper variable 144 logic sel; 145 146 // forward path (requests and data) 147 // each node looks at its two children, and selects the one with higher priority 148 1/1 assign sel = ~req_tree[C0] | ~prio_tree[C0] & prio_tree[C1]; Tests: T1 T2 T3  149 // propagate requests 150 1/1 assign req_tree[Pa] = req_tree[C0] | req_tree[C1]; Tests: T1 T2 T3  151 1/1 assign prio_tree[Pa] = prio_tree[C1] | prio_tree[C0]; Tests: T1 T2 T3  152 // data and index muxes 153 // Note: these ternaries have triggered a synthesis bug in Vivado versions older 154 // than 2020.2. If the problem resurfaces again, have a look at issue #1408. 155 1/1 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0]; Tests: T1 T2 T3  156 1/1 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0]; Tests: T1 T2 T3  157 158 // backward path (grants and prefix sum) 159 // this propagates the selction index back and computes a hot one mask 160 1/1 assign sel_tree[C0] = sel_tree[Pa] & ~sel; Tests: T1 T2 T3  161 1/1 assign sel_tree[C1] = sel_tree[Pa] & sel; Tests: T1 T2 T3  162 // this performs a prefix sum for masking the input requests in the next cycle 163 unreachable assign mask_tree[C0] = mask_tree[Pa]; 164 1/1 assign mask_tree[C1] = mask_tree[Pa] | sel_tree[C0]; Tests: T1 T2 T3  165 end 166 end : gen_level 167 end : gen_tree 168 169 // the results can be found at the tree root 170 if (EnDataPort) begin : gen_data_port 171 1/1 assign data_o = data_tree[0]; Tests: T1 T2 T3  172 end else begin : gen_no_dataport 173 logic [DW-1:0] unused_data; 174 assign unused_data = data_tree[0]; 175 assign data_o = '1; 176 end 177 178 // This index is unused. 179 logic unused_prio_tree; 180 1/1 assign unused_prio_tree = prio_tree[0]; Tests: T1 T2 T3  181 182 1/1 assign idx_o = idx_tree[0]; Tests: T1 T2 T3  183 1/1 assign valid_o = req_tree[0]; Tests: T1 T2 T3  184 185 // the select tree computes a hot one signal that indicates which request is currently selected 186 assign sel_tree[0] = 1'b1; 187 // the mask tree is basically a prefix sum of the hot one select signal computed above 188 assign mask_tree[0] = 1'b0; 189 190 always_ff @(posedge clk_i or negedge rst_ni) begin : p_mask_reg 191 1/1 if (!rst_ni) begin Tests: T1 T2 T3  192 1/1 prio_mask_q <= '0; Tests: T1 T2 T3  193 end else begin 194 1/1 prio_mask_q <= prio_mask_d; Tests: T1 T2 T3 

Cond Coverage for Instance : tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_calc.gen_input_bufs[1].gen_rr_arbiter.u_arb
TotalCoveredPercent
Conditions434297.67
Logical434297.67
Non-Logical00
Event00

 LINE       118
 EXPRESSION (req_i[0] & gen_normal_case.prio_mask_q[0])
             ----1---   ---------------2--------------
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       118
 EXPRESSION (req_i[1] & gen_normal_case.prio_mask_q[1])
             ----1---   ---------------2--------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT55,T22,T23
11CoveredT55,T22,T23

 LINE       126
 EXPRESSION (req_i[0] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ready_i)
             ----1---   ----------------------------------2----------------------------------   ---3---
-1--2--3-StatusTests
011Unreachable
101UnreachableT14,T43,T68
110CoveredT1,T2,T3
111UnreachableT1,T2,T3

 LINE       126
 EXPRESSION (req_i[1] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ready_i)
             ----1---   ----------------------------------2----------------------------------   ---3---
-1--2--3-StatusTests
011Unreachable
101UnreachableT14,T43,T38
110CoveredT55,T22,T23
111UnreachableT55,T22,T23

 LINE       128
 EXPRESSION 
 Number  Term
      1  ((|req_i)) ? (gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ((~ready_i)))) : gen_normal_case.prio_mask_q[0])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       128
 SUB-EXPRESSION 
 Number  Term
      1  gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] | 
      2  (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ((~ready_i))))
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T2,T3
10Unreachable

 LINE       128
 SUB-EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ((~ready_i)))
                 ----------------------------------1----------------------------------   ------2-----
-1--2-StatusTests
01CoveredT55,T22,T23
10UnreachableT1,T2,T3
11CoveredT1,T2,T3

 LINE       128
 EXPRESSION 
 Number  Term
      1  ((|req_i)) ? (gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ((~ready_i)))) : gen_normal_case.prio_mask_q[1])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       128
 SUB-EXPRESSION 
 Number  Term
      1  gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] | 
      2  (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ((~ready_i))))
-1--2-StatusTests
00CoveredT55,T22,T23
01CoveredT55,T22,T23
10CoveredT1,T2,T3

 LINE       128
 SUB-EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[1].Pa] & ((~ready_i)))
                 ----------------------------------1----------------------------------   ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10UnreachableT55,T22,T23
11CoveredT55,T22,T23

 LINE       148
 EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) | 
      2  (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1]))
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT14,T43,T68
10CoveredT1,T2,T3

 LINE       148
 SUB-EXPRESSION 
 Number  Term
      1  ((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])) & 
      2  gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1])
-1--2-StatusTests
01CoveredT14,T43,T38
10CoveredT1,T2,T3
11CoveredT55,T22,T23

 LINE       150
 EXPRESSION (gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C1])
             ----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT55,T22,T23
10CoveredT1,T2,T3

 LINE       151
 EXPRESSION (gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
             -----------------------------------1----------------------------------   -----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T2,T3
10CoveredT55,T22,T23

 LINE       155
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel ? gen_normal_case.idx_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] : gen_normal_case.idx_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       156
 EXPRESSION 
 Number  Term
      1  gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel ? gen_normal_case.data_tree[gen_normal_case.gen_tree[0].gen_level[0].C1] : gen_normal_case.data_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       160
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] & ((~gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel)))
             ----------------------------------1----------------------------------   -----------------------------2-----------------------------
-1--2-StatusTests
01Unreachable
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       161
 EXPRESSION (gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] & gen_normal_case.gen_tree[0].gen_level[0].gen_nodes.sel)
             ----------------------------------1----------------------------------   ---------------------------2--------------------------
-1--2-StatusTests
01Unreachable
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       164
 EXPRESSION (gen_normal_case.mask_tree[gen_normal_case.gen_tree[0].gen_level[0].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[0].gen_level[0].C0])
             -----------------------------------1----------------------------------   ----------------------------------2----------------------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T2,T3
10Unreachable

Branch Coverage for Instance : tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_calc.gen_input_bufs[1].gen_rr_arbiter.u_arb
Line No.TotalCoveredPercent
Branches 10 10 100.00
TERNARY 155 2 2 100.00
TERNARY 156 2 2 100.00
TERNARY 128 2 2 100.00
TERNARY 128 2 2 100.00
IF 191 2 2 100.00


155 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0]; -1- ==> ==>

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


156 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0]; -1- ==> ==>

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


128 assign prio_mask_d[offset] = (|req_i) ? -1- ==> ==>

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


128 assign prio_mask_d[offset] = (|req_i) ? -1- ==> ==>

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


191 if (!rst_ni) begin -1- 192 prio_mask_q <= '0; ==> 193 end else begin 194 prio_mask_q <= prio_mask_d; ==>

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


Assert Coverage for Instance : tb.dut.u_eflash.u_scramble.u_prim_arbiter_tree_calc.gen_input_bufs[1].gen_rr_arbiter.u_arb
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 16 16 100.00 15 93.75
Cover properties 0 0 0
Cover sequences 0 0 0
Total 16 16 100.00 15 93.75




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
CheckHotOne_A 373795953 372949494 0 0
CheckNGreaterZero_A 1058 1058 0 0
GntImpliesReady_A 373795953 17266949 0 0
GntImpliesValid_A 373795953 17266949 0 0
GrantKnown_A 373795953 372949494 0 0
IdxKnown_A 373795953 372949494 0 0
IndexIsCorrect_A 373795953 17266949 0 0
LockArbDecision_A 373788146 17266655 0 0
NoReadyValidNoGrant_A 373795953 338415582 0 0
ReadyAndValidImplyGrant_A 373795953 17266949 0 0
ReqAndReadyImplyGrant_A 373795953 17266949 0 0
ReqImpliesValid_A 373795953 34533912 0 0
ReqStaysHighUntilGranted0_M 373775390 17266456 0 0
RoundRobin_A 373795953 0 0 1053
ValidKnown_A 373795953 372949494 0 0
gen_data_port_assertion.DataFlow_A 373795953 17266949 0 0


CheckHotOne_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 372949494 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 34207 0 0
T17 1829 1746 0 0

CheckNGreaterZero_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1058 1058 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T7 1 1 0 0
T8 1 1 0 0
T11 1 1 0 0
T12 1 1 0 0
T13 1 1 0 0
T17 1 1 0 0

GntImpliesReady_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 17266949 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 65 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

GntImpliesValid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 17266949 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 65 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

GrantKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 372949494 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 34207 0 0
T17 1829 1746 0 0

IdxKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 372949494 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 34207 0 0
T17 1829 1746 0 0

IndexIsCorrect_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 17266949 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 65 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

LockArbDecision_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373788146 17266655 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 65 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

NoReadyValidNoGrant_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 338415582 0 0
T1 2320 2203 0 0
T2 3525 3393 0 0
T3 1219 1092 0 0
T4 1433 1281 0 0
T7 1352 1187 0 0
T8 4369 3505 0 0
T11 2053 1765 0 0
T12 2602 2464 0 0
T13 34283 34143 0 0
T17 1829 1536 0 0

ReadyAndValidImplyGrant_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 17266949 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 65 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

ReqAndReadyImplyGrant_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 17266949 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 65 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

ReqImpliesValid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 34533912 0 0
T1 2320 64 0 0
T2 3525 64 0 0
T3 1219 64 0 0
T4 1433 64 0 0
T7 1352 72 0 0
T8 4369 398 0 0
T11 2053 130 0 0
T12 2602 64 0 0
T13 34283 64 0 0
T17 1829 210 0 0

ReqStaysHighUntilGranted0_M
NameAttemptsReal SuccessesFailuresIncomplete
Total 373775390 17266456 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 65 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

RoundRobin_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 0 0 1053

ValidKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 372949494 0 0
T1 2320 2267 0 0
T2 3525 3457 0 0
T3 1219 1156 0 0
T4 1433 1345 0 0
T7 1352 1259 0 0
T8 4369 3903 0 0
T11 2053 1895 0 0
T12 2602 2528 0 0
T13 34283 34207 0 0
T17 1829 1746 0 0

gen_data_port_assertion.DataFlow_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 373795953 17266949 0 0
T1 2320 32 0 0
T2 3525 32 0 0
T3 1219 32 0 0
T4 1433 32 0 0
T7 1352 36 0 0
T8 4369 199 0 0
T11 2053 65 0 0
T12 2602 32 0 0
T13 34283 32 0 0
T17 1829 105 0 0

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