Commit | Line | Data |
---|---|---|
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 ============================================ | |
35 | module l2ue_errinj ( L2_INT_RST,err_cntr); | |
36 | ||
37 | parameter SAMPLE = 3; | |
38 | parameter s0=0,s1=1; | |
39 | ||
40 | ||
41 | //tb_top tb_top(); | |
42 | ||
43 | //input declarations | |
44 | input L2_INT_RST; | |
45 | ||
46 | //output declarations | |
47 | output [23:0] err_cntr; | |
48 | ||
49 | ||
50 | //reg declarations | |
51 | reg stuck_to0, stuck_to1, rand_bit_flip,err_enable, err_enable_fwd,trph; | |
52 | wire take_dae,take_retry; | |
53 | reg [1:0] cs,ns; | |
54 | reg [2:0] bit_err_enable; | |
55 | reg [4:0] bit_pos; | |
56 | //reg [6:0] bit_pos1; | |
57 | reg [3:0] i; | |
58 | reg [11:0] k,k1,n; | |
59 | reg [63:0] j; | |
60 | reg [23:0] err_cntr; | |
61 | reg [2:0] sel_bank; | |
62 | ||
63 | reg [127:0] way,way_int; | |
64 | reg [23:0] cache_col_offset,cache_col_offset_int; | |
65 | reg [623:0] dataecc,int; | |
66 | reg [23:0] inject_limit; | |
67 | reg [39:0] err_addr; | |
68 | reg injectErr,start_injection; | |
69 | reg Tevent; | |
70 | ||
71 | integer r,m,rand_limit_hi,rand,rand1,rand2; | |
72 | ||
73 | ||
74 | //wire declarations | |
75 | wire [8:0] TRAP_EVENT; | |
76 | wire [39:0] err_addr_0,err_addr_1,err_addr_2,err_addr_3,err_addr_4,err_addr_5; | |
77 | wire [39:0] err_addr_6,err_addr_7; | |
78 | ||
79 | ||
80 | wire [15:0] cache_way_sel_c3_0,cache_way_sel_c3_1,cache_way_sel_c3_2; | |
81 | wire [15:0] cache_way_sel_c3_3,cache_way_sel_c3_4,cache_way_sel_c3_5; | |
82 | wire [15:0] cache_way_sel_c3_6,cache_way_sel_c3_7; | |
83 | wire [15:0] cache_way_sel_c3; | |
84 | ||
85 | wire cache_rd_wr_c3_0,cache_rd_wr_c3_1,cache_rd_wr_c3_2; | |
86 | wire cache_rd_wr_c3_3,cache_rd_wr_c3_4,cache_rd_wr_c3_5; | |
87 | wire cache_rd_wr_c3_6,cache_rd_wr_c3_7; | |
88 | wire cache_rd_wr_c3; | |
89 | ||
90 | wire inst_l2data_vld_c4_0,inst_l2data_vld_c4_1; | |
91 | wire inst_l2data_vld_c4_2,inst_l2data_vld_c4_3,inst_l2data_vld_c4_4; | |
92 | wire inst_l2data_vld_c4_5,inst_l2data_vld_c4_6,inst_l2data_vld_c4_7; | |
93 | wire inst_l2data_vld_c4; | |
94 | ||
95 | wire [8:0] cache_set_c3_0,cache_set_c3_1,cache_set_c3_2,cache_set_c3_3; | |
96 | wire [8:0] cache_set_c3_4,cache_set_c3_5,cache_set_c3_6,cache_set_c3_7; | |
97 | wire [8:0] cache_set_c3; | |
98 | ||
99 | wire [3:0]cache_col_offset_c3_0,cache_col_offset_c3_1; | |
100 | wire [3:0]cache_col_offset_c3_2,cache_col_offset_c3_3; | |
101 | wire [3:0] cache_col_offset_c3_4,cache_col_offset_c3_5; | |
102 | wire [3:0] cache_col_offset_c3_6,cache_col_offset_c3_7; | |
103 | wire [3:0] cache_col_offset_c3; | |
104 | ||
105 | wire [623:0] cache_decc_out_c52_0,cache_decc_out_c52_1; | |
106 | wire [623:0] cache_decc_out_c52_2,cache_decc_out_c52_3; | |
107 | wire [623:0] cache_decc_out_c52_4,cache_decc_out_c52_5; | |
108 | wire [623:0] cache_decc_out_c52_6,cache_decc_out_c52_7; | |
109 | wire [623:0] cache_decc_out_c52; | |
110 | ||
111 | /**** | |
112 | wire [623:0] l2d_l2t_decc_c6_0, l2d_l2t_decc_c6_1, l2d_l2t_decc_c6_2; | |
113 | wire [623:0] l2d_l2t_decc_c6_3, l2d_l2t_decc_c6_4, l2d_l2t_decc_c6_5; | |
114 | wire [623:0] l2d_l2t_decc_c6_6, l2d_l2t_decc_c6_7; | |
115 | ***/ | |
116 | ||
117 | wire [155:0] l2d_l2t_decc_c6_0, l2d_l2t_decc_c6_1, l2d_l2t_decc_c6_2; | |
118 | wire [155:0] l2d_l2t_decc_c6_3, l2d_l2t_decc_c6_4, l2d_l2t_decc_c6_5; | |
119 | wire [155:0] l2d_l2t_decc_c6_6, l2d_l2t_decc_c6_7,l2d_l2t_decc_c6; | |
120 | ||
121 | //wire [63:0] L2esr_logged; | |
122 | wire L2esr_logged; | |
123 | ||
124 | assign take_retry = tb_top.cpu.spc0.tlu.trl0.take_ret; | |
125 | assign take_dae = tb_top.cpu.spc0.tlu.trl0.take_dae; // For Data Access | |
126 | ||
127 | assign l2d_l2t_decc_c6_0 = tb_top.cpu.l2d0.l2d_l2t_decc_c6; | |
128 | assign l2d_l2t_decc_c6_1 = tb_top.cpu.l2d1.l2d_l2t_decc_c6; | |
129 | assign l2d_l2t_decc_c6_2 = tb_top.cpu.l2d2.l2d_l2t_decc_c6; | |
130 | assign l2d_l2t_decc_c6_3 = tb_top.cpu.l2d3.l2d_l2t_decc_c6; | |
131 | assign l2d_l2t_decc_c6_4 = tb_top.cpu.l2d4.l2d_l2t_decc_c6; | |
132 | assign l2d_l2t_decc_c6_5 = tb_top.cpu.l2d5.l2d_l2t_decc_c6; | |
133 | assign l2d_l2t_decc_c6_6 = tb_top.cpu.l2d6.l2d_l2t_decc_c6; | |
134 | assign l2d_l2t_decc_c6_7 = tb_top.cpu.l2d7.l2d_l2t_decc_c6; | |
135 | ||
136 | /**** | |
137 | assign l2d_l2t_decc_c6_0 = tb_top.cpu.l2d0.ctr.l2d_l2t_decc_c6; | |
138 | assign l2d_l2t_decc_c6_1 = tb_top.cpu.l2d1.ctr.l2d_l2t_decc_c6; | |
139 | assign l2d_l2t_decc_c6_2 = tb_top.cpu.l2d2.ctr.l2d_l2t_decc_c6; | |
140 | assign l2d_l2t_decc_c6_3 = tb_top.cpu.l2d3.ctr.l2d_l2t_decc_c6; | |
141 | assign l2d_l2t_decc_c6_4 = tb_top.cpu.l2d4.ctr.l2d_l2t_decc_c6; | |
142 | assign l2d_l2t_decc_c6_5 = tb_top.cpu.l2d5.ctr.l2d_l2t_decc_c6; | |
143 | assign l2d_l2t_decc_c6_6 = tb_top.cpu.l2d6.ctr.l2d_l2t_decc_c6; | |
144 | assign l2d_l2t_decc_c6_7 = tb_top.cpu.l2d7.ctr.l2d_l2t_decc_c6; | |
145 | ||
146 | assign l2d_l2t_decc_c6_0 = tb_top.cpu.l2d0.ctr.l2d_decc_out_c6; | |
147 | assign l2d_l2t_decc_c6_1 = tb_top.cpu.l2d1.ctr.l2d_decc_out_c6; | |
148 | assign l2d_l2t_decc_c6_2 = tb_top.cpu.l2d2.ctr.l2d_decc_out_c6; | |
149 | assign l2d_l2t_decc_c6_3 = tb_top.cpu.l2d3.ctr.l2d_decc_out_c6; | |
150 | assign l2d_l2t_decc_c6_4 = tb_top.cpu.l2d4.ctr.l2d_decc_out_c6; | |
151 | assign l2d_l2t_decc_c6_5 = tb_top.cpu.l2d5.ctr.l2d_decc_out_c6; | |
152 | assign l2d_l2t_decc_c6_6 = tb_top.cpu.l2d6.ctr.l2d_decc_out_c6; | |
153 | assign l2d_l2t_decc_c6_7 = tb_top.cpu.l2d7.ctr.l2d_decc_out_c6; | |
154 | *****/ | |
155 | ||
156 | ||
157 | ||
158 | assign err_addr_0 = tb_top.cpu.l2t0.arbadr.arbdp_addr_c2; | |
159 | assign err_addr_1 = tb_top.cpu.l2t1.arbadr.arbdp_addr_c2; | |
160 | assign err_addr_2 = tb_top.cpu.l2t2.arbadr.arbdp_addr_c2; | |
161 | assign err_addr_3 = tb_top.cpu.l2t3.arbadr.arbdp_addr_c2; | |
162 | assign err_addr_4 = tb_top.cpu.l2t4.arbadr.arbdp_addr_c2; | |
163 | assign err_addr_5 = tb_top.cpu.l2t5.arbadr.arbdp_addr_c2; | |
164 | assign err_addr_6 = tb_top.cpu.l2t6.arbadr.arbdp_addr_c2; | |
165 | assign err_addr_7 = tb_top.cpu.l2t7.arbadr.arbdp_addr_c2; | |
166 | ||
167 | //assign TRAP_EVENT = tb_top.cpu.spc0.tlu.trl0_trap_type; | |
168 | assign TRAP_EVENT = tb_top.cpu.spc0.tlu.tsd0_wr_trap_type; | |
169 | ||
170 | assign cache_way_sel_c3_0 = tb_top.cpu.l2d0.ctr.l2t_l2d_way_sel_c3; | |
171 | assign cache_way_sel_c3_1 = tb_top.cpu.l2d1.ctr.l2t_l2d_way_sel_c3; | |
172 | assign cache_way_sel_c3_2 = tb_top.cpu.l2d2.ctr.l2t_l2d_way_sel_c3; | |
173 | assign cache_way_sel_c3_3 = tb_top.cpu.l2d3.ctr.l2t_l2d_way_sel_c3; | |
174 | assign cache_way_sel_c3_4 = tb_top.cpu.l2d4.ctr.l2t_l2d_way_sel_c3; | |
175 | assign cache_way_sel_c3_5 = tb_top.cpu.l2d5.ctr.l2t_l2d_way_sel_c3; | |
176 | assign cache_way_sel_c3_6 = tb_top.cpu.l2d6.ctr.l2t_l2d_way_sel_c3; | |
177 | assign 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 | ||
184 | assign 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 | ||
186 | assign 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 | ||
188 | assign 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 | ||
190 | assign 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 | ||
192 | assign 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 | ||
194 | assign 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 | ||
196 | assign 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 | ||
198 | assign 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 | ||
200 | assign 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 | ||
202 | assign 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 | ||
204 | assign 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 | ||
206 | assign 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 | ||
208 | assign 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 | ||
210 | assign 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 | ||
212 | assign 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 | ||
214 | assign 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 | |
218 | assign cache_rd_wr_c3_0 = tb_top.cpu.l2d0.ctr.cache_rd_wr_c3; | |
219 | assign cache_rd_wr_c3_1 = tb_top.cpu.l2d1.ctr.cache_rd_wr_c3; | |
220 | assign cache_rd_wr_c3_2 = tb_top.cpu.l2d2.ctr.cache_rd_wr_c3; | |
221 | assign cache_rd_wr_c3_3 = tb_top.cpu.l2d3.ctr.cache_rd_wr_c3; | |
222 | assign cache_rd_wr_c3_4 = tb_top.cpu.l2d4.ctr.cache_rd_wr_c3; | |
223 | assign cache_rd_wr_c3_5 = tb_top.cpu.l2d5.ctr.cache_rd_wr_c3; | |
224 | assign cache_rd_wr_c3_6 = tb_top.cpu.l2d6.ctr.cache_rd_wr_c3; | |
225 | assign cache_rd_wr_c3_7 = tb_top.cpu.l2d7.ctr.cache_rd_wr_c3; | |
226 | ||
227 | /*** | |
228 | assign 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 | |
231 | assign inst_l2data_vld_c4_0 = tb_top.cpu.l2t0.arb.inst_l2data_vld_c4; | |
232 | assign inst_l2data_vld_c4_1 = tb_top.cpu.l2t1.arb.inst_l2data_vld_c4; | |
233 | assign inst_l2data_vld_c4_2 = tb_top.cpu.l2t2.arb.inst_l2data_vld_c4; | |
234 | assign inst_l2data_vld_c4_3 = tb_top.cpu.l2t3.arb.inst_l2data_vld_c4; | |
235 | assign inst_l2data_vld_c4_4 = tb_top.cpu.l2t4.arb.inst_l2data_vld_c4; | |
236 | assign inst_l2data_vld_c4_5 = tb_top.cpu.l2t5.arb.inst_l2data_vld_c4; | |
237 | assign inst_l2data_vld_c4_6 = tb_top.cpu.l2t6.arb.inst_l2data_vld_c4; | |
238 | assign inst_l2data_vld_c4_7 = tb_top.cpu.l2t7.arb.inst_l2data_vld_c4; | |
239 | ||
240 | /**** | |
241 | assign 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 | |
245 | assign cache_set_c3_0 = tb_top.cpu.l2d0.ctr.cache_set_c3; | |
246 | assign cache_set_c3_1 = tb_top.cpu.l2d1.ctr.cache_set_c3; | |
247 | assign cache_set_c3_2 = tb_top.cpu.l2d2.ctr.cache_set_c3; | |
248 | assign cache_set_c3_3 = tb_top.cpu.l2d3.ctr.cache_set_c3; | |
249 | assign cache_set_c3_4 = tb_top.cpu.l2d4.ctr.cache_set_c3; | |
250 | assign cache_set_c3_5 = tb_top.cpu.l2d5.ctr.cache_set_c3; | |
251 | assign cache_set_c3_6 = tb_top.cpu.l2d6.ctr.cache_set_c3; | |
252 | assign cache_set_c3_7 = tb_top.cpu.l2d7.ctr.cache_set_c3; | |
253 | ||
254 | /*** | |
255 | assign 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 | |
259 | assign cache_col_offset_c3_0 = tb_top.cpu.l2d0.ctr.cache_col_offset_c3; | |
260 | assign cache_col_offset_c3_1 = tb_top.cpu.l2d1.ctr.cache_col_offset_c3; | |
261 | assign cache_col_offset_c3_2 = tb_top.cpu.l2d2.ctr.cache_col_offset_c3; | |
262 | assign cache_col_offset_c3_3 = tb_top.cpu.l2d3.ctr.cache_col_offset_c3; | |
263 | assign cache_col_offset_c3_4 = tb_top.cpu.l2d4.ctr.cache_col_offset_c3; | |
264 | assign cache_col_offset_c3_5 = tb_top.cpu.l2d5.ctr.cache_col_offset_c3; | |
265 | assign cache_col_offset_c3_6 = tb_top.cpu.l2d6.ctr.cache_col_offset_c3; | |
266 | assign cache_col_offset_c3_7 = tb_top.cpu.l2d7.ctr.cache_col_offset_c3; | |
267 | ||
268 | /**** | |
269 | assign 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 | |
272 | assign cache_decc_out_c52_0 = tb_top.cpu.l2d0.ctr.cache_decc_out_c5b; | |
273 | assign cache_decc_out_c52_1 = tb_top.cpu.l2d1.ctr.cache_decc_out_c5b; | |
274 | assign cache_decc_out_c52_2 = tb_top.cpu.l2d2.ctr.cache_decc_out_c5b; | |
275 | assign cache_decc_out_c52_3 = tb_top.cpu.l2d3.ctr.cache_decc_out_c5b; | |
276 | assign cache_decc_out_c52_4 = tb_top.cpu.l2d4.ctr.cache_decc_out_c5b; | |
277 | assign cache_decc_out_c52_5 = tb_top.cpu.l2d5.ctr.cache_decc_out_c5b; | |
278 | assign cache_decc_out_c52_6 = tb_top.cpu.l2d6.ctr.cache_decc_out_c5b; | |
279 | assign 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 | /*** | |
292 | assign 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 | ||
295 | initial | |
296 | begin | |
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 | //================================= | |
318 | k1 = 0; | |
319 | k=0;n=0; | |
320 | rand1 = 0; | |
321 | rand2 = 0; | |
322 | injectErr = 0; | |
323 | start_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 | |
345 | else **/ | |
346 | ||
347 | if ($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 | |
352 | else 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 | |
357 | else 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 | |
362 | else 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 | |
367 | else 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 | ||
375 | end | |
376 | ||
377 | //Sequential part of stmc... | |
378 | //To not inject in traphandler | |
379 | always @(posedge tb_top.cpu.l2clk) | |
380 | begin | |
381 | if(bit_err_enable) | |
382 | begin | |
383 | if(!L2_INT_RST) cs <= s0; | |
384 | else cs <= ns; | |
385 | end | |
386 | end | |
387 | //combo logic | |
388 | always @(s0 or s1 or take_dae or take_retry or cs) | |
389 | begin | |
390 | trph <= 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); | |
404 | end //end combo logic | |
405 | ||
406 | ||
407 | ||
408 | always @(posedge tb_top.cpu.l2clk) | |
409 | begin | |
410 | if(!L2_INT_RST) | |
411 | begin | |
412 | sel_bank = 3'b000; | |
413 | end | |
414 | else | |
415 | begin | |
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); | |
443 | end //if else of if (!L2_INT_RST) | |
444 | end //always block | |
445 | ||
446 | //always @(sel_bank) | |
447 | always @(posedge tb_top.cpu.l2clk) | |
448 | begin | |
449 | if(Tevent == 0 && trph == 0 && ( `TOP.gOutOfBoot[63:0] === `TOP.verif_args.finish_mask[63:0] ) && bit_err_enable != 0 ) | |
450 | begin | |
451 | //$display("In Selecting Block sel_bank = %d\n\n",sel_bank); | |
452 | ||
453 | case(sel_bank) | |
454 | 3'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); | |
455 | 3'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 | ||
457 | 3'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 | ||
459 | 3'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 | ||
461 | 3'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); | |
462 | 3'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); | |
463 | 3'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); | |
464 | 3'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); | |
465 | endcase | |
466 | ||
467 | end // if | |
468 | end //always | |
469 | ||
470 | ||
471 | always @(TRAP_EVENT) | |
472 | begin | |
473 | if( 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; | |
475 | else Tevent = 1'b0; | |
476 | //$display("Tevent = %d",Tevent); | |
477 | end | |
478 | ||
479 | ||
480 | ||
481 | task inject_err; | |
482 | ||
483 | input [2:0] sel_bank; | |
484 | input [8:0] cache_set_c3; | |
485 | input [15:0] cache_way_sel_c3; | |
486 | //input [3:0] cache_col_offset_c3; | |
487 | input cache_rd_wr_c3; | |
488 | input inst_l2data_vld_c4; | |
489 | input stuck_to0; | |
490 | input stuck_to1; | |
491 | input [2:0] bit_err_enable; | |
492 | input [155:0] l2d_l2t_decc_c6; | |
493 | integer k,n,way; | |
494 | ||
495 | begin | |
496 | if ( `TOP.gOutOfBoot[63:0] === `TOP.verif_args.finish_mask[63:0] ) | |
497 | begin | |
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 .... | |
605 | end // else of If(!Rst) | |
606 | end // else of If(!Rst) | |
607 | ||
608 | endtask | |
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 | ||
618 | function Decode; | |
619 | input [15:0] cache_way_sel_c3; | |
620 | begin | |
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 | ||
656 | end | |
657 | endfunction | |
658 | ||
659 | function Decode1; | |
660 | input [3:0] cache_col_offset_c3; | |
661 | begin | |
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 | ||
672 | end | |
673 | endfunction | |
674 | ||
675 | ||
676 | // Task for error forward | |
677 | task Setl2d_l2t_decc_c6; | |
678 | input bank; | |
679 | input [155:0] value; | |
680 | integer bank; | |
681 | reg [155:0] value; | |
682 | begin | |
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 | |
693 | end | |
694 | endtask | |
695 | ||
696 | task Releasel2d_l2t_decc_c6; | |
697 | input bank; | |
698 | integer bank; | |
699 | begin | |
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 | |
710 | end | |
711 | endtask | |
712 | ||
713 | endmodule | |
714 | ||
715 |