1 |
2 |
alfik |
/*
|
2 |
|
|
* Copyright (c) 2014, Aleksander Osman
|
3 |
|
|
* All rights reserved.
|
4 |
|
|
*
|
5 |
|
|
* Redistribution and use in source and binary forms, with or without
|
6 |
|
|
* modification, are permitted provided that the following conditions are met:
|
7 |
|
|
*
|
8 |
|
|
* * Redistributions of source code must retain the above copyright notice, this
|
9 |
|
|
* list of conditions and the following disclaimer.
|
10 |
|
|
*
|
11 |
|
|
* * Redistributions in binary form must reproduce the above copyright notice,
|
12 |
|
|
* this list of conditions and the following disclaimer in the documentation
|
13 |
|
|
* and/or other materials provided with the distribution.
|
14 |
|
|
*
|
15 |
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
16 |
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
17 |
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
18 |
|
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
19 |
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
20 |
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
21 |
|
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
22 |
|
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
23 |
|
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
24 |
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
25 |
|
|
*/
|
26 |
|
|
|
27 |
|
|
`include "defines.v"
|
28 |
|
|
|
29 |
|
|
module tlb_regs(
|
30 |
|
|
input clk,
|
31 |
|
|
input rst_n,
|
32 |
|
|
|
33 |
|
|
//RESP:
|
34 |
|
|
input tlbflushsingle_do,
|
35 |
|
|
input [31:0] tlbflushsingle_address,
|
36 |
|
|
//END
|
37 |
|
|
|
38 |
|
|
//RESP:
|
39 |
|
|
input tlbflushall_do,
|
40 |
|
|
//END
|
41 |
|
|
|
42 |
|
|
input rw,
|
43 |
|
|
|
44 |
|
|
//RESP:
|
45 |
|
|
input tlbregs_write_do,
|
46 |
|
|
input [31:0] tlbregs_write_linear,
|
47 |
|
|
input [31:0] tlbregs_write_physical,
|
48 |
|
|
|
49 |
|
|
input tlbregs_write_pwt,
|
50 |
|
|
input tlbregs_write_pcd,
|
51 |
|
|
input tlbregs_write_combined_rw,
|
52 |
|
|
input tlbregs_write_combined_su,
|
53 |
|
|
//END
|
54 |
|
|
|
55 |
|
|
//RESP:
|
56 |
|
|
input translate_do,
|
57 |
|
|
input [31:0] translate_linear,
|
58 |
|
|
output translate_valid,
|
59 |
|
|
output [31:0] translate_physical,
|
60 |
|
|
output translate_pwt,
|
61 |
|
|
output translate_pcd,
|
62 |
|
|
output translate_combined_rw,
|
63 |
|
|
output translate_combined_su
|
64 |
|
|
//END
|
65 |
|
|
);
|
66 |
|
|
|
67 |
|
|
//------------------------------------------------------------------------------
|
68 |
|
|
|
69 |
|
|
/* [19:0] linear page address
|
70 |
|
|
* [39:20] physical page address
|
71 |
|
|
*
|
72 |
|
|
* [40] PWT
|
73 |
|
|
* [41] PCD
|
74 |
|
|
*
|
75 |
|
|
* [42] valid
|
76 |
|
|
*
|
77 |
|
|
* [43] combined r/w
|
78 |
|
|
* [44] combined s/u
|
79 |
|
|
*
|
80 |
|
|
* [45] dirty
|
81 |
|
|
*/
|
82 |
|
|
|
83 |
|
|
`define TLB_BIT_VALID 42
|
84 |
|
|
|
85 |
|
|
//------------------------------------------------------------------------------
|
86 |
|
|
|
87 |
|
|
reg [30:0] plru;
|
88 |
|
|
|
89 |
|
|
reg [45:0] tlb0;
|
90 |
|
|
reg [45:0] tlb1;
|
91 |
|
|
reg [45:0] tlb2;
|
92 |
|
|
reg [45:0] tlb3;
|
93 |
|
|
reg [45:0] tlb4;
|
94 |
|
|
reg [45:0] tlb5;
|
95 |
|
|
reg [45:0] tlb6;
|
96 |
|
|
reg [45:0] tlb7;
|
97 |
|
|
reg [45:0] tlb8;
|
98 |
|
|
reg [45:0] tlb9;
|
99 |
|
|
reg [45:0] tlb10;
|
100 |
|
|
reg [45:0] tlb11;
|
101 |
|
|
reg [45:0] tlb12;
|
102 |
|
|
reg [45:0] tlb13;
|
103 |
|
|
reg [45:0] tlb14;
|
104 |
|
|
reg [45:0] tlb15;
|
105 |
|
|
reg [45:0] tlb16;
|
106 |
|
|
reg [45:0] tlb17;
|
107 |
|
|
reg [45:0] tlb18;
|
108 |
|
|
reg [45:0] tlb19;
|
109 |
|
|
reg [45:0] tlb20;
|
110 |
|
|
reg [45:0] tlb21;
|
111 |
|
|
reg [45:0] tlb22;
|
112 |
|
|
reg [45:0] tlb23;
|
113 |
|
|
reg [45:0] tlb24;
|
114 |
|
|
reg [45:0] tlb25;
|
115 |
|
|
reg [45:0] tlb26;
|
116 |
|
|
reg [45:0] tlb27;
|
117 |
|
|
reg [45:0] tlb28;
|
118 |
|
|
reg [45:0] tlb29;
|
119 |
|
|
reg [45:0] tlb30;
|
120 |
|
|
reg [45:0] tlb31;
|
121 |
|
|
|
122 |
|
|
//------------------------------------------------------------------------------
|
123 |
|
|
|
124 |
|
|
wire tlb0_sel;
|
125 |
|
|
wire tlb1_sel;
|
126 |
|
|
wire tlb2_sel;
|
127 |
|
|
wire tlb3_sel;
|
128 |
|
|
wire tlb4_sel;
|
129 |
|
|
wire tlb5_sel;
|
130 |
|
|
wire tlb6_sel;
|
131 |
|
|
wire tlb7_sel;
|
132 |
|
|
wire tlb8_sel;
|
133 |
|
|
wire tlb9_sel;
|
134 |
|
|
wire tlb10_sel;
|
135 |
|
|
wire tlb11_sel;
|
136 |
|
|
wire tlb12_sel;
|
137 |
|
|
wire tlb13_sel;
|
138 |
|
|
wire tlb14_sel;
|
139 |
|
|
wire tlb15_sel;
|
140 |
|
|
wire tlb16_sel;
|
141 |
|
|
wire tlb17_sel;
|
142 |
|
|
wire tlb18_sel;
|
143 |
|
|
wire tlb19_sel;
|
144 |
|
|
wire tlb20_sel;
|
145 |
|
|
wire tlb21_sel;
|
146 |
|
|
wire tlb22_sel;
|
147 |
|
|
wire tlb23_sel;
|
148 |
|
|
wire tlb24_sel;
|
149 |
|
|
wire tlb25_sel;
|
150 |
|
|
wire tlb26_sel;
|
151 |
|
|
wire tlb27_sel;
|
152 |
|
|
wire tlb28_sel;
|
153 |
|
|
wire tlb29_sel;
|
154 |
|
|
wire tlb30_sel;
|
155 |
|
|
wire tlb31_sel;
|
156 |
|
|
|
157 |
|
|
wire tlb0_ena;
|
158 |
|
|
wire tlb1_ena;
|
159 |
|
|
wire tlb2_ena;
|
160 |
|
|
wire tlb3_ena;
|
161 |
|
|
wire tlb4_ena;
|
162 |
|
|
wire tlb5_ena;
|
163 |
|
|
wire tlb6_ena;
|
164 |
|
|
wire tlb7_ena;
|
165 |
|
|
wire tlb8_ena;
|
166 |
|
|
wire tlb9_ena;
|
167 |
|
|
wire tlb10_ena;
|
168 |
|
|
wire tlb11_ena;
|
169 |
|
|
wire tlb12_ena;
|
170 |
|
|
wire tlb13_ena;
|
171 |
|
|
wire tlb14_ena;
|
172 |
|
|
wire tlb15_ena;
|
173 |
|
|
wire tlb16_ena;
|
174 |
|
|
wire tlb17_ena;
|
175 |
|
|
wire tlb18_ena;
|
176 |
|
|
wire tlb19_ena;
|
177 |
|
|
wire tlb20_ena;
|
178 |
|
|
wire tlb21_ena;
|
179 |
|
|
wire tlb22_ena;
|
180 |
|
|
wire tlb23_ena;
|
181 |
|
|
wire tlb24_ena;
|
182 |
|
|
wire tlb25_ena;
|
183 |
|
|
wire tlb26_ena;
|
184 |
|
|
wire tlb27_ena;
|
185 |
|
|
wire tlb28_ena;
|
186 |
|
|
wire tlb29_ena;
|
187 |
|
|
wire tlb30_ena;
|
188 |
|
|
wire tlb31_ena;
|
189 |
|
|
|
190 |
|
|
wire full;
|
191 |
|
|
|
192 |
|
|
wire tlb0_write;
|
193 |
|
|
wire tlb1_write;
|
194 |
|
|
wire tlb2_write;
|
195 |
|
|
wire tlb3_write;
|
196 |
|
|
wire tlb4_write;
|
197 |
|
|
wire tlb5_write;
|
198 |
|
|
wire tlb6_write;
|
199 |
|
|
wire tlb7_write;
|
200 |
|
|
wire tlb8_write;
|
201 |
|
|
wire tlb9_write;
|
202 |
|
|
wire tlb10_write;
|
203 |
|
|
wire tlb11_write;
|
204 |
|
|
wire tlb12_write;
|
205 |
|
|
wire tlb13_write;
|
206 |
|
|
wire tlb14_write;
|
207 |
|
|
wire tlb15_write;
|
208 |
|
|
wire tlb16_write;
|
209 |
|
|
wire tlb17_write;
|
210 |
|
|
wire tlb18_write;
|
211 |
|
|
wire tlb19_write;
|
212 |
|
|
wire tlb20_write;
|
213 |
|
|
wire tlb21_write;
|
214 |
|
|
wire tlb22_write;
|
215 |
|
|
wire tlb23_write;
|
216 |
|
|
wire tlb24_write;
|
217 |
|
|
wire tlb25_write;
|
218 |
|
|
wire tlb26_write;
|
219 |
|
|
wire tlb27_write;
|
220 |
|
|
wire tlb28_write;
|
221 |
|
|
wire tlb29_write;
|
222 |
|
|
wire tlb30_write;
|
223 |
|
|
wire tlb31_write;
|
224 |
|
|
|
225 |
|
|
wire tlb0_tlbflush;
|
226 |
|
|
wire tlb1_tlbflush;
|
227 |
|
|
wire tlb2_tlbflush;
|
228 |
|
|
wire tlb3_tlbflush;
|
229 |
|
|
wire tlb4_tlbflush;
|
230 |
|
|
wire tlb5_tlbflush;
|
231 |
|
|
wire tlb6_tlbflush;
|
232 |
|
|
wire tlb7_tlbflush;
|
233 |
|
|
wire tlb8_tlbflush;
|
234 |
|
|
wire tlb9_tlbflush;
|
235 |
|
|
wire tlb10_tlbflush;
|
236 |
|
|
wire tlb11_tlbflush;
|
237 |
|
|
wire tlb12_tlbflush;
|
238 |
|
|
wire tlb13_tlbflush;
|
239 |
|
|
wire tlb14_tlbflush;
|
240 |
|
|
wire tlb15_tlbflush;
|
241 |
|
|
wire tlb16_tlbflush;
|
242 |
|
|
wire tlb17_tlbflush;
|
243 |
|
|
wire tlb18_tlbflush;
|
244 |
|
|
wire tlb19_tlbflush;
|
245 |
|
|
wire tlb20_tlbflush;
|
246 |
|
|
wire tlb21_tlbflush;
|
247 |
|
|
wire tlb22_tlbflush;
|
248 |
|
|
wire tlb23_tlbflush;
|
249 |
|
|
wire tlb24_tlbflush;
|
250 |
|
|
wire tlb25_tlbflush;
|
251 |
|
|
wire tlb26_tlbflush;
|
252 |
|
|
wire tlb27_tlbflush;
|
253 |
|
|
wire tlb28_tlbflush;
|
254 |
|
|
wire tlb29_tlbflush;
|
255 |
|
|
wire tlb30_tlbflush;
|
256 |
|
|
wire tlb31_tlbflush;
|
257 |
|
|
|
258 |
|
|
wire [45:0] selected;
|
259 |
|
|
|
260 |
|
|
wire [45:0] write_data;
|
261 |
|
|
|
262 |
|
|
wire translate_valid_but_not_dirty;
|
263 |
|
|
|
264 |
|
|
//------------------------------------------------------------------------------
|
265 |
|
|
|
266 |
|
|
assign translate_valid_but_not_dirty = selected[`TLB_BIT_VALID] && rw && ~(selected[45]);
|
267 |
|
|
|
268 |
|
|
//AO-notlb: assign translate_valid = 1'b0;
|
269 |
|
|
assign translate_valid = selected[`TLB_BIT_VALID] && (~(rw) || selected[45]); //read access or dirty bit already set
|
270 |
|
|
assign translate_physical = (translate_valid)? { selected[39:20], translate_linear[11:0] } : translate_linear;
|
271 |
|
|
assign translate_pwt = selected[40];
|
272 |
|
|
assign translate_pcd = selected[41];
|
273 |
|
|
assign translate_combined_rw = selected[43];
|
274 |
|
|
assign translate_combined_su = selected[44];
|
275 |
|
|
|
276 |
|
|
assign tlb0_sel = translate_do && translate_linear[31:12] == tlb0[19:0] && tlb0 [`TLB_BIT_VALID];
|
277 |
|
|
assign tlb1_sel = translate_do && translate_linear[31:12] == tlb1[19:0] && tlb1 [`TLB_BIT_VALID];
|
278 |
|
|
assign tlb2_sel = translate_do && translate_linear[31:12] == tlb2[19:0] && tlb2 [`TLB_BIT_VALID];
|
279 |
|
|
assign tlb3_sel = translate_do && translate_linear[31:12] == tlb3[19:0] && tlb3 [`TLB_BIT_VALID];
|
280 |
|
|
assign tlb4_sel = translate_do && translate_linear[31:12] == tlb4[19:0] && tlb4 [`TLB_BIT_VALID];
|
281 |
|
|
assign tlb5_sel = translate_do && translate_linear[31:12] == tlb5[19:0] && tlb5 [`TLB_BIT_VALID];
|
282 |
|
|
assign tlb6_sel = translate_do && translate_linear[31:12] == tlb6[19:0] && tlb6 [`TLB_BIT_VALID];
|
283 |
|
|
assign tlb7_sel = translate_do && translate_linear[31:12] == tlb7[19:0] && tlb7 [`TLB_BIT_VALID];
|
284 |
|
|
assign tlb8_sel = translate_do && translate_linear[31:12] == tlb8[19:0] && tlb8 [`TLB_BIT_VALID];
|
285 |
|
|
assign tlb9_sel = translate_do && translate_linear[31:12] == tlb9[19:0] && tlb9 [`TLB_BIT_VALID];
|
286 |
|
|
assign tlb10_sel = translate_do && translate_linear[31:12] == tlb10[19:0] && tlb10[`TLB_BIT_VALID];
|
287 |
|
|
assign tlb11_sel = translate_do && translate_linear[31:12] == tlb11[19:0] && tlb11[`TLB_BIT_VALID];
|
288 |
|
|
assign tlb12_sel = translate_do && translate_linear[31:12] == tlb12[19:0] && tlb12[`TLB_BIT_VALID];
|
289 |
|
|
assign tlb13_sel = translate_do && translate_linear[31:12] == tlb13[19:0] && tlb13[`TLB_BIT_VALID];
|
290 |
|
|
assign tlb14_sel = translate_do && translate_linear[31:12] == tlb14[19:0] && tlb14[`TLB_BIT_VALID];
|
291 |
|
|
assign tlb15_sel = translate_do && translate_linear[31:12] == tlb15[19:0] && tlb15[`TLB_BIT_VALID];
|
292 |
|
|
assign tlb16_sel = translate_do && translate_linear[31:12] == tlb16[19:0] && tlb16[`TLB_BIT_VALID];
|
293 |
|
|
assign tlb17_sel = translate_do && translate_linear[31:12] == tlb17[19:0] && tlb17[`TLB_BIT_VALID];
|
294 |
|
|
assign tlb18_sel = translate_do && translate_linear[31:12] == tlb18[19:0] && tlb18[`TLB_BIT_VALID];
|
295 |
|
|
assign tlb19_sel = translate_do && translate_linear[31:12] == tlb19[19:0] && tlb19[`TLB_BIT_VALID];
|
296 |
|
|
assign tlb20_sel = translate_do && translate_linear[31:12] == tlb20[19:0] && tlb20[`TLB_BIT_VALID];
|
297 |
|
|
assign tlb21_sel = translate_do && translate_linear[31:12] == tlb21[19:0] && tlb21[`TLB_BIT_VALID];
|
298 |
|
|
assign tlb22_sel = translate_do && translate_linear[31:12] == tlb22[19:0] && tlb22[`TLB_BIT_VALID];
|
299 |
|
|
assign tlb23_sel = translate_do && translate_linear[31:12] == tlb23[19:0] && tlb23[`TLB_BIT_VALID];
|
300 |
|
|
assign tlb24_sel = translate_do && translate_linear[31:12] == tlb24[19:0] && tlb24[`TLB_BIT_VALID];
|
301 |
|
|
assign tlb25_sel = translate_do && translate_linear[31:12] == tlb25[19:0] && tlb25[`TLB_BIT_VALID];
|
302 |
|
|
assign tlb26_sel = translate_do && translate_linear[31:12] == tlb26[19:0] && tlb26[`TLB_BIT_VALID];
|
303 |
|
|
assign tlb27_sel = translate_do && translate_linear[31:12] == tlb27[19:0] && tlb27[`TLB_BIT_VALID];
|
304 |
|
|
assign tlb28_sel = translate_do && translate_linear[31:12] == tlb28[19:0] && tlb28[`TLB_BIT_VALID];
|
305 |
|
|
assign tlb29_sel = translate_do && translate_linear[31:12] == tlb29[19:0] && tlb29[`TLB_BIT_VALID];
|
306 |
|
|
assign tlb30_sel = translate_do && translate_linear[31:12] == tlb30[19:0] && tlb30[`TLB_BIT_VALID];
|
307 |
|
|
assign tlb31_sel = translate_do && translate_linear[31:12] == tlb31[19:0] && tlb31[`TLB_BIT_VALID];
|
308 |
|
|
|
309 |
|
|
assign selected =
|
310 |
|
|
(tlb0_sel)? tlb0 :
|
311 |
|
|
(tlb1_sel)? tlb1 :
|
312 |
|
|
(tlb2_sel)? tlb2 :
|
313 |
|
|
(tlb3_sel)? tlb3 :
|
314 |
|
|
(tlb4_sel)? tlb4 :
|
315 |
|
|
(tlb5_sel)? tlb5 :
|
316 |
|
|
(tlb6_sel)? tlb6 :
|
317 |
|
|
(tlb7_sel)? tlb7 :
|
318 |
|
|
(tlb8_sel)? tlb8 :
|
319 |
|
|
(tlb9_sel)? tlb9 :
|
320 |
|
|
(tlb10_sel)? tlb10 :
|
321 |
|
|
(tlb11_sel)? tlb11 :
|
322 |
|
|
(tlb12_sel)? tlb12 :
|
323 |
|
|
(tlb13_sel)? tlb13 :
|
324 |
|
|
(tlb14_sel)? tlb14 :
|
325 |
|
|
(tlb15_sel)? tlb15 :
|
326 |
|
|
(tlb16_sel)? tlb16 :
|
327 |
|
|
(tlb17_sel)? tlb17 :
|
328 |
|
|
(tlb18_sel)? tlb18 :
|
329 |
|
|
(tlb19_sel)? tlb19 :
|
330 |
|
|
(tlb20_sel)? tlb20 :
|
331 |
|
|
(tlb21_sel)? tlb21 :
|
332 |
|
|
(tlb22_sel)? tlb22 :
|
333 |
|
|
(tlb23_sel)? tlb23 :
|
334 |
|
|
(tlb24_sel)? tlb24 :
|
335 |
|
|
(tlb25_sel)? tlb25 :
|
336 |
|
|
(tlb26_sel)? tlb26 :
|
337 |
|
|
(tlb27_sel)? tlb27 :
|
338 |
|
|
(tlb28_sel)? tlb28 :
|
339 |
|
|
(tlb29_sel)? tlb29 :
|
340 |
|
|
(tlb30_sel)? tlb30 :
|
341 |
|
|
(tlb31_sel)? tlb31 :
|
342 |
|
|
46'd0;
|
343 |
|
|
|
344 |
|
|
assign tlb0_ena = `TRUE;
|
345 |
|
|
assign tlb1_ena = tlb0_ena && tlb0 [`TLB_BIT_VALID];
|
346 |
|
|
assign tlb2_ena = tlb1_ena && tlb1 [`TLB_BIT_VALID];
|
347 |
|
|
assign tlb3_ena = tlb2_ena && tlb2 [`TLB_BIT_VALID];
|
348 |
|
|
assign tlb4_ena = tlb3_ena && tlb3 [`TLB_BIT_VALID];
|
349 |
|
|
assign tlb5_ena = tlb4_ena && tlb4 [`TLB_BIT_VALID];
|
350 |
|
|
assign tlb6_ena = tlb5_ena && tlb5 [`TLB_BIT_VALID];
|
351 |
|
|
assign tlb7_ena = tlb6_ena && tlb6 [`TLB_BIT_VALID];
|
352 |
|
|
assign tlb8_ena = tlb7_ena && tlb7 [`TLB_BIT_VALID];
|
353 |
|
|
assign tlb9_ena = tlb8_ena && tlb8 [`TLB_BIT_VALID];
|
354 |
|
|
assign tlb10_ena = tlb9_ena && tlb9 [`TLB_BIT_VALID];
|
355 |
|
|
assign tlb11_ena = tlb10_ena && tlb10[`TLB_BIT_VALID];
|
356 |
|
|
assign tlb12_ena = tlb11_ena && tlb11[`TLB_BIT_VALID];
|
357 |
|
|
assign tlb13_ena = tlb12_ena && tlb12[`TLB_BIT_VALID];
|
358 |
|
|
assign tlb14_ena = tlb13_ena && tlb13[`TLB_BIT_VALID];
|
359 |
|
|
assign tlb15_ena = tlb14_ena && tlb14[`TLB_BIT_VALID];
|
360 |
|
|
assign tlb16_ena = tlb15_ena && tlb15[`TLB_BIT_VALID];
|
361 |
|
|
assign tlb17_ena = tlb16_ena && tlb16[`TLB_BIT_VALID];
|
362 |
|
|
assign tlb18_ena = tlb17_ena && tlb17[`TLB_BIT_VALID];
|
363 |
|
|
assign tlb19_ena = tlb18_ena && tlb18[`TLB_BIT_VALID];
|
364 |
|
|
assign tlb20_ena = tlb19_ena && tlb19[`TLB_BIT_VALID];
|
365 |
|
|
assign tlb21_ena = tlb20_ena && tlb20[`TLB_BIT_VALID];
|
366 |
|
|
assign tlb22_ena = tlb21_ena && tlb21[`TLB_BIT_VALID];
|
367 |
|
|
assign tlb23_ena = tlb22_ena && tlb22[`TLB_BIT_VALID];
|
368 |
|
|
assign tlb24_ena = tlb23_ena && tlb23[`TLB_BIT_VALID];
|
369 |
|
|
assign tlb25_ena = tlb24_ena && tlb24[`TLB_BIT_VALID];
|
370 |
|
|
assign tlb26_ena = tlb25_ena && tlb25[`TLB_BIT_VALID];
|
371 |
|
|
assign tlb27_ena = tlb26_ena && tlb26[`TLB_BIT_VALID];
|
372 |
|
|
assign tlb28_ena = tlb27_ena && tlb27[`TLB_BIT_VALID];
|
373 |
|
|
assign tlb29_ena = tlb28_ena && tlb28[`TLB_BIT_VALID];
|
374 |
|
|
assign tlb30_ena = tlb29_ena && tlb29[`TLB_BIT_VALID];
|
375 |
|
|
assign tlb31_ena = tlb30_ena && tlb30[`TLB_BIT_VALID];
|
376 |
|
|
|
377 |
|
|
assign full = tlb31_ena && tlb31[`TLB_BIT_VALID];
|
378 |
|
|
|
379 |
|
|
assign tlb0_write = tlbregs_write_do && ((~(tlb0[`TLB_BIT_VALID]) && tlb0_ena) || (full && ~(plru[0]) && ~(plru[1]) && ~(plru[3]) && ~(plru[7]) && ~(plru[15])));
|
380 |
|
|
assign tlb1_write = tlbregs_write_do && ((~(tlb1[`TLB_BIT_VALID]) && tlb1_ena) || (full && ~(plru[0]) && ~(plru[1]) && ~(plru[3]) && ~(plru[7]) && (plru[15])));
|
381 |
|
|
assign tlb2_write = tlbregs_write_do && ((~(tlb2[`TLB_BIT_VALID]) && tlb2_ena) || (full && ~(plru[0]) && ~(plru[1]) && ~(plru[3]) && (plru[7]) && ~(plru[16])));
|
382 |
|
|
assign tlb3_write = tlbregs_write_do && ((~(tlb3[`TLB_BIT_VALID]) && tlb3_ena) || (full && ~(plru[0]) && ~(plru[1]) && ~(plru[3]) && (plru[7]) && (plru[16])));
|
383 |
|
|
assign tlb4_write = tlbregs_write_do && ((~(tlb4[`TLB_BIT_VALID]) && tlb4_ena) || (full && ~(plru[0]) && ~(plru[1]) && (plru[3]) && ~(plru[8]) && ~(plru[17])));
|
384 |
|
|
assign tlb5_write = tlbregs_write_do && ((~(tlb5[`TLB_BIT_VALID]) && tlb5_ena) || (full && ~(plru[0]) && ~(plru[1]) && (plru[3]) && ~(plru[8]) && (plru[17])));
|
385 |
|
|
assign tlb6_write = tlbregs_write_do && ((~(tlb6[`TLB_BIT_VALID]) && tlb6_ena) || (full && ~(plru[0]) && ~(plru[1]) && (plru[3]) && (plru[8]) && ~(plru[18])));
|
386 |
|
|
assign tlb7_write = tlbregs_write_do && ((~(tlb7[`TLB_BIT_VALID]) && tlb7_ena) || (full && ~(plru[0]) && ~(plru[1]) && (plru[3]) && (plru[8]) && (plru[18])));
|
387 |
|
|
assign tlb8_write = tlbregs_write_do && ((~(tlb8[`TLB_BIT_VALID]) && tlb8_ena) || (full && ~(plru[0]) && (plru[1]) && ~(plru[4]) && ~(plru[9]) && ~(plru[19])));
|
388 |
|
|
assign tlb9_write = tlbregs_write_do && ((~(tlb9[`TLB_BIT_VALID]) && tlb9_ena) || (full && ~(plru[0]) && (plru[1]) && ~(plru[4]) && ~(plru[9]) && (plru[19])));
|
389 |
|
|
assign tlb10_write = tlbregs_write_do && ((~(tlb10[`TLB_BIT_VALID]) && tlb10_ena) || (full && ~(plru[0]) && (plru[1]) && ~(plru[4]) && (plru[9]) && ~(plru[20])));
|
390 |
|
|
assign tlb11_write = tlbregs_write_do && ((~(tlb11[`TLB_BIT_VALID]) && tlb11_ena) || (full && ~(plru[0]) && (plru[1]) && ~(plru[4]) && (plru[9]) && (plru[20])));
|
391 |
|
|
assign tlb12_write = tlbregs_write_do && ((~(tlb12[`TLB_BIT_VALID]) && tlb12_ena) || (full && ~(plru[0]) && (plru[1]) && (plru[4]) && ~(plru[10]) && ~(plru[21])));
|
392 |
|
|
assign tlb13_write = tlbregs_write_do && ((~(tlb13[`TLB_BIT_VALID]) && tlb13_ena) || (full && ~(plru[0]) && (plru[1]) && (plru[4]) && ~(plru[10]) && (plru[21])));
|
393 |
|
|
assign tlb14_write = tlbregs_write_do && ((~(tlb14[`TLB_BIT_VALID]) && tlb14_ena) || (full && ~(plru[0]) && (plru[1]) && (plru[4]) && (plru[10]) && ~(plru[22])));
|
394 |
|
|
assign tlb15_write = tlbregs_write_do && ((~(tlb15[`TLB_BIT_VALID]) && tlb15_ena) || (full && ~(plru[0]) && (plru[1]) && (plru[4]) && (plru[10]) && (plru[22])));
|
395 |
|
|
assign tlb16_write = tlbregs_write_do && ((~(tlb16[`TLB_BIT_VALID]) && tlb16_ena) || (full && (plru[0]) && ~(plru[2]) && ~(plru[5]) && ~(plru[11]) && ~(plru[23])));
|
396 |
|
|
assign tlb17_write = tlbregs_write_do && ((~(tlb17[`TLB_BIT_VALID]) && tlb17_ena) || (full && (plru[0]) && ~(plru[2]) && ~(plru[5]) && ~(plru[11]) && (plru[23])));
|
397 |
|
|
assign tlb18_write = tlbregs_write_do && ((~(tlb18[`TLB_BIT_VALID]) && tlb18_ena) || (full && (plru[0]) && ~(plru[2]) && ~(plru[5]) && (plru[11]) && ~(plru[24])));
|
398 |
|
|
assign tlb19_write = tlbregs_write_do && ((~(tlb19[`TLB_BIT_VALID]) && tlb19_ena) || (full && (plru[0]) && ~(plru[2]) && ~(plru[5]) && (plru[11]) && (plru[24])));
|
399 |
|
|
assign tlb20_write = tlbregs_write_do && ((~(tlb20[`TLB_BIT_VALID]) && tlb20_ena) || (full && (plru[0]) && ~(plru[2]) && (plru[5]) && ~(plru[12]) && ~(plru[25])));
|
400 |
|
|
assign tlb21_write = tlbregs_write_do && ((~(tlb21[`TLB_BIT_VALID]) && tlb21_ena) || (full && (plru[0]) && ~(plru[2]) && (plru[5]) && ~(plru[12]) && (plru[25])));
|
401 |
|
|
assign tlb22_write = tlbregs_write_do && ((~(tlb22[`TLB_BIT_VALID]) && tlb22_ena) || (full && (plru[0]) && ~(plru[2]) && (plru[5]) && (plru[12]) && ~(plru[26])));
|
402 |
|
|
assign tlb23_write = tlbregs_write_do && ((~(tlb23[`TLB_BIT_VALID]) && tlb23_ena) || (full && (plru[0]) && ~(plru[2]) && (plru[5]) && (plru[12]) && (plru[26])));
|
403 |
|
|
assign tlb24_write = tlbregs_write_do && ((~(tlb24[`TLB_BIT_VALID]) && tlb24_ena) || (full && (plru[0]) && (plru[2]) && ~(plru[6]) && ~(plru[13]) && ~(plru[27])));
|
404 |
|
|
assign tlb25_write = tlbregs_write_do && ((~(tlb25[`TLB_BIT_VALID]) && tlb25_ena) || (full && (plru[0]) && (plru[2]) && ~(plru[6]) && ~(plru[13]) && (plru[27])));
|
405 |
|
|
assign tlb26_write = tlbregs_write_do && ((~(tlb26[`TLB_BIT_VALID]) && tlb26_ena) || (full && (plru[0]) && (plru[2]) && ~(plru[6]) && (plru[13]) && ~(plru[28])));
|
406 |
|
|
assign tlb27_write = tlbregs_write_do && ((~(tlb27[`TLB_BIT_VALID]) && tlb27_ena) || (full && (plru[0]) && (plru[2]) && ~(plru[6]) && (plru[13]) && (plru[28])));
|
407 |
|
|
assign tlb28_write = tlbregs_write_do && ((~(tlb28[`TLB_BIT_VALID]) && tlb28_ena) || (full && (plru[0]) && (plru[2]) && (plru[6]) && ~(plru[14]) && ~(plru[29])));
|
408 |
|
|
assign tlb29_write = tlbregs_write_do && ((~(tlb29[`TLB_BIT_VALID]) && tlb29_ena) || (full && (plru[0]) && (plru[2]) && (plru[6]) && ~(plru[14]) && (plru[29])));
|
409 |
|
|
assign tlb30_write = tlbregs_write_do && ((~(tlb30[`TLB_BIT_VALID]) && tlb30_ena) || (full && (plru[0]) && (plru[2]) && (plru[6]) && (plru[14]) && ~(plru[30])));
|
410 |
|
|
assign tlb31_write = tlbregs_write_do && ((~(tlb31[`TLB_BIT_VALID]) && tlb31_ena) || (full && (plru[0]) && (plru[2]) && (plru[6]) && (plru[14]) && (plru[30])));
|
411 |
|
|
|
412 |
|
|
|
413 |
|
|
assign tlb0_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb0[19:0]) || (translate_valid_but_not_dirty && tlb0_sel);
|
414 |
|
|
assign tlb1_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb1[19:0]) || (translate_valid_but_not_dirty && tlb1_sel);
|
415 |
|
|
assign tlb2_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb2[19:0]) || (translate_valid_but_not_dirty && tlb2_sel);
|
416 |
|
|
assign tlb3_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb3[19:0]) || (translate_valid_but_not_dirty && tlb3_sel);
|
417 |
|
|
assign tlb4_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb4[19:0]) || (translate_valid_but_not_dirty && tlb4_sel);
|
418 |
|
|
assign tlb5_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb5[19:0]) || (translate_valid_but_not_dirty && tlb5_sel);
|
419 |
|
|
assign tlb6_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb6[19:0]) || (translate_valid_but_not_dirty && tlb6_sel);
|
420 |
|
|
assign tlb7_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb7[19:0]) || (translate_valid_but_not_dirty && tlb7_sel);
|
421 |
|
|
assign tlb8_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb8[19:0]) || (translate_valid_but_not_dirty && tlb8_sel);
|
422 |
|
|
assign tlb9_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb9[19:0]) || (translate_valid_but_not_dirty && tlb9_sel);
|
423 |
|
|
assign tlb10_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb10[19:0]) || (translate_valid_but_not_dirty && tlb10_sel);
|
424 |
|
|
assign tlb11_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb11[19:0]) || (translate_valid_but_not_dirty && tlb11_sel);
|
425 |
|
|
assign tlb12_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb12[19:0]) || (translate_valid_but_not_dirty && tlb12_sel);
|
426 |
|
|
assign tlb13_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb13[19:0]) || (translate_valid_but_not_dirty && tlb13_sel);
|
427 |
|
|
assign tlb14_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb14[19:0]) || (translate_valid_but_not_dirty && tlb14_sel);
|
428 |
|
|
assign tlb15_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb15[19:0]) || (translate_valid_but_not_dirty && tlb15_sel);
|
429 |
|
|
assign tlb16_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb16[19:0]) || (translate_valid_but_not_dirty && tlb16_sel);
|
430 |
|
|
assign tlb17_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb17[19:0]) || (translate_valid_but_not_dirty && tlb17_sel);
|
431 |
|
|
assign tlb18_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb18[19:0]) || (translate_valid_but_not_dirty && tlb18_sel);
|
432 |
|
|
assign tlb19_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb19[19:0]) || (translate_valid_but_not_dirty && tlb19_sel);
|
433 |
|
|
assign tlb20_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb20[19:0]) || (translate_valid_but_not_dirty && tlb20_sel);
|
434 |
|
|
assign tlb21_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb21[19:0]) || (translate_valid_but_not_dirty && tlb21_sel);
|
435 |
|
|
assign tlb22_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb22[19:0]) || (translate_valid_but_not_dirty && tlb22_sel);
|
436 |
|
|
assign tlb23_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb23[19:0]) || (translate_valid_but_not_dirty && tlb23_sel);
|
437 |
|
|
assign tlb24_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb24[19:0]) || (translate_valid_but_not_dirty && tlb24_sel);
|
438 |
|
|
assign tlb25_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb25[19:0]) || (translate_valid_but_not_dirty && tlb25_sel);
|
439 |
|
|
assign tlb26_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb26[19:0]) || (translate_valid_but_not_dirty && tlb26_sel);
|
440 |
|
|
assign tlb27_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb27[19:0]) || (translate_valid_but_not_dirty && tlb27_sel);
|
441 |
|
|
assign tlb28_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb28[19:0]) || (translate_valid_but_not_dirty && tlb28_sel);
|
442 |
|
|
assign tlb29_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb29[19:0]) || (translate_valid_but_not_dirty && tlb29_sel);
|
443 |
|
|
assign tlb30_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb30[19:0]) || (translate_valid_but_not_dirty && tlb30_sel);
|
444 |
|
|
assign tlb31_tlbflush = (tlbflushsingle_do && tlbflushsingle_address[31:12] == tlb31[19:0]) || (translate_valid_but_not_dirty && tlb31_sel);
|
445 |
|
|
|
446 |
|
|
assign write_data = { rw, tlbregs_write_combined_su, tlbregs_write_combined_rw, 1'b1, tlbregs_write_pcd, tlbregs_write_pwt, tlbregs_write_physical[31:12], tlbregs_write_linear[31:12] };
|
447 |
|
|
|
448 |
|
|
//------------------------------------------------------------------------------
|
449 |
|
|
|
450 |
|
|
/* Tree pseudo LRU
|
451 |
|
|
*
|
452 |
|
|
* [0]
|
453 |
|
|
* [1] [2]
|
454 |
|
|
* [3] [4] [5] [6]
|
455 |
|
|
* [7] [8] [9] [10] [11] [12] [13] [14]
|
456 |
|
|
* [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30]
|
457 |
|
|
* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
458 |
|
|
*
|
459 |
|
|
*/
|
460 |
|
|
|
461 |
|
|
localparam [30:0] TLB31_MASK = 31'b1000000000000000100000001000101; //0,2,6,14,30
|
462 |
|
|
localparam [30:0] TLB31_VALUE= 31'b0000000000000000000000000000000; //0,2,6,14,30
|
463 |
|
|
|
464 |
|
|
localparam [30:0] TLB30_MASK = 31'b1000000000000000100000001000101; //0,2,6,14,30
|
465 |
|
|
localparam [30:0] TLB30_VALUE= 31'b1000000000000000000000000000000; //0,2,6,14,30
|
466 |
|
|
|
467 |
|
|
localparam [30:0] TLB29_MASK = 31'b0100000000000000100000001000101; //0,2,6,14,29
|
468 |
|
|
localparam [30:0] TLB29_VALUE= 31'b0000000000000000100000000000000; //0,2,6,14,29
|
469 |
|
|
|
470 |
|
|
localparam [30:0] TLB28_MASK = 31'b0100000000000000100000001000101; //0,2,6,14,29
|
471 |
|
|
localparam [30:0] TLB28_VALUE= 31'b0100000000000000100000000000000; //0,2,6,14,29
|
472 |
|
|
|
473 |
|
|
localparam [30:0] TLB27_MASK = 31'b0010000000000000010000001000101; //0,2,6,13,28
|
474 |
|
|
localparam [30:0] TLB27_VALUE= 31'b0000000000000000000000001000000; //0,2,6,13,28
|
475 |
|
|
|
476 |
|
|
localparam [30:0] TLB26_MASK = 31'b0010000000000000010000001000101; //0,2,6,13,28
|
477 |
|
|
localparam [30:0] TLB26_VALUE= 31'b0010000000000000000000001000000; //0,2,6,13,28
|
478 |
|
|
|
479 |
|
|
localparam [30:0] TLB25_MASK = 31'b0001000000000000010000001000101; //0,2,6,13,27
|
480 |
|
|
localparam [30:0] TLB25_VALUE= 31'b0000000000000000010000001000000; //0,2,6,13,27
|
481 |
|
|
|
482 |
|
|
localparam [30:0] TLB24_MASK = 31'b0001000000000000010000001000101; //0,2,6,13,27
|
483 |
|
|
localparam [30:0] TLB24_VALUE= 31'b0001000000000000010000001000000; //0,2,6,13,27
|
484 |
|
|
|
485 |
|
|
localparam [30:0] TLB23_MASK = 31'b0000100000000000001000000100101; //0,2,5,12,26
|
486 |
|
|
localparam [30:0] TLB23_VALUE= 31'b0000000000000000000000000000100; //0,2,5,12,26
|
487 |
|
|
|
488 |
|
|
localparam [30:0] TLB22_MASK = 31'b0000100000000000001000000100101; //0,2,5,12,26
|
489 |
|
|
localparam [30:0] TLB22_VALUE= 31'b0000100000000000000000000000100; //0,2,5,12,26
|
490 |
|
|
|
491 |
|
|
localparam [30:0] TLB21_MASK = 31'b0000010000000000001000000100101; //0,2,5,12,25
|
492 |
|
|
localparam [30:0] TLB21_VALUE= 31'b0000000000000000001000000000100; //0,2,5,12,25
|
493 |
|
|
|
494 |
|
|
localparam [30:0] TLB20_MASK = 31'b0000010000000000001000000100101; //0,2,5,12,25
|
495 |
|
|
localparam [30:0] TLB20_VALUE= 31'b0000010000000000001000000000100; //0,2,5,12,25
|
496 |
|
|
|
497 |
|
|
localparam [30:0] TLB19_MASK = 31'b0000001000000000000100000100101; //0,2,5,11,24
|
498 |
|
|
localparam [30:0] TLB19_VALUE= 31'b0000000000000000000000000100100; //0,2,5,11,24
|
499 |
|
|
|
500 |
|
|
localparam [30:0] TLB18_MASK = 31'b0000001000000000000100000100101; //0,2,5,11,24
|
501 |
|
|
localparam [30:0] TLB18_VALUE= 31'b0000001000000000000000000100100; //0,2,5,11,24
|
502 |
|
|
|
503 |
|
|
localparam [30:0] TLB17_MASK = 31'b0000000100000000000100000100101; //0,2,5,11,23
|
504 |
|
|
localparam [30:0] TLB17_VALUE= 31'b0000000000000000000100000100100; //0,2,5,11,23
|
505 |
|
|
|
506 |
|
|
localparam [30:0] TLB16_MASK = 31'b0000000100000000000100000100101; //0,2,5,11,23
|
507 |
|
|
localparam [30:0] TLB16_VALUE= 31'b0000000100000000000100000100100; //0,2,5,11,23
|
508 |
|
|
|
509 |
|
|
localparam [30:0] TLB15_MASK = 31'b0000000010000000000010000010011; //0,1,4,10,22
|
510 |
|
|
localparam [30:0] TLB15_VALUE= 31'b0000000000000000000000000000001; //0,1,4,10,22
|
511 |
|
|
|
512 |
|
|
localparam [30:0] TLB14_MASK = 31'b0000000010000000000010000010011; //0,1,4,10,22
|
513 |
|
|
localparam [30:0] TLB14_VALUE= 31'b0000000010000000000000000000001; //0,1,4,10,22
|
514 |
|
|
|
515 |
|
|
localparam [30:0] TLB13_MASK = 31'b0000000001000000000010000010011; //0,1,4,10,21
|
516 |
|
|
localparam [30:0] TLB13_VALUE= 31'b0000000000000000000010000000001; //0,1,4,10,21
|
517 |
|
|
|
518 |
|
|
localparam [30:0] TLB12_MASK = 31'b0000000001000000000010000010011; //0,1,4,10,21
|
519 |
|
|
localparam [30:0] TLB12_VALUE= 31'b0000000001000000000010000000001; //0,1,4,10,21
|
520 |
|
|
|
521 |
|
|
localparam [30:0] TLB11_MASK = 31'b0000000000100000000001000010011; //0,1,4,9,20
|
522 |
|
|
localparam [30:0] TLB11_VALUE= 31'b0000000000000000000000000010001; //0,1,4,9,20
|
523 |
|
|
|
524 |
|
|
localparam [30:0] TLB10_MASK = 31'b0000000000100000000001000010011; //0,1,4,9,20
|
525 |
|
|
localparam [30:0] TLB10_VALUE= 31'b0000000000100000000000000010001; //0,1,4,9,20
|
526 |
|
|
|
527 |
|
|
localparam [30:0] TLB9_MASK = 31'b0000000000010000000001000010011; //0,1,4,9,19
|
528 |
|
|
localparam [30:0] TLB9_VALUE = 31'b0000000000000000000001000010001; //0,1,4,9,19
|
529 |
|
|
|
530 |
|
|
localparam [30:0] TLB8_MASK = 31'b0000000000010000000001000010011; //0,1,4,9,19
|
531 |
|
|
localparam [30:0] TLB8_VALUE = 31'b0000000000010000000001000010001; //0,1,4,9,19
|
532 |
|
|
|
533 |
|
|
localparam [30:0] TLB7_MASK = 31'b0000000000001000000000100001011; //0,1,3,8,18
|
534 |
|
|
localparam [30:0] TLB7_VALUE = 31'b0000000000000000000000000000011; //0,1,3,8,18
|
535 |
|
|
|
536 |
|
|
localparam [30:0] TLB6_MASK = 31'b0000000000001000000000100001011; //0,1,3,8,18
|
537 |
|
|
localparam [30:0] TLB6_VALUE = 31'b0000000000001000000000000000011; //0,1,3,8,18
|
538 |
|
|
|
539 |
|
|
localparam [30:0] TLB5_MASK = 31'b0000000000000100000000100001011; //0,1,3,8,17
|
540 |
|
|
localparam [30:0] TLB5_VALUE = 31'b0000000000000000000000100000011; //0,1,3,8,17
|
541 |
|
|
|
542 |
|
|
localparam [30:0] TLB4_MASK = 31'b0000000000000100000000100001011; //0,1,3,8,17
|
543 |
|
|
localparam [30:0] TLB4_VALUE = 31'b0000000000000100000000100000011; //0,1,3,8,17
|
544 |
|
|
|
545 |
|
|
localparam [30:0] TLB3_MASK = 31'b0000000000000010000000010001011; //0,1,3,7,16
|
546 |
|
|
localparam [30:0] TLB3_VALUE = 31'b0000000000000000000000000001011; //0,1,3,7,16
|
547 |
|
|
|
548 |
|
|
localparam [30:0] TLB2_MASK = 31'b0000000000000010000000010001011; //0,1,3,7,16
|
549 |
|
|
localparam [30:0] TLB2_VALUE = 31'b0000000000000010000000000001011; //0,1,3,7,16
|
550 |
|
|
|
551 |
|
|
localparam [30:0] TLB1_MASK = 31'b0000000000000001000000010001011; //0,1,3,7,15
|
552 |
|
|
localparam [30:0] TLB1_VALUE = 31'b0000000000000000000000010001011; //0,1,3,7,15
|
553 |
|
|
|
554 |
|
|
localparam [30:0] TLB0_MASK = 31'b0000000000000001000000010001011; //0,1,3,7,15
|
555 |
|
|
localparam [30:0] TLB0_VALUE = 31'b0000000000000001000000010001011; //0,1,3,7,15
|
556 |
|
|
|
557 |
|
|
//------------------------------------------------------------------------------
|
558 |
|
|
|
559 |
|
|
always @(posedge clk or negedge rst_n) begin
|
560 |
|
|
if(rst_n == 1'b0) plru <= 31'd0;
|
561 |
|
|
else if(tlbflushall_do) plru <= 31'd0;
|
562 |
|
|
else if(tlb0_write || tlb0_sel) plru <= (plru & ~(TLB0_MASK)) | TLB0_VALUE;
|
563 |
|
|
else if(tlb1_write || tlb1_sel) plru <= (plru & ~(TLB1_MASK)) | TLB1_VALUE;
|
564 |
|
|
else if(tlb2_write || tlb2_sel) plru <= (plru & ~(TLB2_MASK)) | TLB2_VALUE;
|
565 |
|
|
else if(tlb3_write || tlb3_sel) plru <= (plru & ~(TLB3_MASK)) | TLB3_VALUE;
|
566 |
|
|
else if(tlb4_write || tlb4_sel) plru <= (plru & ~(TLB4_MASK)) | TLB4_VALUE;
|
567 |
|
|
else if(tlb5_write || tlb5_sel) plru <= (plru & ~(TLB5_MASK)) | TLB5_VALUE;
|
568 |
|
|
else if(tlb6_write || tlb6_sel) plru <= (plru & ~(TLB6_MASK)) | TLB6_VALUE;
|
569 |
|
|
else if(tlb7_write || tlb7_sel) plru <= (plru & ~(TLB7_MASK)) | TLB7_VALUE;
|
570 |
|
|
else if(tlb8_write || tlb8_sel) plru <= (plru & ~(TLB8_MASK)) | TLB8_VALUE;
|
571 |
|
|
else if(tlb9_write || tlb9_sel) plru <= (plru & ~(TLB9_MASK)) | TLB9_VALUE;
|
572 |
|
|
else if(tlb10_write || tlb10_sel) plru <= (plru & ~(TLB10_MASK)) | TLB10_VALUE;
|
573 |
|
|
else if(tlb11_write || tlb11_sel) plru <= (plru & ~(TLB11_MASK)) | TLB11_VALUE;
|
574 |
|
|
else if(tlb12_write || tlb12_sel) plru <= (plru & ~(TLB12_MASK)) | TLB12_VALUE;
|
575 |
|
|
else if(tlb13_write || tlb13_sel) plru <= (plru & ~(TLB13_MASK)) | TLB13_VALUE;
|
576 |
|
|
else if(tlb14_write || tlb14_sel) plru <= (plru & ~(TLB14_MASK)) | TLB14_VALUE;
|
577 |
|
|
else if(tlb15_write || tlb15_sel) plru <= (plru & ~(TLB15_MASK)) | TLB15_VALUE;
|
578 |
|
|
else if(tlb16_write || tlb16_sel) plru <= (plru & ~(TLB16_MASK)) | TLB16_VALUE;
|
579 |
|
|
else if(tlb17_write || tlb17_sel) plru <= (plru & ~(TLB17_MASK)) | TLB17_VALUE;
|
580 |
|
|
else if(tlb18_write || tlb18_sel) plru <= (plru & ~(TLB18_MASK)) | TLB18_VALUE;
|
581 |
|
|
else if(tlb19_write || tlb19_sel) plru <= (plru & ~(TLB19_MASK)) | TLB19_VALUE;
|
582 |
|
|
else if(tlb20_write || tlb20_sel) plru <= (plru & ~(TLB20_MASK)) | TLB20_VALUE;
|
583 |
|
|
else if(tlb21_write || tlb21_sel) plru <= (plru & ~(TLB21_MASK)) | TLB21_VALUE;
|
584 |
|
|
else if(tlb22_write || tlb22_sel) plru <= (plru & ~(TLB22_MASK)) | TLB22_VALUE;
|
585 |
|
|
else if(tlb23_write || tlb23_sel) plru <= (plru & ~(TLB23_MASK)) | TLB23_VALUE;
|
586 |
|
|
else if(tlb24_write || tlb24_sel) plru <= (plru & ~(TLB24_MASK)) | TLB24_VALUE;
|
587 |
|
|
else if(tlb25_write || tlb25_sel) plru <= (plru & ~(TLB25_MASK)) | TLB25_VALUE;
|
588 |
|
|
else if(tlb26_write || tlb26_sel) plru <= (plru & ~(TLB26_MASK)) | TLB26_VALUE;
|
589 |
|
|
else if(tlb27_write || tlb27_sel) plru <= (plru & ~(TLB27_MASK)) | TLB27_VALUE;
|
590 |
|
|
else if(tlb28_write || tlb28_sel) plru <= (plru & ~(TLB28_MASK)) | TLB28_VALUE;
|
591 |
|
|
else if(tlb29_write || tlb29_sel) plru <= (plru & ~(TLB29_MASK)) | TLB29_VALUE;
|
592 |
|
|
else if(tlb30_write || tlb30_sel) plru <= (plru & ~(TLB30_MASK)) | TLB30_VALUE;
|
593 |
|
|
else if(tlb31_write || tlb31_sel) plru <= (plru & ~(TLB31_MASK)) | TLB31_VALUE;
|
594 |
|
|
end
|
595 |
|
|
|
596 |
|
|
|
597 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb0 <= 46'd0; else if(tlbflushall_do || tlb0_tlbflush) tlb0 <= 46'd0; else if(tlb0_write) tlb0 <= write_data; end
|
598 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb1 <= 46'd0; else if(tlbflushall_do || tlb1_tlbflush) tlb1 <= 46'd0; else if(tlb1_write) tlb1 <= write_data; end
|
599 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb2 <= 46'd0; else if(tlbflushall_do || tlb2_tlbflush) tlb2 <= 46'd0; else if(tlb2_write) tlb2 <= write_data; end
|
600 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb3 <= 46'd0; else if(tlbflushall_do || tlb3_tlbflush) tlb3 <= 46'd0; else if(tlb3_write) tlb3 <= write_data; end
|
601 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb4 <= 46'd0; else if(tlbflushall_do || tlb4_tlbflush) tlb4 <= 46'd0; else if(tlb4_write) tlb4 <= write_data; end
|
602 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb5 <= 46'd0; else if(tlbflushall_do || tlb5_tlbflush) tlb5 <= 46'd0; else if(tlb5_write) tlb5 <= write_data; end
|
603 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb6 <= 46'd0; else if(tlbflushall_do || tlb6_tlbflush) tlb6 <= 46'd0; else if(tlb6_write) tlb6 <= write_data; end
|
604 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb7 <= 46'd0; else if(tlbflushall_do || tlb7_tlbflush) tlb7 <= 46'd0; else if(tlb7_write) tlb7 <= write_data; end
|
605 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb8 <= 46'd0; else if(tlbflushall_do || tlb8_tlbflush) tlb8 <= 46'd0; else if(tlb8_write) tlb8 <= write_data; end
|
606 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb9 <= 46'd0; else if(tlbflushall_do || tlb9_tlbflush) tlb9 <= 46'd0; else if(tlb9_write) tlb9 <= write_data; end
|
607 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb10 <= 46'd0; else if(tlbflushall_do || tlb10_tlbflush) tlb10 <= 46'd0; else if(tlb10_write) tlb10 <= write_data; end
|
608 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb11 <= 46'd0; else if(tlbflushall_do || tlb11_tlbflush) tlb11 <= 46'd0; else if(tlb11_write) tlb11 <= write_data; end
|
609 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb12 <= 46'd0; else if(tlbflushall_do || tlb12_tlbflush) tlb12 <= 46'd0; else if(tlb12_write) tlb12 <= write_data; end
|
610 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb13 <= 46'd0; else if(tlbflushall_do || tlb13_tlbflush) tlb13 <= 46'd0; else if(tlb13_write) tlb13 <= write_data; end
|
611 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb14 <= 46'd0; else if(tlbflushall_do || tlb14_tlbflush) tlb14 <= 46'd0; else if(tlb14_write) tlb14 <= write_data; end
|
612 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb15 <= 46'd0; else if(tlbflushall_do || tlb15_tlbflush) tlb15 <= 46'd0; else if(tlb15_write) tlb15 <= write_data; end
|
613 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb16 <= 46'd0; else if(tlbflushall_do || tlb16_tlbflush) tlb16 <= 46'd0; else if(tlb16_write) tlb16 <= write_data; end
|
614 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb17 <= 46'd0; else if(tlbflushall_do || tlb17_tlbflush) tlb17 <= 46'd0; else if(tlb17_write) tlb17 <= write_data; end
|
615 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb18 <= 46'd0; else if(tlbflushall_do || tlb18_tlbflush) tlb18 <= 46'd0; else if(tlb18_write) tlb18 <= write_data; end
|
616 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb19 <= 46'd0; else if(tlbflushall_do || tlb19_tlbflush) tlb19 <= 46'd0; else if(tlb19_write) tlb19 <= write_data; end
|
617 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb20 <= 46'd0; else if(tlbflushall_do || tlb20_tlbflush) tlb20 <= 46'd0; else if(tlb20_write) tlb20 <= write_data; end
|
618 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb21 <= 46'd0; else if(tlbflushall_do || tlb21_tlbflush) tlb21 <= 46'd0; else if(tlb21_write) tlb21 <= write_data; end
|
619 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb22 <= 46'd0; else if(tlbflushall_do || tlb22_tlbflush) tlb22 <= 46'd0; else if(tlb22_write) tlb22 <= write_data; end
|
620 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb23 <= 46'd0; else if(tlbflushall_do || tlb23_tlbflush) tlb23 <= 46'd0; else if(tlb23_write) tlb23 <= write_data; end
|
621 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb24 <= 46'd0; else if(tlbflushall_do || tlb24_tlbflush) tlb24 <= 46'd0; else if(tlb24_write) tlb24 <= write_data; end
|
622 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb25 <= 46'd0; else if(tlbflushall_do || tlb25_tlbflush) tlb25 <= 46'd0; else if(tlb25_write) tlb25 <= write_data; end
|
623 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb26 <= 46'd0; else if(tlbflushall_do || tlb26_tlbflush) tlb26 <= 46'd0; else if(tlb26_write) tlb26 <= write_data; end
|
624 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb27 <= 46'd0; else if(tlbflushall_do || tlb27_tlbflush) tlb27 <= 46'd0; else if(tlb27_write) tlb27 <= write_data; end
|
625 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb28 <= 46'd0; else if(tlbflushall_do || tlb28_tlbflush) tlb28 <= 46'd0; else if(tlb28_write) tlb28 <= write_data; end
|
626 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb29 <= 46'd0; else if(tlbflushall_do || tlb29_tlbflush) tlb29 <= 46'd0; else if(tlb29_write) tlb29 <= write_data; end
|
627 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb30 <= 46'd0; else if(tlbflushall_do || tlb30_tlbflush) tlb30 <= 46'd0; else if(tlb30_write) tlb30 <= write_data; end
|
628 |
|
|
always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) tlb31 <= 46'd0; else if(tlbflushall_do || tlb31_tlbflush) tlb31 <= 46'd0; else if(tlb31_write) tlb31 <= write_data; end
|
629 |
|
|
|
630 |
|
|
//------------------------------------------------------------------------------
|
631 |
|
|
|
632 |
|
|
// synthesis translate_off
|
633 |
|
|
wire _unused_ok = &{ 1'b0, tlbflushsingle_address[11:0], tlbregs_write_linear[11:0], selected[19:0], tlbregs_write_physical[11:0], 1'b0 };
|
634 |
|
|
// synthesis translate_on
|
635 |
|
|
|
636 |
|
|
//------------------------------------------------------------------------------
|
637 |
|
|
|
638 |
|
|
endmodule
|