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 :
| Line No. | Total | Covered | Percent |
TOTAL | | 52 | 48 | 92.31 |
CONT_ASSIGN | 62 | 0 | 0 | |
CONT_ASSIGN | 112 | 1 | 1 | 100.00 |
CONT_ASSIGN | 112 | 1 | 1 | 100.00 |
CONT_ASSIGN | 112 | 1 | 1 | 100.00 |
CONT_ASSIGN | 112 | 1 | 1 | 100.00 |
CONT_ASSIGN | 118 | 1 | 1 | 100.00 |
CONT_ASSIGN | 118 | 1 | 1 | 100.00 |
CONT_ASSIGN | 118 | 1 | 1 | 100.00 |
CONT_ASSIGN | 118 | 1 | 1 | 100.00 |
CONT_ASSIGN | 122 | 1 | 0 | 0.00 |
CONT_ASSIGN | 122 | 1 | 0 | 0.00 |
CONT_ASSIGN | 122 | 1 | 0 | 0.00 |
CONT_ASSIGN | 122 | 1 | 0 | 0.00 |
CONT_ASSIGN | 126 | 1 | 1 | 100.00 |
CONT_ASSIGN | 126 | 1 | 1 | 100.00 |
CONT_ASSIGN | 126 | 1 | 1 | 100.00 |
CONT_ASSIGN | 126 | 1 | 1 | 100.00 |
CONT_ASSIGN | 128 | 1 | 1 | 100.00 |
CONT_ASSIGN | 128 | 1 | 1 | 100.00 |
CONT_ASSIGN | 128 | 1 | 1 | 100.00 |
CONT_ASSIGN | 128 | 1 | 1 | 100.00 |
CONT_ASSIGN | 148 | 1 | 1 | 100.00 |
CONT_ASSIGN | 148 | 1 | 1 | 100.00 |
CONT_ASSIGN | 148 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 1 | 100.00 |
CONT_ASSIGN | 151 | 1 | 1 | 100.00 |
CONT_ASSIGN | 151 | 1 | 1 | 100.00 |
CONT_ASSIGN | 151 | 1 | 1 | 100.00 |
CONT_ASSIGN | 155 | 1 | 1 | 100.00 |
CONT_ASSIGN | 155 | 1 | 1 | 100.00 |
CONT_ASSIGN | 155 | 1 | 1 | 100.00 |
CONT_ASSIGN | 156 | 1 | 1 | 100.00 |
CONT_ASSIGN | 156 | 1 | 1 | 100.00 |
CONT_ASSIGN | 156 | 1 | 1 | 100.00 |
CONT_ASSIGN | 160 | 1 | 1 | 100.00 |
CONT_ASSIGN | 160 | 1 | 1 | 100.00 |
CONT_ASSIGN | 160 | 1 | 1 | 100.00 |
CONT_ASSIGN | 161 | 1 | 1 | 100.00 |
CONT_ASSIGN | 161 | 1 | 1 | 100.00 |
CONT_ASSIGN | 161 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 0 | 0 | |
CONT_ASSIGN | 163 | 0 | 0 | |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 164 | 1 | 1 | 100.00 |
CONT_ASSIGN | 164 | 1 | 1 | 100.00 |
CONT_ASSIGN | 164 | 1 | 1 | 100.00 |
CONT_ASSIGN | 174 | 1 | 1 | 100.00 |
CONT_ASSIGN | 180 | 1 | 1 | 100.00 |
CONT_ASSIGN | 182 | 1 | 1 | 100.00 |
CONT_ASSIGN | 183 | 1 | 1 | 100.00 |
ALWAYS | 191 | 3 | 3 | 100.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 :
| Line No. | Total | Covered | Percent |
TOTAL | | 25 | 25 | 100.00 |
CONT_ASSIGN | 62 | 0 | 0 | |
CONT_ASSIGN | 112 | 1 | 1 | 100.00 |
CONT_ASSIGN | 112 | 1 | 1 | 100.00 |
CONT_ASSIGN | 118 | 1 | 1 | 100.00 |
CONT_ASSIGN | 118 | 1 | 1 | 100.00 |
CONT_ASSIGN | 122 | 1 | 1 | 100.00 |
CONT_ASSIGN | 122 | 1 | 1 | 100.00 |
CONT_ASSIGN | 126 | 1 | 1 | 100.00 |
CONT_ASSIGN | 126 | 1 | 1 | 100.00 |
CONT_ASSIGN | 128 | 1 | 1 | 100.00 |
CONT_ASSIGN | 128 | 1 | 1 | 100.00 |
CONT_ASSIGN | 148 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 1 | 100.00 |
CONT_ASSIGN | 151 | 1 | 1 | 100.00 |
CONT_ASSIGN | 155 | 1 | 1 | 100.00 |
CONT_ASSIGN | 156 | 1 | 1 | 100.00 |
CONT_ASSIGN | 160 | 1 | 1 | 100.00 |
CONT_ASSIGN | 161 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 0 | 0 | |
CONT_ASSIGN | 164 | 1 | 1 | 100.00 |
CONT_ASSIGN | 171 | 1 | 1 | 100.00 |
CONT_ASSIGN | 180 | 1 | 1 | 100.00 |
CONT_ASSIGN | 182 | 1 | 1 | 100.00 |
CONT_ASSIGN | 183 | 1 | 1 | 100.00 |
ALWAYS | 191 | 3 | 3 | 100.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 :
| Total | Covered | Percent |
Conditions | 43 | 42 | 97.67 |
Logical | 43 | 42 | 97.67 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 118
EXPRESSION (req_i[0] & gen_normal_case.prio_mask_q[0])
----1--- ---------------2--------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 118
EXPRESSION (req_i[1] & gen_normal_case.prio_mask_q[1])
----1--- ---------------2--------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T17,T11,T31 |
1 | 1 | Covered | T17,T11,T8 |
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- | Status | Tests |
0 | 1 | 1 | Unreachable | |
1 | 0 | 1 | Unreachable | T11,T32,T51 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Unreachable | T1,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- | Status | Tests |
0 | 1 | 1 | Unreachable | T99 |
1 | 0 | 1 | Unreachable | T11,T32,T51 |
1 | 1 | 0 | Covered | T17,T11,T8 |
1 | 1 | 1 | Unreachable | T17,T11,T8 |
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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Unreachable | |
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- | Status | Tests |
0 | 1 | Covered | T17,T11,T8 |
1 | 0 | Unreachable | T1,T2,T3 |
1 | 1 | Covered | T1,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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T17,T11,T8 |
0 | 1 | Covered | T17,T11,T8 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Unreachable | T17,T11,T8 |
1 | 1 | Covered | T17,T11,T8 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T11,T32,T51 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 1 | Covered | T11,T32,T51 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T17,T11,T8 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T17,T11,T8 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T17,T11,T8 |
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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | 1 | Unreachable | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,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- | Status | Tests |
0 | 1 | Unreachable | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Unreachable | |
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 :
| Total | Covered | Percent |
Conditions | 51 | 49 | 96.08 |
Logical | 51 | 49 | 96.08 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 118
EXPRESSION (req_i[0] & gen_normal_case.prio_mask_q[0])
----1--- ---------------2--------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 118
EXPRESSION (req_i[1] & gen_normal_case.prio_mask_q[1])
----1--- ---------------2--------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T17,T31,T32 |
1 | 1 | Covered | T17,T8,T31 |
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- | Status | Tests |
0 | 1 | 1 | Not Covered | |
1 | 0 | 1 | Covered | T98 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,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- | Status | Tests |
0 | 1 | 1 | Covered | T98 |
1 | 0 | 1 | Covered | T98 |
1 | 1 | 0 | Covered | T17,T8,T31 |
1 | 1 | 1 | Covered | T17,T8,T31 |
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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Unreachable | |
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- | Status | Tests |
0 | 1 | Covered | T17,T8,T31 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T17,T8,T31 |
0 | 1 | Covered | T17,T8,T31 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T17,T8,T31 |
1 | 1 | Covered | T17,T8,T31 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T97,T98 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 1 | Covered | T98 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T17,T8,T31 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T17,T8,T31 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T17,T8,T31 |
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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | 1 | Unreachable | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,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- | Status | Tests |
0 | 1 | Unreachable | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Unreachable | |
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 :
| Total | Covered | Percent |
Conditions | 130 | 127 | 97.69 |
Logical | 130 | 127 | 97.69 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 118
EXPRESSION (req_i[0] & gen_normal_case.prio_mask_q[0])
----1--- ---------------2--------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T2,T32,T38 |
1 | 0 | Covered | T2,T3,T4 |
1 | 1 | Covered | T2,T3,T4 |
LINE 118
EXPRESSION (req_i[1] & gen_normal_case.prio_mask_q[1])
----1--- ---------------2--------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T2,T4,T32 |
1 | 0 | Covered | T2,T3,T4 |
1 | 1 | Covered | T2,T3,T4 |
LINE 118
EXPRESSION (req_i[2] & gen_normal_case.prio_mask_q[2])
----1--- ---------------2--------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T2,T4,T12 |
1 | 0 | Covered | T2,T3,T4 |
1 | 1 | Covered | T2,T3,T4 |
LINE 118
EXPRESSION (req_i[3] & gen_normal_case.prio_mask_q[3])
----1--- ---------------2--------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T82,T198,T199 |
1 | 1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 1 | 1 | Not Covered | |
1 | 0 | 1 | Covered | T2,T3,T4 |
1 | 1 | 0 | Covered | T2,T3,T4 |
1 | 1 | 1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 1 | 1 | Not Covered | |
1 | 0 | 1 | Covered | T2,T3,T4 |
1 | 1 | 0 | Covered | T2,T3,T4 |
1 | 1 | 1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 1 | 1 | Not Covered | |
1 | 0 | 1 | Covered | T2,T3,T4 |
1 | 1 | 0 | Covered | T2,T3,T4 |
1 | 1 | 1 | Covered | T2,T3,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- | Status | Tests |
0 | 1 | 1 | Covered | T1,T2,T3 |
1 | 0 | 1 | Covered | T2,T3,T4 |
1 | 1 | 0 | Covered | T2,T3,T17 |
1 | 1 | 1 | Covered | T2,T3,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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 0 | Covered | T2,T3,T4 |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Unreachable | |
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- | Status | Tests |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T2,T3,T4 |
1 | 1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 0 | Covered | T2,T3,T4 |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T2,T3,T4 |
1 | 1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 0 | Covered | T2,T3,T17 |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T2,T3,T17 |
1 | 1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 0 | Covered | T2,T3,T17 |
0 | 1 | Covered | T2,T3,T17 |
1 | 0 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T2,T3,T17 |
1 | 1 | Covered | T2,T3,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- | Status | Tests |
0 | 0 | Covered | T2,T3,T4 |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 0 | Covered | T2,T3,T4 |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 0 | Covered | T2,T3,T4 |
0 | 1 | Covered | T2,T3,T17 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T2,T3,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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T51,T69,T71 |
1 | 0 | Covered | T51,T69,T71 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T2,T3,T17 |
1 | 0 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T51,T69,T71 |
1 | 0 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T32,T51,T70 |
1 | 0 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T2,T3,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- | Status | Tests |
0 | Covered | T2,T3,T4 |
1 | Covered | T1,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- | Status | Tests |
0 | Covered | T2,T3,T4 |
1 | Covered | T1,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- | Status | Tests |
0 | Covered | T2,T3,T4 |
1 | Covered | T1,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- | Status | Tests |
0 | Covered | T2,T3,T4 |
1 | Covered | T1,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- | Status | Tests |
0 | Covered | T2,T3,T4 |
1 | Covered | T1,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- | Status | Tests |
0 | Covered | T2,T3,T4 |
1 | Covered | T1,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- | Status | Tests |
0 | 1 | Unreachable | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T2,T3,T4 |
1 | 1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 1 | Unreachable | |
1 | 0 | Covered | T2,T3,T4 |
1 | 1 | Covered | T1,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- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T2,T3,T4 |
1 | 1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 1 | Covered | T12,T32,T51 |
1 | 0 | Covered | T2,T3,T4 |
1 | 1 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Unreachable | |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Unreachable | |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T2,T3,T4 |
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 :
| Line No. | Total | Covered | Percent |
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- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T2,T3,T4 |
156 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0];
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T2,T3,T4 |
155 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0];
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T2,T3,T4 |
156 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0];
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T2,T3,T4 |
155 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0];
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T2,T3,T4 |
156 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0];
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T2,T3,T4 |
128 assign prio_mask_d[offset] = (|req_i) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T2,T3,T4 |
0 |
Covered |
T1,T2,T3 |
128 assign prio_mask_d[offset] = (|req_i) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T2,T3,T4 |
0 |
Covered |
T1,T2,T3 |
128 assign prio_mask_d[offset] = (|req_i) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T2,T3,T4 |
0 |
Covered |
T1,T2,T3 |
128 assign prio_mask_d[offset] = (|req_i) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T2,T3,T4 |
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- | Status | Tests |
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 :
| Line No. | Total | Covered | Percent |
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- | Status | Tests |
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- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
128 assign prio_mask_d[offset] = (|req_i) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
128 assign prio_mask_d[offset] = (|req_i) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
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- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
Assert Coverage for Module :
prim_arbiter_tree
Assertion Details
CheckHotOne_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2136515550 |
2131530360 |
0 |
0 |
T1 |
23808 |
23280 |
0 |
0 |
T2 |
13182 |
12636 |
0 |
0 |
T3 |
86388 |
85866 |
0 |
0 |
T4 |
13704 |
13344 |
0 |
0 |
T5 |
5802 |
5226 |
0 |
0 |
T10 |
9648 |
9150 |
0 |
0 |
T16 |
12894 |
12354 |
0 |
0 |
T17 |
12450 |
11946 |
0 |
0 |
T18 |
9312 |
8940 |
0 |
0 |
T19 |
7044 |
6624 |
0 |
0 |
CheckNGreaterZero_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
6282 |
6282 |
0 |
0 |
T1 |
6 |
6 |
0 |
0 |
T2 |
6 |
6 |
0 |
0 |
T3 |
6 |
6 |
0 |
0 |
T4 |
6 |
6 |
0 |
0 |
T5 |
6 |
6 |
0 |
0 |
T10 |
6 |
6 |
0 |
0 |
T16 |
6 |
6 |
0 |
0 |
T17 |
6 |
6 |
0 |
0 |
T18 |
6 |
6 |
0 |
0 |
T19 |
6 |
6 |
0 |
0 |
GntImpliesReady_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2136515550 |
68947808 |
0 |
0 |
T1 |
15872 |
128 |
0 |
0 |
T2 |
10985 |
178 |
0 |
0 |
T3 |
86388 |
794 |
0 |
0 |
T4 |
13704 |
130 |
0 |
0 |
T5 |
5802 |
136 |
0 |
0 |
T10 |
9648 |
129 |
0 |
0 |
T11 |
1440 |
1 |
0 |
0 |
T16 |
12894 |
128 |
0 |
0 |
T17 |
12450 |
489 |
0 |
0 |
T18 |
9312 |
197 |
0 |
0 |
T19 |
7044 |
128 |
0 |
0 |
T22 |
4000 |
0 |
0 |
0 |
T26 |
0 |
29 |
0 |
0 |
T32 |
0 |
208 |
0 |
0 |
T33 |
0 |
390 |
0 |
0 |
T36 |
0 |
19 |
0 |
0 |
T37 |
0 |
37 |
0 |
0 |
T38 |
0 |
23 |
0 |
0 |
T49 |
0 |
59 |
0 |
0 |
T50 |
0 |
228 |
0 |
0 |
T52 |
0 |
240 |
0 |
0 |
GntImpliesValid_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2136515550 |
68947808 |
0 |
0 |
T1 |
15872 |
128 |
0 |
0 |
T2 |
10985 |
178 |
0 |
0 |
T3 |
86388 |
794 |
0 |
0 |
T4 |
13704 |
130 |
0 |
0 |
T5 |
5802 |
136 |
0 |
0 |
T10 |
9648 |
129 |
0 |
0 |
T11 |
1440 |
1 |
0 |
0 |
T16 |
12894 |
128 |
0 |
0 |
T17 |
12450 |
489 |
0 |
0 |
T18 |
9312 |
197 |
0 |
0 |
T19 |
7044 |
128 |
0 |
0 |
T22 |
4000 |
0 |
0 |
0 |
T26 |
0 |
29 |
0 |
0 |
T32 |
0 |
208 |
0 |
0 |
T33 |
0 |
390 |
0 |
0 |
T36 |
0 |
19 |
0 |
0 |
T37 |
0 |
37 |
0 |
0 |
T38 |
0 |
23 |
0 |
0 |
T49 |
0 |
59 |
0 |
0 |
T50 |
0 |
228 |
0 |
0 |
T52 |
0 |
240 |
0 |
0 |
GrantKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2136515550 |
2131530360 |
0 |
0 |
T1 |
23808 |
23280 |
0 |
0 |
T2 |
13182 |
12636 |
0 |
0 |
T3 |
86388 |
85866 |
0 |
0 |
T4 |
13704 |
13344 |
0 |
0 |
T5 |
5802 |
5226 |
0 |
0 |
T10 |
9648 |
9150 |
0 |
0 |
T16 |
12894 |
12354 |
0 |
0 |
T17 |
12450 |
11946 |
0 |
0 |
T18 |
9312 |
8940 |
0 |
0 |
T19 |
7044 |
6624 |
0 |
0 |
IdxKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2136515550 |
2131530360 |
0 |
0 |
T1 |
23808 |
23280 |
0 |
0 |
T2 |
13182 |
12636 |
0 |
0 |
T3 |
86388 |
85866 |
0 |
0 |
T4 |
13704 |
13344 |
0 |
0 |
T5 |
5802 |
5226 |
0 |
0 |
T10 |
9648 |
9150 |
0 |
0 |
T16 |
12894 |
12354 |
0 |
0 |
T17 |
12450 |
11946 |
0 |
0 |
T18 |
9312 |
8940 |
0 |
0 |
T19 |
7044 |
6624 |
0 |
0 |
IndexIsCorrect_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2136515550 |
68947808 |
0 |
0 |
T1 |
15872 |
128 |
0 |
0 |
T2 |
10985 |
178 |
0 |
0 |
T3 |
86388 |
794 |
0 |
0 |
T4 |
13704 |
130 |
0 |
0 |
T5 |
5802 |
136 |
0 |
0 |
T10 |
9648 |
129 |
0 |
0 |
T11 |
1440 |
1 |
0 |
0 |
T16 |
12894 |
128 |
0 |
0 |
T17 |
12450 |
489 |
0 |
0 |
T18 |
9312 |
197 |
0 |
0 |
T19 |
7044 |
128 |
0 |
0 |
T22 |
4000 |
0 |
0 |
0 |
T26 |
0 |
29 |
0 |
0 |
T32 |
0 |
208 |
0 |
0 |
T33 |
0 |
390 |
0 |
0 |
T36 |
0 |
19 |
0 |
0 |
T37 |
0 |
37 |
0 |
0 |
T38 |
0 |
23 |
0 |
0 |
T49 |
0 |
59 |
0 |
0 |
T50 |
0 |
228 |
0 |
0 |
T52 |
0 |
240 |
0 |
0 |
LockArbDecision_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2136441176 |
64119624 |
0 |
0 |
T1 |
15872 |
128 |
0 |
0 |
T2 |
8788 |
128 |
0 |
0 |
T3 |
57592 |
128 |
0 |
0 |
T4 |
9136 |
128 |
0 |
0 |
T5 |
3868 |
136 |
0 |
0 |
T10 |
6432 |
128 |
0 |
0 |
T16 |
8596 |
128 |
0 |
0 |
T17 |
8300 |
420 |
0 |
0 |
T18 |
6208 |
128 |
0 |
0 |
T19 |
4696 |
128 |
0 |
0 |
NoReadyValidNoGrant_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2136515550 |
1804791443 |
0 |
0 |
T1 |
23808 |
22992 |
0 |
0 |
T2 |
13182 |
10799 |
0 |
0 |
T3 |
86388 |
58017 |
0 |
0 |
T4 |
13704 |
12032 |
0 |
0 |
T5 |
5802 |
4922 |
0 |
0 |
T10 |
9648 |
7742 |
0 |
0 |
T16 |
12894 |
12066 |
0 |
0 |
T17 |
12450 |
9539 |
0 |
0 |
T18 |
9312 |
7616 |
0 |
0 |
T19 |
7044 |
6336 |
0 |
0 |
ReadyAndValidImplyGrant_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2136515550 |
68947808 |
0 |
0 |
T1 |
15872 |
128 |
0 |
0 |
T2 |
10985 |
178 |
0 |
0 |
T3 |
86388 |
794 |
0 |
0 |
T4 |
13704 |
130 |
0 |
0 |
T5 |
5802 |
136 |
0 |
0 |
T10 |
9648 |
129 |
0 |
0 |
T11 |
1440 |
1 |
0 |
0 |
T16 |
12894 |
128 |
0 |
0 |
T17 |
12450 |
489 |
0 |
0 |
T18 |
9312 |
197 |
0 |
0 |
T19 |
7044 |
128 |
0 |
0 |
T22 |
4000 |
0 |
0 |
0 |
T26 |
0 |
29 |
0 |
0 |
T32 |
0 |
208 |
0 |
0 |
T33 |
0 |
390 |
0 |
0 |
T36 |
0 |
19 |
0 |
0 |
T37 |
0 |
37 |
0 |
0 |
T38 |
0 |
23 |
0 |
0 |
T49 |
0 |
59 |
0 |
0 |
T50 |
0 |
228 |
0 |
0 |
T52 |
0 |
240 |
0 |
0 |
ReqAndReadyImplyGrant_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2136515550 |
68947808 |
0 |
0 |
T1 |
15872 |
128 |
0 |
0 |
T2 |
10985 |
178 |
0 |
0 |
T3 |
86388 |
794 |
0 |
0 |
T4 |
13704 |
130 |
0 |
0 |
T5 |
5802 |
136 |
0 |
0 |
T10 |
9648 |
129 |
0 |
0 |
T11 |
1440 |
1 |
0 |
0 |
T16 |
12894 |
128 |
0 |
0 |
T17 |
12450 |
489 |
0 |
0 |
T18 |
9312 |
197 |
0 |
0 |
T19 |
7044 |
128 |
0 |
0 |
T22 |
4000 |
0 |
0 |
0 |
T26 |
0 |
29 |
0 |
0 |
T32 |
0 |
208 |
0 |
0 |
T33 |
0 |
390 |
0 |
0 |
T36 |
0 |
19 |
0 |
0 |
T37 |
0 |
37 |
0 |
0 |
T38 |
0 |
23 |
0 |
0 |
T49 |
0 |
59 |
0 |
0 |
T50 |
0 |
228 |
0 |
0 |
T52 |
0 |
240 |
0 |
0 |
ReqImpliesValid_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2136515550 |
316902404 |
0 |
0 |
T1 |
15872 |
256 |
0 |
0 |
T2 |
10985 |
1801 |
0 |
0 |
T3 |
86388 |
27809 |
0 |
0 |
T4 |
13704 |
1272 |
0 |
0 |
T5 |
5802 |
272 |
0 |
0 |
T10 |
9648 |
1372 |
0 |
0 |
T11 |
1440 |
131 |
0 |
0 |
T16 |
12894 |
256 |
0 |
0 |
T17 |
12450 |
2371 |
0 |
0 |
T18 |
9312 |
1288 |
0 |
0 |
T19 |
7044 |
256 |
0 |
0 |
T22 |
4000 |
0 |
0 |
0 |
T26 |
0 |
4067 |
0 |
0 |
T32 |
0 |
73902 |
0 |
0 |
T33 |
0 |
133043 |
0 |
0 |
T36 |
0 |
1448 |
0 |
0 |
T37 |
0 |
1333 |
0 |
0 |
T38 |
0 |
1829 |
0 |
0 |
T49 |
0 |
1677 |
0 |
0 |
T50 |
0 |
12387 |
0 |
0 |
ReqStaysHighUntilGranted0_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2136130864 |
64119390 |
0 |
0 |
T1 |
15872 |
128 |
0 |
0 |
T2 |
8788 |
128 |
0 |
0 |
T3 |
57592 |
128 |
0 |
0 |
T4 |
9136 |
128 |
0 |
0 |
T5 |
3868 |
136 |
0 |
0 |
T10 |
6432 |
128 |
0 |
0 |
T16 |
8596 |
128 |
0 |
0 |
T17 |
8300 |
420 |
0 |
0 |
T18 |
6208 |
128 |
0 |
0 |
T19 |
4696 |
128 |
0 |
0 |
RoundRobin_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2136515550 |
0 |
0 |
6270 |
ValidKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2136515550 |
2131530360 |
0 |
0 |
T1 |
23808 |
23280 |
0 |
0 |
T2 |
13182 |
12636 |
0 |
0 |
T3 |
86388 |
85866 |
0 |
0 |
T4 |
13704 |
13344 |
0 |
0 |
T5 |
5802 |
5226 |
0 |
0 |
T10 |
9648 |
9150 |
0 |
0 |
T16 |
12894 |
12354 |
0 |
0 |
T17 |
12450 |
11946 |
0 |
0 |
T18 |
9312 |
8940 |
0 |
0 |
T19 |
7044 |
6624 |
0 |
0 |
gen_data_port_assertion.DataFlow_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1424343700 |
64119791 |
0 |
0 |
T1 |
15872 |
128 |
0 |
0 |
T2 |
8788 |
128 |
0 |
0 |
T3 |
57592 |
128 |
0 |
0 |
T4 |
9136 |
128 |
0 |
0 |
T5 |
3868 |
136 |
0 |
0 |
T10 |
6432 |
128 |
0 |
0 |
T16 |
8596 |
128 |
0 |
0 |
T17 |
8300 |
420 |
0 |
0 |
T18 |
6208 |
128 |
0 |
0 |
T19 |
4696 |
128 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_eflash.gen_flash_cores[0].u_core.u_rd.u_valid_random
| Line No. | Total | Covered | Percent |
TOTAL | | 52 | 48 | 92.31 |
CONT_ASSIGN | 62 | 0 | 0 | |
CONT_ASSIGN | 112 | 1 | 1 | 100.00 |
CONT_ASSIGN | 112 | 1 | 1 | 100.00 |
CONT_ASSIGN | 112 | 1 | 1 | 100.00 |
CONT_ASSIGN | 112 | 1 | 1 | 100.00 |
CONT_ASSIGN | 118 | 1 | 1 | 100.00 |
CONT_ASSIGN | 118 | 1 | 1 | 100.00 |
CONT_ASSIGN | 118 | 1 | 1 | 100.00 |
CONT_ASSIGN | 118 | 1 | 1 | 100.00 |
CONT_ASSIGN | 122 | 1 | 0 | 0.00 |
CONT_ASSIGN | 122 | 1 | 0 | 0.00 |
CONT_ASSIGN | 122 | 1 | 0 | 0.00 |
CONT_ASSIGN | 122 | 1 | 0 | 0.00 |
CONT_ASSIGN | 126 | 1 | 1 | 100.00 |
CONT_ASSIGN | 126 | 1 | 1 | 100.00 |
CONT_ASSIGN | 126 | 1 | 1 | 100.00 |
CONT_ASSIGN | 126 | 1 | 1 | 100.00 |
CONT_ASSIGN | 128 | 1 | 1 | 100.00 |
CONT_ASSIGN | 128 | 1 | 1 | 100.00 |
CONT_ASSIGN | 128 | 1 | 1 | 100.00 |
CONT_ASSIGN | 128 | 1 | 1 | 100.00 |
CONT_ASSIGN | 148 | 1 | 1 | 100.00 |
CONT_ASSIGN | 148 | 1 | 1 | 100.00 |
CONT_ASSIGN | 148 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 1 | 100.00 |
CONT_ASSIGN | 151 | 1 | 1 | 100.00 |
CONT_ASSIGN | 151 | 1 | 1 | 100.00 |
CONT_ASSIGN | 151 | 1 | 1 | 100.00 |
CONT_ASSIGN | 155 | 1 | 1 | 100.00 |
CONT_ASSIGN | 155 | 1 | 1 | 100.00 |
CONT_ASSIGN | 155 | 1 | 1 | 100.00 |
CONT_ASSIGN | 156 | 1 | 1 | 100.00 |
CONT_ASSIGN | 156 | 1 | 1 | 100.00 |
CONT_ASSIGN | 156 | 1 | 1 | 100.00 |
CONT_ASSIGN | 160 | 1 | 1 | 100.00 |
CONT_ASSIGN | 160 | 1 | 1 | 100.00 |
CONT_ASSIGN | 160 | 1 | 1 | 100.00 |
CONT_ASSIGN | 161 | 1 | 1 | 100.00 |
CONT_ASSIGN | 161 | 1 | 1 | 100.00 |
CONT_ASSIGN | 161 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 0 | 0 | |
CONT_ASSIGN | 163 | 0 | 0 | |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 164 | 1 | 1 | 100.00 |
CONT_ASSIGN | 164 | 1 | 1 | 100.00 |
CONT_ASSIGN | 164 | 1 | 1 | 100.00 |
CONT_ASSIGN | 174 | 1 | 1 | 100.00 |
CONT_ASSIGN | 180 | 1 | 1 | 100.00 |
CONT_ASSIGN | 182 | 1 | 1 | 100.00 |
CONT_ASSIGN | 183 | 1 | 1 | 100.00 |
ALWAYS | 191 | 3 | 3 | 100.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
| Total | Covered | Percent |
Conditions | 130 | 127 | 97.69 |
Logical | 130 | 127 | 97.69 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 118
EXPRESSION (req_i[0] & gen_normal_case.prio_mask_q[0])
----1--- ---------------2--------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T2,T32,T38 |
1 | 0 | Covered | T2,T3,T4 |
1 | 1 | Covered | T2,T3,T4 |
LINE 118
EXPRESSION (req_i[1] & gen_normal_case.prio_mask_q[1])
----1--- ---------------2--------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T2,T4,T32 |
1 | 0 | Covered | T2,T3,T4 |
1 | 1 | Covered | T2,T3,T4 |
LINE 118
EXPRESSION (req_i[2] & gen_normal_case.prio_mask_q[2])
----1--- ---------------2--------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T2,T4,T12 |
1 | 0 | Covered | T2,T3,T4 |
1 | 1 | Covered | T2,T3,T4 |
LINE 118
EXPRESSION (req_i[3] & gen_normal_case.prio_mask_q[3])
----1--- ---------------2--------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T198,T199,T203 |
1 | 1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 1 | 1 | Not Covered | |
1 | 0 | 1 | Covered | T2,T3,T4 |
1 | 1 | 0 | Covered | T2,T3,T4 |
1 | 1 | 1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 1 | 1 | Not Covered | |
1 | 0 | 1 | Covered | T2,T3,T4 |
1 | 1 | 0 | Covered | T2,T3,T4 |
1 | 1 | 1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 1 | 1 | Not Covered | |
1 | 0 | 1 | Covered | T2,T3,T4 |
1 | 1 | 0 | Covered | T2,T3,T4 |
1 | 1 | 1 | Covered | T2,T3,T18 |
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- | Status | Tests |
0 | 1 | 1 | Covered | T1,T2,T3 |
1 | 0 | 1 | Covered | T2,T3,T4 |
1 | 1 | 0 | Covered | T2,T3,T18 |
1 | 1 | 1 | Covered | T2,T3,T18 |
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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 0 | Covered | T2,T3,T4 |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Unreachable | |
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- | Status | Tests |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T2,T3,T4 |
1 | 1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 0 | Covered | T2,T3,T4 |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T2,T3,T4 |
1 | 1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 0 | Covered | T2,T3,T18 |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T2,T3,T18 |
1 | 1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 0 | Covered | T2,T3,T18 |
0 | 1 | Covered | T2,T3,T18 |
1 | 0 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T2,T3,T18 |
1 | 1 | Covered | T2,T3,T18 |
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- | Status | Tests |
0 | 0 | Covered | T2,T3,T4 |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 0 | Covered | T2,T3,T4 |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 0 | Covered | T2,T3,T4 |
0 | 1 | Covered | T2,T3,T18 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T2,T3,T18 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T69,T71,T82 |
1 | 0 | Covered | T69,T71,T82 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T2,T3,T18 |
1 | 0 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T69,T71,T82 |
1 | 0 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T32,T70,T71 |
1 | 0 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T2,T3,T18 |
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- | Status | Tests |
0 | Covered | T2,T3,T4 |
1 | Covered | T1,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- | Status | Tests |
0 | Covered | T2,T3,T4 |
1 | Covered | T1,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- | Status | Tests |
0 | Covered | T2,T3,T4 |
1 | Covered | T1,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- | Status | Tests |
0 | Covered | T2,T3,T4 |
1 | Covered | T1,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- | Status | Tests |
0 | Covered | T2,T3,T4 |
1 | Covered | T1,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- | Status | Tests |
0 | Covered | T2,T3,T4 |
1 | Covered | T1,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- | Status | Tests |
0 | 1 | Unreachable | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T2,T3,T4 |
1 | 1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 1 | Unreachable | |
1 | 0 | Covered | T2,T3,T4 |
1 | 1 | Covered | T1,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- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T2,T3,T4 |
1 | 1 | Covered | T2,T3,T4 |
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- | Status | Tests |
0 | 1 | Covered | T12,T32,T69 |
1 | 0 | Covered | T2,T3,T4 |
1 | 1 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Unreachable | |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Unreachable | |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Covered | T2,T3,T4 |
Branch Coverage for Instance : tb.dut.u_eflash.gen_flash_cores[0].u_core.u_rd.u_valid_random
| Line No. | Total | Covered | Percent |
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- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T2,T3,T4 |
156 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0];
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T2,T3,T4 |
155 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0];
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T2,T3,T4 |
156 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0];
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T2,T3,T4 |
155 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0];
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T2,T3,T4 |
156 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0];
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T2,T3,T4 |
128 assign prio_mask_d[offset] = (|req_i) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T2,T3,T4 |
0 |
Covered |
T1,T2,T3 |
128 assign prio_mask_d[offset] = (|req_i) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T2,T3,T4 |
0 |
Covered |
T1,T2,T3 |
128 assign prio_mask_d[offset] = (|req_i) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T2,T3,T4 |
0 |
Covered |
T1,T2,T3 |
128 assign prio_mask_d[offset] = (|req_i) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T2,T3,T4 |
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- | Status | Tests |
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
Assertion Details
CheckHotOne_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
355255060 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
14311 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
1991 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
0 |
0 |
CheckNGreaterZero_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1047 |
1047 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T5 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T16 |
1 |
1 |
0 |
0 |
T17 |
1 |
1 |
0 |
0 |
T18 |
1 |
1 |
0 |
0 |
T19 |
1 |
1 |
0 |
0 |
GntImpliesReady_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
2449750 |
0 |
0 |
T2 |
2197 |
50 |
0 |
0 |
T3 |
14398 |
372 |
0 |
0 |
T4 |
2284 |
2 |
0 |
0 |
T5 |
967 |
0 |
0 |
0 |
T10 |
1608 |
1 |
0 |
0 |
T11 |
0 |
1 |
0 |
0 |
T16 |
2149 |
0 |
0 |
0 |
T17 |
2075 |
0 |
0 |
0 |
T18 |
1552 |
69 |
0 |
0 |
T19 |
1174 |
0 |
0 |
0 |
T22 |
2000 |
0 |
0 |
0 |
T32 |
0 |
60 |
0 |
0 |
T37 |
0 |
33 |
0 |
0 |
T38 |
0 |
23 |
0 |
0 |
T49 |
0 |
26 |
0 |
0 |
GntImpliesValid_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
2449750 |
0 |
0 |
T2 |
2197 |
50 |
0 |
0 |
T3 |
14398 |
372 |
0 |
0 |
T4 |
2284 |
2 |
0 |
0 |
T5 |
967 |
0 |
0 |
0 |
T10 |
1608 |
1 |
0 |
0 |
T11 |
0 |
1 |
0 |
0 |
T16 |
2149 |
0 |
0 |
0 |
T17 |
2075 |
0 |
0 |
0 |
T18 |
1552 |
69 |
0 |
0 |
T19 |
1174 |
0 |
0 |
0 |
T22 |
2000 |
0 |
0 |
0 |
T32 |
0 |
60 |
0 |
0 |
T37 |
0 |
33 |
0 |
0 |
T38 |
0 |
23 |
0 |
0 |
T49 |
0 |
26 |
0 |
0 |
GrantKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
355255060 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
14311 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
1991 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
0 |
0 |
IdxKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
355255060 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
14311 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
1991 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
0 |
0 |
IndexIsCorrect_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
2449750 |
0 |
0 |
T2 |
2197 |
50 |
0 |
0 |
T3 |
14398 |
372 |
0 |
0 |
T4 |
2284 |
2 |
0 |
0 |
T5 |
967 |
0 |
0 |
0 |
T10 |
1608 |
1 |
0 |
0 |
T11 |
0 |
1 |
0 |
0 |
T16 |
2149 |
0 |
0 |
0 |
T17 |
2075 |
0 |
0 |
0 |
T18 |
1552 |
69 |
0 |
0 |
T19 |
1174 |
0 |
0 |
0 |
T22 |
2000 |
0 |
0 |
0 |
T32 |
0 |
60 |
0 |
0 |
T37 |
0 |
33 |
0 |
0 |
T38 |
0 |
23 |
0 |
0 |
T49 |
0 |
26 |
0 |
0 |
LockArbDecision_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
0 |
0 |
0 |
NoReadyValidNoGrant_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
252203345 |
0 |
0 |
T1 |
3968 |
3848 |
0 |
0 |
T2 |
2197 |
525 |
0 |
0 |
T3 |
14398 |
616 |
0 |
0 |
T4 |
2284 |
1168 |
0 |
0 |
T5 |
967 |
839 |
0 |
0 |
T10 |
1608 |
373 |
0 |
0 |
T16 |
2149 |
2027 |
0 |
0 |
T17 |
2075 |
1959 |
0 |
0 |
T18 |
1552 |
422 |
0 |
0 |
T19 |
1174 |
1072 |
0 |
0 |
ReadyAndValidImplyGrant_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
2449750 |
0 |
0 |
T2 |
2197 |
50 |
0 |
0 |
T3 |
14398 |
372 |
0 |
0 |
T4 |
2284 |
2 |
0 |
0 |
T5 |
967 |
0 |
0 |
0 |
T10 |
1608 |
1 |
0 |
0 |
T11 |
0 |
1 |
0 |
0 |
T16 |
2149 |
0 |
0 |
0 |
T17 |
2075 |
0 |
0 |
0 |
T18 |
1552 |
69 |
0 |
0 |
T19 |
1174 |
0 |
0 |
0 |
T22 |
2000 |
0 |
0 |
0 |
T32 |
0 |
60 |
0 |
0 |
T37 |
0 |
33 |
0 |
0 |
T38 |
0 |
23 |
0 |
0 |
T49 |
0 |
26 |
0 |
0 |
ReqAndReadyImplyGrant_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
2449750 |
0 |
0 |
T2 |
2197 |
50 |
0 |
0 |
T3 |
14398 |
372 |
0 |
0 |
T4 |
2284 |
2 |
0 |
0 |
T5 |
967 |
0 |
0 |
0 |
T10 |
1608 |
1 |
0 |
0 |
T11 |
0 |
1 |
0 |
0 |
T16 |
2149 |
0 |
0 |
0 |
T17 |
2075 |
0 |
0 |
0 |
T18 |
1552 |
69 |
0 |
0 |
T19 |
1174 |
0 |
0 |
0 |
T22 |
2000 |
0 |
0 |
0 |
T32 |
0 |
60 |
0 |
0 |
T37 |
0 |
33 |
0 |
0 |
T38 |
0 |
23 |
0 |
0 |
T49 |
0 |
26 |
0 |
0 |
ReqImpliesValid_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
97715461 |
0 |
0 |
T2 |
2197 |
1545 |
0 |
0 |
T3 |
14398 |
13659 |
0 |
0 |
T4 |
2284 |
1016 |
0 |
0 |
T5 |
967 |
0 |
0 |
0 |
T10 |
1608 |
1116 |
0 |
0 |
T11 |
0 |
131 |
0 |
0 |
T16 |
2149 |
0 |
0 |
0 |
T17 |
2075 |
0 |
0 |
0 |
T18 |
1552 |
1032 |
0 |
0 |
T19 |
1174 |
0 |
0 |
0 |
T22 |
2000 |
0 |
0 |
0 |
T32 |
0 |
36948 |
0 |
0 |
T37 |
0 |
713 |
0 |
0 |
T38 |
0 |
953 |
0 |
0 |
T49 |
0 |
1044 |
0 |
0 |
ReqStaysHighUntilGranted0_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
0 |
0 |
0 |
RoundRobin_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
0 |
0 |
1045 |
ValidKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
355255060 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
14311 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
1991 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_eflash.gen_flash_cores[1].u_core.u_rd.u_valid_random
| Line No. | Total | Covered | Percent |
TOTAL | | 52 | 48 | 92.31 |
CONT_ASSIGN | 62 | 0 | 0 | |
CONT_ASSIGN | 112 | 1 | 1 | 100.00 |
CONT_ASSIGN | 112 | 1 | 1 | 100.00 |
CONT_ASSIGN | 112 | 1 | 1 | 100.00 |
CONT_ASSIGN | 112 | 1 | 1 | 100.00 |
CONT_ASSIGN | 118 | 1 | 1 | 100.00 |
CONT_ASSIGN | 118 | 1 | 1 | 100.00 |
CONT_ASSIGN | 118 | 1 | 1 | 100.00 |
CONT_ASSIGN | 118 | 1 | 1 | 100.00 |
CONT_ASSIGN | 122 | 1 | 0 | 0.00 |
CONT_ASSIGN | 122 | 1 | 0 | 0.00 |
CONT_ASSIGN | 122 | 1 | 0 | 0.00 |
CONT_ASSIGN | 122 | 1 | 0 | 0.00 |
CONT_ASSIGN | 126 | 1 | 1 | 100.00 |
CONT_ASSIGN | 126 | 1 | 1 | 100.00 |
CONT_ASSIGN | 126 | 1 | 1 | 100.00 |
CONT_ASSIGN | 126 | 1 | 1 | 100.00 |
CONT_ASSIGN | 128 | 1 | 1 | 100.00 |
CONT_ASSIGN | 128 | 1 | 1 | 100.00 |
CONT_ASSIGN | 128 | 1 | 1 | 100.00 |
CONT_ASSIGN | 128 | 1 | 1 | 100.00 |
CONT_ASSIGN | 148 | 1 | 1 | 100.00 |
CONT_ASSIGN | 148 | 1 | 1 | 100.00 |
CONT_ASSIGN | 148 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 1 | 100.00 |
CONT_ASSIGN | 151 | 1 | 1 | 100.00 |
CONT_ASSIGN | 151 | 1 | 1 | 100.00 |
CONT_ASSIGN | 151 | 1 | 1 | 100.00 |
CONT_ASSIGN | 155 | 1 | 1 | 100.00 |
CONT_ASSIGN | 155 | 1 | 1 | 100.00 |
CONT_ASSIGN | 155 | 1 | 1 | 100.00 |
CONT_ASSIGN | 156 | 1 | 1 | 100.00 |
CONT_ASSIGN | 156 | 1 | 1 | 100.00 |
CONT_ASSIGN | 156 | 1 | 1 | 100.00 |
CONT_ASSIGN | 160 | 1 | 1 | 100.00 |
CONT_ASSIGN | 160 | 1 | 1 | 100.00 |
CONT_ASSIGN | 160 | 1 | 1 | 100.00 |
CONT_ASSIGN | 161 | 1 | 1 | 100.00 |
CONT_ASSIGN | 161 | 1 | 1 | 100.00 |
CONT_ASSIGN | 161 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 0 | 0 | |
CONT_ASSIGN | 163 | 0 | 0 | |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 164 | 1 | 1 | 100.00 |
CONT_ASSIGN | 164 | 1 | 1 | 100.00 |
CONT_ASSIGN | 164 | 1 | 1 | 100.00 |
CONT_ASSIGN | 174 | 1 | 1 | 100.00 |
CONT_ASSIGN | 180 | 1 | 1 | 100.00 |
CONT_ASSIGN | 182 | 1 | 1 | 100.00 |
CONT_ASSIGN | 183 | 1 | 1 | 100.00 |
ALWAYS | 191 | 3 | 3 | 100.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
| Total | Covered | Percent |
Conditions | 130 | 127 | 97.69 |
Logical | 130 | 127 | 97.69 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 118
EXPRESSION (req_i[0] & gen_normal_case.prio_mask_q[0])
----1--- ---------------2--------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T32,T49,T33 |
1 | 0 | Covered | T3,T17,T12 |
1 | 1 | Covered | T3,T17,T12 |
LINE 118
EXPRESSION (req_i[1] & gen_normal_case.prio_mask_q[1])
----1--- ---------------2--------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T32,T49,T33 |
1 | 0 | Covered | T3,T17,T12 |
1 | 1 | Covered | T3,T17,T12 |
LINE 118
EXPRESSION (req_i[2] & gen_normal_case.prio_mask_q[2])
----1--- ---------------2--------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T32,T49,T33 |
1 | 0 | Covered | T3,T17,T12 |
1 | 1 | Covered | T3,T17,T12 |
LINE 118
EXPRESSION (req_i[3] & gen_normal_case.prio_mask_q[3])
----1--- ---------------2--------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T3,T17,T12 |
1 | 0 | Covered | T82,T198,T199 |
1 | 1 | Covered | T3,T17,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- | Status | Tests |
0 | 1 | 1 | Not Covered | |
1 | 0 | 1 | Covered | T3,T17,T12 |
1 | 1 | 0 | Covered | T3,T17,T12 |
1 | 1 | 1 | Covered | T3,T17,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- | Status | Tests |
0 | 1 | 1 | Not Covered | |
1 | 0 | 1 | Covered | T3,T17,T12 |
1 | 1 | 0 | Covered | T3,T17,T12 |
1 | 1 | 1 | Covered | T3,T17,T12 |
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- | Status | Tests |
0 | 1 | 1 | Not Covered | |
1 | 0 | 1 | Covered | T3,T17,T12 |
1 | 1 | 0 | Covered | T3,T17,T12 |
1 | 1 | 1 | Covered | T3,T17,T12 |
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- | Status | Tests |
0 | 1 | 1 | Covered | T3,T17,T11 |
1 | 0 | 1 | Covered | T3,T17,T12 |
1 | 1 | 0 | Covered | T3,T17,T12 |
1 | 1 | 1 | Covered | T3,T17,T12 |
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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T3,T17,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- | Status | Tests |
0 | 0 | Covered | T3,T17,T12 |
0 | 1 | Covered | T3,T17,T12 |
1 | 0 | Unreachable | |
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- | Status | Tests |
0 | 1 | Covered | T3,T17,T12 |
1 | 0 | Covered | T3,T17,T12 |
1 | 1 | Covered | T3,T17,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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T3,T17,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- | Status | Tests |
0 | 0 | Covered | T3,T17,T12 |
0 | 1 | Covered | T3,T17,T12 |
1 | 0 | Covered | T3,T17,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- | Status | Tests |
0 | 1 | Covered | T3,T17,T12 |
1 | 0 | Covered | T3,T17,T12 |
1 | 1 | Covered | T3,T17,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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T3,T17,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- | Status | Tests |
0 | 0 | Covered | T3,T17,T12 |
0 | 1 | Covered | T3,T17,T12 |
1 | 0 | Covered | T3,T17,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- | Status | Tests |
0 | 1 | Covered | T3,T17,T12 |
1 | 0 | Covered | T3,T17,T12 |
1 | 1 | Covered | T3,T17,T12 |
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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T3,T17,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- | Status | Tests |
0 | 0 | Covered | T3,T17,T12 |
0 | 1 | Covered | T3,T17,T12 |
1 | 0 | Covered | T3,T17,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- | Status | Tests |
0 | 1 | Covered | T3,T17,T12 |
1 | 0 | Covered | T3,T17,T12 |
1 | 1 | Covered | T3,T17,T12 |
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- | Status | Tests |
0 | 0 | Covered | T3,T17,T12 |
0 | 1 | Covered | T3,T17,T12 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 1 | Covered | T3,T17,T12 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T3,T17,T12 |
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- | Status | Tests |
0 | 0 | Covered | T3,T17,T12 |
0 | 1 | Covered | T3,T17,T12 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 1 | Covered | T3,T17,T12 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T3,T17,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- | Status | Tests |
0 | 0 | Covered | T3,T17,T12 |
0 | 1 | Covered | T3,T17,T12 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 1 | Covered | T3,T17,T12 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T3,T17,T12 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T51,T71,T82 |
1 | 0 | Covered | T51,T71,T82 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T3,T17,T12 |
1 | 0 | Covered | T3,T17,T12 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T3,T17,T12 |
1 | 0 | Covered | T3,T17,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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T51,T71,T82 |
1 | 0 | Covered | T3,T17,T12 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T51,T70,T71 |
1 | 0 | Covered | T3,T17,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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T3,T17,T12 |
1 | 0 | Covered | T3,T17,T12 |
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- | Status | Tests |
0 | Covered | T3,T17,T12 |
1 | Covered | T1,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- | Status | Tests |
0 | Covered | T3,T17,T12 |
1 | Covered | T1,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- | Status | Tests |
0 | Covered | T3,T17,T12 |
1 | Covered | T1,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- | Status | Tests |
0 | Covered | T3,T17,T12 |
1 | Covered | T1,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- | Status | Tests |
0 | Covered | T3,T17,T12 |
1 | Covered | T1,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- | Status | Tests |
0 | Covered | T3,T17,T12 |
1 | Covered | T1,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- | Status | Tests |
0 | 1 | Unreachable | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T3,T17,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- | Status | Tests |
0 | 1 | Covered | T3,T17,T12 |
1 | 0 | Covered | T3,T17,T12 |
1 | 1 | Covered | T3,T17,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- | Status | Tests |
0 | 1 | Covered | T3,T17,T12 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T3,T17,T12 |
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- | Status | Tests |
0 | 1 | Unreachable | |
1 | 0 | Covered | T3,T17,T12 |
1 | 1 | Covered | T1,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- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T3,T17,T12 |
1 | 1 | Covered | T3,T17,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- | Status | Tests |
0 | 1 | Covered | T32,T51,T70 |
1 | 0 | Covered | T3,T17,T12 |
1 | 1 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T3,T17,T12 |
1 | 0 | Unreachable | |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T3,T17,T12 |
1 | 0 | Unreachable | |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T3,T17,T12 |
1 | 0 | Covered | T3,T17,T12 |
Branch Coverage for Instance : tb.dut.u_eflash.gen_flash_cores[1].u_core.u_rd.u_valid_random
| Line No. | Total | Covered | Percent |
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- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T3,T17,T12 |
156 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0];
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T3,T17,T12 |
155 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0];
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T3,T17,T12 |
156 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0];
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T3,T17,T12 |
155 assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0];
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T3,T17,T12 |
156 assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0];
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T3,T17,T12 |
128 assign prio_mask_d[offset] = (|req_i) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T3,T17,T12 |
0 |
Covered |
T1,T2,T3 |
128 assign prio_mask_d[offset] = (|req_i) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T3,T17,T12 |
0 |
Covered |
T1,T2,T3 |
128 assign prio_mask_d[offset] = (|req_i) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T3,T17,T12 |
0 |
Covered |
T1,T2,T3 |
128 assign prio_mask_d[offset] = (|req_i) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T3,T17,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- | Status | Tests |
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
Assertion Details
CheckHotOne_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
355255060 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
14311 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
1991 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
0 |
0 |
CheckNGreaterZero_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1047 |
1047 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T5 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T16 |
1 |
1 |
0 |
0 |
T17 |
1 |
1 |
0 |
0 |
T18 |
1 |
1 |
0 |
0 |
T19 |
1 |
1 |
0 |
0 |
GntImpliesReady_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
2378267 |
0 |
0 |
T3 |
14398 |
294 |
0 |
0 |
T4 |
2284 |
0 |
0 |
0 |
T5 |
967 |
0 |
0 |
0 |
T10 |
1608 |
0 |
0 |
0 |
T11 |
1440 |
0 |
0 |
0 |
T16 |
2149 |
0 |
0 |
0 |
T17 |
2075 |
69 |
0 |
0 |
T18 |
1552 |
0 |
0 |
0 |
T19 |
1174 |
0 |
0 |
0 |
T22 |
2000 |
0 |
0 |
0 |
T26 |
0 |
29 |
0 |
0 |
T32 |
0 |
148 |
0 |
0 |
T33 |
0 |
390 |
0 |
0 |
T36 |
0 |
19 |
0 |
0 |
T37 |
0 |
4 |
0 |
0 |
T49 |
0 |
33 |
0 |
0 |
T50 |
0 |
228 |
0 |
0 |
T52 |
0 |
240 |
0 |
0 |
GntImpliesValid_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
2378267 |
0 |
0 |
T3 |
14398 |
294 |
0 |
0 |
T4 |
2284 |
0 |
0 |
0 |
T5 |
967 |
0 |
0 |
0 |
T10 |
1608 |
0 |
0 |
0 |
T11 |
1440 |
0 |
0 |
0 |
T16 |
2149 |
0 |
0 |
0 |
T17 |
2075 |
69 |
0 |
0 |
T18 |
1552 |
0 |
0 |
0 |
T19 |
1174 |
0 |
0 |
0 |
T22 |
2000 |
0 |
0 |
0 |
T26 |
0 |
29 |
0 |
0 |
T32 |
0 |
148 |
0 |
0 |
T33 |
0 |
390 |
0 |
0 |
T36 |
0 |
19 |
0 |
0 |
T37 |
0 |
4 |
0 |
0 |
T49 |
0 |
33 |
0 |
0 |
T50 |
0 |
228 |
0 |
0 |
T52 |
0 |
240 |
0 |
0 |
GrantKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
355255060 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
14311 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
1991 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
0 |
0 |
IdxKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
355255060 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
14311 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
1991 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
0 |
0 |
IndexIsCorrect_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
2378267 |
0 |
0 |
T3 |
14398 |
294 |
0 |
0 |
T4 |
2284 |
0 |
0 |
0 |
T5 |
967 |
0 |
0 |
0 |
T10 |
1608 |
0 |
0 |
0 |
T11 |
1440 |
0 |
0 |
0 |
T16 |
2149 |
0 |
0 |
0 |
T17 |
2075 |
69 |
0 |
0 |
T18 |
1552 |
0 |
0 |
0 |
T19 |
1174 |
0 |
0 |
0 |
T22 |
2000 |
0 |
0 |
0 |
T26 |
0 |
29 |
0 |
0 |
T32 |
0 |
148 |
0 |
0 |
T33 |
0 |
390 |
0 |
0 |
T36 |
0 |
19 |
0 |
0 |
T37 |
0 |
4 |
0 |
0 |
T49 |
0 |
33 |
0 |
0 |
T50 |
0 |
228 |
0 |
0 |
T52 |
0 |
240 |
0 |
0 |
LockArbDecision_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
0 |
0 |
0 |
NoReadyValidNoGrant_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
259807617 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
413 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
456 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
0 |
0 |
ReadyAndValidImplyGrant_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
2378267 |
0 |
0 |
T3 |
14398 |
294 |
0 |
0 |
T4 |
2284 |
0 |
0 |
0 |
T5 |
967 |
0 |
0 |
0 |
T10 |
1608 |
0 |
0 |
0 |
T11 |
1440 |
0 |
0 |
0 |
T16 |
2149 |
0 |
0 |
0 |
T17 |
2075 |
69 |
0 |
0 |
T18 |
1552 |
0 |
0 |
0 |
T19 |
1174 |
0 |
0 |
0 |
T22 |
2000 |
0 |
0 |
0 |
T26 |
0 |
29 |
0 |
0 |
T32 |
0 |
148 |
0 |
0 |
T33 |
0 |
390 |
0 |
0 |
T36 |
0 |
19 |
0 |
0 |
T37 |
0 |
4 |
0 |
0 |
T49 |
0 |
33 |
0 |
0 |
T50 |
0 |
228 |
0 |
0 |
T52 |
0 |
240 |
0 |
0 |
ReqAndReadyImplyGrant_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
2378267 |
0 |
0 |
T3 |
14398 |
294 |
0 |
0 |
T4 |
2284 |
0 |
0 |
0 |
T5 |
967 |
0 |
0 |
0 |
T10 |
1608 |
0 |
0 |
0 |
T11 |
1440 |
0 |
0 |
0 |
T16 |
2149 |
0 |
0 |
0 |
T17 |
2075 |
69 |
0 |
0 |
T18 |
1552 |
0 |
0 |
0 |
T19 |
1174 |
0 |
0 |
0 |
T22 |
2000 |
0 |
0 |
0 |
T26 |
0 |
29 |
0 |
0 |
T32 |
0 |
148 |
0 |
0 |
T33 |
0 |
390 |
0 |
0 |
T36 |
0 |
19 |
0 |
0 |
T37 |
0 |
4 |
0 |
0 |
T49 |
0 |
33 |
0 |
0 |
T50 |
0 |
228 |
0 |
0 |
T52 |
0 |
240 |
0 |
0 |
ReqImpliesValid_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
90947261 |
0 |
0 |
T3 |
14398 |
13894 |
0 |
0 |
T4 |
2284 |
0 |
0 |
0 |
T5 |
967 |
0 |
0 |
0 |
T10 |
1608 |
0 |
0 |
0 |
T11 |
1440 |
0 |
0 |
0 |
T16 |
2149 |
0 |
0 |
0 |
T17 |
2075 |
1531 |
0 |
0 |
T18 |
1552 |
0 |
0 |
0 |
T19 |
1174 |
0 |
0 |
0 |
T22 |
2000 |
0 |
0 |
0 |
T26 |
0 |
4067 |
0 |
0 |
T32 |
0 |
36954 |
0 |
0 |
T33 |
0 |
133043 |
0 |
0 |
T36 |
0 |
1448 |
0 |
0 |
T37 |
0 |
620 |
0 |
0 |
T38 |
0 |
876 |
0 |
0 |
T49 |
0 |
633 |
0 |
0 |
T50 |
0 |
12387 |
0 |
0 |
ReqStaysHighUntilGranted0_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
0 |
0 |
0 |
RoundRobin_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
0 |
0 |
1045 |
ValidKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
355255060 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
14311 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
1991 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
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. | Total | Covered | Percent |
TOTAL | | 25 | 25 | 100.00 |
CONT_ASSIGN | 62 | 0 | 0 | |
CONT_ASSIGN | 112 | 1 | 1 | 100.00 |
CONT_ASSIGN | 112 | 1 | 1 | 100.00 |
CONT_ASSIGN | 118 | 1 | 1 | 100.00 |
CONT_ASSIGN | 118 | 1 | 1 | 100.00 |
CONT_ASSIGN | 122 | 1 | 1 | 100.00 |
CONT_ASSIGN | 122 | 1 | 1 | 100.00 |
CONT_ASSIGN | 126 | 1 | 1 | 100.00 |
CONT_ASSIGN | 126 | 1 | 1 | 100.00 |
CONT_ASSIGN | 128 | 1 | 1 | 100.00 |
CONT_ASSIGN | 128 | 1 | 1 | 100.00 |
CONT_ASSIGN | 148 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 1 | 100.00 |
CONT_ASSIGN | 151 | 1 | 1 | 100.00 |
CONT_ASSIGN | 155 | 1 | 1 | 100.00 |
CONT_ASSIGN | 156 | 1 | 1 | 100.00 |
CONT_ASSIGN | 160 | 1 | 1 | 100.00 |
CONT_ASSIGN | 161 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 0 | 0 | |
CONT_ASSIGN | 164 | 1 | 1 | 100.00 |
CONT_ASSIGN | 171 | 1 | 1 | 100.00 |
CONT_ASSIGN | 180 | 1 | 1 | 100.00 |
CONT_ASSIGN | 182 | 1 | 1 | 100.00 |
CONT_ASSIGN | 183 | 1 | 1 | 100.00 |
ALWAYS | 191 | 3 | 3 | 100.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
| Total | Covered | Percent |
Conditions | 51 | 46 | 90.20 |
Logical | 51 | 46 | 90.20 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 118
EXPRESSION (req_i[0] & gen_normal_case.prio_mask_q[0])
----1--- ---------------2--------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 118
EXPRESSION (req_i[1] & gen_normal_case.prio_mask_q[1])
----1--- ---------------2--------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T17,T31,T32 |
1 | 1 | Covered | T17,T8,T31 |
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- | Status | Tests |
0 | 1 | 1 | Not Covered | |
1 | 0 | 1 | Not Covered | |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,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- | Status | Tests |
0 | 1 | 1 | Covered | T98 |
1 | 0 | 1 | Not Covered | |
1 | 1 | 0 | Covered | T17,T8,T31 |
1 | 1 | 1 | Covered | T17,T8,T31 |
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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Unreachable | |
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- | Status | Tests |
0 | 1 | Covered | T17,T8,T31 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T17,T8,T31 |
0 | 1 | Covered | T17,T8,T31 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T17,T8,T31 |
1 | 1 | Covered | T17,T8,T31 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T97 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T17,T8,T31 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T17,T8,T31 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T17,T8,T31 |
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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | 1 | Unreachable | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,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- | Status | Tests |
0 | 1 | Unreachable | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Unreachable | |
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. | Total | Covered | Percent |
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- | Status | Tests |
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- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
128 assign prio_mask_d[offset] = (|req_i) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
128 assign prio_mask_d[offset] = (|req_i) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
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- | Status | Tests |
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
Assertion Details
CheckHotOne_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
355255060 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
14311 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
1991 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
0 |
0 |
CheckNGreaterZero_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1047 |
1047 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T5 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T16 |
1 |
1 |
0 |
0 |
T17 |
1 |
1 |
0 |
0 |
T18 |
1 |
1 |
0 |
0 |
T19 |
1 |
1 |
0 |
0 |
GntImpliesReady_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
15260337 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
GntImpliesValid_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
15260337 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
GrantKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
355255060 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
14311 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
1991 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
0 |
0 |
IdxKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
355255060 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
14311 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
1991 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
0 |
0 |
IndexIsCorrect_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
15260337 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
LockArbDecision_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356048831 |
15260291 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
NoReadyValidNoGrant_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
324734288 |
0 |
0 |
T1 |
3968 |
3816 |
0 |
0 |
T2 |
2197 |
2042 |
0 |
0 |
T3 |
14398 |
14247 |
0 |
0 |
T4 |
2284 |
2160 |
0 |
0 |
T5 |
967 |
803 |
0 |
0 |
T10 |
1608 |
1461 |
0 |
0 |
T16 |
2149 |
1995 |
0 |
0 |
T17 |
2075 |
1781 |
0 |
0 |
T18 |
1552 |
1426 |
0 |
0 |
T19 |
1174 |
1040 |
0 |
0 |
ReadyAndValidImplyGrant_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
15260337 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
ReqAndReadyImplyGrant_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
15260337 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
ReqImpliesValid_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
30520741 |
0 |
0 |
T1 |
3968 |
64 |
0 |
0 |
T2 |
2197 |
64 |
0 |
0 |
T3 |
14398 |
64 |
0 |
0 |
T4 |
2284 |
64 |
0 |
0 |
T5 |
967 |
68 |
0 |
0 |
T10 |
1608 |
64 |
0 |
0 |
T16 |
2149 |
64 |
0 |
0 |
T17 |
2075 |
210 |
0 |
0 |
T18 |
1552 |
64 |
0 |
0 |
T19 |
1174 |
64 |
0 |
0 |
ReqStaysHighUntilGranted0_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
355977947 |
15260218 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
RoundRobin_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
0 |
0 |
1045 |
ValidKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
355255060 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
14311 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
1991 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
0 |
0 |
gen_data_port_assertion.DataFlow_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
15260337 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
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. | Total | Covered | Percent |
TOTAL | | 25 | 25 | 100.00 |
CONT_ASSIGN | 62 | 0 | 0 | |
CONT_ASSIGN | 112 | 1 | 1 | 100.00 |
CONT_ASSIGN | 112 | 1 | 1 | 100.00 |
CONT_ASSIGN | 118 | 1 | 1 | 100.00 |
CONT_ASSIGN | 118 | 1 | 1 | 100.00 |
CONT_ASSIGN | 122 | 1 | 1 | 100.00 |
CONT_ASSIGN | 122 | 1 | 1 | 100.00 |
CONT_ASSIGN | 126 | 1 | 1 | 100.00 |
CONT_ASSIGN | 126 | 1 | 1 | 100.00 |
CONT_ASSIGN | 128 | 1 | 1 | 100.00 |
CONT_ASSIGN | 128 | 1 | 1 | 100.00 |
CONT_ASSIGN | 148 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 1 | 100.00 |
CONT_ASSIGN | 151 | 1 | 1 | 100.00 |
CONT_ASSIGN | 155 | 1 | 1 | 100.00 |
CONT_ASSIGN | 156 | 1 | 1 | 100.00 |
CONT_ASSIGN | 160 | 1 | 1 | 100.00 |
CONT_ASSIGN | 161 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 0 | 0 | |
CONT_ASSIGN | 164 | 1 | 1 | 100.00 |
CONT_ASSIGN | 171 | 1 | 1 | 100.00 |
CONT_ASSIGN | 180 | 1 | 1 | 100.00 |
CONT_ASSIGN | 182 | 1 | 1 | 100.00 |
CONT_ASSIGN | 183 | 1 | 1 | 100.00 |
ALWAYS | 191 | 3 | 3 | 100.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
| Total | Covered | Percent |
Conditions | 51 | 49 | 96.08 |
Logical | 51 | 49 | 96.08 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 118
EXPRESSION (req_i[0] & gen_normal_case.prio_mask_q[0])
----1--- ---------------2--------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 118
EXPRESSION (req_i[1] & gen_normal_case.prio_mask_q[1])
----1--- ---------------2--------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T17,T31,T32 |
1 | 1 | Covered | T17,T8,T31 |
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- | Status | Tests |
0 | 1 | 1 | Not Covered | |
1 | 0 | 1 | Covered | T98 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,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- | Status | Tests |
0 | 1 | 1 | Covered | T98 |
1 | 0 | 1 | Covered | T98 |
1 | 1 | 0 | Covered | T17,T8,T31 |
1 | 1 | 1 | Covered | T17,T8,T31 |
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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Unreachable | |
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- | Status | Tests |
0 | 1 | Covered | T17,T8,T31 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T17,T8,T31 |
0 | 1 | Covered | T17,T8,T31 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T17,T8,T31 |
1 | 1 | Covered | T17,T8,T31 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T98 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 1 | Covered | T98 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T17,T8,T31 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T17,T8,T31 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T17,T8,T31 |
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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | 1 | Unreachable | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,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- | Status | Tests |
0 | 1 | Unreachable | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Unreachable | |
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. | Total | Covered | Percent |
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- | Status | Tests |
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- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
128 assign prio_mask_d[offset] = (|req_i) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
128 assign prio_mask_d[offset] = (|req_i) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
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- | Status | Tests |
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
Assertion Details
CheckHotOne_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
355255060 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
14311 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
1991 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
0 |
0 |
CheckNGreaterZero_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1047 |
1047 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T5 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T16 |
1 |
1 |
0 |
0 |
T17 |
1 |
1 |
0 |
0 |
T18 |
1 |
1 |
0 |
0 |
T19 |
1 |
1 |
0 |
0 |
GntImpliesReady_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
15260367 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
GntImpliesValid_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
15260367 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
GrantKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
355255060 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
14311 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
1991 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
0 |
0 |
IdxKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
355255060 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
14311 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
1991 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
0 |
0 |
IndexIsCorrect_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
15260367 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
LockArbDecision_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356048831 |
15260291 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
NoReadyValidNoGrant_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
324734320 |
0 |
0 |
T1 |
3968 |
3816 |
0 |
0 |
T2 |
2197 |
2042 |
0 |
0 |
T3 |
14398 |
14247 |
0 |
0 |
T4 |
2284 |
2160 |
0 |
0 |
T5 |
967 |
803 |
0 |
0 |
T10 |
1608 |
1461 |
0 |
0 |
T16 |
2149 |
1995 |
0 |
0 |
T17 |
2075 |
1781 |
0 |
0 |
T18 |
1552 |
1426 |
0 |
0 |
T19 |
1174 |
1040 |
0 |
0 |
ReadyAndValidImplyGrant_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
15260367 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
ReqAndReadyImplyGrant_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
15260367 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
ReqImpliesValid_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
30520739 |
0 |
0 |
T1 |
3968 |
64 |
0 |
0 |
T2 |
2197 |
64 |
0 |
0 |
T3 |
14398 |
64 |
0 |
0 |
T4 |
2284 |
64 |
0 |
0 |
T5 |
967 |
68 |
0 |
0 |
T10 |
1608 |
64 |
0 |
0 |
T16 |
2149 |
64 |
0 |
0 |
T17 |
2075 |
210 |
0 |
0 |
T18 |
1552 |
64 |
0 |
0 |
T19 |
1174 |
64 |
0 |
0 |
ReqStaysHighUntilGranted0_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
355977947 |
15260218 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
RoundRobin_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
0 |
0 |
1045 |
ValidKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
355255060 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
14311 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
1991 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
0 |
0 |
gen_data_port_assertion.DataFlow_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
15260367 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
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. | Total | Covered | Percent |
TOTAL | | 23 | 23 | 100.00 |
CONT_ASSIGN | 62 | 0 | 0 | |
CONT_ASSIGN | 112 | 1 | 1 | 100.00 |
CONT_ASSIGN | 112 | 1 | 1 | 100.00 |
CONT_ASSIGN | 118 | 1 | 1 | 100.00 |
CONT_ASSIGN | 118 | 1 | 1 | 100.00 |
CONT_ASSIGN | 122 | 1 | 1 | 100.00 |
CONT_ASSIGN | 122 | 1 | 1 | 100.00 |
CONT_ASSIGN | 126 | 0 | 0 | |
CONT_ASSIGN | 126 | 0 | 0 | |
CONT_ASSIGN | 128 | 1 | 1 | 100.00 |
CONT_ASSIGN | 128 | 1 | 1 | 100.00 |
CONT_ASSIGN | 148 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 1 | 100.00 |
CONT_ASSIGN | 151 | 1 | 1 | 100.00 |
CONT_ASSIGN | 155 | 1 | 1 | 100.00 |
CONT_ASSIGN | 156 | 1 | 1 | 100.00 |
CONT_ASSIGN | 160 | 1 | 1 | 100.00 |
CONT_ASSIGN | 161 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 0 | 0 | |
CONT_ASSIGN | 164 | 1 | 1 | 100.00 |
CONT_ASSIGN | 171 | 1 | 1 | 100.00 |
CONT_ASSIGN | 180 | 1 | 1 | 100.00 |
CONT_ASSIGN | 182 | 1 | 1 | 100.00 |
CONT_ASSIGN | 183 | 1 | 1 | 100.00 |
ALWAYS | 191 | 3 | 3 | 100.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
| Total | Covered | Percent |
Conditions | 43 | 42 | 97.67 |
Logical | 43 | 42 | 97.67 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 118
EXPRESSION (req_i[0] & gen_normal_case.prio_mask_q[0])
----1--- ---------------2--------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 118
EXPRESSION (req_i[1] & gen_normal_case.prio_mask_q[1])
----1--- ---------------2--------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T17,T11,T31 |
1 | 1 | Covered | T17,T11,T8 |
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- | Status | Tests |
0 | 1 | 1 | Unreachable | |
1 | 0 | 1 | Unreachable | T11,T32,T51 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Unreachable | T1,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- | Status | Tests |
0 | 1 | 1 | Unreachable | T99 |
1 | 0 | 1 | Unreachable | T11,T32,T51 |
1 | 1 | 0 | Covered | T17,T11,T8 |
1 | 1 | 1 | Unreachable | T17,T11,T8 |
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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Unreachable | |
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- | Status | Tests |
0 | 1 | Covered | T17,T11,T8 |
1 | 0 | Unreachable | T1,T2,T3 |
1 | 1 | Covered | T1,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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T17,T11,T8 |
0 | 1 | Covered | T17,T11,T8 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Unreachable | T17,T11,T8 |
1 | 1 | Covered | T17,T11,T8 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T11,T32,T51 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 1 | Covered | T11,T32,T51 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T17,T11,T8 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T17,T11,T8 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T17,T11,T8 |
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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | 1 | Unreachable | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,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- | Status | Tests |
0 | 1 | Unreachable | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Unreachable | |
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. | Total | Covered | Percent |
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- | Status | Tests |
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- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
128 assign prio_mask_d[offset] = (|req_i) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
128 assign prio_mask_d[offset] = (|req_i) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
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- | Status | Tests |
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
Assertion Details
CheckHotOne_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
355255060 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
14311 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
1991 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
0 |
0 |
CheckNGreaterZero_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1047 |
1047 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T5 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T16 |
1 |
1 |
0 |
0 |
T17 |
1 |
1 |
0 |
0 |
T18 |
1 |
1 |
0 |
0 |
T19 |
1 |
1 |
0 |
0 |
GntImpliesReady_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
16799521 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
GntImpliesValid_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
16799521 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
GrantKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
355255060 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
14311 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
1991 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
0 |
0 |
IdxKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
355255060 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
14311 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
1991 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
0 |
0 |
IndexIsCorrect_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
16799521 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
LockArbDecision_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085832 |
16799521 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
NoReadyValidNoGrant_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
321655959 |
0 |
0 |
T1 |
3968 |
3816 |
0 |
0 |
T2 |
2197 |
2042 |
0 |
0 |
T3 |
14398 |
14247 |
0 |
0 |
T4 |
2284 |
2160 |
0 |
0 |
T5 |
967 |
803 |
0 |
0 |
T10 |
1608 |
1461 |
0 |
0 |
T16 |
2149 |
1995 |
0 |
0 |
T17 |
2075 |
1781 |
0 |
0 |
T18 |
1552 |
1426 |
0 |
0 |
T19 |
1174 |
1040 |
0 |
0 |
ReadyAndValidImplyGrant_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
16799521 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
ReqAndReadyImplyGrant_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
16799521 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
ReqImpliesValid_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
33599056 |
0 |
0 |
T1 |
3968 |
64 |
0 |
0 |
T2 |
2197 |
64 |
0 |
0 |
T3 |
14398 |
64 |
0 |
0 |
T4 |
2284 |
64 |
0 |
0 |
T5 |
967 |
68 |
0 |
0 |
T10 |
1608 |
64 |
0 |
0 |
T16 |
2149 |
64 |
0 |
0 |
T17 |
2075 |
210 |
0 |
0 |
T18 |
1552 |
64 |
0 |
0 |
T19 |
1174 |
64 |
0 |
0 |
ReqStaysHighUntilGranted0_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356001560 |
16799477 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
RoundRobin_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
0 |
0 |
1045 |
ValidKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
355255060 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
14311 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
1991 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
0 |
0 |
gen_data_port_assertion.DataFlow_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
16799521 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
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. | Total | Covered | Percent |
TOTAL | | 23 | 23 | 100.00 |
CONT_ASSIGN | 62 | 0 | 0 | |
CONT_ASSIGN | 112 | 1 | 1 | 100.00 |
CONT_ASSIGN | 112 | 1 | 1 | 100.00 |
CONT_ASSIGN | 118 | 1 | 1 | 100.00 |
CONT_ASSIGN | 118 | 1 | 1 | 100.00 |
CONT_ASSIGN | 122 | 1 | 1 | 100.00 |
CONT_ASSIGN | 122 | 1 | 1 | 100.00 |
CONT_ASSIGN | 126 | 0 | 0 | |
CONT_ASSIGN | 126 | 0 | 0 | |
CONT_ASSIGN | 128 | 1 | 1 | 100.00 |
CONT_ASSIGN | 128 | 1 | 1 | 100.00 |
CONT_ASSIGN | 148 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 1 | 100.00 |
CONT_ASSIGN | 151 | 1 | 1 | 100.00 |
CONT_ASSIGN | 155 | 1 | 1 | 100.00 |
CONT_ASSIGN | 156 | 1 | 1 | 100.00 |
CONT_ASSIGN | 160 | 1 | 1 | 100.00 |
CONT_ASSIGN | 161 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 0 | 0 | |
CONT_ASSIGN | 164 | 1 | 1 | 100.00 |
CONT_ASSIGN | 171 | 1 | 1 | 100.00 |
CONT_ASSIGN | 180 | 1 | 1 | 100.00 |
CONT_ASSIGN | 182 | 1 | 1 | 100.00 |
CONT_ASSIGN | 183 | 1 | 1 | 100.00 |
ALWAYS | 191 | 3 | 3 | 100.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
| Total | Covered | Percent |
Conditions | 43 | 42 | 97.67 |
Logical | 43 | 42 | 97.67 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 118
EXPRESSION (req_i[0] & gen_normal_case.prio_mask_q[0])
----1--- ---------------2--------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 118
EXPRESSION (req_i[1] & gen_normal_case.prio_mask_q[1])
----1--- ---------------2--------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T17,T11,T31 |
1 | 1 | Covered | T17,T11,T8 |
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- | Status | Tests |
0 | 1 | 1 | Unreachable | |
1 | 0 | 1 | Unreachable | T11,T32,T51 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Unreachable | T1,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- | Status | Tests |
0 | 1 | 1 | Unreachable | |
1 | 0 | 1 | Unreachable | T11,T32,T51 |
1 | 1 | 0 | Covered | T17,T11,T8 |
1 | 1 | 1 | Unreachable | T17,T11,T8 |
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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Unreachable | |
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- | Status | Tests |
0 | 1 | Covered | T17,T11,T8 |
1 | 0 | Unreachable | T1,T2,T3 |
1 | 1 | Covered | T1,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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T17,T11,T8 |
0 | 1 | Covered | T17,T11,T8 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Unreachable | T17,T11,T8 |
1 | 1 | Covered | T17,T11,T8 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T11,T32,T51 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 1 | Covered | T11,T32,T51 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T17,T11,T8 |
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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T17,T11,T8 |
1 | 0 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T17,T11,T8 |
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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,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- | Status | Tests |
0 | 1 | Unreachable | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,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- | Status | Tests |
0 | 1 | Unreachable | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,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- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Unreachable | |
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. | Total | Covered | Percent |
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- | Status | Tests |
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- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
128 assign prio_mask_d[offset] = (|req_i) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
128 assign prio_mask_d[offset] = (|req_i) ?
-1-
==>
==>
Branches:
-1- | Status | Tests |
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- | Status | Tests |
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
Assertion Details
CheckHotOne_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
355255060 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
14311 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
1991 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
0 |
0 |
CheckNGreaterZero_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1047 |
1047 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T5 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T16 |
1 |
1 |
0 |
0 |
T17 |
1 |
1 |
0 |
0 |
T18 |
1 |
1 |
0 |
0 |
T19 |
1 |
1 |
0 |
0 |
GntImpliesReady_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
16799566 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
GntImpliesValid_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
16799566 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
GrantKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
355255060 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
14311 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
1991 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
0 |
0 |
IdxKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
355255060 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
14311 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
1991 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
0 |
0 |
IndexIsCorrect_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
16799566 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
LockArbDecision_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085832 |
16799521 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
NoReadyValidNoGrant_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
321655914 |
0 |
0 |
T1 |
3968 |
3816 |
0 |
0 |
T2 |
2197 |
2042 |
0 |
0 |
T3 |
14398 |
14247 |
0 |
0 |
T4 |
2284 |
2160 |
0 |
0 |
T5 |
967 |
803 |
0 |
0 |
T10 |
1608 |
1461 |
0 |
0 |
T16 |
2149 |
1995 |
0 |
0 |
T17 |
2075 |
1781 |
0 |
0 |
T18 |
1552 |
1426 |
0 |
0 |
T19 |
1174 |
1040 |
0 |
0 |
ReadyAndValidImplyGrant_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
16799566 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
ReqAndReadyImplyGrant_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
16799566 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
ReqImpliesValid_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
33599146 |
0 |
0 |
T1 |
3968 |
64 |
0 |
0 |
T2 |
2197 |
64 |
0 |
0 |
T3 |
14398 |
64 |
0 |
0 |
T4 |
2284 |
64 |
0 |
0 |
T5 |
967 |
68 |
0 |
0 |
T10 |
1608 |
64 |
0 |
0 |
T16 |
2149 |
64 |
0 |
0 |
T17 |
2075 |
210 |
0 |
0 |
T18 |
1552 |
64 |
0 |
0 |
T19 |
1174 |
64 |
0 |
0 |
ReqStaysHighUntilGranted0_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356001560 |
16799477 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |
RoundRobin_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
0 |
0 |
1045 |
ValidKnown_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
355255060 |
0 |
0 |
T1 |
3968 |
3880 |
0 |
0 |
T2 |
2197 |
2106 |
0 |
0 |
T3 |
14398 |
14311 |
0 |
0 |
T4 |
2284 |
2224 |
0 |
0 |
T5 |
967 |
871 |
0 |
0 |
T10 |
1608 |
1525 |
0 |
0 |
T16 |
2149 |
2059 |
0 |
0 |
T17 |
2075 |
1991 |
0 |
0 |
T18 |
1552 |
1490 |
0 |
0 |
T19 |
1174 |
1104 |
0 |
0 |
gen_data_port_assertion.DataFlow_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
356085925 |
16799566 |
0 |
0 |
T1 |
3968 |
32 |
0 |
0 |
T2 |
2197 |
32 |
0 |
0 |
T3 |
14398 |
32 |
0 |
0 |
T4 |
2284 |
32 |
0 |
0 |
T5 |
967 |
34 |
0 |
0 |
T10 |
1608 |
32 |
0 |
0 |
T16 |
2149 |
32 |
0 |
0 |
T17 |
2075 |
105 |
0 |
0 |
T18 |
1552 |
32 |
0 |
0 |
T19 |
1174 |
32 |
0 |
0 |