Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / env / common / verilog / err_random / l2ue_errinj.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: l2ue_errinj.v
4// Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
5// 4150 Network Circle, Santa Clara, California 95054, U.S.A.
6//
7// * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
8//
9// This program is free software; you can redistribute it and/or modify
10// it under the terms of the GNU General Public License as published by
11// the Free Software Foundation; version 2 of the License.
12//
13// This program is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16// GNU General Public License for more details.
17//
18// You should have received a copy of the GNU General Public License
19// along with this program; if not, write to the Free Software
20// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21//
22// For the avoidance of doubt, and except that if any non-GPL license
23// choice is available it will apply instead, Sun elects to use only
24// the General Public License version 2 (GPLv2) at this time for any
25// software where a choice of GPL license versions is made
26// available with the language indicating that GPLv2 or any later version
27// may be used, or where a choice of which version of the GPL is applied is
28// otherwise unspecified.
29//
30// Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
31// CA 95054 USA or visit www.sun.com if you need additional information or
32// have any questions.
33//
34// ========== Copyright Header End ============================================
35module l2ue_errinj ( L2_INT_RST,err_cntr);
36
37parameter SAMPLE = 3;
38parameter s0=0,s1=1;
39
40
41//tb_top tb_top();
42
43//input declarations
44input L2_INT_RST;
45
46//output declarations
47output [23:0] err_cntr;
48
49
50//reg declarations
51reg stuck_to0, stuck_to1, rand_bit_flip,err_enable, err_enable_fwd,trph;
52wire take_dae,take_retry;
53reg [1:0] cs,ns;
54reg [2:0] bit_err_enable;
55reg [4:0] bit_pos;
56//reg [6:0] bit_pos1;
57reg [3:0] i;
58reg [11:0] k,k1,n;
59reg [63:0] j;
60reg [23:0] err_cntr;
61reg [2:0] sel_bank;
62
63reg [127:0] way,way_int;
64reg [23:0] cache_col_offset,cache_col_offset_int;
65reg [623:0] dataecc,int;
66reg [23:0] inject_limit;
67reg [39:0] err_addr;
68reg injectErr,start_injection;
69reg Tevent;
70
71integer r,m,rand_limit_hi,rand,rand1,rand2;
72
73
74//wire declarations
75wire [8:0] TRAP_EVENT;
76wire [39:0] err_addr_0,err_addr_1,err_addr_2,err_addr_3,err_addr_4,err_addr_5;
77wire [39:0] err_addr_6,err_addr_7;
78
79
80wire [15:0] cache_way_sel_c3_0,cache_way_sel_c3_1,cache_way_sel_c3_2;
81wire [15:0] cache_way_sel_c3_3,cache_way_sel_c3_4,cache_way_sel_c3_5;
82wire [15:0] cache_way_sel_c3_6,cache_way_sel_c3_7;
83wire [15:0] cache_way_sel_c3;
84
85wire cache_rd_wr_c3_0,cache_rd_wr_c3_1,cache_rd_wr_c3_2;
86wire cache_rd_wr_c3_3,cache_rd_wr_c3_4,cache_rd_wr_c3_5;
87wire cache_rd_wr_c3_6,cache_rd_wr_c3_7;
88wire cache_rd_wr_c3;
89
90wire inst_l2data_vld_c4_0,inst_l2data_vld_c4_1;
91wire inst_l2data_vld_c4_2,inst_l2data_vld_c4_3,inst_l2data_vld_c4_4;
92wire inst_l2data_vld_c4_5,inst_l2data_vld_c4_6,inst_l2data_vld_c4_7;
93wire inst_l2data_vld_c4;
94
95wire [8:0] cache_set_c3_0,cache_set_c3_1,cache_set_c3_2,cache_set_c3_3;
96wire [8:0] cache_set_c3_4,cache_set_c3_5,cache_set_c3_6,cache_set_c3_7;
97wire [8:0] cache_set_c3;
98
99wire [3:0]cache_col_offset_c3_0,cache_col_offset_c3_1;
100wire [3:0]cache_col_offset_c3_2,cache_col_offset_c3_3;
101wire [3:0] cache_col_offset_c3_4,cache_col_offset_c3_5;
102wire [3:0] cache_col_offset_c3_6,cache_col_offset_c3_7;
103wire [3:0] cache_col_offset_c3;
104
105wire [623:0] cache_decc_out_c52_0,cache_decc_out_c52_1;
106wire [623:0] cache_decc_out_c52_2,cache_decc_out_c52_3;
107wire [623:0] cache_decc_out_c52_4,cache_decc_out_c52_5;
108wire [623:0] cache_decc_out_c52_6,cache_decc_out_c52_7;
109wire [623:0] cache_decc_out_c52;
110
111/****
112wire [623:0] l2d_l2t_decc_c6_0, l2d_l2t_decc_c6_1, l2d_l2t_decc_c6_2;
113wire [623:0] l2d_l2t_decc_c6_3, l2d_l2t_decc_c6_4, l2d_l2t_decc_c6_5;
114wire [623:0] l2d_l2t_decc_c6_6, l2d_l2t_decc_c6_7;
115***/
116
117wire [155:0] l2d_l2t_decc_c6_0, l2d_l2t_decc_c6_1, l2d_l2t_decc_c6_2;
118wire [155:0] l2d_l2t_decc_c6_3, l2d_l2t_decc_c6_4, l2d_l2t_decc_c6_5;
119wire [155:0] l2d_l2t_decc_c6_6, l2d_l2t_decc_c6_7,l2d_l2t_decc_c6;
120
121//wire [63:0] L2esr_logged;
122wire L2esr_logged;
123
124assign take_retry = tb_top.cpu.spc0.tlu.trl0.take_ret;
125assign take_dae = tb_top.cpu.spc0.tlu.trl0.take_dae; // For Data Access
126
127assign l2d_l2t_decc_c6_0 = tb_top.cpu.l2d0.l2d_l2t_decc_c6;
128assign l2d_l2t_decc_c6_1 = tb_top.cpu.l2d1.l2d_l2t_decc_c6;
129assign l2d_l2t_decc_c6_2 = tb_top.cpu.l2d2.l2d_l2t_decc_c6;
130assign l2d_l2t_decc_c6_3 = tb_top.cpu.l2d3.l2d_l2t_decc_c6;
131assign l2d_l2t_decc_c6_4 = tb_top.cpu.l2d4.l2d_l2t_decc_c6;
132assign l2d_l2t_decc_c6_5 = tb_top.cpu.l2d5.l2d_l2t_decc_c6;
133assign l2d_l2t_decc_c6_6 = tb_top.cpu.l2d6.l2d_l2t_decc_c6;
134assign l2d_l2t_decc_c6_7 = tb_top.cpu.l2d7.l2d_l2t_decc_c6;
135
136/****
137assign l2d_l2t_decc_c6_0 = tb_top.cpu.l2d0.ctr.l2d_l2t_decc_c6;
138assign l2d_l2t_decc_c6_1 = tb_top.cpu.l2d1.ctr.l2d_l2t_decc_c6;
139assign l2d_l2t_decc_c6_2 = tb_top.cpu.l2d2.ctr.l2d_l2t_decc_c6;
140assign l2d_l2t_decc_c6_3 = tb_top.cpu.l2d3.ctr.l2d_l2t_decc_c6;
141assign l2d_l2t_decc_c6_4 = tb_top.cpu.l2d4.ctr.l2d_l2t_decc_c6;
142assign l2d_l2t_decc_c6_5 = tb_top.cpu.l2d5.ctr.l2d_l2t_decc_c6;
143assign l2d_l2t_decc_c6_6 = tb_top.cpu.l2d6.ctr.l2d_l2t_decc_c6;
144assign l2d_l2t_decc_c6_7 = tb_top.cpu.l2d7.ctr.l2d_l2t_decc_c6;
145
146assign l2d_l2t_decc_c6_0 = tb_top.cpu.l2d0.ctr.l2d_decc_out_c6;
147assign l2d_l2t_decc_c6_1 = tb_top.cpu.l2d1.ctr.l2d_decc_out_c6;
148assign l2d_l2t_decc_c6_2 = tb_top.cpu.l2d2.ctr.l2d_decc_out_c6;
149assign l2d_l2t_decc_c6_3 = tb_top.cpu.l2d3.ctr.l2d_decc_out_c6;
150assign l2d_l2t_decc_c6_4 = tb_top.cpu.l2d4.ctr.l2d_decc_out_c6;
151assign l2d_l2t_decc_c6_5 = tb_top.cpu.l2d5.ctr.l2d_decc_out_c6;
152assign l2d_l2t_decc_c6_6 = tb_top.cpu.l2d6.ctr.l2d_decc_out_c6;
153assign l2d_l2t_decc_c6_7 = tb_top.cpu.l2d7.ctr.l2d_decc_out_c6;
154*****/
155
156
157
158assign err_addr_0 = tb_top.cpu.l2t0.arbadr.arbdp_addr_c2;
159assign err_addr_1 = tb_top.cpu.l2t1.arbadr.arbdp_addr_c2;
160assign err_addr_2 = tb_top.cpu.l2t2.arbadr.arbdp_addr_c2;
161assign err_addr_3 = tb_top.cpu.l2t3.arbadr.arbdp_addr_c2;
162assign err_addr_4 = tb_top.cpu.l2t4.arbadr.arbdp_addr_c2;
163assign err_addr_5 = tb_top.cpu.l2t5.arbadr.arbdp_addr_c2;
164assign err_addr_6 = tb_top.cpu.l2t6.arbadr.arbdp_addr_c2;
165assign err_addr_7 = tb_top.cpu.l2t7.arbadr.arbdp_addr_c2;
166
167//assign TRAP_EVENT = tb_top.cpu.spc0.tlu.trl0_trap_type;
168assign TRAP_EVENT = tb_top.cpu.spc0.tlu.tsd0_wr_trap_type;
169
170assign cache_way_sel_c3_0 = tb_top.cpu.l2d0.ctr.l2t_l2d_way_sel_c3;
171assign cache_way_sel_c3_1 = tb_top.cpu.l2d1.ctr.l2t_l2d_way_sel_c3;
172assign cache_way_sel_c3_2 = tb_top.cpu.l2d2.ctr.l2t_l2d_way_sel_c3;
173assign cache_way_sel_c3_3 = tb_top.cpu.l2d3.ctr.l2t_l2d_way_sel_c3;
174assign cache_way_sel_c3_4 = tb_top.cpu.l2d4.ctr.l2t_l2d_way_sel_c3;
175assign cache_way_sel_c3_5 = tb_top.cpu.l2d5.ctr.l2t_l2d_way_sel_c3;
176assign cache_way_sel_c3_6 = tb_top.cpu.l2d6.ctr.l2t_l2d_way_sel_c3;
177assign cache_way_sel_c3_7 = tb_top.cpu.l2d7.ctr.l2t_l2d_way_sel_c3;
178
179
180//assign cache_way_sel_c3 = {cache_way_sel_c3_7,cache_way_sel_c3_6,cache_way_sel_c3_5,cache_way_sel_c3_4,cache_way_sel_c3_3,cache_way_sel_c3_2,cache_way_sel_c3_1,cache_way_sel_c3_0};
181
182/***
183
184assign cache_way_sel_c3[0] = (cache_way_sel_c3_7[0] || cache_way_sel_c3_6[0] || cache_way_sel_c3_5[0] || cache_way_sel_c3_4[0] || cache_way_sel_c3_3[0] || cache_way_sel_c3_2[0] || cache_way_sel_c3_1[0] || cache_way_sel_c3_0[0]);
185
186assign cache_way_sel_c3[1] = (cache_way_sel_c3_7[1] || cache_way_sel_c3_6[1] || cache_way_sel_c3_5[1] || cache_way_sel_c3_4[1] || cache_way_sel_c3_3[1] || cache_way_sel_c3_2[1] || cache_way_sel_c3_1[1] || cache_way_sel_c3_0[1]);
187
188assign cache_way_sel_c3[2] = (cache_way_sel_c3_7[2] || cache_way_sel_c3_6[2] || cache_way_sel_c3_5[2] || cache_way_sel_c3_4[2] || cache_way_sel_c3_3[2] || cache_way_sel_c3_2[2] || cache_way_sel_c3_1[2] || cache_way_sel_c3_0[2]);
189
190assign cache_way_sel_c3[3] = (cache_way_sel_c3_7[3] || cache_way_sel_c3_6[3] || cache_way_sel_c3_5[3] || cache_way_sel_c3_4[3] || cache_way_sel_c3_3[3] || cache_way_sel_c3_2[3] || cache_way_sel_c3_1[3] || cache_way_sel_c3_0[3]);
191
192assign cache_way_sel_c3[4] = (cache_way_sel_c3_7[4] || cache_way_sel_c3_6[4] || cache_way_sel_c3_5[4] || cache_way_sel_c3_4[4] || cache_way_sel_c3_3[4] || cache_way_sel_c3_2[4] || cache_way_sel_c3_1[4] || cache_way_sel_c3_0[4]);
193
194assign cache_way_sel_c3[5] = (cache_way_sel_c3_7[5] || cache_way_sel_c3_6[5] || cache_way_sel_c3_5[5] || cache_way_sel_c3_4[5] || cache_way_sel_c3_3[5] || cache_way_sel_c3_2[5] || cache_way_sel_c3_1[5] || cache_way_sel_c3_0[5]);
195
196assign cache_way_sel_c3[6] = (cache_way_sel_c3_7[6] || cache_way_sel_c3_6[6] || cache_way_sel_c3_5[6] || cache_way_sel_c3_4[6] || cache_way_sel_c3_3[6] || cache_way_sel_c3_2[6] || cache_way_sel_c3_1[6] || cache_way_sel_c3_0[6]);
197
198assign cache_way_sel_c3[7] = (cache_way_sel_c3_7[7] || cache_way_sel_c3_6[7] || cache_way_sel_c3_5[7] || cache_way_sel_c3_4[7] || cache_way_sel_c3_3[7] || cache_way_sel_c3_2[7] || cache_way_sel_c3_1[7] || cache_way_sel_c3_0[7]);
199
200assign cache_way_sel_c3[8] = (cache_way_sel_c3_7[8] || cache_way_sel_c3_6[8] || cache_way_sel_c3_5[8] || cache_way_sel_c3_4[8] || cache_way_sel_c3_3[8] || cache_way_sel_c3_2[8] || cache_way_sel_c3_1[8] || cache_way_sel_c3_0[8]);
201
202assign cache_way_sel_c3[9] = (cache_way_sel_c3_7[9] || cache_way_sel_c3_6[9] || cache_way_sel_c3_5[9] || cache_way_sel_c3_4[9] || cache_way_sel_c3_3[9] || cache_way_sel_c3_2[9] || cache_way_sel_c3_1[9] || cache_way_sel_c3_0[9]);
203
204assign cache_way_sel_c3[10] = (cache_way_sel_c3_7[10] || cache_way_sel_c3_6[10] || cache_way_sel_c3_5[10] || cache_way_sel_c3_4[10] || cache_way_sel_c3_3[10] || cache_way_sel_c3_2[10] || cache_way_sel_c3_1[10] || cache_way_sel_c3_0[10]);
205
206assign cache_way_sel_c3[11] = (cache_way_sel_c3_7[11] || cache_way_sel_c3_6[11] || cache_way_sel_c3_5[11] || cache_way_sel_c3_4[11] || cache_way_sel_c3_3[11] || cache_way_sel_c3_2[11] || cache_way_sel_c3_1[11] || cache_way_sel_c3_0[11]);
207
208assign cache_way_sel_c3[12] = (cache_way_sel_c3_7[12] || cache_way_sel_c3_6[12] || cache_way_sel_c3_5[12] || cache_way_sel_c3_4[12] || cache_way_sel_c3_3[12] || cache_way_sel_c3_2[12] || cache_way_sel_c3_1[12] || cache_way_sel_c3_0[12]);
209
210assign cache_way_sel_c3[13] = (cache_way_sel_c3_7[13] || cache_way_sel_c3_6[13] || cache_way_sel_c3_5[13] || cache_way_sel_c3_4[13] || cache_way_sel_c3_3[13] || cache_way_sel_c3_2[13] || cache_way_sel_c3_1[13] || cache_way_sel_c3_0[13]);
211
212assign cache_way_sel_c3[14] = (cache_way_sel_c3_7[14] || cache_way_sel_c3_6[14] || cache_way_sel_c3_5[14] || cache_way_sel_c3_4[14] || cache_way_sel_c3_3[14] || cache_way_sel_c3_2[14] || cache_way_sel_c3_1[14] || cache_way_sel_c3_0[14]);
213
214assign cache_way_sel_c3[15] = (cache_way_sel_c3_7[15] || cache_way_sel_c3_6[15] || cache_way_sel_c3_5[15] || cache_way_sel_c3_4[15] || cache_way_sel_c3_3[15] || cache_way_sel_c3_2[15] || cache_way_sel_c3_1[15] || cache_way_sel_c3_0[15]);
215****/
216
217//assign cache_rd_wr_c3
218assign cache_rd_wr_c3_0 = tb_top.cpu.l2d0.ctr.cache_rd_wr_c3;
219assign cache_rd_wr_c3_1 = tb_top.cpu.l2d1.ctr.cache_rd_wr_c3;
220assign cache_rd_wr_c3_2 = tb_top.cpu.l2d2.ctr.cache_rd_wr_c3;
221assign cache_rd_wr_c3_3 = tb_top.cpu.l2d3.ctr.cache_rd_wr_c3;
222assign cache_rd_wr_c3_4 = tb_top.cpu.l2d4.ctr.cache_rd_wr_c3;
223assign cache_rd_wr_c3_5 = tb_top.cpu.l2d5.ctr.cache_rd_wr_c3;
224assign cache_rd_wr_c3_6 = tb_top.cpu.l2d6.ctr.cache_rd_wr_c3;
225assign cache_rd_wr_c3_7 = tb_top.cpu.l2d7.ctr.cache_rd_wr_c3;
226
227/***
228assign cache_rd_wr_c3 = {cache_rd_wr_c3_7,cache_rd_wr_c3_6,cache_rd_wr_c3_5,cache_rd_wr_c3_4,cache_rd_wr_c3_3,cache_rd_wr_c3_2,cache_rd_wr_c3_1,cache_rd_wr_c3_0};
229***/
230//inst_l2data_vld_c4
231assign inst_l2data_vld_c4_0 = tb_top.cpu.l2t0.arb.inst_l2data_vld_c4;
232assign inst_l2data_vld_c4_1 = tb_top.cpu.l2t1.arb.inst_l2data_vld_c4;
233assign inst_l2data_vld_c4_2 = tb_top.cpu.l2t2.arb.inst_l2data_vld_c4;
234assign inst_l2data_vld_c4_3 = tb_top.cpu.l2t3.arb.inst_l2data_vld_c4;
235assign inst_l2data_vld_c4_4 = tb_top.cpu.l2t4.arb.inst_l2data_vld_c4;
236assign inst_l2data_vld_c4_5 = tb_top.cpu.l2t5.arb.inst_l2data_vld_c4;
237assign inst_l2data_vld_c4_6 = tb_top.cpu.l2t6.arb.inst_l2data_vld_c4;
238assign inst_l2data_vld_c4_7 = tb_top.cpu.l2t7.arb.inst_l2data_vld_c4;
239
240/****
241assign inst_l2data_vld_c4 = {inst_l2data_vld_c4_7,inst_l2data_vld_c4_6,inst_l2data_vld_c4_5,inst_l2data_vld_c4_4,inst_l2data_vld_c4_3,inst_l2data_vld_c4_2,inst_l2data_vld_c4_1,inst_l2data_vld_c4_0};
242***/
243
244// cache_set_c3
245assign cache_set_c3_0 = tb_top.cpu.l2d0.ctr.cache_set_c3;
246assign cache_set_c3_1 = tb_top.cpu.l2d1.ctr.cache_set_c3;
247assign cache_set_c3_2 = tb_top.cpu.l2d2.ctr.cache_set_c3;
248assign cache_set_c3_3 = tb_top.cpu.l2d3.ctr.cache_set_c3;
249assign cache_set_c3_4 = tb_top.cpu.l2d4.ctr.cache_set_c3;
250assign cache_set_c3_5 = tb_top.cpu.l2d5.ctr.cache_set_c3;
251assign cache_set_c3_6 = tb_top.cpu.l2d6.ctr.cache_set_c3;
252assign cache_set_c3_7 = tb_top.cpu.l2d7.ctr.cache_set_c3;
253
254/***
255assign cache_set_c3 = {cache_set_c3_7,cache_set_c3_6,cache_set_c3_5,cache_set_c3_4,cache_set_c3_3,cache_set_c3_2,cache_set_c3_1,cache_set_c3_0};
256***/
257
258//cache_col_offset_c3
259assign cache_col_offset_c3_0 = tb_top.cpu.l2d0.ctr.cache_col_offset_c3;
260assign cache_col_offset_c3_1 = tb_top.cpu.l2d1.ctr.cache_col_offset_c3;
261assign cache_col_offset_c3_2 = tb_top.cpu.l2d2.ctr.cache_col_offset_c3;
262assign cache_col_offset_c3_3 = tb_top.cpu.l2d3.ctr.cache_col_offset_c3;
263assign cache_col_offset_c3_4 = tb_top.cpu.l2d4.ctr.cache_col_offset_c3;
264assign cache_col_offset_c3_5 = tb_top.cpu.l2d5.ctr.cache_col_offset_c3;
265assign cache_col_offset_c3_6 = tb_top.cpu.l2d6.ctr.cache_col_offset_c3;
266assign cache_col_offset_c3_7 = tb_top.cpu.l2d7.ctr.cache_col_offset_c3;
267
268/****
269assign cache_col_offset_c3 = {cache_col_offset_c3_7,cache_col_offset_c3_6,cache_col_offset_c3_5,cache_col_offset_c3_4,cache_col_offset_c3_3,cache_col_offset_c3_2,cache_col_offset_c3_1,cache_col_offset_c3_0};
270***/
271//cache_decc_out_c52
272assign cache_decc_out_c52_0 = tb_top.cpu.l2d0.ctr.cache_decc_out_c5b;
273assign cache_decc_out_c52_1 = tb_top.cpu.l2d1.ctr.cache_decc_out_c5b;
274assign cache_decc_out_c52_2 = tb_top.cpu.l2d2.ctr.cache_decc_out_c5b;
275assign cache_decc_out_c52_3 = tb_top.cpu.l2d3.ctr.cache_decc_out_c5b;
276assign cache_decc_out_c52_4 = tb_top.cpu.l2d4.ctr.cache_decc_out_c5b;
277assign cache_decc_out_c52_5 = tb_top.cpu.l2d5.ctr.cache_decc_out_c5b;
278assign cache_decc_out_c52_6 = tb_top.cpu.l2d6.ctr.cache_decc_out_c5b;
279assign cache_decc_out_c52_7 = tb_top.cpu.l2d7.ctr.cache_decc_out_c5b;
280
281 assign L2esr_logged = (tb_top.cpu.l2t0.csr.csr_l2_errstate_reg[52]|
282 tb_top.cpu.l2t1.csr.csr_l2_errstate_reg[52]|
283 tb_top.cpu.l2t2.csr.csr_l2_errstate_reg[52]|
284 tb_top.cpu.l2t3.csr.csr_l2_errstate_reg[52]|
285 tb_top.cpu.l2t4.csr.csr_l2_errstate_reg[52]|
286 tb_top.cpu.l2t5.csr.csr_l2_errstate_reg[52]|
287 tb_top.cpu.l2t6.csr.csr_l2_errstate_reg[52]|
288 tb_top.cpu.l2t7.csr.csr_l2_errstate_reg[52]);
289
290
291/***
292assign cache_decc_out_c52 = {cache_decc_out_c52_7,cache_decc_out_c52_6,cache_decc_out_c52_5,cache_decc_out_c52_4,cache_decc_out_c52_3,cache_decc_out_c52_2,cache_decc_out_c52_1,cache_decc_out_c52_0};
293****/
294
295initial
296begin
297
298
299//=================================
300// Initialize the forcing variables
301//=================================
302
303 stuck_to0 = 1'b0;
304 stuck_to1 = 1'b0;
305 rand_bit_flip = 1'b0;
306 err_enable = 1'b0;
307 inject_limit = 0;
308 rand_limit_hi = 150;
309 bit_pos = 4;
310 trph = 0;
311 err_cntr = 0;
312 //L2esr_logged = 0;
313 Tevent = 1'b0;
314
315//=================================
316// Initialize the variables used in here
317//=================================
318k1 = 0;
319k=0;n=0;
320rand1 = 0;
321rand2 = 0;
322injectErr = 0;
323start_injection = 0;
324 stuck_to1= 0;
325 rand_bit_flip = 0;
326 err_enable = 0;
327 err_enable_fwd = 0;
328 bit_err_enable = 0;
329
330
331//=========================================
332//run args
333//=========================================
334
335/** if($test$plusargs("L2DA_2BIT_STUCK_TO0"))
336 begin
337 stuck_to0= 1;
338 `PR_ALWAYS("l2err_injector", `ALWAYS, "L2 bit stuck to 0");
339 end
340 else if ($test$plusargs("L2DA_2BIT_STUCK_TO1"))
341 begin
342 stuck_to1= 1;
343 `PR_ALWAYS("l2err_injector", `ALWAYS, "L2 bit stuck to 1");
344 end
345else **/
346
347if ($test$plusargs("L2DA_INJECT_UE_ALLBANKS") )
348 begin
349 bit_err_enable = 1;
350 `PR_ALWAYS("l2err_injector", `ALWAYS, "L2 UE DataArray err Injection Enabled");
351 end
352else if($test$plusargs("L2DA_INJECT_UE_RANDOM"))
353 begin
354 bit_err_enable = 2;
355 `PR_ALWAYS("l2err_injector", `ALWAYS, "L2 UE DataArray err Injection Enabled");
356 end
357else if($test$plusargs("L2DA_INJECT_UE"))
358 begin
359 bit_err_enable = 3;
360 `PR_ALWAYS("l2err_injector", `ALWAYS, "L2 UE DataArray err Injection Enabled");
361 end
362else if($test$plusargs("L2DA_INJECT_UE_IN_BURSTS"))
363 begin
364 bit_err_enable = 4;
365 `PR_ALWAYS("l2err_injector", `ALWAYS, "L2 UE DataArray err Injection Enabled");
366 end
367else if($test$plusargs("L2DA_INJECT_ONE_UE"))
368 begin
369 bit_err_enable = 5;
370 `PR_ALWAYS("l2err_injector", `ALWAYS, "L2 UE DataArray err Injection Enabled");
371 end
372
373
374
375end
376
377//Sequential part of stmc...
378//To not inject in traphandler
379always @(posedge tb_top.cpu.l2clk)
380begin
381if(bit_err_enable)
382begin
383 if(!L2_INT_RST) cs <= s0;
384 else cs <= ns;
385end
386end
387//combo logic
388always @(s0 or s1 or take_dae or take_retry or cs)
389begin
390trph <= 0;
391 case(cs)
392 s0:
393 begin
394 if ( take_dae == 0) ns <= s0;
395 else if (take_dae == 1) begin ns <= s1; trph<= 1;end
396 end
397 s1:
398 begin
399 if (take_retry == 0)begin ns <= s1; trph <= 1; end
400 else if (take_retry == 1) begin ns <= s0;trph<=0;end
401 end
402 endcase
403//$display("In Combo Logic take_retry=%d,take_dae=%d,trph=%d,ns=%d",take_retry,take_dae,trph,ns);
404end //end combo logic
405
406
407
408always @(posedge tb_top.cpu.l2clk)
409begin
410if(!L2_INT_RST)
411begin
412 sel_bank = 3'b000;
413end
414else
415begin
416 if(Tevent == 0 && trph == 0 && ( `TOP.gOutOfBoot[63:0] === `TOP.verif_args.finish_mask[63:0] ) && bit_err_enable != 0 ) //&& !L2esr_logged)
417 begin
418 sel_bank = 3'b000;
419 if(bit_err_enable == 1)
420 begin
421 if(cache_way_sel_c3_0 != 0 && cache_rd_wr_c3_0 == 1 && !inst_l2data_vld_c4_0 && Tevent == 0) //C3
422 sel_bank = 3'b000;
423 else if(cache_way_sel_c3_1 != 0 && cache_rd_wr_c3_1 == 1 && !inst_l2data_vld_c4_1 && Tevent == 0)
424 sel_bank = 3'b001;
425 else if(cache_way_sel_c3_2 != 0 && cache_rd_wr_c3_2 == 1 && !inst_l2data_vld_c4_2 && Tevent == 0)
426 sel_bank = 3'b010;
427 else if(cache_way_sel_c3_3 != 0 && cache_rd_wr_c3_3 == 1 && !inst_l2data_vld_c4_3 && Tevent == 0)
428 sel_bank = 3'b011;
429 else if(cache_way_sel_c3_4 != 0 && cache_rd_wr_c3_4 == 1 && !inst_l2data_vld_c4_4 && Tevent == 0)
430 sel_bank = 3'b100;
431 else if(cache_way_sel_c3_5 != 0 && cache_rd_wr_c3_5 == 1 && !inst_l2data_vld_c4_5 && Tevent == 0)
432 sel_bank = 3'b101;
433 else if(cache_way_sel_c3_6 != 0 && cache_rd_wr_c3_6 == 1 && !inst_l2data_vld_c4_6 && Tevent == 0)
434 sel_bank = 3'b110;
435 else if(cache_way_sel_c3_7 != 0 && cache_rd_wr_c3_7 == 1 && !inst_l2data_vld_c4_7 && Tevent == 0)
436 sel_bank = 3'b111;
437//$display("In Main sel_bank=%x after bit_err is enabled \n\n",sel_bank);
438 end // for if allbanks
439 else if (bit_err_enable != 1 && bit_err_enable != 0)
440 sel_bank = 3'b000;
441 end // if(Tevent && trph ....
442//$display("In Main sel_bank = %d\n\n",sel_bank);
443end //if else of if (!L2_INT_RST)
444end //always block
445
446//always @(sel_bank)
447always @(posedge tb_top.cpu.l2clk)
448begin
449if(Tevent == 0 && trph == 0 && ( `TOP.gOutOfBoot[63:0] === `TOP.verif_args.finish_mask[63:0] ) && bit_err_enable != 0 )
450begin
451//$display("In Selecting Block sel_bank = %d\n\n",sel_bank);
452
453case(sel_bank)
4543'b000: inject_err(sel_bank,cache_set_c3_0,cache_way_sel_c3_0,cache_rd_wr_c3_0,inst_l2data_vld_c4_0,stuck_to0,stuck_to1,bit_err_enable,l2d_l2t_decc_c6_0);
4553'b001: inject_err(sel_bank,cache_set_c3_1,cache_way_sel_c3_1,cache_rd_wr_c3_1,inst_l2data_vld_c4_1,stuck_to0,stuck_to1,bit_err_enable,l2d_l2t_decc_c6_1);
456
4573'b010: inject_err(sel_bank,cache_set_c3_2,cache_way_sel_c3_2,cache_rd_wr_c3_2,inst_l2data_vld_c4_2,stuck_to0,stuck_to1,bit_err_enable,l2d_l2t_decc_c6_2);
458
4593'b011: inject_err(sel_bank,cache_set_c3_3,cache_way_sel_c3_3,cache_rd_wr_c3_3,inst_l2data_vld_c4_3,stuck_to0,stuck_to1,bit_err_enable,l2d_l2t_decc_c6_3);
460
4613'b100: inject_err(sel_bank,cache_set_c3_4,cache_way_sel_c3_4,cache_rd_wr_c3_4,inst_l2data_vld_c4_4,stuck_to0,stuck_to1,bit_err_enable,l2d_l2t_decc_c6_4);
4623'b101: inject_err(sel_bank,cache_set_c3_5,cache_way_sel_c3_5,cache_rd_wr_c3_5,inst_l2data_vld_c4_5,stuck_to0,stuck_to1,bit_err_enable,l2d_l2t_decc_c6_5);
4633'b110: inject_err(sel_bank,cache_set_c3_6,cache_way_sel_c3_6,cache_rd_wr_c3_6,inst_l2data_vld_c4_6,stuck_to0,stuck_to1,bit_err_enable,l2d_l2t_decc_c6_6);
4643'b111: inject_err(sel_bank,cache_set_c3_7,cache_way_sel_c3_7,cache_rd_wr_c3_7,inst_l2data_vld_c4_7,stuck_to0,stuck_to1,bit_err_enable,l2d_l2t_decc_c6_7);
465endcase
466
467end // if
468end //always
469
470
471always @(TRAP_EVENT)
472begin
473if( TRAP_EVENT == 9'h1a0 || TRAP_EVENT == 9'h100 || TRAP_EVENT == 9'h101 || TRAP_EVENT == 9'h1a1 || TRAP_EVENT == 8'h09 || TRAP_EVENT == 9'h18a || TRAP_EVENT == 9'h12a)
474 Tevent = 1'b1;
475else Tevent = 1'b0;
476//$display("Tevent = %d",Tevent);
477end
478
479
480
481task inject_err;
482
483input [2:0] sel_bank;
484input [8:0] cache_set_c3;
485input [15:0] cache_way_sel_c3;
486//input [3:0] cache_col_offset_c3;
487input cache_rd_wr_c3;
488input inst_l2data_vld_c4;
489input stuck_to0;
490input stuck_to1;
491input [2:0] bit_err_enable;
492input [155:0] l2d_l2t_decc_c6;
493integer k,n,way;
494
495begin
496if ( `TOP.gOutOfBoot[63:0] === `TOP.verif_args.finish_mask[63:0] )
497begin
498//$display("In task Block sel_bank = %d\n\n",sel_bank);
499//$display(" Outside If Loop cache_way_sel_c3 = %x,cache_rd_wr_c3 = %x,inst_l2data_vld_c4 = %x,Tevent = %x,bit_pos = %x,bit_err_enable = %x",cache_way_sel_c3,cache_rd_wr_c3,inst_l2data_vld_c4,Tevent,bit_pos,bit_err_enable);
500//$display("L2esr_logged = %x",L2esr_logged);
501
502 way = Decode(cache_way_sel_c3);
503// cache_col_offset = Decode1(cache_col_offset_c3);
504
505 #(SAMPLE) if(cache_way_sel_c3 != 0 && cache_rd_wr_c3 == 1 && !inst_l2data_vld_c4 && Tevent == 0 && !L2esr_logged) //C3
506 begin
507//$display(" Inside If Loop cache_way_sel_c3 = %x,cache_rd_wr_c3 = %x,inst_l2data_vld_c4 = %x,Tevent = %x,bit_pos = %x,bit_err_enable = %x,L2esr_logged = %x",cache_way_sel_c3,cache_rd_wr_c3,inst_l2data_vld_c4,Tevent,bit_pos,bit_err_enable,L2esr_logged);
508 bit_pos = bit_pos + 1;
509 err_cntr = err_cntr;
510 @(posedge tb_top.cpu.l2clk); // C4
511 @(posedge tb_top.cpu.l2clk); //C5
512 @(posedge tb_top.cpu.l2clk);// C52 //two more clk cycles for forward
513// MSA 10/30/2006 @(posedge tb_top.cpu.l2clk); //C6 One clk cycle reduced 10/13/2005
514
515 @(negedge tb_top.cpu.l2clk);// negedge of C6
516 ////////////////////
517 /////Stuck At 0/////
518 ////////////////////
519 if((stuck_to0 == 1 && stuck_to1 == 0 && bit_err_enable ==0))
520 begin
521 k <= 144; n <= 140; #(SAMPLE) l2d_l2t_decc_c6[k] = (l2d_l2t_decc_c6[k] & 1'b0);
522 #(SAMPLE) l2d_l2t_decc_c6[n] = (l2d_l2t_decc_c6[n] & 1'b0);
523 Setl2d_l2t_decc_c6(sel_bank, (l2d_l2t_decc_c6));
524 `PR_ALWAYS("l2err_injector", `ALWAYS,"UE injected in Data Array in bank%0d, index%0d, way%0d, bit%0d and %0d",sel_bank, cache_set_c3, way, k,n); err_cntr <= err_cntr + 1;
525 end
526 ////////////////////
527 /////Stuck At 1/////
528 ////////////////////
529 else if((stuck_to0 == 0 && stuck_to1 == 1 && bit_err_enable ==0))
530 begin
531 k <= 144; n <= 140; #(SAMPLE) l2d_l2t_decc_c6[k] = (l2d_l2t_decc_c6[k] | 1'b1);
532 #(SAMPLE) l2d_l2t_decc_c6[n] = (l2d_l2t_decc_c6[n] | 1'b1);
533 Setl2d_l2t_decc_c6(sel_bank, (l2d_l2t_decc_c6));
534 `PR_DEBUG("l2err_injector", `DEBUG,"UE injected in Data Array in bank%0d, index%0d, way%0d, bit%0d and %0d",sel_bank, cache_set_c3, way, k,n); err_cntr <= err_cntr + 1;
535 end
536///////////////
537//ue injection
538///////////////
539///////////////
540//Inject error randomly
541///////////////
542 else if((stuck_to0 == 0 && stuck_to1 == 0 && bit_err_enable == 2 && !({$random(`PARGS.seed)} % 16)))
543 begin
544 k = ({$random(`PARGS.seed)} % 154) ;
545 //n <= 140;
546 n = k + 1;
547 #(SAMPLE)
548 l2d_l2t_decc_c6[k] = (l2d_l2t_decc_c6[k] ^ 1'b1);
549
550 l2d_l2t_decc_c6[n] = (l2d_l2t_decc_c6[n] ^ 1'b1);
551
552 #(SAMPLE)
553 Setl2d_l2t_decc_c6(sel_bank, (l2d_l2t_decc_c6));
554
555 `PR_ALWAYS("l2err_injector", `ALWAYS,"UE injected in Data Array in bank%0d, index%0d, way%0d, bit%0d and %0d",sel_bank, cache_set_c3, way, k,n);
556
557 err_cntr = err_cntr + 1;
558//$display(" In if of task , err_cntr = %d",err_cntr);
559 end
560///////////////
561// ue Inject 1 error in 100 loads
562///////////////
563 else if((stuck_to0 == 0 && stuck_to1 == 0 && ( bit_err_enable == 3 || bit_err_enable == 1) && bit_pos == 30))
564 begin
565 k = ({$random(`PARGS.seed)} % 154) ;
566 //n <= 140;
567 n = k + 1;
568 #(SAMPLE)
569 l2d_l2t_decc_c6[k] = (l2d_l2t_decc_c6[k] ^ 1'b1);
570
571 l2d_l2t_decc_c6[n] = (l2d_l2t_decc_c6[n] ^ 1'b1);
572
573 #(SAMPLE)
574 Setl2d_l2t_decc_c6(sel_bank, (l2d_l2t_decc_c6));
575
576 `PR_ALWAYS("l2err_injector", `ALWAYS,"UE injected in Data Array in bank%0d, index%0d, way%0d, bit%0d and %0d",sel_bank, cache_set_c3, way, k,n);
577
578 err_cntr = err_cntr + 1;
579//$display(" In if of task , err_cntr = %d",err_cntr);
580 end
581///////////////
582// Inject error in Bursts
583///////////////
584 else if((stuck_to0 == 0 && stuck_to1 == 0 && bit_err_enable == 4 && bit_pos[3] != 1))
585 begin
586 k = ({$random(`PARGS.seed)} % 154) ;
587 //n <= 140;
588 n = k + 1;
589 #(SAMPLE)
590 l2d_l2t_decc_c6[k] = (l2d_l2t_decc_c6[k] ^ 1'b1);
591
592 l2d_l2t_decc_c6[n] = (l2d_l2t_decc_c6[n] ^ 1'b1);
593
594 #(SAMPLE)
595 Setl2d_l2t_decc_c6(sel_bank, (l2d_l2t_decc_c6));
596
597 `PR_ALWAYS("l2err_injector", `ALWAYS,"UE injected in Data Array in bank%0d, index%0d, way%0d, bit%0d and %0d",sel_bank, cache_set_c3, way, k,n);
598
599 err_cntr = err_cntr + 1;
600//$display(" In if of task , err_cntr = %d",err_cntr);
601 end
602 @(negedge tb_top.cpu.l2clk);
603 #(SAMPLE) Releasel2d_l2t_decc_c6(sel_bank);
604 end //if(cache_way_sel_c3_0 != 0 ....
605end // else of If(!Rst)
606end // else of If(!Rst)
607
608endtask
609
610
611
612///////////////////////////////////////////////////////////////////////
613//This function returns the bit position of the least significant high bit in the bit vector.
614///////////////////////////////////////////////////////////////////////
615
616//*function bit [3:0] Decode(bit [15:0] cache_way_sel_c3) */
617
618function Decode;
619input [15:0] cache_way_sel_c3;
620begin
621 if(cache_way_sel_c3[15] == 1)
622 Decode = 15;
623 else if(cache_way_sel_c3[14] == 1)
624 Decode = 14;
625 else if(cache_way_sel_c3[13] == 1)
626 Decode = 13;
627 else if(cache_way_sel_c3[12] == 1)
628 Decode = 12;
629 else if(cache_way_sel_c3[11] == 1)
630 Decode = 11;
631 else if(cache_way_sel_c3[10] == 1)
632 Decode = 10;
633 else if(cache_way_sel_c3[9] == 1)
634 Decode = 9;
635 else if(cache_way_sel_c3[8] == 1)
636 Decode = 8;
637 else if(cache_way_sel_c3[7] == 1)
638 Decode = 7;
639 else if(cache_way_sel_c3[6] == 1)
640 Decode = 6;
641 else if(cache_way_sel_c3[5] == 1)
642 Decode = 5;
643 else if(cache_way_sel_c3[4] == 1)
644 Decode = 4;
645 else if(cache_way_sel_c3[3] == 1)
646 Decode = 3;
647 else if(cache_way_sel_c3[2] == 1)
648 Decode = 2;
649 else if(cache_way_sel_c3[1] == 1)
650 Decode = 1;
651 else
652 Decode = 0;
653
654
655
656end
657endfunction
658
659function Decode1;
660input [3:0] cache_col_offset_c3;
661begin
662
663 if(cache_col_offset_c3[3])
664 Decode1 = 3;
665 else if(cache_col_offset_c3[2])
666 Decode1 = 2;
667 else if(cache_col_offset_c3[1])
668 Decode1 = 1;
669 else
670 Decode1 = 0;
671
672end
673endfunction
674
675
676// Task for error forward
677task Setl2d_l2t_decc_c6;
678input bank;
679input [155:0] value;
680integer bank;
681reg [155:0] value;
682begin
683 case (bank)
684 0: force tb_top.cpu.l2d0.l2d_l2t_decc_c6 = value;
685 1: force tb_top.cpu.l2d1.l2d_l2t_decc_c6 = value;
686 2: force tb_top.cpu.l2d2.l2d_l2t_decc_c6 = value;
687 3: force tb_top.cpu.l2d3.l2d_l2t_decc_c6 = value;
688 4: force tb_top.cpu.l2d4.l2d_l2t_decc_c6 = value;
689 5: force tb_top.cpu.l2d5.l2d_l2t_decc_c6 = value;
690 6: force tb_top.cpu.l2d6.l2d_l2t_decc_c6 = value;
691 7: force tb_top.cpu.l2d7.l2d_l2t_decc_c6 = value;
692 endcase
693end
694endtask
695
696task Releasel2d_l2t_decc_c6;
697input bank;
698integer bank;
699begin
700 case (bank)
701 0: release tb_top.cpu.l2d0.l2d_l2t_decc_c6;
702 1: release tb_top.cpu.l2d1.l2d_l2t_decc_c6;
703 2: release tb_top.cpu.l2d2.l2d_l2t_decc_c6;
704 3: release tb_top.cpu.l2d3.l2d_l2t_decc_c6;
705 4: release tb_top.cpu.l2d4.l2d_l2t_decc_c6;
706 5: release tb_top.cpu.l2d5.l2d_l2t_decc_c6;
707 6: release tb_top.cpu.l2d6.l2d_l2t_decc_c6;
708 7: release tb_top.cpu.l2d7.l2d_l2t_decc_c6;
709 endcase
710end
711endtask
712
713endmodule
714
715