Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | // ========== Copyright Header Begin ========================================== |
2 | // | |
3 | // OpenSPARC T2 Processor File: TagArray.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 TagArray(L2_INT_RST); | |
36 | ||
37 | parameter PSMPL = 5; | |
38 | ||
39 | input L2_INT_RST; | |
40 | integer i, way; | |
41 | reg stuck_to0, stuck_to1, tarand_bit_flip; | |
42 | integer r,m,rand_limit_hi,rand,rand1,rand2; | |
43 | reg [23:0] inject_limit; | |
44 | reg [7:0] RunTimer; | |
45 | reg injectErr,start_injection; | |
46 | reg [39:0] address; | |
47 | reg[27:0] start_err,start_err1; | |
48 | reg[27:0] tagEntry, errTagEntry; | |
49 | reg [26:0] lkupTag; | |
50 | wire [7:0] rd_en,decdp_inst_int_or_inval_c1,inst_vld_c2_prev; | |
51 | wire [319:0] arbdp_addr_c1; | |
52 | wire [215:0] lkup_tag_d1; | |
53 | wire [223:0] tag_way0_c1,tag_way1_c1,tag_way2_c1,tag_way3_c1; | |
54 | wire [223:0]tag_way4_c1,tag_way5_c1,tag_way6_c1,tag_way7_c1; | |
55 | wire [223:0] tag_way8_c1,tag_way9_c1,tag_way10_c1,tag_way11_c1; | |
56 | wire [223:0] tag_way12_c1,tag_way13_c1,tag_way14_c1,tag_way15_c1; | |
57 | wire rd_en_0 , rd_en_1 , rd_en_2 , rd_en_3 , rd_en_4,rd_en_5 , rd_en_6 , rd_en_7; | |
58 | ||
59 | wire [39:0] arbdp_addr_c1_0 , arbdp_addr_c1_1 , arbdp_addr_c1_2 , arbdp_addr_c1_3 , arbdp_addr_c1_4 , arbdp_addr_c1_5 , arbdp_addr_c1_6 , arbdp_addr_c1_7; | |
60 | ||
61 | wire decdp_inst_int_or_inval_c1_0 ,decdp_inst_int_or_inval_c1_1 ,decdp_inst_int_or_inval_c1_2 ,decdp_inst_int_or_inval_c1_3 ,decdp_inst_int_or_inval_c1_4 ,decdp_inst_int_or_inval_c1_5 ,decdp_inst_int_or_inval_c1_6 ,decdp_inst_int_or_inval_c1_7; | |
62 | ||
63 | wire inst_vld_c2_prev_0 , inst_vld_c2_prev_1 ,inst_vld_c2_prev_2 ,inst_vld_c2_prev_3 , inst_vld_c2_prev_4 ,inst_vld_c2_prev_5 ,inst_vld_c2_prev_6 , inst_vld_c2_prev_7; | |
64 | ||
65 | wire [26:0] lkup_tag_d1_0 ,lkup_tag_d1_1 , lkup_tag_d1_2 ,lkup_tag_d1_3 ,lkup_tag_d1_4 , lkup_tag_d1_5 ,lkup_tag_d1_6 ,lkup_tag_d1_7; | |
66 | ||
67 | wire [27:0] tag_way0_c1_0 , tag_way0_c1_1 , tag_way0_c1_2 ,tag_way0_c1_3 , tag_way0_c1_4 , tag_way0_c1_5 , tag_way0_c1_6 ,tag_way0_c1_7; | |
68 | ||
69 | wire [27:0] tag_way1_c1_0 , tag_way1_c1_1 , tag_way1_c1_2 ,tag_way1_c1_3 , tag_way1_c1_4 , tag_way1_c1_5 , tag_way1_c1_6 ,tag_way1_c1_7; | |
70 | ||
71 | wire [27:0] tag_way2_c1_0 , tag_way2_c1_1 , tag_way2_c1_2 ,tag_way2_c1_3 , tag_way2_c1_4 , tag_way2_c1_5 , tag_way2_c1_6 ,tag_way2_c1_7; | |
72 | ||
73 | wire [27:0] tag_way3_c1_0 , tag_way3_c1_1 , tag_way3_c1_2 ,tag_way3_c1_3 , tag_way3_c1_4 , tag_way3_c1_5 , tag_way3_c1_6 ,tag_way3_c1_7; | |
74 | ||
75 | wire [27:0] tag_way4_c1_0 , tag_way4_c1_1 , tag_way4_c1_2 ,tag_way4_c1_3 , tag_way4_c1_4 , tag_way4_c1_5 , tag_way4_c1_6 ,tag_way4_c1_7; | |
76 | ||
77 | wire [27:0] tag_way5_c1_0 , tag_way5_c1_1 , tag_way5_c1_2 ,tag_way5_c1_3 , tag_way5_c1_4 , tag_way5_c1_5 , tag_way5_c1_6 ,tag_way5_c1_7; | |
78 | ||
79 | wire [27:0] tag_way6_c1_0 , tag_way6_c1_1 , tag_way6_c1_2 ,tag_way6_c1_3 , tag_way6_c1_4 , tag_way6_c1_5 , tag_way6_c1_6 ,tag_way6_c1_7; | |
80 | ||
81 | wire [27:0] tag_way7_c1_0 , tag_way7_c1_1 , tag_way7_c1_2 ,tag_way7_c1_3 , tag_way7_c1_4 , tag_way7_c1_5 , tag_way7_c1_6 ,tag_way7_c1_7; | |
82 | ||
83 | wire [27:0] tag_way8_c1_0 , tag_way8_c1_1 , tag_way8_c1_2 ,tag_way8_c1_3 , tag_way8_c1_4 , tag_way8_c1_5 , tag_way8_c1_6 ,tag_way8_c1_7; | |
84 | ||
85 | wire [27:0] tag_way9_c1_0 , tag_way9_c1_1 , tag_way9_c1_2 ,tag_way9_c1_3 , tag_way9_c1_4 , tag_way9_c1_5 , tag_way9_c1_6 ,tag_way9_c1_7; | |
86 | ||
87 | wire [27:0] tag_way10_c1_0 , tag_way10_c1_1 , tag_way10_c1_2 ,tag_way10_c1_3 , tag_way10_c1_4 , tag_way10_c1_5 , tag_way10_c1_6 ,tag_way10_c1_7; | |
88 | ||
89 | wire [27:0] tag_way11_c1_0 , tag_way11_c1_1 , tag_way11_c1_2 ,tag_way11_c1_3 , tag_way11_c1_4 , tag_way11_c1_5 , tag_way11_c1_6 ,tag_way11_c1_7; | |
90 | ||
91 | wire [27:0] tag_way12_c1_0 , tag_way12_c1_1 , tag_way12_c1_2 ,tag_way12_c1_3 , tag_way12_c1_4 , tag_way12_c1_5 , tag_way12_c1_6 ,tag_way12_c1_7; | |
92 | ||
93 | wire [27:0] tag_way13_c1_0 , tag_way13_c1_1 , tag_way13_c1_2 ,tag_way13_c1_3 , tag_way13_c1_4 , tag_way13_c1_5 , tag_way13_c1_6 ,tag_way13_c1_7; | |
94 | ||
95 | wire [27:0] tag_way14_c1_0 , tag_way14_c1_1 , tag_way14_c1_2 ,tag_way14_c1_3 , tag_way14_c1_4 , tag_way14_c1_5 , tag_way14_c1_6 ,tag_way14_c1_7; | |
96 | ||
97 | wire [27:0] tag_way15_c1_0 , tag_way15_c1_1 , tag_way15_c1_2 ,tag_way15_c1_3 , tag_way15_c1_4 , tag_way15_c1_5 , tag_way15_c1_6 ,tag_way15_c1_7; | |
98 | ||
99 | ||
100 | ||
101 | ||
102 | ||
103 | assign rd_en = {rd_en_7 , rd_en_6 , rd_en_5 , rd_en_4 ,rd_en_3,rd_en_2 , rd_en_1 , rd_en_0 }; | |
104 | ||
105 | assign arbdp_addr_c1 = {arbdp_addr_c1_7 , arbdp_addr_c1_6 , arbdp_addr_c1_5 , arbdp_addr_c1_4 , arbdp_addr_c1_3 , arbdp_addr_c1_2 , arbdp_addr_c1_1 , arbdp_addr_c1_0}; | |
106 | ||
107 | assign decdp_inst_int_or_inval_c1 = {decdp_inst_int_or_inval_c1_7 , decdp_inst_int_or_inval_c1_6 ,decdp_inst_int_or_inval_c1_5 ,decdp_inst_int_or_inval_c1_4 , decdp_inst_int_or_inval_c1_3 ,decdp_inst_int_or_inval_c1_2 , decdp_inst_int_or_inval_c1_1 ,decdp_inst_int_or_inval_c1_0 }; | |
108 | ||
109 | ||
110 | assign inst_vld_c2_prev = {inst_vld_c2_prev_7 , inst_vld_c2_prev_6 ,inst_vld_c2_prev_5 , inst_vld_c2_prev_4 , inst_vld_c2_prev_3 ,inst_vld_c2_prev_2 , inst_vld_c2_prev_1 , inst_vld_c2_prev_0}; | |
111 | ||
112 | assign lkup_tag_d1 = {lkup_tag_d1_7 ,lkup_tag_d1_6 , lkup_tag_d1_5 ,lkup_tag_d1_4 , lkup_tag_d1_3 , lkup_tag_d1_2 ,lkup_tag_d1_1 ,lkup_tag_d1_0}; | |
113 | ||
114 | ||
115 | assign tag_way0_c1 = {tag_way0_c1_7 , tag_way0_c1_6 , tag_way0_c1_5 ,tag_way0_c1_4 , tag_way0_c1_3 , tag_way0_c1_2 , tag_way0_c1_1 ,tag_way0_c1_0 }; | |
116 | ||
117 | assign tag_way1_c1 = {tag_way1_c1_7 , tag_way1_c1_6 , tag_way1_c1_5 , tag_way1_c1_4 , tag_way1_c1_3 , tag_way1_c1_2 , tag_way1_c1_1 ,tag_way1_c1_0 }; | |
118 | ||
119 | assign tag_way2_c1 = {tag_way2_c1_7 , tag_way2_c1_6 , tag_way2_c1_5 , tag_way2_c1_4 , tag_way2_c1_3 , tag_way2_c1_2 , tag_way2_c1_1 ,tag_way2_c1_0 }; | |
120 | ||
121 | assign tag_way3_c1 ={tag_way3_c1_7 , tag_way3_c1_6 , tag_way3_c1_5 , tag_way3_c1_4 , tag_way3_c1_3 , tag_way3_c1_2 , tag_way3_c1_1 , tag_way3_c1_0 }; | |
122 | ||
123 | assign tag_way4_c1 ={tag_way4_c1_7 ,tag_way4_c1_6 ,tag_way4_c1_5 ,tag_way4_c1_4 , tag_way4_c1_3 , tag_way4_c1_2 , tag_way4_c1_1 ,tag_way4_c1_0}; | |
124 | ||
125 | assign tag_way5_c1 ={tag_way5_c1_7 , tag_way5_c1_6 ,tag_way5_c1_5 , tag_way5_c1_4 , tag_way5_c1_3 , tag_way5_c1_2 , tag_way5_c1_1 ,tag_way5_c1_0}; | |
126 | ||
127 | ||
128 | assign tag_way6_c1 ={tag_way6_c1_7 , tag_way6_c1_6 ,tag_way6_c1_5 ,tag_way6_c1_4 , tag_way6_c1_3 , tag_way6_c1_2 , tag_way6_c1_1 ,tag_way6_c1_0 }; | |
129 | ||
130 | assign tag_way7_c1 = {tag_way7_c1_7 ,tag_way7_c1_6 ,tag_way7_c1_5 ,tag_way7_c1_4 , tag_way7_c1_3 , tag_way7_c1_2 , tag_way7_c1_1 ,tag_way7_c1_0 }; | |
131 | ||
132 | assign tag_way8_c1 ={tag_way8_c1_7 , tag_way8_c1_6 ,tag_way8_c1_5 ,tag_way8_c1_4 , tag_way8_c1_3 , tag_way8_c1_2 , tag_way8_c1_1 ,tag_way8_c1_0 }; | |
133 | ||
134 | assign tag_way9_c1 = {tag_way9_c1_7 , tag_way9_c1_6 ,tag_way9_c1_5 ,tag_way9_c1_4 , tag_way9_c1_3 , tag_way9_c1_2 , tag_way9_c1_1 ,tag_way9_c1_0 }; | |
135 | ||
136 | assign tag_way10_c1 ={tag_way10_c1_7 , tag_way10_c1_6 ,tag_way10_c1_5 , tag_way10_c1_4 , tag_way10_c1_3 , tag_way10_c1_2 , tag_way10_c1_1 ,tag_way10_c1_0 }; | |
137 | ||
138 | assign tag_way11_c1 ={tag_way11_c1_7 , tag_way11_c1_6 ,tag_way11_c1_5 , tag_way11_c1_4 , tag_way11_c1_3 , tag_way11_c1_2 , tag_way11_c1_1 ,tag_way11_c1_0 }; | |
139 | ||
140 | assign tag_way12_c1 ={tag_way12_c1_7 , tag_way12_c1_6 ,tag_way12_c1_5 , tag_way12_c1_4 , tag_way12_c1_3 , tag_way12_c1_2 , tag_way12_c1_1 ,tag_way12_c1_0 }; | |
141 | ||
142 | assign tag_way13_c1 ={tag_way13_c1_7 , tag_way13_c1_6 ,tag_way13_c1_5 , tag_way13_c1_4 , tag_way13_c1_3 , tag_way13_c1_2 ,tag_way13_c1_1 , tag_way13_c1_0 }; | |
143 | ||
144 | assign tag_way14_c1 ={tag_way14_c1_7 , tag_way14_c1_6 ,tag_way14_c1_5 ,tag_way14_c1_4 , tag_way14_c1_3 , tag_way14_c1_2 , tag_way14_c1_1 ,tag_way14_c1_0}; | |
145 | ||
146 | assign tag_way15_c1 ={tag_way15_c1_7 , tag_way15_c1_6 , tag_way15_c1_5 , tag_way15_c1_4 , tag_way15_c1_3 , tag_way15_c1_2 , tag_way15_c1_1 ,tag_way15_c1_0}; | |
147 | ||
148 | ||
149 | ||
150 | ||
151 | assign rd_en_0 = tb_top.cpu.l2t0.tag.rd_en0; | |
152 | assign rd_en_1 = tb_top.cpu.l2t1.tag.rd_en0; | |
153 | assign rd_en_2 = tb_top.cpu.l2t2.tag.rd_en0; | |
154 | assign rd_en_3 = tb_top.cpu.l2t3.tag.rd_en0; | |
155 | assign rd_en_4 = tb_top.cpu.l2t4.tag.rd_en0; | |
156 | assign rd_en_5 = tb_top.cpu.l2t5.tag.rd_en0; | |
157 | assign rd_en_6 = tb_top.cpu.l2t6.tag.rd_en0; | |
158 | assign rd_en_7 = tb_top.cpu.l2t7.tag.rd_en0; | |
159 | ||
160 | assign arbdp_addr_c1_0 = tb_top.cpu.l2t0.arbadr.arbdp_addr_c1_1; | |
161 | assign arbdp_addr_c1_1 = tb_top.cpu.l2t1.arbadr.arbdp_addr_c1_1; | |
162 | assign arbdp_addr_c1_2 = tb_top.cpu.l2t2.arbadr.arbdp_addr_c1_1; | |
163 | assign arbdp_addr_c1_3 = tb_top.cpu.l2t3.arbadr.arbdp_addr_c1_1; | |
164 | assign arbdp_addr_c1_4 = tb_top.cpu.l2t4.arbadr.arbdp_addr_c1_1; | |
165 | assign arbdp_addr_c1_5 = tb_top.cpu.l2t5.arbadr.arbdp_addr_c1_1; | |
166 | assign arbdp_addr_c1_6 = tb_top.cpu.l2t6.arbadr.arbdp_addr_c1_1; | |
167 | assign arbdp_addr_c1_7 = tb_top.cpu.l2t7.arbadr.arbdp_addr_c1_1; | |
168 | ||
169 | ||
170 | assign decdp_inst_int_or_inval_c1_0 = tb_top.cpu.l2t0.arb.decdp_inst_int_or_inval_c1; | |
171 | assign decdp_inst_int_or_inval_c1_1 = tb_top.cpu.l2t1.arb.decdp_inst_int_or_inval_c1; | |
172 | assign decdp_inst_int_or_inval_c1_2 = tb_top.cpu.l2t2.arb.decdp_inst_int_or_inval_c1; | |
173 | assign decdp_inst_int_or_inval_c1_3 = tb_top.cpu.l2t3.arb.decdp_inst_int_or_inval_c1; | |
174 | assign decdp_inst_int_or_inval_c1_4 = tb_top.cpu.l2t4.arb.decdp_inst_int_or_inval_c1; | |
175 | assign decdp_inst_int_or_inval_c1_5 = tb_top.cpu.l2t5.arb.decdp_inst_int_or_inval_c1; | |
176 | assign decdp_inst_int_or_inval_c1_6 = tb_top.cpu.l2t6.arb.decdp_inst_int_or_inval_c1; | |
177 | assign decdp_inst_int_or_inval_c1_7 = tb_top.cpu.l2t7.arb.decdp_inst_int_or_inval_c1; | |
178 | ||
179 | ||
180 | assign inst_vld_c2_prev_0 = tb_top.cpu.l2t0.arb.inst_vld_c2_prev; | |
181 | assign inst_vld_c2_prev_1 = tb_top.cpu.l2t1.arb.inst_vld_c2_prev; | |
182 | assign inst_vld_c2_prev_2 = tb_top.cpu.l2t2.arb.inst_vld_c2_prev; | |
183 | assign inst_vld_c2_prev_3 = tb_top.cpu.l2t3.arb.inst_vld_c2_prev; | |
184 | assign inst_vld_c2_prev_4 = tb_top.cpu.l2t4.arb.inst_vld_c2_prev; | |
185 | assign inst_vld_c2_prev_5 = tb_top.cpu.l2t5.arb.inst_vld_c2_prev; | |
186 | assign inst_vld_c2_prev_6 = tb_top.cpu.l2t6.arb.inst_vld_c2_prev; | |
187 | assign inst_vld_c2_prev_7 = tb_top.cpu.l2t7.arb.inst_vld_c2_prev; | |
188 | ||
189 | assign lkup_tag_d1_0 = tb_top.cpu.l2t0.tag.lkup_tag0[27:1]; | |
190 | assign lkup_tag_d1_1 = tb_top.cpu.l2t1.tag.lkup_tag0[27:1]; | |
191 | assign lkup_tag_d1_2 = tb_top.cpu.l2t2.tag.lkup_tag0[27:1]; | |
192 | assign lkup_tag_d1_3 = tb_top.cpu.l2t3.tag.lkup_tag0[27:1]; | |
193 | assign lkup_tag_d1_4 = tb_top.cpu.l2t4.tag.lkup_tag0[27:1]; | |
194 | assign lkup_tag_d1_5 = tb_top.cpu.l2t5.tag.lkup_tag0[27:1]; | |
195 | assign lkup_tag_d1_6 = tb_top.cpu.l2t6.tag.lkup_tag0[27:1]; | |
196 | assign lkup_tag_d1_7 = tb_top.cpu.l2t7.tag.lkup_tag0[27:1]; | |
197 | ||
198 | /***** Changed similarly for all ways | |
199 | assign tag_way0_c1_0 = tb_top.cpu.l2t0.tag.quad0.bank0.tag_way0; | |
200 | assign tag_way0_c1_1 = tb_top.cpu.l2t1.tag.quad0.bank0.tag_way0; | |
201 | assign tag_way0_c1_2 = tb_top.cpu.l2t2.tag.quad0.bank0.tag_way0; | |
202 | assign tag_way0_c1_3 = tb_top.cpu.l2t3.tag.quad0.bank0.tag_way0; | |
203 | assign tag_way0_c1_4 = tb_top.cpu.l2t4.tag.quad0.bank0.tag_way0; | |
204 | assign tag_way0_c1_5 = tb_top.cpu.l2t5.tag.quad0.bank0.tag_way0; | |
205 | assign tag_way0_c1_6 = tb_top.cpu.l2t6.tag.quad0.bank0.tag_way0; | |
206 | assign tag_way0_c1_7 = tb_top.cpu.l2t7.tag.quad0.bank0.tag_way0; | |
207 | ****/ | |
208 | ||
209 | assign tag_way0_c1_0 = tb_top.cpu.l2t0.tag.quad0.bank0.sao_mx0; | |
210 | assign tag_way0_c1_1 = tb_top.cpu.l2t1.tag.quad0.bank0.sao_mx0; | |
211 | assign tag_way0_c1_2 = tb_top.cpu.l2t2.tag.quad0.bank0.sao_mx0; | |
212 | assign tag_way0_c1_3 = tb_top.cpu.l2t3.tag.quad0.bank0.sao_mx0; | |
213 | assign tag_way0_c1_4 = tb_top.cpu.l2t4.tag.quad0.bank0.sao_mx0; | |
214 | assign tag_way0_c1_5 = tb_top.cpu.l2t5.tag.quad0.bank0.sao_mx0; | |
215 | assign tag_way0_c1_6 = tb_top.cpu.l2t6.tag.quad0.bank0.sao_mx0; | |
216 | assign tag_way0_c1_7 = tb_top.cpu.l2t7.tag.quad0.bank0.sao_mx0; | |
217 | ||
218 | //assign tag_way1_c1_0 = tb_top.cpu.l2t0.tag.quad0.bank0.tag_way1; | |
219 | assign tag_way1_c1_0 = tb_top.cpu.l2t0.tag.quad0.bank1.sao_mx0; | |
220 | assign tag_way1_c1_1 = tb_top.cpu.l2t1.tag.quad0.bank1.tag_way1; | |
221 | assign tag_way1_c1_2 = tb_top.cpu.l2t2.tag.quad0.bank1.tag_way1; | |
222 | assign tag_way1_c1_3 = tb_top.cpu.l2t3.tag.quad0.bank1.tag_way1; | |
223 | assign tag_way1_c1_4 = tb_top.cpu.l2t4.tag.quad0.bank1.tag_way1; | |
224 | assign tag_way1_c1_5 = tb_top.cpu.l2t5.tag.quad0.bank1.tag_way1; | |
225 | assign tag_way1_c1_6 = tb_top.cpu.l2t6.tag.quad0.bank1.tag_way1; | |
226 | assign tag_way1_c1_7 = tb_top.cpu.l2t7.tag.quad0.bank1.tag_way1; | |
227 | ||
228 | //assign tag_way2_c1_0 = tb_top.cpu.l2t0.tag.quad0.bank1.tag_way0; | |
229 | assign tag_way2_c1_0 = tb_top.cpu.l2t0.tag.quad2.bank0.sao_mx0; | |
230 | assign tag_way2_c1_1 = tb_top.cpu.l2t1.tag.quad0.bank1.tag_way0; | |
231 | assign tag_way2_c1_2 = tb_top.cpu.l2t2.tag.quad0.bank1.tag_way0; | |
232 | assign tag_way2_c1_3 = tb_top.cpu.l2t3.tag.quad0.bank1.tag_way0; | |
233 | assign tag_way2_c1_4 = tb_top.cpu.l2t4.tag.quad0.bank1.tag_way0; | |
234 | assign tag_way2_c1_5 = tb_top.cpu.l2t5.tag.quad0.bank1.tag_way0; | |
235 | assign tag_way2_c1_6 = tb_top.cpu.l2t6.tag.quad0.bank1.tag_way0; | |
236 | assign tag_way2_c1_7 = tb_top.cpu.l2t7.tag.quad0.bank1.tag_way0; | |
237 | ||
238 | //assign tag_way3_c1_0 = tb_top.cpu.l2t0.tag.quad0.bank1.tag_way1; | |
239 | assign tag_way3_c1_0 = tb_top.cpu.l2t0.tag.quad2.bank1.sao_mx0; | |
240 | assign tag_way3_c1_1 = tb_top.cpu.l2t1.tag.quad0.bank1.tag_way1; | |
241 | assign tag_way3_c1_2 = tb_top.cpu.l2t2.tag.quad0.bank1.tag_way1; | |
242 | assign tag_way3_c1_3 = tb_top.cpu.l2t3.tag.quad0.bank1.tag_way1; | |
243 | assign tag_way3_c1_4 = tb_top.cpu.l2t4.tag.quad0.bank1.tag_way1; | |
244 | assign tag_way3_c1_5 = tb_top.cpu.l2t5.tag.quad0.bank1.tag_way1; | |
245 | assign tag_way3_c1_6 = tb_top.cpu.l2t6.tag.quad0.bank1.tag_way1; | |
246 | assign tag_way3_c1_7 = tb_top.cpu.l2t7.tag.quad0.bank1.tag_way1; | |
247 | ||
248 | //assign tag_way4_c1_0 = tb_top.cpu.l2t0.tag.quad1.bank0.tag_way0; | |
249 | assign tag_way4_c1_0 = tb_top.cpu.l2t0.tag.quad0.bank0.sao_mx1; | |
250 | assign tag_way4_c1_1 = tb_top.cpu.l2t1.tag.quad1.bank0.tag_way0; | |
251 | assign tag_way4_c1_2 = tb_top.cpu.l2t2.tag.quad1.bank0.tag_way0; | |
252 | assign tag_way4_c1_3 = tb_top.cpu.l2t3.tag.quad1.bank0.tag_way0; | |
253 | assign tag_way4_c1_4 = tb_top.cpu.l2t4.tag.quad1.bank0.tag_way0; | |
254 | assign tag_way4_c1_5 = tb_top.cpu.l2t5.tag.quad1.bank0.tag_way0; | |
255 | assign tag_way4_c1_6 = tb_top.cpu.l2t6.tag.quad1.bank0.tag_way0; | |
256 | assign tag_way4_c1_7 = tb_top.cpu.l2t7.tag.quad1.bank0.tag_way0; | |
257 | ||
258 | //assign tag_way5_c1_0 = tb_top.cpu.l2t0.tag.quad1.bank0.tag_way1; | |
259 | assign tag_way5_c1_0 = tb_top.cpu.l2t0.tag.quad0.bank1.sao_mx1; | |
260 | assign tag_way5_c1_1 = tb_top.cpu.l2t1.tag.quad1.bank0.tag_way1; | |
261 | assign tag_way5_c1_2 = tb_top.cpu.l2t2.tag.quad1.bank0.tag_way1; | |
262 | assign tag_way5_c1_3 = tb_top.cpu.l2t3.tag.quad1.bank0.tag_way1; | |
263 | assign tag_way5_c1_4 = tb_top.cpu.l2t4.tag.quad1.bank0.tag_way1; | |
264 | assign tag_way5_c1_5 = tb_top.cpu.l2t5.tag.quad1.bank0.tag_way1; | |
265 | assign tag_way5_c1_6 = tb_top.cpu.l2t6.tag.quad1.bank0.tag_way1; | |
266 | assign tag_way5_c1_7 = tb_top.cpu.l2t7.tag.quad1.bank0.tag_way1; | |
267 | ||
268 | //assign tag_way6_c1_0 = tb_top.cpu.l2t0.tag.quad1.bank1.tag_way0; | |
269 | assign tag_way6_c1_0 = tb_top.cpu.l2t0.tag.quad2.bank0.sao_mx1; | |
270 | assign tag_way6_c1_1 = tb_top.cpu.l2t1.tag.quad1.bank1.tag_way0; | |
271 | assign tag_way6_c1_2 = tb_top.cpu.l2t2.tag.quad1.bank1.tag_way0; | |
272 | assign tag_way6_c1_3 = tb_top.cpu.l2t3.tag.quad1.bank1.tag_way0; | |
273 | assign tag_way6_c1_4 = tb_top.cpu.l2t4.tag.quad1.bank1.tag_way0; | |
274 | assign tag_way6_c1_5 = tb_top.cpu.l2t5.tag.quad1.bank1.tag_way0; | |
275 | assign tag_way6_c1_6 = tb_top.cpu.l2t6.tag.quad1.bank1.tag_way0; | |
276 | assign tag_way6_c1_7 = tb_top.cpu.l2t7.tag.quad1.bank1.tag_way0; | |
277 | ||
278 | //assign tag_way7_c1_0 = tb_top.cpu.l2t0.tag.quad1.bank1.tag_way1; | |
279 | assign tag_way7_c1_0 = tb_top.cpu.l2t0.tag.quad2.bank1.sao_mx1; | |
280 | assign tag_way7_c1_1 = tb_top.cpu.l2t1.tag.quad1.bank1.tag_way1; | |
281 | assign tag_way7_c1_2 = tb_top.cpu.l2t2.tag.quad1.bank1.tag_way1; | |
282 | assign tag_way7_c1_3 = tb_top.cpu.l2t3.tag.quad1.bank1.tag_way1; | |
283 | assign tag_way7_c1_4 = tb_top.cpu.l2t4.tag.quad1.bank1.tag_way1; | |
284 | assign tag_way7_c1_5 = tb_top.cpu.l2t5.tag.quad1.bank1.tag_way1; | |
285 | assign tag_way7_c1_6 = tb_top.cpu.l2t6.tag.quad1.bank1.tag_way1; | |
286 | assign tag_way7_c1_7 = tb_top.cpu.l2t7.tag.quad1.bank1.tag_way1; | |
287 | ||
288 | //assign tag_way8_c1_0 = tb_top.cpu.l2t0.tag.quad2.bank0.tag_way0; | |
289 | assign tag_way8_c1_0 = tb_top.cpu.l2t0.tag.quad1.bank0.sao_mx0; | |
290 | assign tag_way8_c1_1 = tb_top.cpu.l2t1.tag.quad2.bank0.tag_way0; | |
291 | assign tag_way8_c1_2 = tb_top.cpu.l2t2.tag.quad2.bank0.tag_way0; | |
292 | assign tag_way8_c1_3 = tb_top.cpu.l2t3.tag.quad2.bank0.tag_way0; | |
293 | assign tag_way8_c1_4 = tb_top.cpu.l2t4.tag.quad2.bank0.tag_way0; | |
294 | assign tag_way8_c1_5 = tb_top.cpu.l2t5.tag.quad2.bank0.tag_way0; | |
295 | assign tag_way8_c1_6 = tb_top.cpu.l2t6.tag.quad2.bank0.tag_way0; | |
296 | assign tag_way8_c1_7 = tb_top.cpu.l2t7.tag.quad2.bank0.tag_way0; | |
297 | ||
298 | //assign tag_way9_c1_0 = tb_top.cpu.l2t0.tag.quad2.bank0.tag_way1; | |
299 | assign tag_way9_c1_0 = tb_top.cpu.l2t0.tag.quad1.bank1.sao_mx0; | |
300 | assign tag_way9_c1_1 = tb_top.cpu.l2t1.tag.quad2.bank0.tag_way1; | |
301 | assign tag_way9_c1_2 = tb_top.cpu.l2t2.tag.quad2.bank0.tag_way1; | |
302 | assign tag_way9_c1_3 = tb_top.cpu.l2t3.tag.quad2.bank0.tag_way1; | |
303 | assign tag_way9_c1_4 = tb_top.cpu.l2t4.tag.quad2.bank0.tag_way1; | |
304 | assign tag_way9_c1_5 = tb_top.cpu.l2t5.tag.quad2.bank0.tag_way1; | |
305 | assign tag_way9_c1_6 = tb_top.cpu.l2t6.tag.quad2.bank0.tag_way1; | |
306 | assign tag_way9_c1_7 = tb_top.cpu.l2t7.tag.quad2.bank0.tag_way1; | |
307 | ||
308 | //assign tag_way10_c1_0 = tb_top.cpu.l2t0.tag.quad2.bank1.tag_way0; | |
309 | assign tag_way10_c1_0 = tb_top.cpu.l2t0.tag.quad3.bank0.sao_mx0; | |
310 | assign tag_way10_c1_1 = tb_top.cpu.l2t1.tag.quad2.bank1.tag_way0; | |
311 | assign tag_way10_c1_2 = tb_top.cpu.l2t2.tag.quad2.bank1.tag_way0; | |
312 | assign tag_way10_c1_3 = tb_top.cpu.l2t3.tag.quad2.bank1.tag_way0; | |
313 | assign tag_way10_c1_4 = tb_top.cpu.l2t4.tag.quad2.bank1.tag_way0; | |
314 | assign tag_way10_c1_5 = tb_top.cpu.l2t5.tag.quad2.bank1.tag_way0; | |
315 | assign tag_way10_c1_6 = tb_top.cpu.l2t6.tag.quad2.bank1.tag_way0; | |
316 | assign tag_way10_c1_7 = tb_top.cpu.l2t7.tag.quad2.bank1.tag_way0; | |
317 | ||
318 | //assign tag_way11_c1_0 = tb_top.cpu.l2t0.tag.quad2.bank1.tag_way1; | |
319 | assign tag_way11_c1_0 = tb_top.cpu.l2t0.tag.quad3.bank1.sao_mx0; | |
320 | assign tag_way11_c1_1 = tb_top.cpu.l2t1.tag.quad2.bank1.tag_way1; | |
321 | assign tag_way11_c1_2 = tb_top.cpu.l2t2.tag.quad2.bank1.tag_way1; | |
322 | assign tag_way11_c1_3 = tb_top.cpu.l2t3.tag.quad2.bank1.tag_way1; | |
323 | assign tag_way11_c1_4 = tb_top.cpu.l2t4.tag.quad2.bank1.tag_way1; | |
324 | assign tag_way11_c1_5 = tb_top.cpu.l2t5.tag.quad2.bank1.tag_way1; | |
325 | assign tag_way11_c1_6 = tb_top.cpu.l2t6.tag.quad2.bank1.tag_way1; | |
326 | assign tag_way11_c1_7 = tb_top.cpu.l2t7.tag.quad2.bank1.tag_way1; | |
327 | ||
328 | //assign tag_way12_c1_0 = tb_top.cpu.l2t0.tag.quad3.bank0.tag_way0; | |
329 | assign tag_way12_c1_0 = tb_top.cpu.l2t0.tag.quad1.bank0.sao_mx1; | |
330 | assign tag_way12_c1_1 = tb_top.cpu.l2t1.tag.quad3.bank0.tag_way0; | |
331 | assign tag_way12_c1_2 = tb_top.cpu.l2t2.tag.quad3.bank0.tag_way0; | |
332 | assign tag_way12_c1_3 = tb_top.cpu.l2t3.tag.quad3.bank0.tag_way0; | |
333 | assign tag_way12_c1_4 = tb_top.cpu.l2t4.tag.quad3.bank0.tag_way0; | |
334 | assign tag_way12_c1_5 = tb_top.cpu.l2t5.tag.quad3.bank0.tag_way0; | |
335 | assign tag_way12_c1_6 = tb_top.cpu.l2t6.tag.quad3.bank0.tag_way0; | |
336 | assign tag_way12_c1_7 = tb_top.cpu.l2t7.tag.quad3.bank0.tag_way0; | |
337 | ||
338 | //assign tag_way13_c1_0 = tb_top.cpu.l2t0.tag.quad3.bank0.tag_way1; | |
339 | assign tag_way13_c1_0 = tb_top.cpu.l2t0.tag.quad1.bank1.sao_mx1; | |
340 | assign tag_way13_c1_1 = tb_top.cpu.l2t1.tag.quad3.bank0.tag_way1; | |
341 | assign tag_way13_c1_2 = tb_top.cpu.l2t2.tag.quad3.bank0.tag_way1; | |
342 | assign tag_way13_c1_3 = tb_top.cpu.l2t3.tag.quad3.bank0.tag_way1; | |
343 | assign tag_way13_c1_4 = tb_top.cpu.l2t4.tag.quad3.bank0.tag_way1; | |
344 | assign tag_way13_c1_5 = tb_top.cpu.l2t5.tag.quad3.bank0.tag_way1; | |
345 | assign tag_way13_c1_6 = tb_top.cpu.l2t6.tag.quad3.bank0.tag_way1; | |
346 | assign tag_way13_c1_7 = tb_top.cpu.l2t7.tag.quad3.bank0.tag_way1; | |
347 | ||
348 | //assign tag_way14_c1_0 = tb_top.cpu.l2t0.tag.quad3.bank1.tag_way0; | |
349 | assign tag_way14_c1_0 = tb_top.cpu.l2t0.tag.quad3.bank0.sao_mx1; | |
350 | assign tag_way14_c1_1 = tb_top.cpu.l2t1.tag.quad3.bank1.tag_way0; | |
351 | assign tag_way14_c1_2 = tb_top.cpu.l2t2.tag.quad3.bank1.tag_way0; | |
352 | assign tag_way14_c1_3 = tb_top.cpu.l2t3.tag.quad3.bank1.tag_way0; | |
353 | assign tag_way14_c1_4 = tb_top.cpu.l2t4.tag.quad3.bank1.tag_way0; | |
354 | assign tag_way14_c1_5 = tb_top.cpu.l2t5.tag.quad3.bank1.tag_way0; | |
355 | assign tag_way14_c1_6 = tb_top.cpu.l2t6.tag.quad3.bank1.tag_way0; | |
356 | assign tag_way14_c1_7 = tb_top.cpu.l2t7.tag.quad3.bank1.tag_way0; | |
357 | ||
358 | //assign tag_way15_c1_0 = tb_top.cpu.l2t0.tag.quad3.bank1.tag_way1; | |
359 | assign tag_way15_c1_0 = tb_top.cpu.l2t0.tag.quad3.bank1.sao_mx1; | |
360 | assign tag_way15_c1_1 = tb_top.cpu.l2t1.tag.quad3.bank1.tag_way1; | |
361 | assign tag_way15_c1_2 = tb_top.cpu.l2t2.tag.quad3.bank1.tag_way1; | |
362 | assign tag_way15_c1_3 = tb_top.cpu.l2t3.tag.quad3.bank1.tag_way1; | |
363 | assign tag_way15_c1_4 = tb_top.cpu.l2t4.tag.quad3.bank1.tag_way1; | |
364 | assign tag_way15_c1_5 = tb_top.cpu.l2t5.tag.quad3.bank1.tag_way1; | |
365 | assign tag_way15_c1_6 = tb_top.cpu.l2t6.tag.quad3.bank1.tag_way1; | |
366 | assign tag_way15_c1_7 = tb_top.cpu.l2t7.tag.quad3.bank1.tag_way1; | |
367 | ||
368 | ||
369 | ||
370 | initial | |
371 | begin | |
372 | ||
373 | ||
374 | //================================= | |
375 | // Initialize the forcing variables | |
376 | //================================= | |
377 | stuck_to0 = 1'b0; | |
378 | stuck_to1 = 1'b0; | |
379 | tarand_bit_flip = 1'b0; | |
380 | inject_limit = 0; | |
381 | start_err=0; | |
382 | start_err1=0; | |
383 | ||
384 | rand_limit_hi = 150; | |
385 | // rand_limit_lo = 0; | |
386 | // rand_seed = 0; | |
387 | ||
388 | //================================= | |
389 | // Initialize the variables used in here | |
390 | //================================= | |
391 | /** | |
392 | way = 0; | |
393 | address=0; | |
394 | lkupTag=0; | |
395 | tagEntry=0; | |
396 | errTagEntry=0; | |
397 | **/ | |
398 | injectErr = 0; | |
399 | start_injection = 0; | |
400 | ||
401 | //========================================= | |
402 | // Check if forcing variables are changed by verargs | |
403 | //========================================= | |
404 | if($test$plusargs("ta_bit_stuck_to0")) | |
405 | begin | |
406 | stuck_to0= 1; | |
407 | stuck_to1= 0; | |
408 | tarand_bit_flip = 0; | |
409 | `PR_ALWAYS("l2_tagErrInjector", `ALWAYS, "L2 bit stuck to 0"); | |
410 | end | |
411 | else if ($test$plusargs("ta_bit_stuck_to1")) | |
412 | begin | |
413 | stuck_to0= 0; | |
414 | stuck_to1= 1; | |
415 | tarand_bit_flip = 0; | |
416 | `PR_ALWAYS("l2_tagErrInjector", `ALWAYS,"L2 bit stuck to 1"); | |
417 | end | |
418 | else if ($test$plusargs("L2TA_RAND_ERR_ENABLE")) | |
419 | begin | |
420 | tarand_bit_flip = 1; | |
421 | stuck_to0= 0; | |
422 | stuck_to1= 0; | |
423 | // if($value$plusargs("L2INJECT_LIMIT=%d",inject_limit)) | |
424 | // $display("L2InjectLimit is = %d",inject_limit); | |
425 | // if (inject_limit > rand_limit_hi) | |
426 | // $display("inject limit is %d greater than max allowable \n", inject_limit); | |
427 | `PR_ALWAYS("l2_tagErrInjector", `ALWAYS,"L2 Tag Array Err injection Enabled"); | |
428 | end | |
429 | ||
430 | end | |
431 | ||
432 | /** | |
433 | always @(posedge tb_top.cpu.l2clk) | |
434 | begin | |
435 | if(start_err < 15744276) | |
436 | begin | |
437 | start_err <= $time; | |
438 | start_injection <= 0; | |
439 | end | |
440 | else | |
441 | begin | |
442 | start_err <= start_err1; | |
443 | start_injection <= 1; | |
444 | end | |
445 | end | |
446 | **/ | |
447 | ||
448 | ||
449 | ||
450 | ||
451 | always @(posedge tb_top.cpu.l2clk) | |
452 | // Tag array error injection | |
453 | begin | |
454 | if(!L2_INT_RST) | |
455 | begin | |
456 | way <= 0; | |
457 | address <= 0; | |
458 | lkupTag <= 0; | |
459 | tagEntry <= 0; | |
460 | errTagEntry <= 0; | |
461 | i <= 0; | |
462 | ||
463 | end | |
464 | else | |
465 | if(`TOP.gOutOfBoot[63:0] === `TOP.verif_args.finish_mask[63:0] ) | |
466 | begin | |
467 | ||
468 | if(tarand_bit_flip == 1) | |
469 | begin | |
470 | // if(rd_en && ($random%8 == 0)) begin // PX2 signal,PSAMPLE,in cycleN | |
471 | if(rd_en_0 ) begin // PX2 signal,PSAMPLE,in cycleN | |
472 | fork | |
473 | begin | |
474 | // wait till C1 | |
475 | @(posedge tb_top.cpu.l2clk); | |
476 | #(PSMPL); | |
477 | address <= arbdp_addr_c1_0; // C1 signal,PSAMPLE,in cycle N | |
478 | i <= 0; | |
479 | ||
480 | if(address[39:37] != 3'b101 && !decdp_inst_int_or_inval_c1_0 && inst_vld_c2_prev_0) | |
481 | begin | |
482 | #(PSMPL); | |
483 | way <= ({$random(`PARGS.seed)} % 16); //<MOD> 12 to 16 | |
484 | lkupTag <= lkup_tag_d1_0; | |
485 | // this message is printed in cycle N (C1) | |
486 | `PR_ALWAYS("l2_tagErrInjector", `ALWAYS,"Tag array error injected into bank%0d, index%0d, way%0d",i, address[17:9], way); | |
487 | // wait till negedge of C1 | |
488 | @(negedge tb_top.cpu.l2clk); | |
489 | #(PSMPL); | |
490 | // C1 sample, NSAMPLE, occurs in cycle N negedge | |
491 | // C2 drive, PRZ, takes effect in cycle N+1 | |
492 | case(way) | |
493 | 0: begin | |
494 | tagEntry <= tag_way0_c1_0; | |
495 | errTagEntry <= (tagEntry ^ (28'b1 << (({$random(`PARGS.seed)} % 27) + 1))); | |
496 | SetTagWay0(i, errTagEntry); // This takes place at cycle N+1 (C2) | |
497 | end | |
498 | 1: begin | |
499 | tagEntry <= tag_way1_c1_0; | |
500 | errTagEntry <= (tagEntry ^ (28'b1 << (({$random(`PARGS.seed)} % 27) + 1))); | |
501 | SetTagWay1(i, errTagEntry); // This takes place at cycle N+1 (C2) | |
502 | end | |
503 | 2: begin | |
504 | tagEntry <= tag_way2_c1_0; | |
505 | errTagEntry <= (tagEntry ^ (28'b1 << (({$random(`PARGS.seed)} % 27) + 1))); | |
506 | SetTagWay2(i, errTagEntry); // This takes place at cycle N+1 (C2) | |
507 | end | |
508 | 3: begin | |
509 | tagEntry <= tag_way3_c1_0; | |
510 | errTagEntry <= (tagEntry ^ (28'b1 << (({$random(`PARGS.seed)} % 27) + 1))); | |
511 | SetTagWay3(i, errTagEntry); // This takes place at cycle N+1 (C2) | |
512 | end | |
513 | 4: begin | |
514 | tagEntry <= tag_way4_c1_0; | |
515 | errTagEntry <= (tagEntry ^ (28'b1 << (({$random(`PARGS.seed)} % 27) + 1))); | |
516 | SetTagWay4(i, errTagEntry); // This takes place at cycle N+1 (C2) | |
517 | end | |
518 | 5: begin | |
519 | tagEntry <= tag_way5_c1_0; | |
520 | errTagEntry <= (tagEntry ^ (28'b1 << (({$random(`PARGS.seed)} % 27) + 1))); | |
521 | SetTagWay5(i, errTagEntry); // This takes place at cycle N+1 (C2) | |
522 | end | |
523 | 6: begin | |
524 | tagEntry <= tag_way6_c1_0; | |
525 | errTagEntry <= (tagEntry ^ (28'b1 << (({$random(`PARGS.seed)} % 27) + 1))); | |
526 | SetTagWay6(i, errTagEntry); // This takes place at cycle N+1 (C2) | |
527 | end | |
528 | 7: begin | |
529 | tagEntry <= tag_way7_c1_0; | |
530 | errTagEntry <= (tagEntry ^ (28'b1 << (({$random(`PARGS.seed)} % 27) + 1))); | |
531 | SetTagWay7(i, errTagEntry); // This takes place at cycle N+1 (C2) | |
532 | end | |
533 | 8: begin | |
534 | tagEntry <= tag_way8_c1_0; | |
535 | errTagEntry <= (tagEntry ^ (28'b1 << (({$random(`PARGS.seed)} % 27) + 1))); | |
536 | SetTagWay8(i, errTagEntry); // This takes place at cycle N+1 (C2) | |
537 | end | |
538 | 9: begin | |
539 | tagEntry <= tag_way9_c1_0; | |
540 | errTagEntry <= (tagEntry ^ (28'b1 << (({$random(`PARGS.seed)} % 27) + 1))); | |
541 | SetTagWay9(i, errTagEntry); // This takes place at cycle N+1 (C2) | |
542 | end | |
543 | 10: begin | |
544 | tagEntry <= tag_way10_c1_0; | |
545 | errTagEntry <= (tagEntry ^ (28'b1 << (({$random(`PARGS.seed)} % 27) + 1))); | |
546 | SetTagWay10(i, errTagEntry); // This takes place at cycle N+1 (C2) | |
547 | end | |
548 | 11: begin | |
549 | tagEntry <= tag_way11_c1_0; | |
550 | errTagEntry <= (tagEntry ^ (28'b1 << (({$random(`PARGS.seed)} % 27) + 1))); | |
551 | SetTagWay11(i, errTagEntry); // This takes place at cycle N+1 (C2) | |
552 | end | |
553 | 12: begin | |
554 | tagEntry <= tag_way12_c1_0; | |
555 | errTagEntry <= (tagEntry ^ (28'b1 << (({$random(`PARGS.seed)} % 27) + 1))); | |
556 | SetTagWay12(i, errTagEntry); // This takes place at cycle N+1 (C2) | |
557 | end | |
558 | 13: begin | |
559 | tagEntry <= tag_way13_c1_0; | |
560 | errTagEntry <= (tagEntry ^ (28'b1 << (({$random(`PARGS.seed)} % 27) + 1))); | |
561 | SetTagWay13(i, errTagEntry); // This takes place at cycle N+1 (C2) | |
562 | end | |
563 | 14: begin | |
564 | tagEntry <= tag_way14_c1_0; | |
565 | errTagEntry <= (tagEntry ^ (28'b1 << (({$random(`PARGS.seed)} % 27) + 1))); | |
566 | SetTagWay14(i, errTagEntry); // This takes place at cycle N+1 (C2) | |
567 | end | |
568 | 15: begin | |
569 | tagEntry <= tag_way15_c1_0; | |
570 | errTagEntry <= (tagEntry ^ (28'b1 << (({$random(`PARGS.seed)} % 27) + 1))); | |
571 | SetTagWay15(i, errTagEntry); // This takes place at cycle N+1 (C2) | |
572 | end | |
573 | endcase // case(way) | |
574 | if (lkupTag == errTagEntry[27:1]) | |
575 | SetWaySel(i, way); // This takes place at cycle N+1 (C2) | |
576 | ||
577 | // set tag error bit for 1 cycle in C2 while erroneous value is forced on the | |
578 | // tag array output so that InitErrorHandling() knows the tag contains an error | |
579 | // @(negedge tb_top.cpu.l2clk); | |
580 | ||
581 | ||
582 | @(posedge tb_top.cpu.l2clk); | |
583 | #(PSMPL); | |
584 | case(way) | |
585 | 0: ReleaseTagWay0(i); | |
586 | 1: ReleaseTagWay1(i); | |
587 | 2: ReleaseTagWay2(i); | |
588 | 3: ReleaseTagWay3(i); | |
589 | 4: ReleaseTagWay4(i); | |
590 | 5: ReleaseTagWay5(i); | |
591 | 6: ReleaseTagWay6(i); | |
592 | 7: ReleaseTagWay7(i); | |
593 | 8: ReleaseTagWay8(i); | |
594 | 9: ReleaseTagWay9(i); | |
595 | 10: ReleaseTagWay10(i); | |
596 | 11: ReleaseTagWay11(i); | |
597 | 12: ReleaseTagWay12(i); | |
598 | 13: ReleaseTagWay13(i); | |
599 | 14: ReleaseTagWay14(i); | |
600 | 15: ReleaseTagWay15(i); | |
601 | endcase // case(way) | |
602 | ReleaseWaySel(i); | |
603 | ||
604 | // reset tag error bit after erroneous value is no longer forced | |
605 | @(negedge tb_top.cpu.l2clk); | |
606 | end // if(address[39:37] != 3'b101 &&!decdp_inst_int_or_inval_c1 && inst_vld_c2_prev) | |
607 | end | |
608 | join | |
609 | end // if(rd_en && $random%8 == 0) | |
610 | ||
611 | @(posedge tb_top.cpu.l2clk); | |
612 | end // if(start_injection==1) | |
613 | end // OutOfBoot | |
614 | end //always block | |
615 | ||
616 | // Tasks for forcing error | |
617 | ||
618 | task SetTagWay0; | |
619 | input bank; | |
620 | input [27:0] value; | |
621 | integer bank; | |
622 | reg [27:0] value; | |
623 | begin | |
624 | case (bank) | |
625 | 0: force tb_top.cpu.l2t0.tag.quad0.bank0.tag_way0 = value; | |
626 | 1: force tb_top.cpu.l2t1.tag.quad0.bank0.tag_way0 = value; | |
627 | 2: force tb_top.cpu.l2t2.tag.quad0.bank0.tag_way0 = value; | |
628 | 3: force tb_top.cpu.l2t3.tag.quad0.bank0.tag_way0 = value; | |
629 | 4: force tb_top.cpu.l2t4.tag.quad0.bank0.tag_way0 = value; | |
630 | 5: force tb_top.cpu.l2t5.tag.quad0.bank0.tag_way0 = value; | |
631 | 6: force tb_top.cpu.l2t6.tag.quad0.bank0.tag_way0 = value; | |
632 | 7: force tb_top.cpu.l2t7.tag.quad0.bank0.tag_way0 = value; | |
633 | endcase | |
634 | end | |
635 | endtask | |
636 | ||
637 | task ReleaseTagWay0; | |
638 | input bank; | |
639 | integer bank; | |
640 | begin | |
641 | case (bank) | |
642 | 0: release tb_top.cpu.l2t0.tag.quad0.bank0.tag_way0; | |
643 | 1: release tb_top.cpu.l2t1.tag.quad0.bank0.tag_way0; | |
644 | 2: release tb_top.cpu.l2t2.tag.quad0.bank0.tag_way0; | |
645 | 3: release tb_top.cpu.l2t3.tag.quad0.bank0.tag_way0; | |
646 | 4: release tb_top.cpu.l2t4.tag.quad0.bank0.tag_way0; | |
647 | 5: release tb_top.cpu.l2t5.tag.quad0.bank0.tag_way0; | |
648 | 6: release tb_top.cpu.l2t6.tag.quad0.bank0.tag_way0; | |
649 | 7: release tb_top.cpu.l2t7.tag.quad0.bank0.tag_way0; | |
650 | endcase | |
651 | end | |
652 | endtask | |
653 | ||
654 | ||
655 | ||
656 | task SetTagWay1; | |
657 | input bank; | |
658 | input [27:0] value; | |
659 | integer bank; | |
660 | reg [27:0] value; | |
661 | begin | |
662 | case (bank) | |
663 | 0: force tb_top.cpu.l2t0.tag.quad0.bank0.tag_way1 = value; | |
664 | 1: force tb_top.cpu.l2t1.tag.quad0.bank0.tag_way1 = value; | |
665 | 2: force tb_top.cpu.l2t2.tag.quad0.bank0.tag_way1 = value; | |
666 | 3: force tb_top.cpu.l2t3.tag.quad0.bank0.tag_way1 = value; | |
667 | 4: force tb_top.cpu.l2t4.tag.quad0.bank0.tag_way1 = value; | |
668 | 5: force tb_top.cpu.l2t5.tag.quad0.bank0.tag_way1 = value; | |
669 | 6: force tb_top.cpu.l2t6.tag.quad0.bank0.tag_way1 = value; | |
670 | 7: force tb_top.cpu.l2t7.tag.quad0.bank0.tag_way1 = value; | |
671 | endcase | |
672 | end | |
673 | endtask | |
674 | ||
675 | task ReleaseTagWay1; | |
676 | input bank; | |
677 | integer bank; | |
678 | begin | |
679 | case (bank) | |
680 | 0: release tb_top.cpu.l2t0.tag.quad0.bank0.tag_way1; | |
681 | 1: release tb_top.cpu.l2t1.tag.quad0.bank0.tag_way1; | |
682 | 2: release tb_top.cpu.l2t2.tag.quad0.bank0.tag_way1; | |
683 | 3: release tb_top.cpu.l2t3.tag.quad0.bank0.tag_way1; | |
684 | 4: release tb_top.cpu.l2t4.tag.quad0.bank0.tag_way1; | |
685 | 5: release tb_top.cpu.l2t5.tag.quad0.bank0.tag_way1; | |
686 | 6: release tb_top.cpu.l2t6.tag.quad0.bank0.tag_way1; | |
687 | 7: release tb_top.cpu.l2t7.tag.quad0.bank0.tag_way1; | |
688 | endcase | |
689 | end | |
690 | endtask | |
691 | ||
692 | ||
693 | task SetTagWay2; | |
694 | input bank; | |
695 | input [27:0] value; | |
696 | integer bank; | |
697 | reg [27:0] value; | |
698 | begin | |
699 | case (bank) | |
700 | 0: force tb_top.cpu.l2t0.tag.quad0.bank1.tag_way0 = value; | |
701 | 1: force tb_top.cpu.l2t1.tag.quad0.bank1.tag_way0 = value; | |
702 | 2: force tb_top.cpu.l2t2.tag.quad0.bank1.tag_way0 = value; | |
703 | 3: force tb_top.cpu.l2t3.tag.quad0.bank1.tag_way0 = value; | |
704 | 4: force tb_top.cpu.l2t4.tag.quad0.bank1.tag_way0 = value; | |
705 | 5: force tb_top.cpu.l2t5.tag.quad0.bank1.tag_way0 = value; | |
706 | 6: force tb_top.cpu.l2t6.tag.quad0.bank1.tag_way0 = value; | |
707 | 7: force tb_top.cpu.l2t7.tag.quad0.bank1.tag_way0 = value; | |
708 | endcase | |
709 | end | |
710 | endtask | |
711 | ||
712 | ||
713 | task ReleaseTagWay2; | |
714 | input bank; | |
715 | integer bank; | |
716 | begin | |
717 | case (bank) | |
718 | 0: release tb_top.cpu.l2t0.tag.quad0.bank1.tag_way0; | |
719 | 1: release tb_top.cpu.l2t1.tag.quad0.bank1.tag_way0; | |
720 | 2: release tb_top.cpu.l2t2.tag.quad0.bank1.tag_way0; | |
721 | 3: release tb_top.cpu.l2t3.tag.quad0.bank1.tag_way0; | |
722 | 4: release tb_top.cpu.l2t4.tag.quad0.bank1.tag_way0; | |
723 | 5: release tb_top.cpu.l2t5.tag.quad0.bank1.tag_way0; | |
724 | 6: release tb_top.cpu.l2t6.tag.quad0.bank1.tag_way0; | |
725 | 7: release tb_top.cpu.l2t7.tag.quad0.bank1.tag_way0; | |
726 | endcase | |
727 | end | |
728 | endtask | |
729 | ||
730 | task SetTagWay3; | |
731 | input bank; | |
732 | input [27:0] value; | |
733 | integer bank; | |
734 | reg [27:0] value; | |
735 | begin | |
736 | case (bank) | |
737 | 0: force tb_top.cpu.l2t0.tag.quad0.bank1.tag_way1 = value; | |
738 | 1: force tb_top.cpu.l2t1.tag.quad0.bank1.tag_way1 = value; | |
739 | 2: force tb_top.cpu.l2t2.tag.quad0.bank1.tag_way1 = value; | |
740 | 3: force tb_top.cpu.l2t3.tag.quad0.bank1.tag_way1 = value; | |
741 | 4: force tb_top.cpu.l2t4.tag.quad0.bank1.tag_way1 = value; | |
742 | 5: force tb_top.cpu.l2t5.tag.quad0.bank1.tag_way1 = value; | |
743 | 6: force tb_top.cpu.l2t6.tag.quad0.bank1.tag_way1 = value; | |
744 | 7: force tb_top.cpu.l2t7.tag.quad0.bank1.tag_way1 = value; | |
745 | endcase | |
746 | end | |
747 | endtask | |
748 | ||
749 | task ReleaseTagWay3; | |
750 | input bank; | |
751 | integer bank; | |
752 | begin | |
753 | case (bank) | |
754 | 0: release tb_top.cpu.l2t0.tag.quad0.bank1.tag_way1; | |
755 | 1: release tb_top.cpu.l2t1.tag.quad0.bank1.tag_way1; | |
756 | 2: release tb_top.cpu.l2t2.tag.quad0.bank1.tag_way1; | |
757 | 3: release tb_top.cpu.l2t3.tag.quad0.bank1.tag_way1; | |
758 | 4: release tb_top.cpu.l2t4.tag.quad0.bank1.tag_way1; | |
759 | 5: release tb_top.cpu.l2t5.tag.quad0.bank1.tag_way1; | |
760 | 6: release tb_top.cpu.l2t6.tag.quad0.bank1.tag_way1; | |
761 | 7: release tb_top.cpu.l2t7.tag.quad0.bank1.tag_way1; | |
762 | endcase | |
763 | end | |
764 | endtask | |
765 | ||
766 | ||
767 | ||
768 | task SetTagWay4; | |
769 | input bank; | |
770 | input [27:0] value; | |
771 | integer bank; | |
772 | reg [27:0] value; | |
773 | begin | |
774 | case (bank) | |
775 | 0: force tb_top.cpu.l2t0.tag.quad1.bank0.tag_way0 = value; | |
776 | 1: force tb_top.cpu.l2t1.tag.quad1.bank0.tag_way0 = value; | |
777 | 2: force tb_top.cpu.l2t2.tag.quad1.bank0.tag_way0 = value; | |
778 | 3: force tb_top.cpu.l2t3.tag.quad1.bank0.tag_way0 = value; | |
779 | 4: force tb_top.cpu.l2t4.tag.quad1.bank0.tag_way0 = value; | |
780 | 5: force tb_top.cpu.l2t5.tag.quad1.bank0.tag_way0 = value; | |
781 | 6: force tb_top.cpu.l2t6.tag.quad1.bank0.tag_way0 = value; | |
782 | 7: force tb_top.cpu.l2t7.tag.quad1.bank0.tag_way0 = value; | |
783 | endcase | |
784 | end | |
785 | endtask | |
786 | ||
787 | task ReleaseTagWay4; | |
788 | input bank; | |
789 | integer bank; | |
790 | begin | |
791 | case (bank) | |
792 | 0: release tb_top.cpu.l2t0.tag.quad1.bank0.tag_way0; | |
793 | 1: release tb_top.cpu.l2t1.tag.quad1.bank0.tag_way0; | |
794 | 2: release tb_top.cpu.l2t2.tag.quad1.bank0.tag_way0; | |
795 | 3: release tb_top.cpu.l2t3.tag.quad1.bank0.tag_way0; | |
796 | 4: release tb_top.cpu.l2t4.tag.quad1.bank0.tag_way0; | |
797 | 5: release tb_top.cpu.l2t5.tag.quad1.bank0.tag_way0; | |
798 | 6: release tb_top.cpu.l2t6.tag.quad1.bank0.tag_way0; | |
799 | 7: release tb_top.cpu.l2t7.tag.quad1.bank0.tag_way0; | |
800 | endcase | |
801 | end | |
802 | endtask | |
803 | ||
804 | task SetTagWay5; | |
805 | input bank; | |
806 | input [27:0] value; | |
807 | integer bank; | |
808 | reg [27:0] value; | |
809 | begin | |
810 | case (bank) | |
811 | 0: force tb_top.cpu.l2t0.tag.quad1.bank0.tag_way1 = value; | |
812 | 1: force tb_top.cpu.l2t1.tag.quad1.bank0.tag_way1 = value; | |
813 | 2: force tb_top.cpu.l2t2.tag.quad1.bank0.tag_way1 = value; | |
814 | 3: force tb_top.cpu.l2t3.tag.quad1.bank0.tag_way1 = value; | |
815 | 4: force tb_top.cpu.l2t4.tag.quad1.bank0.tag_way1 = value; | |
816 | 5: force tb_top.cpu.l2t5.tag.quad1.bank0.tag_way1 = value; | |
817 | 6: force tb_top.cpu.l2t6.tag.quad1.bank0.tag_way1 = value; | |
818 | 7: force tb_top.cpu.l2t7.tag.quad1.bank0.tag_way1 = value; | |
819 | endcase | |
820 | end | |
821 | endtask | |
822 | ||
823 | ||
824 | task ReleaseTagWay5; | |
825 | input bank; | |
826 | integer bank; | |
827 | begin | |
828 | case (bank) | |
829 | 0: release tb_top.cpu.l2t0.tag.quad1.bank0.tag_way1; | |
830 | 1: release tb_top.cpu.l2t1.tag.quad1.bank0.tag_way1; | |
831 | 2: release tb_top.cpu.l2t2.tag.quad1.bank0.tag_way1; | |
832 | 3: release tb_top.cpu.l2t3.tag.quad1.bank0.tag_way1; | |
833 | 4: release tb_top.cpu.l2t4.tag.quad1.bank0.tag_way1; | |
834 | 5: release tb_top.cpu.l2t5.tag.quad1.bank0.tag_way1; | |
835 | 6: release tb_top.cpu.l2t6.tag.quad1.bank0.tag_way1; | |
836 | 7: release tb_top.cpu.l2t7.tag.quad1.bank0.tag_way1; | |
837 | endcase | |
838 | end | |
839 | endtask | |
840 | ||
841 | task SetTagWay6; | |
842 | input bank; | |
843 | input [27:0] value; | |
844 | integer bank; | |
845 | reg [27:0] value; | |
846 | begin | |
847 | case (bank) | |
848 | 0: force tb_top.cpu.l2t0.tag.quad1.bank1.tag_way0 = value; | |
849 | 1: force tb_top.cpu.l2t1.tag.quad1.bank1.tag_way0 = value; | |
850 | 2: force tb_top.cpu.l2t2.tag.quad1.bank1.tag_way0 = value; | |
851 | 3: force tb_top.cpu.l2t3.tag.quad1.bank1.tag_way0 = value; | |
852 | 4: force tb_top.cpu.l2t4.tag.quad1.bank1.tag_way0 = value; | |
853 | 5: force tb_top.cpu.l2t5.tag.quad1.bank1.tag_way0 = value; | |
854 | 6: force tb_top.cpu.l2t6.tag.quad1.bank1.tag_way0 = value; | |
855 | 7: force tb_top.cpu.l2t7.tag.quad1.bank1.tag_way0 = value; | |
856 | endcase | |
857 | end | |
858 | endtask | |
859 | ||
860 | task ReleaseTagWay6; | |
861 | input bank; | |
862 | integer bank; | |
863 | begin | |
864 | case (bank) | |
865 | 0: release tb_top.cpu.l2t0.tag.quad1.bank1.tag_way0; | |
866 | 1: release tb_top.cpu.l2t1.tag.quad1.bank1.tag_way0; | |
867 | 2: release tb_top.cpu.l2t2.tag.quad1.bank1.tag_way0; | |
868 | 3: release tb_top.cpu.l2t3.tag.quad1.bank1.tag_way0; | |
869 | 4: release tb_top.cpu.l2t4.tag.quad1.bank1.tag_way0; | |
870 | 5: release tb_top.cpu.l2t5.tag.quad1.bank1.tag_way0; | |
871 | 6: release tb_top.cpu.l2t6.tag.quad1.bank1.tag_way0; | |
872 | 7: release tb_top.cpu.l2t7.tag.quad1.bank1.tag_way0; | |
873 | endcase | |
874 | end | |
875 | endtask | |
876 | ||
877 | ||
878 | ||
879 | task SetTagWay7; | |
880 | input bank; | |
881 | input [27:0] value; | |
882 | integer bank; | |
883 | reg [27:0] value; | |
884 | begin | |
885 | case (bank) | |
886 | 0: force tb_top.cpu.l2t0.tag.quad1.bank1.tag_way1 = value; | |
887 | 1: force tb_top.cpu.l2t1.tag.quad1.bank1.tag_way1 = value; | |
888 | 2: force tb_top.cpu.l2t2.tag.quad1.bank1.tag_way1 = value; | |
889 | 3: force tb_top.cpu.l2t3.tag.quad1.bank1.tag_way1 = value; | |
890 | 4: force tb_top.cpu.l2t4.tag.quad1.bank1.tag_way1 = value; | |
891 | 5: force tb_top.cpu.l2t5.tag.quad1.bank1.tag_way1 = value; | |
892 | 6: force tb_top.cpu.l2t6.tag.quad1.bank1.tag_way1 = value; | |
893 | 7: force tb_top.cpu.l2t7.tag.quad1.bank1.tag_way1 = value; | |
894 | endcase | |
895 | end | |
896 | endtask | |
897 | ||
898 | task ReleaseTagWay7; | |
899 | input bank; | |
900 | integer bank; | |
901 | begin | |
902 | case (bank) | |
903 | 0: release tb_top.cpu.l2t0.tag.quad1.bank1.tag_way1; | |
904 | 1: release tb_top.cpu.l2t1.tag.quad1.bank1.tag_way1; | |
905 | 2: release tb_top.cpu.l2t2.tag.quad1.bank1.tag_way1; | |
906 | 3: release tb_top.cpu.l2t3.tag.quad1.bank1.tag_way1; | |
907 | 4: release tb_top.cpu.l2t4.tag.quad1.bank1.tag_way1; | |
908 | 5: release tb_top.cpu.l2t5.tag.quad1.bank1.tag_way1; | |
909 | 6: release tb_top.cpu.l2t6.tag.quad1.bank1.tag_way1; | |
910 | 7: release tb_top.cpu.l2t7.tag.quad1.bank1.tag_way1; | |
911 | endcase | |
912 | end | |
913 | endtask | |
914 | ||
915 | task SetTagWay8; | |
916 | input bank; | |
917 | input [27:0] value; | |
918 | integer bank; | |
919 | reg [27:0] value; | |
920 | begin | |
921 | case (bank) | |
922 | 0: force tb_top.cpu.l2t0.tag.quad2.bank0.tag_way0 = value; | |
923 | 1: force tb_top.cpu.l2t1.tag.quad2.bank0.tag_way0 = value; | |
924 | 2: force tb_top.cpu.l2t2.tag.quad2.bank0.tag_way0 = value; | |
925 | 3: force tb_top.cpu.l2t3.tag.quad2.bank0.tag_way0 = value; | |
926 | 4: force tb_top.cpu.l2t4.tag.quad2.bank0.tag_way0 = value; | |
927 | 5: force tb_top.cpu.l2t5.tag.quad2.bank0.tag_way0 = value; | |
928 | 6: force tb_top.cpu.l2t6.tag.quad2.bank0.tag_way0 = value; | |
929 | 7: force tb_top.cpu.l2t7.tag.quad2.bank0.tag_way0 = value; | |
930 | endcase | |
931 | end | |
932 | endtask | |
933 | ||
934 | ||
935 | task ReleaseTagWay8; | |
936 | input bank; | |
937 | integer bank; | |
938 | begin | |
939 | case (bank) | |
940 | 0: release tb_top.cpu.l2t0.tag.quad2.bank0.tag_way0; | |
941 | 1: release tb_top.cpu.l2t1.tag.quad2.bank0.tag_way0; | |
942 | 2: release tb_top.cpu.l2t2.tag.quad2.bank0.tag_way0; | |
943 | 3: release tb_top.cpu.l2t3.tag.quad2.bank0.tag_way0; | |
944 | 4: release tb_top.cpu.l2t4.tag.quad2.bank0.tag_way0; | |
945 | 5: release tb_top.cpu.l2t5.tag.quad2.bank0.tag_way0; | |
946 | 6: release tb_top.cpu.l2t6.tag.quad2.bank0.tag_way0; | |
947 | 7: release tb_top.cpu.l2t7.tag.quad2.bank0.tag_way0; | |
948 | endcase | |
949 | end | |
950 | endtask | |
951 | ||
952 | task SetTagWay9; | |
953 | input bank; | |
954 | input [27:0] value; | |
955 | integer bank; | |
956 | reg [27:0] value; | |
957 | begin | |
958 | case (bank) | |
959 | 0: force tb_top.cpu.l2t0.tag.quad2.bank0.tag_way1 = value; | |
960 | 1: force tb_top.cpu.l2t1.tag.quad2.bank0.tag_way1 = value; | |
961 | 2: force tb_top.cpu.l2t2.tag.quad2.bank0.tag_way1 = value; | |
962 | 3: force tb_top.cpu.l2t3.tag.quad2.bank0.tag_way1 = value; | |
963 | 4: force tb_top.cpu.l2t4.tag.quad2.bank0.tag_way1 = value; | |
964 | 5: force tb_top.cpu.l2t5.tag.quad2.bank0.tag_way1 = value; | |
965 | 6: force tb_top.cpu.l2t6.tag.quad2.bank0.tag_way1 = value; | |
966 | 7: force tb_top.cpu.l2t7.tag.quad2.bank0.tag_way1 = value; | |
967 | endcase | |
968 | end | |
969 | endtask | |
970 | ||
971 | task ReleaseTagWay9; | |
972 | input bank; | |
973 | integer bank; | |
974 | begin | |
975 | case (bank) | |
976 | 0: release tb_top.cpu.l2t0.tag.quad2.bank0.tag_way1; | |
977 | 1: release tb_top.cpu.l2t1.tag.quad2.bank0.tag_way1; | |
978 | 2: release tb_top.cpu.l2t2.tag.quad2.bank0.tag_way1; | |
979 | 3: release tb_top.cpu.l2t3.tag.quad2.bank0.tag_way1; | |
980 | 4: release tb_top.cpu.l2t4.tag.quad2.bank0.tag_way1; | |
981 | 5: release tb_top.cpu.l2t5.tag.quad2.bank0.tag_way1; | |
982 | 6: release tb_top.cpu.l2t6.tag.quad2.bank0.tag_way1; | |
983 | 7: release tb_top.cpu.l2t7.tag.quad2.bank0.tag_way1; | |
984 | endcase | |
985 | end | |
986 | endtask | |
987 | ||
988 | ||
989 | ||
990 | task SetTagWay10; | |
991 | input bank; | |
992 | input [27:0] value; | |
993 | integer bank; | |
994 | reg [27:0] value; | |
995 | begin | |
996 | case (bank) | |
997 | 0: force tb_top.cpu.l2t0.tag.quad2.bank1.tag_way0 = value; | |
998 | 1: force tb_top.cpu.l2t1.tag.quad2.bank1.tag_way0 = value; | |
999 | 2: force tb_top.cpu.l2t2.tag.quad2.bank1.tag_way0 = value; | |
1000 | 3: force tb_top.cpu.l2t3.tag.quad2.bank1.tag_way0 = value; | |
1001 | 4: force tb_top.cpu.l2t4.tag.quad2.bank1.tag_way0 = value; | |
1002 | 5: force tb_top.cpu.l2t5.tag.quad2.bank1.tag_way0 = value; | |
1003 | 6: force tb_top.cpu.l2t6.tag.quad2.bank1.tag_way0 = value; | |
1004 | 7: force tb_top.cpu.l2t7.tag.quad2.bank1.tag_way0 = value; | |
1005 | endcase | |
1006 | end | |
1007 | endtask | |
1008 | ||
1009 | task ReleaseTagWay10; | |
1010 | input bank; | |
1011 | integer bank; | |
1012 | begin | |
1013 | case (bank) | |
1014 | 0: release tb_top.cpu.l2t0.tag.quad2.bank1.tag_way0; | |
1015 | 1: release tb_top.cpu.l2t1.tag.quad2.bank1.tag_way0; | |
1016 | 2: release tb_top.cpu.l2t2.tag.quad2.bank1.tag_way0; | |
1017 | 3: release tb_top.cpu.l2t3.tag.quad2.bank1.tag_way0; | |
1018 | 4: release tb_top.cpu.l2t4.tag.quad2.bank1.tag_way0; | |
1019 | 5: release tb_top.cpu.l2t5.tag.quad2.bank1.tag_way0; | |
1020 | 6: release tb_top.cpu.l2t6.tag.quad2.bank1.tag_way0; | |
1021 | 7: release tb_top.cpu.l2t7.tag.quad2.bank1.tag_way0; | |
1022 | endcase | |
1023 | end | |
1024 | endtask | |
1025 | ||
1026 | ||
1027 | task SetTagWay11; | |
1028 | input bank; | |
1029 | input [27:0] value; | |
1030 | integer bank; | |
1031 | reg [27:0] value; | |
1032 | begin | |
1033 | case (bank) | |
1034 | 0: force tb_top.cpu.l2t0.tag.quad2.bank1.tag_way1 = value; | |
1035 | 1: force tb_top.cpu.l2t1.tag.quad2.bank1.tag_way1 = value; | |
1036 | 2: force tb_top.cpu.l2t2.tag.quad2.bank1.tag_way1 = value; | |
1037 | 3: force tb_top.cpu.l2t3.tag.quad2.bank1.tag_way1 = value; | |
1038 | 4: force tb_top.cpu.l2t4.tag.quad2.bank1.tag_way1 = value; | |
1039 | 5: force tb_top.cpu.l2t5.tag.quad2.bank1.tag_way1 = value; | |
1040 | 6: force tb_top.cpu.l2t6.tag.quad2.bank1.tag_way1 = value; | |
1041 | 7: force tb_top.cpu.l2t7.tag.quad2.bank1.tag_way1 = value; | |
1042 | endcase | |
1043 | end | |
1044 | endtask | |
1045 | ||
1046 | task ReleaseTagWay11; | |
1047 | input bank; | |
1048 | integer bank; | |
1049 | begin | |
1050 | case (bank) | |
1051 | 0: release tb_top.cpu.l2t0.tag.quad2.bank1.tag_way1; | |
1052 | 1: release tb_top.cpu.l2t1.tag.quad2.bank1.tag_way1; | |
1053 | 2: release tb_top.cpu.l2t2.tag.quad2.bank1.tag_way1; | |
1054 | 3: release tb_top.cpu.l2t3.tag.quad2.bank1.tag_way1; | |
1055 | 4: release tb_top.cpu.l2t4.tag.quad2.bank1.tag_way1; | |
1056 | 5: release tb_top.cpu.l2t5.tag.quad2.bank1.tag_way1; | |
1057 | 6: release tb_top.cpu.l2t6.tag.quad2.bank1.tag_way1; | |
1058 | 7: release tb_top.cpu.l2t7.tag.quad2.bank1.tag_way1; | |
1059 | endcase | |
1060 | end | |
1061 | endtask | |
1062 | ||
1063 | ||
1064 | task SetTagWay12; | |
1065 | input bank; | |
1066 | input [27:0] value; | |
1067 | integer bank; | |
1068 | reg [27:0] value; | |
1069 | begin | |
1070 | case (bank) | |
1071 | 0: force tb_top.cpu.l2t0.tag.quad3.bank0.tag_way0 = value; | |
1072 | 1: force tb_top.cpu.l2t1.tag.quad3.bank0.tag_way0 = value; | |
1073 | 2: force tb_top.cpu.l2t2.tag.quad3.bank0.tag_way0 = value; | |
1074 | 3: force tb_top.cpu.l2t3.tag.quad3.bank0.tag_way0 = value; | |
1075 | 4: force tb_top.cpu.l2t4.tag.quad3.bank0.tag_way0 = value; | |
1076 | 5: force tb_top.cpu.l2t5.tag.quad3.bank0.tag_way0 = value; | |
1077 | 6: force tb_top.cpu.l2t6.tag.quad3.bank0.tag_way0 = value; | |
1078 | 7: force tb_top.cpu.l2t7.tag.quad3.bank0.tag_way0 = value; | |
1079 | endcase | |
1080 | end | |
1081 | endtask | |
1082 | ||
1083 | task ReleaseTagWay12; | |
1084 | input bank; | |
1085 | integer bank; | |
1086 | begin | |
1087 | case (bank) | |
1088 | 0: release tb_top.cpu.l2t0.tag.quad3.bank0.tag_way0; | |
1089 | 1: release tb_top.cpu.l2t1.tag.quad3.bank0.tag_way0; | |
1090 | 2: release tb_top.cpu.l2t2.tag.quad3.bank0.tag_way0; | |
1091 | 3: release tb_top.cpu.l2t3.tag.quad3.bank0.tag_way0; | |
1092 | 4: release tb_top.cpu.l2t4.tag.quad3.bank0.tag_way0; | |
1093 | 5: release tb_top.cpu.l2t5.tag.quad3.bank0.tag_way0; | |
1094 | 6: release tb_top.cpu.l2t6.tag.quad3.bank0.tag_way0; | |
1095 | 7: release tb_top.cpu.l2t7.tag.quad3.bank0.tag_way0; | |
1096 | endcase | |
1097 | end | |
1098 | endtask | |
1099 | ||
1100 | ||
1101 | task SetTagWay13; | |
1102 | input bank; | |
1103 | input [27:0] value; | |
1104 | integer bank; | |
1105 | reg [27:0] value; | |
1106 | begin | |
1107 | case (bank) | |
1108 | 0: force tb_top.cpu.l2t0.tag.quad3.bank0.tag_way1 = value; | |
1109 | 1: force tb_top.cpu.l2t1.tag.quad3.bank0.tag_way1 = value; | |
1110 | 2: force tb_top.cpu.l2t2.tag.quad3.bank0.tag_way1 = value; | |
1111 | 3: force tb_top.cpu.l2t3.tag.quad3.bank0.tag_way1 = value; | |
1112 | 4: force tb_top.cpu.l2t4.tag.quad3.bank0.tag_way1 = value; | |
1113 | 5: force tb_top.cpu.l2t5.tag.quad3.bank0.tag_way1 = value; | |
1114 | 6: force tb_top.cpu.l2t6.tag.quad3.bank0.tag_way1 = value; | |
1115 | 7: force tb_top.cpu.l2t7.tag.quad3.bank0.tag_way1 = value; | |
1116 | endcase | |
1117 | end | |
1118 | endtask | |
1119 | ||
1120 | task ReleaseTagWay13; | |
1121 | input bank; | |
1122 | integer bank; | |
1123 | begin | |
1124 | case (bank) | |
1125 | 0: release tb_top.cpu.l2t0.tag.quad3.bank0.tag_way1; | |
1126 | 1: release tb_top.cpu.l2t1.tag.quad3.bank0.tag_way1; | |
1127 | 2: release tb_top.cpu.l2t2.tag.quad3.bank0.tag_way1; | |
1128 | 3: release tb_top.cpu.l2t3.tag.quad3.bank0.tag_way1; | |
1129 | 4: release tb_top.cpu.l2t4.tag.quad3.bank0.tag_way1; | |
1130 | 5: release tb_top.cpu.l2t5.tag.quad3.bank0.tag_way1; | |
1131 | 6: release tb_top.cpu.l2t6.tag.quad3.bank0.tag_way1; | |
1132 | 7: release tb_top.cpu.l2t7.tag.quad3.bank0.tag_way1; | |
1133 | endcase | |
1134 | end | |
1135 | endtask | |
1136 | ||
1137 | ||
1138 | task SetTagWay14; | |
1139 | input bank; | |
1140 | input [27:0] value; | |
1141 | integer bank; | |
1142 | reg [27:0] value; | |
1143 | begin | |
1144 | case (bank) | |
1145 | 0: force tb_top.cpu.l2t0.tag.quad3.bank1.tag_way0 = value; | |
1146 | 1: force tb_top.cpu.l2t1.tag.quad3.bank1.tag_way0 = value; | |
1147 | 2: force tb_top.cpu.l2t2.tag.quad3.bank1.tag_way0 = value; | |
1148 | 3: force tb_top.cpu.l2t3.tag.quad3.bank1.tag_way0 = value; | |
1149 | 4: force tb_top.cpu.l2t4.tag.quad3.bank1.tag_way0 = value; | |
1150 | 5: force tb_top.cpu.l2t5.tag.quad3.bank1.tag_way0 = value; | |
1151 | 6: force tb_top.cpu.l2t6.tag.quad3.bank1.tag_way0 = value; | |
1152 | 7: force tb_top.cpu.l2t7.tag.quad3.bank1.tag_way0 = value; | |
1153 | endcase | |
1154 | end | |
1155 | endtask | |
1156 | ||
1157 | task ReleaseTagWay14; | |
1158 | input bank; | |
1159 | integer bank; | |
1160 | begin | |
1161 | case (bank) | |
1162 | 0: release tb_top.cpu.l2t0.tag.quad3.bank1.tag_way0; | |
1163 | 1: release tb_top.cpu.l2t1.tag.quad3.bank1.tag_way0; | |
1164 | 2: release tb_top.cpu.l2t2.tag.quad3.bank1.tag_way0; | |
1165 | 3: release tb_top.cpu.l2t3.tag.quad3.bank1.tag_way0; | |
1166 | 4: release tb_top.cpu.l2t4.tag.quad3.bank1.tag_way0; | |
1167 | 5: release tb_top.cpu.l2t5.tag.quad3.bank1.tag_way0; | |
1168 | 6: release tb_top.cpu.l2t6.tag.quad3.bank1.tag_way0; | |
1169 | 7: release tb_top.cpu.l2t7.tag.quad3.bank1.tag_way0; | |
1170 | endcase | |
1171 | end | |
1172 | endtask | |
1173 | ||
1174 | task SetTagWay15; | |
1175 | input bank; | |
1176 | input [27:0] value; | |
1177 | integer bank; | |
1178 | reg [27:0] value; | |
1179 | begin | |
1180 | case (bank) | |
1181 | 0: force tb_top.cpu.l2t0.tag.quad3.bank1.tag_way1 = value; | |
1182 | 1: force tb_top.cpu.l2t1.tag.quad3.bank1.tag_way1 = value; | |
1183 | 2: force tb_top.cpu.l2t2.tag.quad3.bank1.tag_way1 = value; | |
1184 | 3: force tb_top.cpu.l2t3.tag.quad3.bank1.tag_way1 = value; | |
1185 | 4: force tb_top.cpu.l2t4.tag.quad3.bank1.tag_way1 = value; | |
1186 | 5: force tb_top.cpu.l2t5.tag.quad3.bank1.tag_way1 = value; | |
1187 | 6: force tb_top.cpu.l2t6.tag.quad3.bank1.tag_way1 = value; | |
1188 | 7: force tb_top.cpu.l2t7.tag.quad3.bank1.tag_way1 = value; | |
1189 | endcase | |
1190 | end | |
1191 | endtask | |
1192 | ||
1193 | ||
1194 | task ReleaseTagWay15; | |
1195 | input bank; | |
1196 | integer bank; | |
1197 | begin | |
1198 | case (bank) | |
1199 | 0: release tb_top.cpu.l2t0.tag.quad3.bank1.tag_way1; | |
1200 | 1: release tb_top.cpu.l2t1.tag.quad3.bank1.tag_way1; | |
1201 | 2: release tb_top.cpu.l2t2.tag.quad3.bank1.tag_way1; | |
1202 | 3: release tb_top.cpu.l2t3.tag.quad3.bank1.tag_way1; | |
1203 | 4: release tb_top.cpu.l2t4.tag.quad3.bank1.tag_way1; | |
1204 | 5: release tb_top.cpu.l2t5.tag.quad3.bank1.tag_way1; | |
1205 | 6: release tb_top.cpu.l2t6.tag.quad3.bank1.tag_way1; | |
1206 | 7: release tb_top.cpu.l2t7.tag.quad3.bank1.tag_way1; | |
1207 | endcase | |
1208 | end | |
1209 | endtask | |
1210 | ||
1211 | task SetWaySel; | |
1212 | input bank; | |
1213 | input way; | |
1214 | integer bank; | |
1215 | integer way; | |
1216 | begin | |
1217 | case (bank) | |
1218 | 0: force tb_top.cpu.l2t0.tag.way_hit = (1'b1 << way); | |
1219 | 1: force tb_top.cpu.l2t1.tag.way_hit = (1'b1 << way); | |
1220 | 2: force tb_top.cpu.l2t2.tag.way_hit = (1'b1 << way); | |
1221 | 3: force tb_top.cpu.l2t3.tag.way_hit = (1'b1 << way); | |
1222 | 4: force tb_top.cpu.l2t4.tag.way_hit = (1'b1 << way); | |
1223 | 5: force tb_top.cpu.l2t5.tag.way_hit = (1'b1 << way); | |
1224 | 6: force tb_top.cpu.l2t6.tag.way_hit = (1'b1 << way); | |
1225 | 7: force tb_top.cpu.l2t7.tag.way_hit = (1'b1 << way); | |
1226 | endcase | |
1227 | end | |
1228 | endtask | |
1229 | ||
1230 | task ReleaseWaySel; | |
1231 | input bank; | |
1232 | integer bank; | |
1233 | begin | |
1234 | case (bank) | |
1235 | 0: release tb_top.cpu.l2t0.tag.way_hit; | |
1236 | 1: release tb_top.cpu.l2t1.tag.way_hit; | |
1237 | 2: release tb_top.cpu.l2t2.tag.way_hit; | |
1238 | 3: release tb_top.cpu.l2t3.tag.way_hit; | |
1239 | 4: release tb_top.cpu.l2t4.tag.way_hit; | |
1240 | 5: release tb_top.cpu.l2t5.tag.way_hit; | |
1241 | 6: release tb_top.cpu.l2t6.tag.way_hit; | |
1242 | 7: release tb_top.cpu.l2t7.tag.way_hit; | |
1243 | endcase | |
1244 | end | |
1245 | endtask | |
1246 | ||
1247 | ||
1248 | ||
1249 | endmodule |