1 | // ========== Copyright Header Begin ========================================== |
---|
2 | // |
---|
3 | // OpenSPARC T1 Processor File: tlu_mmu_dp.v |
---|
4 | // Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved. |
---|
5 | // DO NOT ALTER OR REMOVE COPYRIGHT NOTICES. |
---|
6 | // |
---|
7 | // The above named program is free software; you can redistribute it and/or |
---|
8 | // modify it under the terms of the GNU General Public |
---|
9 | // License version 2 as published by the Free Software Foundation. |
---|
10 | // |
---|
11 | // The above named program is distributed in the hope that it will be |
---|
12 | // useful, but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
---|
14 | // General Public License for more details. |
---|
15 | // |
---|
16 | // You should have received a copy of the GNU General Public |
---|
17 | // License along with this work; if not, write to the Free Software |
---|
18 | // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. |
---|
19 | // |
---|
20 | // ========== Copyright Header End ============================================ |
---|
21 | /////////////////////////////////////////////////////////////////////// |
---|
22 | /* |
---|
23 | // Description: MMU Datapath - I & D. |
---|
24 | */ |
---|
25 | //////////////////////////////////////////////////////////////////////// |
---|
26 | // Global header file includes |
---|
27 | //////////////////////////////////////////////////////////////////////// |
---|
28 | `include "sys.h" // system level definition file which contains the |
---|
29 | // time scale definition |
---|
30 | |
---|
31 | //////////////////////////////////////////////////////////////////////// |
---|
32 | // Local header file includes / local defines |
---|
33 | //////////////////////////////////////////////////////////////////////// |
---|
34 | |
---|
35 | `include "tlu.h" |
---|
36 | |
---|
37 | //FPGA_SYN enables all FPGA related modifications |
---|
38 | `ifdef FPGA_SYN |
---|
39 | `define FPGA_SYN_CLK_EN |
---|
40 | `define FPGA_SYN_CLK_DFF |
---|
41 | `endif |
---|
42 | |
---|
43 | module tlu_mmu_dp ( /*AUTOARG*/ |
---|
44 | // Outputs |
---|
45 | tlu_dtsb_split_w2, tlu_dtsb_size_w2, tlu_dtag_access_w2, |
---|
46 | tlu_itsb_split_w2, tlu_itsb_size_w2, |
---|
47 | tlu_itlb_tte_tag_w2, tlu_itlb_tte_data_w2, tlu_dtlb_tte_tag_w2, |
---|
48 | tlu_dtlb_tte_data_w2, tlu_idtlb_dmp_key_g, tlu_dsfsr_flt_vld, |
---|
49 | tlu_isfsr_flt_vld, mra_wdata, tlu_ctxt_cfg_w2, tlu_tag_access_ctxt_g, |
---|
50 | lsu_exu_ldxa_data_g, so, tlu_tsb_base_w2_d1, |
---|
51 | // Inputs |
---|
52 | tlu_addr_msk_g, dmmu_any_sfsr_wr, dmmu_sfsr_wr_en_l, dmmu_sfar_wr_en_l, |
---|
53 | immu_any_sfsr_wr, immu_sfsr_wr_en_l, tlu_lng_ltncy_en_l, |
---|
54 | lsu_tlu_dside_ctxt_m, lsu_tlu_pctxt_m, tlu_tag_access_ctxt_sel_m, |
---|
55 | lsu_tlu_st_rs3_data_b63t59_g, lsu_tlu_st_rs3_data_b47t0_g, |
---|
56 | exu_lsu_ldst_va_e, tlu_idtsb_8k_ptr,lsu_tlu_tlb_dmp_va_m, ifu_tlu_pc_m, |
---|
57 | tlu_slxa_thrd_sel, |
---|
58 | tlu_tte_tag_g, tlu_dmp_key_vld_g, tlb_access_rst_l, |
---|
59 | tag_access_wdata_sel, mra_rdata, tlu_admp_key_sel, |
---|
60 | tlu_isfsr_din_g, tlu_dsfsr_din_g, |
---|
61 | tlu_tte_wr_pid_g, tlu_tte_real_g, tlu_ldxa_l1mx1_sel, |
---|
62 | tlu_ldxa_l1mx2_sel, tlu_ldxa_l2mx1_sel, rclk, grst_l, arst_l, |
---|
63 | tlu_tlb_tag_invrt_parity, tlu_tlb_data_invrt_parity, tlu_sun4r_tte_g, |
---|
64 | tlu_tsb_rd_ps0_sel, si, se, tlu_tlb_access_en_l_d1 |
---|
65 | ) ; |
---|
66 | |
---|
67 | /*AUTOINPUT*/ |
---|
68 | // Beginning of automatic inputs (from unused autoinst inputs) |
---|
69 | // End of automatics |
---|
70 | |
---|
71 | input tlu_addr_msk_g ; // address masking active for thread in pipe. |
---|
72 | input dmmu_any_sfsr_wr ; |
---|
73 | input [3:0] dmmu_sfsr_wr_en_l ; |
---|
74 | input [3:0] dmmu_sfar_wr_en_l ; |
---|
75 | input immu_any_sfsr_wr ; |
---|
76 | input [3:0] immu_sfsr_wr_en_l ; |
---|
77 | input [12:0] lsu_tlu_dside_ctxt_m ; |
---|
78 | input [12:0] lsu_tlu_pctxt_m ; |
---|
79 | input [2:0] tlu_tag_access_ctxt_sel_m ; |
---|
80 | // rs3_data split for vlint purposes. |
---|
81 | input [63:59] lsu_tlu_st_rs3_data_b63t59_g ; |
---|
82 | input [47:0] lsu_tlu_st_rs3_data_b47t0_g ; |
---|
83 | input [47:0] exu_lsu_ldst_va_e ; |
---|
84 | input [47:0] tlu_idtsb_8k_ptr ; |
---|
85 | input [47:13] lsu_tlu_tlb_dmp_va_m ; |
---|
86 | input [47:13] ifu_tlu_pc_m ; |
---|
87 | input [3:0] tlu_slxa_thrd_sel ; |
---|
88 | //input [63:0] int_tlu_asi_data; |
---|
89 | //input int_tlu_asi_data_vld; |
---|
90 | input [2:0] tlu_tte_tag_g ; |
---|
91 | input [4:0] tlu_dmp_key_vld_g ; |
---|
92 | //input tlb_access_en_l ; |
---|
93 | input tlu_tlb_access_en_l_d1 ; |
---|
94 | input tlb_access_rst_l ; |
---|
95 | |
---|
96 | input [2:0] tag_access_wdata_sel ; |
---|
97 | input [155:6] mra_rdata ; |
---|
98 | |
---|
99 | input tlu_admp_key_sel ; |
---|
100 | |
---|
101 | input [23:0] tlu_isfsr_din_g ; |
---|
102 | input [23:0] tlu_dsfsr_din_g ; |
---|
103 | |
---|
104 | input [2:0] tlu_tte_wr_pid_g ; // thread selected pid |
---|
105 | input tlu_tte_real_g ; // tte is real |
---|
106 | |
---|
107 | input [3:0] tlu_ldxa_l1mx1_sel ; // mmu ldxa level1 mx1 sel |
---|
108 | input [3:0] tlu_ldxa_l1mx2_sel ; // mmu ldxa level1 mx2 sel |
---|
109 | input [2:0] tlu_ldxa_l2mx1_sel ; // mmu ldxa level2 mx1 sel |
---|
110 | input tlu_tlb_tag_invrt_parity ; // invert parity for tag write |
---|
111 | input tlu_tlb_data_invrt_parity ; // invert parity for data write |
---|
112 | input tlu_sun4r_tte_g ; // sun4r vs. sun4v tte. |
---|
113 | |
---|
114 | input tlu_lng_ltncy_en_l ; |
---|
115 | |
---|
116 | input tlu_tsb_rd_ps0_sel ; |
---|
117 | |
---|
118 | input rclk ; |
---|
119 | input arst_l ; |
---|
120 | input grst_l ; |
---|
121 | input si ; |
---|
122 | input se ; |
---|
123 | |
---|
124 | output so ; |
---|
125 | |
---|
126 | //output [47:13] tlu_dtsb_base_w2 ; // represents ps0 |
---|
127 | output tlu_dtsb_split_w2 ; |
---|
128 | output [3:0] tlu_dtsb_size_w2 ; |
---|
129 | output [47:13] tlu_dtag_access_w2 ; // used to represent both i/d. |
---|
130 | //output [47:13] tlu_itsb_base_w2 ; // represents ps1 |
---|
131 | output tlu_itsb_split_w2 ; |
---|
132 | output [3:0] tlu_itsb_size_w2 ; |
---|
133 | //output [32:13] tlu_itag_access_w2 ; // to be obsoleted. |
---|
134 | output [58:0] tlu_itlb_tte_tag_w2 ; |
---|
135 | output [42:0] tlu_itlb_tte_data_w2 ; |
---|
136 | output [58:0] tlu_dtlb_tte_tag_w2 ; |
---|
137 | output [42:0] tlu_dtlb_tte_data_w2 ; |
---|
138 | //output [63:0] tlu_lsu_ldxa_data_w2 ; |
---|
139 | output [5:0] tlu_ctxt_cfg_w2 ; // i/d context zero/non-zero config. |
---|
140 | output [40:0] tlu_idtlb_dmp_key_g ; |
---|
141 | |
---|
142 | |
---|
143 | output [3:0] tlu_dsfsr_flt_vld ; |
---|
144 | output [3:0] tlu_isfsr_flt_vld ; |
---|
145 | |
---|
146 | output [12:0] tlu_tag_access_ctxt_g ; |
---|
147 | output [63:0] lsu_exu_ldxa_data_g ; |
---|
148 | |
---|
149 | output [47:13] tlu_tsb_base_w2_d1 ; |
---|
150 | |
---|
151 | ///output tlu_tag_access_nctxt_g ; // tag-access contains nucleus context. |
---|
152 | |
---|
153 | output [155:0] mra_wdata ; |
---|
154 | |
---|
155 | wire [47:0] ldst_va_m,ldst_va_g ; |
---|
156 | // st_rs3_data partitioned for vlint. |
---|
157 | //wire [63:0] st_rs3_data_g ; |
---|
158 | wire [63:59] st_rs3_data_b63t59_g ; |
---|
159 | wire [39:8] st_rs3_data_b39t8_g ; |
---|
160 | wire [6:1] st_rs3_data_b6t1_g ; |
---|
161 | wire [63:0] tag_target ; |
---|
162 | wire [47:13] dtag_access_w2 ; |
---|
163 | wire [23:0] dsfsr,isfsr ; |
---|
164 | wire [23:0] dsfsr0,isfsr0 ; |
---|
165 | wire [23:0] dsfsr1,isfsr1 ; |
---|
166 | wire [23:0] dsfsr2,isfsr2 ; |
---|
167 | wire [23:0] dsfsr3,isfsr3 ; |
---|
168 | wire [47:0] dsfar ; |
---|
169 | wire [47:0] dsfar0,dsfar1 ; |
---|
170 | wire [47:0] dsfar2,dsfar3 ; |
---|
171 | wire [23:0] dsfsr_din ; |
---|
172 | wire [23:0] isfsr_din ; |
---|
173 | //wire [39:22] tte_relocated_pa ; |
---|
174 | wire [40:0] dmp_key ; |
---|
175 | wire [47:0] tag_access_w2 ; |
---|
176 | wire [41:0] idtte_data_w2 ; |
---|
177 | wire tlb_access0_clk, tlb_access1_clk ; |
---|
178 | wire [40:0] idtlb_dmp_key_pend ; |
---|
179 | wire [47:0] tag_access_wdata ; |
---|
180 | wire [12:0] tag_access_ctxt_m,tag_access_ctxt_g ; |
---|
181 | // buses split for vlint purposes. |
---|
182 | wire [58:55] idtte_tag_b58t55_g ; |
---|
183 | wire [53:0] idtte_tag_b53t0_g ; |
---|
184 | wire [58:55] idtte_tag_b58t55_w2 ; |
---|
185 | wire [53:0] idtte_tag_b53t0_w2 ; |
---|
186 | wire [41:0] idtte_data_g ; |
---|
187 | wire [47:13] tlb_dmp_va_g ; |
---|
188 | wire [47:0] ldxa_l1mx1_dout_e ; |
---|
189 | wire [47:0] ldxa_l1mx1_dout_m ; |
---|
190 | |
---|
191 | //========================================================================================= |
---|
192 | // RESET/CLK |
---|
193 | //========================================================================================= |
---|
194 | |
---|
195 | wire clk; |
---|
196 | assign clk = rclk; |
---|
197 | |
---|
198 | wire rst_l; |
---|
199 | |
---|
200 | dffrl_async rstff(.din (grst_l), |
---|
201 | .q (rst_l), |
---|
202 | .clk (clk), .se(se), .si(), .so(), |
---|
203 | .rst_l (arst_l)); |
---|
204 | |
---|
205 | |
---|
206 | //========================================================================================= |
---|
207 | // Staging |
---|
208 | //========================================================================================= |
---|
209 | |
---|
210 | // Stage |
---|
211 | wire [47:13] pc_g ; |
---|
212 | dff_s #(35) stg_w ( |
---|
213 | .din (ifu_tlu_pc_m[47:13]), |
---|
214 | .q (pc_g[47:13]), |
---|
215 | .clk (clk), |
---|
216 | .se (1'b0), .si (), .so () |
---|
217 | ); |
---|
218 | |
---|
219 | //assign pc_g[47:13] = ifu_tlu_pc_w[47:13] ; |
---|
220 | |
---|
221 | // Stage va |
---|
222 | dff_s #(48) stg_m ( |
---|
223 | .din (exu_lsu_ldst_va_e[47:0]), |
---|
224 | .q (ldst_va_m[47:0]), |
---|
225 | .clk (clk), |
---|
226 | .se (1'b0), .si (), .so () |
---|
227 | ); |
---|
228 | |
---|
229 | dff_s #(48) stg_g ( |
---|
230 | .din (ldst_va_m[47:0]), |
---|
231 | .q (ldst_va_g[47:0]), |
---|
232 | .clk (clk), |
---|
233 | .se (1'b0), .si (), .so () |
---|
234 | ); |
---|
235 | |
---|
236 | dff_s #(35) dstg_g ( |
---|
237 | .din (lsu_tlu_tlb_dmp_va_m[47:13]), |
---|
238 | .q (tlb_dmp_va_g[47:13]), |
---|
239 | .clk (clk), |
---|
240 | .se (1'b0), .si (), .so () |
---|
241 | ); |
---|
242 | |
---|
243 | //========================================================================================= |
---|
244 | |
---|
245 | wire [4:0] tlu_dmp_key_vld_d1 ; |
---|
246 | wire [47:13] tlb_dmp_va_d1 ; |
---|
247 | dff_s #(40) dstg_d1 ( |
---|
248 | .din ({tlb_dmp_va_g[47:13],tlu_dmp_key_vld_g[4:0]}), |
---|
249 | .q ({tlb_dmp_va_d1[47:13],tlu_dmp_key_vld_d1[4:0]}), |
---|
250 | .clk (clk), |
---|
251 | .se (1'b0), .si (), .so () |
---|
252 | ); |
---|
253 | |
---|
254 | wire [2:0] tlu_tte_tag_d1,tlu_tte_wr_pid_d1 ; |
---|
255 | wire tlu_tte_real_d1,tlu_tlb_tag_invrt_parity_d1 ; |
---|
256 | wire [47:13] dmp_va_d1 ; |
---|
257 | wire [5:0] dmp_key_vld_d1 ; |
---|
258 | dp_mux2es #(41) dmp_key_sel ( |
---|
259 | .in0 ({tlb_dmp_va_d1[47:13],tlu_dmp_key_vld_d1[4:0],tlu_tte_real_d1}), |
---|
260 | .in1 ({tag_access_w2[47:13],1'b1,tlu_tte_tag_d1[2:0],tlu_tte_real_d1,tlu_tte_real_d1}), |
---|
261 | //.in1 ({tag_access_w2[47:13],1'b1,tlu_tte_tag_d1[2:0],1'b0,tlu_tte_real_d1}), // Bug 3754 |
---|
262 | .sel (tlu_admp_key_sel), |
---|
263 | .dout ({dmp_va_d1[47:13],dmp_key_vld_d1[5:0]}) |
---|
264 | ); |
---|
265 | |
---|
266 | assign dmp_key[40:0] = |
---|
267 | { |
---|
268 | dmp_va_d1[47:28], // (20b) |
---|
269 | dmp_key_vld_d1[5], // (1b) |
---|
270 | dmp_va_d1[27:22], // (6b) |
---|
271 | dmp_key_vld_d1[4], // (1b) |
---|
272 | dmp_va_d1[21:16], // (6b) |
---|
273 | dmp_key_vld_d1[3], // (1b) |
---|
274 | dmp_va_d1[15:13], // (3b) |
---|
275 | dmp_key_vld_d1[2], // (1b) |
---|
276 | dmp_key_vld_d1[1], // (1b) |
---|
277 | dmp_key_vld_d1[0] // (1b) |
---|
278 | } ; |
---|
279 | |
---|
280 | |
---|
281 | //wire tlb_access_en_l_d1 ; |
---|
282 | wire tlb_access2_clk ; |
---|
283 | `ifdef FPGA_SYN_CLK_EN |
---|
284 | `else |
---|
285 | `ifdef FPGA_SYN_CLK_EN |
---|
286 | `else |
---|
287 | clken_buf clkbf_dmpky ( |
---|
288 | .rclk (clk), |
---|
289 | .enb_l (tlu_tlb_access_en_l_d1), |
---|
290 | .tmb_l (~se), |
---|
291 | .clk (tlb_access2_clk) |
---|
292 | ) ; |
---|
293 | `endif |
---|
294 | `endif |
---|
295 | |
---|
296 | // Advance by a cycle. Do not have to reset state. |
---|
297 | `ifdef FPGA_SYN_CLK_DFF |
---|
298 | dffrle_s #(41) stg_w2 ( |
---|
299 | .din (dmp_key[40:0]), |
---|
300 | .q (idtlb_dmp_key_pend[40:0]), |
---|
301 | .rst_l (tlb_access_rst_l), |
---|
302 | .en (~(tlu_tlb_access_en_l_d1)), .clk(clk), |
---|
303 | .se (1'b0), .si (), .so () |
---|
304 | ); |
---|
305 | `else |
---|
306 | `ifdef FPGA_SYN_CLK_DFF |
---|
307 | dffrle_s #(41) stg_w2 ( |
---|
308 | .din (dmp_key[40:0]), |
---|
309 | .q (idtlb_dmp_key_pend[40:0]), |
---|
310 | .rst_l (tlb_access_rst_l), |
---|
311 | .en (~(tlu_tlb_access_en_l_d1)), .clk(clk), |
---|
312 | .se (1'b0), .si (), .so () |
---|
313 | ); |
---|
314 | `else |
---|
315 | dffrl_s #(41) stg_w2 ( |
---|
316 | .din (dmp_key[40:0]), |
---|
317 | .q (idtlb_dmp_key_pend[40:0]), |
---|
318 | .rst_l (tlb_access_rst_l), |
---|
319 | .clk (tlb_access2_clk), |
---|
320 | .se (1'b0), .si (), .so () |
---|
321 | ); |
---|
322 | `endif |
---|
323 | `endif |
---|
324 | |
---|
325 | assign tlu_idtlb_dmp_key_g[40:0] = idtlb_dmp_key_pend[40:0] ; |
---|
326 | |
---|
327 | |
---|
328 | //========================================================================================= |
---|
329 | // WR DATA FOR MRA |
---|
330 | //========================================================================================= |
---|
331 | |
---|
332 | // Format for each entry of MRA on a per thread basis. |
---|
333 | // Current : |
---|
334 | // | dtsb(48b) | dtag_access(48b) | dsfar(48b) | |
---|
335 | // | itsb(48b) | itag_access(48b) | | |
---|
336 | // New(Hyp,Legacy) : 8 tsb per thread instead of 2. dsfar removed. |
---|
337 | // -This allows tag-access to be lined up with simultaneous reads of tsb |
---|
338 | // -zero-ctxt and non-zero-ctxt tag-access will have to be distinguished either |
---|
339 | // by doing a zero-detect on the lower 13b of the write-data or using a disinct asi. |
---|
340 | // | zcps0_dtsb(48b) | zcps1_dtsb(48b) | zctxt_dtag_acc(48b) | dzctxt_cfg(6b) | |
---|
341 | // | zcps0_itsb(48b) | zcps1_itsb(48b) | zctxt_itag_acc(48b) | izctxt_cfg(6b) | |
---|
342 | // | nzcps0_dtsb(48b)| nzcps1_dtsb(48b)| nzctxt_dtag_acc(48b)| dnzctxt_cfg(6b)| |
---|
343 | // | nzcps0_itsb(48b)| nzcps1_itsb(48b)| nzctxt_itag_acc(48b)| inzctxt_cfg(6b)| |
---|
344 | |
---|
345 | mux3ds #(13) tag_acc_ctxtmx( |
---|
346 | .in0 (lsu_tlu_pctxt_m[12:0]), // iside selects primary ctxt |
---|
347 | .in1 (13'd0), // iside selects nucleus ctxt |
---|
348 | .in2 (lsu_tlu_dside_ctxt_m[12:0]), // otherwise select dside ctxt |
---|
349 | .sel0 (tlu_tag_access_ctxt_sel_m[0]), |
---|
350 | .sel1 (tlu_tag_access_ctxt_sel_m[1]), |
---|
351 | .sel2 (tlu_tag_access_ctxt_sel_m[2]), |
---|
352 | .dout (tag_access_ctxt_m[12:0]) |
---|
353 | ); |
---|
354 | |
---|
355 | /*assign tag_access_ctxt_m[12:0] = |
---|
356 | tlu_tag_access_ctxt_sel_m[0] ? lsu_tlu_pctxt_m[12:0] : // iside selects primary ctxt |
---|
357 | tlu_tag_access_ctxt_sel_m[1] ? 13'd0 : // iside selects nucleus ctxt |
---|
358 | tlu_tag_access_ctxt_sel_m[2] ? lsu_tlu_dside_ctxt_m[12:0] : 13'bx_xxxx_xxxx_xxxx ; // otherwise select dside ctxt |
---|
359 | */ |
---|
360 | |
---|
361 | dff_s #(13) ctxt_stgg ( |
---|
362 | .din (tag_access_ctxt_m[12:0]), |
---|
363 | .q (tag_access_ctxt_g[12:0]), |
---|
364 | .clk (clk), |
---|
365 | .se (1'b0), .si (), .so () |
---|
366 | ); |
---|
367 | |
---|
368 | // pstate.am masking |
---|
369 | wire [15:0] ldst_va_masked_g ; |
---|
370 | assign ldst_va_masked_g[15:0] = ldst_va_g[47:32] & {16{~tlu_addr_msk_g}} ; |
---|
371 | |
---|
372 | mux3ds #(48) dtag_access_dsel( |
---|
373 | .in0 ({ldst_va_masked_g[15:0],ldst_va_g[31:13],tag_access_ctxt_g[12:0]}), // dside hardware |
---|
374 | .in1 ({pc_g[47:13],tag_access_ctxt_g[12:0]}), // iside hardware |
---|
375 | .in2 (lsu_tlu_st_rs3_data_b47t0_g[47:0]), // stxa,tsb write as an example. |
---|
376 | .sel0 (tag_access_wdata_sel[0]), |
---|
377 | .sel1 (tag_access_wdata_sel[1]), |
---|
378 | .sel2 (tag_access_wdata_sel[2]), |
---|
379 | .dout (tag_access_wdata[47:0]) |
---|
380 | ); |
---|
381 | |
---|
382 | // Determine whether context is nucleus or not. |
---|
383 | //assign tlu_tag_access_nctxt_g = (tag_access_wdata[12:0] == 13'd0) ; |
---|
384 | assign tlu_tag_access_ctxt_g[12:0] = tag_access_ctxt_g[12:0] ; |
---|
385 | |
---|
386 | wire [47:0] dsfar_wdata ; |
---|
387 | dp_mux2es #(48) dsfar_dsel( |
---|
388 | .in0 ({ldst_va_masked_g[15:0],ldst_va_g[31:0]}), // dsfar;trap |
---|
389 | .in1 (lsu_tlu_st_rs3_data_b47t0_g[47:0]), // asi write |
---|
390 | .sel (dmmu_any_sfsr_wr), |
---|
391 | .dout (dsfar_wdata[47:0]) |
---|
392 | ); |
---|
393 | |
---|
394 | // Warning for Grape Mapper - the number of bits may have to be changed to |
---|
395 | // map implementation. |
---|
396 | assign mra_wdata[155:0] = |
---|
397 | // Bug 4676 - tsb rsrved field |
---|
398 | {lsu_tlu_st_rs3_data_b47t0_g[47:12],8'd0, |
---|
399 | lsu_tlu_st_rs3_data_b47t0_g[3:0], //ps0 zctxt,nzctxt tsb |
---|
400 | lsu_tlu_st_rs3_data_b47t0_g[47:12],8'd0, |
---|
401 | lsu_tlu_st_rs3_data_b47t0_g[3:0], //ps1 zctxt,nzctxt tsb |
---|
402 | tag_access_wdata[47:0], //i/d tag-access |
---|
403 | lsu_tlu_st_rs3_data_b47t0_g[10:8], //ps1 page size |
---|
404 | lsu_tlu_st_rs3_data_b47t0_g[2:0], //ps0 page size |
---|
405 | 6'd0}; |
---|
406 | |
---|
407 | |
---|
408 | //========================================================================================= |
---|
409 | // D-TAG ACCESS |
---|
410 | //========================================================================================= |
---|
411 | |
---|
412 | // 4 registers for the 4 threads. |
---|
413 | // 35b of VA || 13b Ctxt. |
---|
414 | // ** Ctxt is to be read as zero if there is no context associated with the access ** |
---|
415 | // VA will be sing-extended based on bit 47. |
---|
416 | |
---|
417 | // Update in w2. |
---|
418 | assign dtag_access_w2[47:13] = mra_rdata[`MRA_TACCESS_HI:`MRA_TACCESS_LO+13] ; |
---|
419 | |
---|
420 | // Can this be shared with the i-side ? |
---|
421 | assign tlu_dtag_access_w2[47:13] = dtag_access_w2[47:13] ; |
---|
422 | |
---|
423 | |
---|
424 | //========================================================================================= |
---|
425 | // I-TAG ACCESS |
---|
426 | //========================================================================================= |
---|
427 | |
---|
428 | // 4 registers for the 4 threads. |
---|
429 | // 35b of VA || 13b Ctxt. |
---|
430 | // ** Ctxt is to be read as zero if there is no context associated with the access ** |
---|
431 | // VA will be sing-extended based on bit 47. |
---|
432 | |
---|
433 | // Update in w2. |
---|
434 | // SPARC_HPV_EN - This needs to be obsoleted. Common tag-access will be superimposed |
---|
435 | // on dta_access bus. |
---|
436 | |
---|
437 | //assign itag_access_w2[32:13] = mra_rdata[`MRA_TACCESS_HI-15:`MRA_TACCESS_LO+13] ; |
---|
438 | //assign itag_access_w2[47:0] = mra_rdata[`MRA_TACCESS_HI:`MRA_TACCESS_LO] ; |
---|
439 | |
---|
440 | //assign tlu_itag_access_w2[32:13] = itag_access_w2[32:13] ; |
---|
441 | |
---|
442 | |
---|
443 | //========================================================================================= |
---|
444 | // D-TAG TARGET |
---|
445 | //========================================================================================= |
---|
446 | |
---|
447 | // Tag Target is based on currently selected thread. |
---|
448 | |
---|
449 | // Thread0,1,2,3 |
---|
450 | assign tag_target[63:0] = |
---|
451 | {3'b000, |
---|
452 | ldxa_l1mx1_dout_m[12:0], // Context |
---|
453 | //tag_access_w2[12:0], // Context |
---|
454 | 6'b000000, |
---|
455 | {16{ldxa_l1mx1_dout_m[47]}}, // Sign-extend VA[47] |
---|
456 | //{16{tag_access_w2[47]}}, // Sign-extend VA[47] |
---|
457 | ldxa_l1mx1_dout_m[47:22]}; // VA // Bug 3975. |
---|
458 | //tag_access_w2[47:22]}; // VA |
---|
459 | |
---|
460 | //========================================================================================= |
---|
461 | // D-TSB |
---|
462 | //========================================================================================= |
---|
463 | |
---|
464 | // Note : on interface, dtsb represents ps0 tsbs, itsb represents ps1 tsbs. |
---|
465 | |
---|
466 | wire [47:0] tsb_ps0, tsb_ps1 ; |
---|
467 | assign tsb_ps0[47:0] = mra_rdata[`MRA_TSB_PS0_HI:`MRA_TSB_PS0_LO] ; |
---|
468 | assign tsb_ps1[47:0] = mra_rdata[`MRA_TSB_PS1_HI:`MRA_TSB_PS1_LO] ; |
---|
469 | |
---|
470 | assign tlu_dtsb_split_w2 = tsb_ps0[12] ; |
---|
471 | // SPARC_HPV_EN - extend tsb_size by 1b. |
---|
472 | assign tlu_dtsb_size_w2[3:0] = tsb_ps0[3:0] ; |
---|
473 | |
---|
474 | //========================================================================================= |
---|
475 | // CTXT CONFIG |
---|
476 | //========================================================================================= |
---|
477 | |
---|
478 | wire [5:0] ptr_ctxt_cfg ; |
---|
479 | assign tlu_ctxt_cfg_w2[5:0] = mra_rdata[`MRA_CTXTCFG_HI:`MRA_CTXTCFG_LO] ; |
---|
480 | |
---|
481 | dff_s #(6) pctxt_stgm ( |
---|
482 | .din (mra_rdata[`MRA_CTXTCFG_HI:`MRA_CTXTCFG_LO]), |
---|
483 | .q (ptr_ctxt_cfg[5:0]), |
---|
484 | .clk (clk), |
---|
485 | .se (1'b0), .si (), .so () |
---|
486 | ); |
---|
487 | |
---|
488 | //========================================================================================= |
---|
489 | // I-TSB |
---|
490 | //========================================================================================= |
---|
491 | |
---|
492 | assign tlu_itsb_split_w2 = tsb_ps1[12] ; |
---|
493 | assign tlu_itsb_size_w2[3:0] = tsb_ps1[3:0] ; |
---|
494 | |
---|
495 | //========================================================================================= |
---|
496 | // STAGE TSB BASE FOR USE IN PTR CALCULATION |
---|
497 | //========================================================================================= |
---|
498 | |
---|
499 | wire [47:13] tsb_base ; |
---|
500 | assign tsb_base[47:13] = |
---|
501 | tlu_tsb_rd_ps0_sel ? tsb_ps0[47:13] : tsb_ps1[47:13] ; |
---|
502 | //tlu_tsb_rd_ps0_sel ? dtsb[47:13] : itsb[47:13] ; |
---|
503 | |
---|
504 | dff_s #(35) tsbbase_stgm ( |
---|
505 | .din (tsb_base[47:13]), |
---|
506 | .q (tlu_tsb_base_w2_d1[47:13]), |
---|
507 | .clk (clk), |
---|
508 | .se (1'b0), .si (), .so () |
---|
509 | ); |
---|
510 | |
---|
511 | //========================================================================================= |
---|
512 | // 8K and 64K Ptr |
---|
513 | //========================================================================================= |
---|
514 | |
---|
515 | // In MMU Control. |
---|
516 | |
---|
517 | //========================================================================================= |
---|
518 | // Direct Ptr |
---|
519 | //========================================================================================= |
---|
520 | |
---|
521 | //========================================================================================= |
---|
522 | // I-/D TLB Fill : TTE Tag and Data. |
---|
523 | //========================================================================================= |
---|
524 | |
---|
525 | |
---|
526 | // TTE Tag is formed from Tag Access. |
---|
527 | // TTE Data is formed from rs3_data for store. |
---|
528 | |
---|
529 | // Timing needs to be fixed !!! Partition mode will add one more cycle |
---|
530 | // to path. tlb write will occur in w3. |
---|
531 | |
---|
532 | // partitioned for vlint purposes. |
---|
533 | //assign st_rs3_data_g[63:0] = lsu_tlu_st_rs3_data_g[63:0] ; |
---|
534 | assign st_rs3_data_b63t59_g[63:59] = lsu_tlu_st_rs3_data_b63t59_g[63:59] ; |
---|
535 | assign st_rs3_data_b39t8_g[39:8] = lsu_tlu_st_rs3_data_b47t0_g[39:8] ; |
---|
536 | assign st_rs3_data_b6t1_g[6:1] = lsu_tlu_st_rs3_data_b47t0_g[6:1] ; |
---|
537 | |
---|
538 | assign tag_access_w2[47:0] = mra_rdata[`MRA_TACCESS_HI:`MRA_TACCESS_LO] ; |
---|
539 | |
---|
540 | wire idtte_tag_vld_g,idtte_tag_vld_d1 ; |
---|
541 | assign idtte_tag_vld_g = |
---|
542 | st_rs3_data_b63t59_g[63] ; |
---|
543 | wire idtte_tag_lock_g,idtte_tag_lock_d1 ; |
---|
544 | assign idtte_tag_lock_g = |
---|
545 | tlu_sun4r_tte_g ? st_rs3_data_b6t1_g[6] : st_rs3_data_b63t59_g[61] ; |
---|
546 | |
---|
547 | `ifdef FPGA_SYN_CLK_EN |
---|
548 | `else |
---|
549 | `ifdef FPGA_SYN_CLK_EN |
---|
550 | `else |
---|
551 | clken_buf clkbf_idttetg ( |
---|
552 | .rclk (clk), |
---|
553 | .enb_l (tlu_lng_ltncy_en_l), |
---|
554 | .tmb_l (~se), |
---|
555 | .clk (tlb_access3_clk) |
---|
556 | ) ; |
---|
557 | `endif |
---|
558 | `endif |
---|
559 | |
---|
560 | // Stage some bits to match posedge rd for lng-lat reads of mra. |
---|
561 | `ifdef FPGA_SYN_CLK_DFF |
---|
562 | dffe_s #(10) stgd1_idttetg ( |
---|
563 | .din ({idtte_tag_vld_g,idtte_tag_lock_g,tlu_tte_tag_g[2:0], |
---|
564 | tlu_tte_wr_pid_g[2:0],tlu_tte_real_g,tlu_tlb_tag_invrt_parity}), |
---|
565 | .q ({idtte_tag_vld_d1,idtte_tag_lock_d1,tlu_tte_tag_d1[2:0], |
---|
566 | tlu_tte_wr_pid_d1[2:0],tlu_tte_real_d1,tlu_tlb_tag_invrt_parity_d1}), |
---|
567 | .en (~(tlu_lng_ltncy_en_l)), .clk(clk), |
---|
568 | .se (1'b0), .si (), .so () |
---|
569 | ); |
---|
570 | `else |
---|
571 | `ifdef FPGA_SYN_CLK_DFF |
---|
572 | dffe_s #(10) stgd1_idttetg ( |
---|
573 | .din ({idtte_tag_vld_g,idtte_tag_lock_g,tlu_tte_tag_g[2:0], |
---|
574 | tlu_tte_wr_pid_g[2:0],tlu_tte_real_g,tlu_tlb_tag_invrt_parity}), |
---|
575 | .q ({idtte_tag_vld_d1,idtte_tag_lock_d1,tlu_tte_tag_d1[2:0], |
---|
576 | tlu_tte_wr_pid_d1[2:0],tlu_tte_real_d1,tlu_tlb_tag_invrt_parity_d1}), |
---|
577 | .en (~(tlu_lng_ltncy_en_l)), .clk(clk), |
---|
578 | .se (1'b0), .si (), .so () |
---|
579 | ); |
---|
580 | `else |
---|
581 | dff_s #(10) stgd1_idttetg ( |
---|
582 | .din ({idtte_tag_vld_g,idtte_tag_lock_g,tlu_tte_tag_g[2:0], |
---|
583 | tlu_tte_wr_pid_g[2:0],tlu_tte_real_g,tlu_tlb_tag_invrt_parity}), |
---|
584 | .q ({idtte_tag_vld_d1,idtte_tag_lock_d1,tlu_tte_tag_d1[2:0], |
---|
585 | tlu_tte_wr_pid_d1[2:0],tlu_tte_real_d1,tlu_tlb_tag_invrt_parity_d1}), |
---|
586 | .clk (tlb_access3_clk), |
---|
587 | .se (1'b0), .si (), .so () |
---|
588 | ); |
---|
589 | `endif |
---|
590 | `endif |
---|
591 | |
---|
592 | // assumption is that tag_access_w2 gets delayed by a cycle because |
---|
593 | // the rd is now posedge. |
---|
594 | assign idtte_tag_b53t0_g[53:0] = |
---|
595 | {tag_access_w2[47:22], // VA_tag (26b) |
---|
596 | tlu_tte_tag_d1[2], // 27:22 are valid (1b) |
---|
597 | idtte_tag_vld_d1, // V (1b) can be 0 or 1 |
---|
598 | idtte_tag_lock_d1, // L (1b) |
---|
599 | 1'b1, // U (1b) : must be set on write |
---|
600 | tag_access_w2[21:16], // VA_tag (6b) |
---|
601 | tlu_tte_tag_d1[1], // 21:16 are valid (1b) |
---|
602 | tag_access_w2[15:13], // VA_tag (3b) |
---|
603 | tlu_tte_tag_d1[0], // 15:13 are valid (1b) |
---|
604 | tag_access_w2[12:0] // Ctxt b12:0 (13b) |
---|
605 | }; |
---|
606 | |
---|
607 | assign idtte_tag_b58t55_g[58:55] = {tlu_tte_wr_pid_d1[2:0],tlu_tte_real_d1}; |
---|
608 | // V and U bit omitted from tag as it can change once in tlb |
---|
609 | // assign idtte_tag_g[54] = |
---|
610 | // tlu_tlb_tag_invrt_parity_d1^(^{idtte_tag_g[58:55],idtte_tag_g[53:27],idtte_tag_g[25],idtte_tag_g[23:0]}) ; |
---|
611 | |
---|
612 | // Additional page size bit does not have to be included. EP ? |
---|
613 | // SUN4R TTE |
---|
614 | wire [41:0] idtte_data_sun4r_g ; |
---|
615 | assign idtte_data_sun4r_g[41:0] = |
---|
616 | {st_rs3_data_b39t8_g[39:22], // PA (18b) |
---|
617 | ~tlu_tte_tag_g[2], // 27:20 - mx sel (1b) : active-low |
---|
618 | st_rs3_data_b39t8_g[21:16], // PA (6b) |
---|
619 | ~tlu_tte_tag_g[1], // 21:16 - mx sel (1b) : active-low |
---|
620 | st_rs3_data_b39t8_g[15:13], // PA (3b) |
---|
621 | ~tlu_tte_tag_g[0], // 15:13 - mx sel (1b) : active-low |
---|
622 | st_rs3_data_b63t59_g[63], // V (1b) |
---|
623 | st_rs3_data_b63t59_g[60], // NFO (1b) |
---|
624 | st_rs3_data_b63t59_g[59], // IE (1b) |
---|
625 | st_rs3_data_b6t1_g[6], // L (1b) |
---|
626 | st_rs3_data_b6t1_g[5:4], // CP/CV (2b) |
---|
627 | st_rs3_data_b6t1_g[3], // E (1b) |
---|
628 | st_rs3_data_b6t1_g[2], // P (1b) |
---|
629 | st_rs3_data_b6t1_g[1], // W (1b) |
---|
630 | 3'b000}; // Spare (3b) |
---|
631 | // SUN4V TTE |
---|
632 | wire [41:0] idtte_data_sun4v_g ; |
---|
633 | assign idtte_data_sun4v_g[41:0] = |
---|
634 | {st_rs3_data_b39t8_g[39:22], // PA (18b) |
---|
635 | ~tlu_tte_tag_g[2], // 27:20 - mx sel (1b) : active-low |
---|
636 | st_rs3_data_b39t8_g[21:16], // PA (6b) |
---|
637 | ~tlu_tte_tag_g[1], // 21:16 - mx sel (1b) : active-low |
---|
638 | st_rs3_data_b39t8_g[15:13], // PA (3b) |
---|
639 | ~tlu_tte_tag_g[0], // 15:13 - mx sel (1b) : active-low |
---|
640 | st_rs3_data_b63t59_g[63], // V (1b) // 4->63. Bug 2977 |
---|
641 | st_rs3_data_b63t59_g[62], // NFO (1b) // 10->62 |
---|
642 | st_rs3_data_b39t8_g[12], // IE (1b) |
---|
643 | st_rs3_data_b63t59_g[61], // L (1b) |
---|
644 | //1'b0, //// L(none) (1b) |
---|
645 | st_rs3_data_b39t8_g[10:9], // CP/CV (2b) // 9:8 -> 10:9 |
---|
646 | st_rs3_data_b39t8_g[11], // E (1b) |
---|
647 | st_rs3_data_b39t8_g[8], // P (1b) // 7->8 |
---|
648 | st_rs3_data_b6t1_g[6], // W (1b) // 5->6 |
---|
649 | 3'b000}; // Spare (3b) |
---|
650 | assign idtte_data_g[41:0] = |
---|
651 | tlu_sun4r_tte_g ? idtte_data_sun4r_g[41:0] : idtte_data_sun4v_g[41:0]; |
---|
652 | |
---|
653 | // Generate Parity for tte data. Match to DP Macro. |
---|
654 | //assign idtte_data_g[42] = tlu_tlb_data_invrt_parity^(^idtte_data_g[41:0]) ; |
---|
655 | |
---|
656 | /*dff #(1) stgd1_tlbacc ( |
---|
657 | .din (tlb_access_en_l), |
---|
658 | .q (tlb_access_en_l_d1), |
---|
659 | .clk (clk), |
---|
660 | .se (1'b0), .si (), .so () |
---|
661 | );*/ |
---|
662 | |
---|
663 | // flopping of tte-tag is delayed by a cycle,tte-data |
---|
664 | // is not. wr-vld will match tte-tag. |
---|
665 | `ifdef FPGA_SYN_CLK_EN |
---|
666 | `else |
---|
667 | `ifdef FPGA_SYN_CLK_EN |
---|
668 | `else |
---|
669 | clken_buf clkbf_ttetg ( |
---|
670 | .rclk (clk), |
---|
671 | .enb_l (tlu_tlb_access_en_l_d1), |
---|
672 | .tmb_l (~se), |
---|
673 | .clk (tlb_access0_clk) |
---|
674 | ) ; |
---|
675 | `endif |
---|
676 | `endif |
---|
677 | |
---|
678 | // Ship for write to TLB. Doesn't have to be resettable. |
---|
679 | // Shorten by a bit, as parity will be generated based on output. |
---|
680 | // Instead of removing the bit, use it for parity-invrt bit |
---|
681 | // in section below. |
---|
682 | /*dff #(59) stgw2_ttetg ( |
---|
683 | .din (idtte_tag_g[58:0]), |
---|
684 | .q (idtte_tag_w2[58:0]), |
---|
685 | .clk (tlb_access0_clk), |
---|
686 | .se (1'b0), .si (), .so () |
---|
687 | ); */ |
---|
688 | |
---|
689 | `ifdef FPGA_SYN_CLK_DFF |
---|
690 | dffe_s #(58) stgw2_ttetg ( |
---|
691 | .din ({idtte_tag_b58t55_g[58:55],idtte_tag_b53t0_g[53:0]}), |
---|
692 | .q ({idtte_tag_b58t55_w2[58:55],idtte_tag_b53t0_w2[53:0]}), |
---|
693 | .en (~(tlu_tlb_access_en_l_d1)), .clk(clk), |
---|
694 | .se (1'b0), .si (), .so () |
---|
695 | ); |
---|
696 | `else |
---|
697 | `ifdef FPGA_SYN_CLK_DFF |
---|
698 | dffe_s #(58) stgw2_ttetg ( |
---|
699 | .din ({idtte_tag_b58t55_g[58:55],idtte_tag_b53t0_g[53:0]}), |
---|
700 | .q ({idtte_tag_b58t55_w2[58:55],idtte_tag_b53t0_w2[53:0]}), |
---|
701 | .en (~(tlu_tlb_access_en_l_d1)), .clk(clk), |
---|
702 | .se (1'b0), .si (), .so () |
---|
703 | ); |
---|
704 | `else |
---|
705 | dff_s #(58) stgw2_ttetg ( |
---|
706 | .din ({idtte_tag_b58t55_g[58:55],idtte_tag_b53t0_g[53:0]}), |
---|
707 | .q ({idtte_tag_b58t55_w2[58:55],idtte_tag_b53t0_w2[53:0]}), |
---|
708 | .clk (tlb_access0_clk), |
---|
709 | .se (1'b0), .si (), .so () |
---|
710 | ); |
---|
711 | `endif |
---|
712 | `endif |
---|
713 | |
---|
714 | `ifdef FPGA_SYN_CLK_EN |
---|
715 | `else |
---|
716 | `ifdef FPGA_SYN_CLK_EN |
---|
717 | `else |
---|
718 | clken_buf clkbf_ttedt ( |
---|
719 | .rclk (clk), |
---|
720 | .enb_l (tlu_lng_ltncy_en_l), |
---|
721 | //.enb_l (tlb_access_en_l), |
---|
722 | .tmb_l (~se), |
---|
723 | .clk (tlb_access1_clk) |
---|
724 | ) ; |
---|
725 | `endif |
---|
726 | `endif |
---|
727 | |
---|
728 | // Shorten by a bit, as parity will be generated based on output. |
---|
729 | // Instead of removing the bit, use it for parity-invrt bit |
---|
730 | // in section below. |
---|
731 | /*dff #(43) stgw2_ttedt ( |
---|
732 | .din (idtte_data_g[42:0]), |
---|
733 | .q (idtte_data_w2[42:0]), |
---|
734 | .clk (tlb_access1_clk), |
---|
735 | .se (1'b0), .si (), .so () |
---|
736 | );*/ |
---|
737 | |
---|
738 | `ifdef FPGA_SYN_CLK_DFF |
---|
739 | dffe_s #(42) stgw2_ttedt ( |
---|
740 | .din (idtte_data_g[41:0]), |
---|
741 | .q (idtte_data_w2[41:0]), |
---|
742 | .en (~(tlu_lng_ltncy_en_l)), .clk(clk), |
---|
743 | .se (1'b0), .si (), .so () |
---|
744 | ); |
---|
745 | `else |
---|
746 | `ifdef FPGA_SYN_CLK_DFF |
---|
747 | dffe_s #(42) stgw2_ttedt ( |
---|
748 | .din (idtte_data_g[41:0]), |
---|
749 | .q (idtte_data_w2[41:0]), |
---|
750 | .en (~(tlu_lng_ltncy_en_l)), .clk(clk), |
---|
751 | .se (1'b0), .si (), .so () |
---|
752 | ); |
---|
753 | `else |
---|
754 | dff_s #(42) stgw2_ttedt ( |
---|
755 | .din (idtte_data_g[41:0]), |
---|
756 | .q (idtte_data_w2[41:0]), |
---|
757 | .clk (tlb_access1_clk), |
---|
758 | .se (1'b0), .si (), .so () |
---|
759 | ); |
---|
760 | `endif |
---|
761 | `endif |
---|
762 | |
---|
763 | wire parity_tag,parity_data ; |
---|
764 | wire parity_tag_d1,parity_data_d1 ; |
---|
765 | assign tlu_dtlb_tte_tag_w2[58:0] = {idtte_tag_b58t55_w2[58:55],parity_tag_d1,idtte_tag_b53t0_w2[53:0]} ; |
---|
766 | assign tlu_itlb_tte_tag_w2[58:0] = {idtte_tag_b58t55_w2[58:55],parity_tag_d1,idtte_tag_b53t0_w2[53:0]} ; |
---|
767 | assign tlu_dtlb_tte_data_w2[42:0] = {parity_data_d1,idtte_data_w2[41:0]} ; |
---|
768 | assign tlu_itlb_tte_data_w2[42:0] = {parity_data_d1,idtte_data_w2[41:0]} ; |
---|
769 | |
---|
770 | //========================================================================================= |
---|
771 | // PARITY GEN FOR TTE TAG & DATA |
---|
772 | //========================================================================================= |
---|
773 | |
---|
774 | // Timing Change : Since parity is not required until the write, and the write |
---|
775 | // is preceeded by a auto-demap, the parity generation can be hidden in the |
---|
776 | // cycle of auto-demap. |
---|
777 | |
---|
778 | wire tlu_tlb_tag_invrt_parity_d2,tlu_tlb_data_invrt_parity_d1 ; |
---|
779 | |
---|
780 | `ifdef FPGA_SYN_CLK_DFF |
---|
781 | dffe_s #(1) stgw2_ttetgpar ( |
---|
782 | .din (tlu_tlb_tag_invrt_parity_d1), |
---|
783 | .q (tlu_tlb_tag_invrt_parity_d2), |
---|
784 | .en (~(tlu_tlb_access_en_l_d1)), .clk(clk), |
---|
785 | .se (1'b0), .si (), .so () |
---|
786 | ); |
---|
787 | `else |
---|
788 | `ifdef FPGA_SYN_CLK_DFF |
---|
789 | dffe_s #(1) stgw2_ttetgpar ( |
---|
790 | .din (tlu_tlb_tag_invrt_parity_d1), |
---|
791 | .q (tlu_tlb_tag_invrt_parity_d2), |
---|
792 | .en (~(tlu_tlb_access_en_l_d1)), .clk(clk), |
---|
793 | .se (1'b0), .si (), .so () |
---|
794 | ); |
---|
795 | `else |
---|
796 | dff_s #(1) stgw2_ttetgpar ( |
---|
797 | .din (tlu_tlb_tag_invrt_parity_d1), |
---|
798 | .q (tlu_tlb_tag_invrt_parity_d2), |
---|
799 | .clk (tlb_access0_clk), |
---|
800 | .se (1'b0), .si (), .so () |
---|
801 | ); |
---|
802 | `endif |
---|
803 | `endif |
---|
804 | |
---|
805 | `ifdef FPGA_SYN_CLK_DFF |
---|
806 | dffe_s #(1) stgw2_ttedtpar ( |
---|
807 | .din (tlu_tlb_data_invrt_parity), |
---|
808 | .q (tlu_tlb_data_invrt_parity_d1), |
---|
809 | .en (~(tlu_lng_ltncy_en_l)), .clk(clk), |
---|
810 | .se (1'b0), .si (), .so () |
---|
811 | ); |
---|
812 | `else |
---|
813 | `ifdef FPGA_SYN_CLK_DFF |
---|
814 | dffe_s #(1) stgw2_ttedtpar ( |
---|
815 | .din (tlu_tlb_data_invrt_parity), |
---|
816 | .q (tlu_tlb_data_invrt_parity_d1), |
---|
817 | .en (~(tlu_lng_ltncy_en_l)), .clk(clk), |
---|
818 | .se (1'b0), .si (), .so () |
---|
819 | ); |
---|
820 | `else |
---|
821 | dff_s #(1) stgw2_ttedtpar ( |
---|
822 | .din (tlu_tlb_data_invrt_parity), |
---|
823 | .q (tlu_tlb_data_invrt_parity_d1), |
---|
824 | .clk (tlb_access1_clk), |
---|
825 | .se (1'b0), .si (), .so () |
---|
826 | ); |
---|
827 | `endif |
---|
828 | `endif |
---|
829 | |
---|
830 | assign parity_tag = |
---|
831 | tlu_tlb_tag_invrt_parity_d2^(^{idtte_tag_b58t55_w2[58:55], |
---|
832 | idtte_tag_b53t0_w2[53:27],idtte_tag_b53t0_w2[25],idtte_tag_b53t0_w2[23:0]}) ; |
---|
833 | assign parity_data = tlu_tlb_data_invrt_parity_d1^(^idtte_data_w2[41:0]) ; |
---|
834 | //assign idtte_tag_w2[54] = |
---|
835 | //tlu_tlb_tag_invrt_parity_d2^(^{idtte_tag_w2[58:55],idtte_tag_w2[53:27],idtte_tag_w2[25],idtte_tag_w2[23:0]}) ; |
---|
836 | //assign idtte_data_w2[42] = tlu_tlb_data_invrt_parity_d1^(^idtte_data_w2[41:0]) ; |
---|
837 | |
---|
838 | dff_s #(2) stg_partd ( |
---|
839 | .din ({parity_tag,parity_data}), |
---|
840 | .q ({parity_tag_d1,parity_data_d1}), |
---|
841 | .clk (clk), |
---|
842 | .se (1'b0), .si (), .so () |
---|
843 | ); |
---|
844 | |
---|
845 | //========================================================================================= |
---|
846 | // D-SFAR |
---|
847 | //========================================================================================= |
---|
848 | |
---|
849 | // dsfar is written into mra for pre SPARC_HPV_EN changes. It will be written into flops |
---|
850 | // for SPARC_HPV_EN. |
---|
851 | |
---|
852 | wire [47:0] dsfar_din ; |
---|
853 | |
---|
854 | assign dsfar_din[47:0] = dsfar_wdata[47:0] ; |
---|
855 | |
---|
856 | wire dsfar0_clk ; |
---|
857 | `ifdef FPGA_SYN_CLK_EN |
---|
858 | `else |
---|
859 | `ifdef FPGA_SYN_CLK_EN |
---|
860 | `else |
---|
861 | clken_buf clkbf_dsfar0 ( |
---|
862 | .rclk (clk), |
---|
863 | .enb_l (dmmu_sfar_wr_en_l[0]), |
---|
864 | .tmb_l (~se), |
---|
865 | .clk (dsfar0_clk) |
---|
866 | ) ; |
---|
867 | `endif |
---|
868 | `endif |
---|
869 | |
---|
870 | // Thread0 |
---|
871 | `ifdef FPGA_SYN_CLK_DFF |
---|
872 | dffe_s #(48) dsfar0_ff ( |
---|
873 | .din (dsfar_din[47:0]), |
---|
874 | .q (dsfar0[47:0]), |
---|
875 | .en (~(dmmu_sfar_wr_en_l[0])), .clk(clk), |
---|
876 | .se (1'b0), .si (), .so () |
---|
877 | ); |
---|
878 | `else |
---|
879 | `ifdef FPGA_SYN_CLK_DFF |
---|
880 | dffe_s #(48) dsfar0_ff ( |
---|
881 | .din (dsfar_din[47:0]), |
---|
882 | .q (dsfar0[47:0]), |
---|
883 | .en (~(dmmu_sfar_wr_en_l[0])), .clk(clk), |
---|
884 | .se (1'b0), .si (), .so () |
---|
885 | ); |
---|
886 | `else |
---|
887 | dff_s #(48) dsfar0_ff ( |
---|
888 | .din (dsfar_din[47:0]), |
---|
889 | .q (dsfar0[47:0]), |
---|
890 | .clk (dsfar0_clk), |
---|
891 | .se (1'b0), .si (), .so () |
---|
892 | ); |
---|
893 | `endif |
---|
894 | `endif |
---|
895 | |
---|
896 | |
---|
897 | wire dsfar1_clk ; |
---|
898 | `ifdef FPGA_SYN_CLK_EN |
---|
899 | `else |
---|
900 | `ifdef FPGA_SYN_CLK_EN |
---|
901 | `else |
---|
902 | clken_buf clkbf_dsfar1 ( |
---|
903 | .rclk (clk), |
---|
904 | .enb_l (dmmu_sfar_wr_en_l[1]), |
---|
905 | .tmb_l (~se), |
---|
906 | .clk (dsfar1_clk) |
---|
907 | ) ; |
---|
908 | `endif |
---|
909 | `endif |
---|
910 | |
---|
911 | // Thread1 |
---|
912 | `ifdef FPGA_SYN_CLK_DFF |
---|
913 | dffe_s #(48) dsfar1_ff ( |
---|
914 | .din (dsfar_din[47:0]), |
---|
915 | .q (dsfar1[47:0]), |
---|
916 | .en (~(dmmu_sfar_wr_en_l[1])), .clk(clk), |
---|
917 | .se (1'b0), .si (), .so () |
---|
918 | ); |
---|
919 | `else |
---|
920 | `ifdef FPGA_SYN_CLK_DFF |
---|
921 | dffe_s #(48) dsfar1_ff ( |
---|
922 | .din (dsfar_din[47:0]), |
---|
923 | .q (dsfar1[47:0]), |
---|
924 | .en (~(dmmu_sfar_wr_en_l[1])), .clk(clk), |
---|
925 | .se (1'b0), .si (), .so () |
---|
926 | ); |
---|
927 | `else |
---|
928 | dff_s #(48) dsfar1_ff ( |
---|
929 | .din (dsfar_din[47:0]), |
---|
930 | .q (dsfar1[47:0]), |
---|
931 | .clk (dsfar1_clk), |
---|
932 | .se (1'b0), .si (), .so () |
---|
933 | ); |
---|
934 | `endif |
---|
935 | `endif |
---|
936 | |
---|
937 | wire dsfar2_clk ; |
---|
938 | `ifdef FPGA_SYN_CLK_EN |
---|
939 | `else |
---|
940 | `ifdef FPGA_SYN_CLK_EN |
---|
941 | `else |
---|
942 | clken_buf clkbf_dsfar2 ( |
---|
943 | .rclk (clk), |
---|
944 | .enb_l (dmmu_sfar_wr_en_l[2]), |
---|
945 | .tmb_l (~se), |
---|
946 | .clk (dsfar2_clk) |
---|
947 | ) ; |
---|
948 | `endif |
---|
949 | `endif |
---|
950 | |
---|
951 | // Thread2 |
---|
952 | `ifdef FPGA_SYN_CLK_DFF |
---|
953 | dffe_s #(48) dsfar2_ff ( |
---|
954 | .din (dsfar_din[47:0]), |
---|
955 | .q (dsfar2[47:0]), |
---|
956 | .en (~(dmmu_sfar_wr_en_l[2])), .clk(clk), |
---|
957 | .se (1'b0), .si (), .so () |
---|
958 | ); |
---|
959 | `else |
---|
960 | `ifdef FPGA_SYN_CLK_DFF |
---|
961 | dffe_s #(48) dsfar2_ff ( |
---|
962 | .din (dsfar_din[47:0]), |
---|
963 | .q (dsfar2[47:0]), |
---|
964 | .en (~(dmmu_sfar_wr_en_l[2])), .clk(clk), |
---|
965 | .se (1'b0), .si (), .so () |
---|
966 | ); |
---|
967 | `else |
---|
968 | dff_s #(48) dsfar2_ff ( |
---|
969 | .din (dsfar_din[47:0]), |
---|
970 | .q (dsfar2[47:0]), |
---|
971 | .clk (dsfar2_clk), |
---|
972 | .se (1'b0), .si (), .so () |
---|
973 | ); |
---|
974 | `endif |
---|
975 | `endif |
---|
976 | |
---|
977 | |
---|
978 | wire dsfar3_clk ; |
---|
979 | `ifdef FPGA_SYN_CLK_EN |
---|
980 | `else |
---|
981 | `ifdef FPGA_SYN_CLK_EN |
---|
982 | `else |
---|
983 | clken_buf clkbf_dsfar3 ( |
---|
984 | .rclk (clk), |
---|
985 | .enb_l (dmmu_sfar_wr_en_l[3]), |
---|
986 | .tmb_l (~se), |
---|
987 | .clk (dsfar3_clk) |
---|
988 | ) ; |
---|
989 | `endif |
---|
990 | `endif |
---|
991 | |
---|
992 | // Thread3 |
---|
993 | `ifdef FPGA_SYN_CLK_DFF |
---|
994 | dffe_s #(48) dsfar3_ff ( |
---|
995 | .din (dsfar_din[47:0]), |
---|
996 | .q (dsfar3[47:0]), |
---|
997 | .en (~(dmmu_sfar_wr_en_l[3])), .clk(clk), |
---|
998 | .se (1'b0), .si (), .so () |
---|
999 | ); |
---|
1000 | `else |
---|
1001 | `ifdef FPGA_SYN_CLK_DFF |
---|
1002 | dffe_s #(48) dsfar3_ff ( |
---|
1003 | .din (dsfar_din[47:0]), |
---|
1004 | .q (dsfar3[47:0]), |
---|
1005 | .en (~(dmmu_sfar_wr_en_l[3])), .clk(clk), |
---|
1006 | .se (1'b0), .si (), .so () |
---|
1007 | ); |
---|
1008 | `else |
---|
1009 | dff_s #(48) dsfar3_ff ( |
---|
1010 | .din (dsfar_din[47:0]), |
---|
1011 | .q (dsfar3[47:0]), |
---|
1012 | .clk (dsfar3_clk), |
---|
1013 | .se (1'b0), .si (), .so () |
---|
1014 | ); |
---|
1015 | `endif |
---|
1016 | `endif |
---|
1017 | |
---|
1018 | mux4ds #(48) dsfar_mx( |
---|
1019 | .in0(dsfar0[47:0]), |
---|
1020 | .in1(dsfar1[47:0]), |
---|
1021 | .in2(dsfar2[47:0]), |
---|
1022 | .in3(dsfar3[47:0]), |
---|
1023 | .sel0 (tlu_slxa_thrd_sel[0]), |
---|
1024 | .sel1 (tlu_slxa_thrd_sel[1]), |
---|
1025 | .sel2 (tlu_slxa_thrd_sel[2]), |
---|
1026 | .sel3 (tlu_slxa_thrd_sel[3]), |
---|
1027 | .dout(dsfar[47:0]) |
---|
1028 | ); |
---|
1029 | |
---|
1030 | |
---|
1031 | //========================================================================================= |
---|
1032 | // D-SFSR |
---|
1033 | //========================================================================================= |
---|
1034 | |
---|
1035 | |
---|
1036 | dp_mux2es #(24) dsfsr_wdsel( |
---|
1037 | .in0 (tlu_dsfsr_din_g[23:0]), |
---|
1038 | .in1 ({lsu_tlu_st_rs3_data_b47t0_g[23:16], // stxa |
---|
1039 | 2'b00,lsu_tlu_st_rs3_data_b47t0_g[13:0]}), |
---|
1040 | // .in1 (lsu_tlu_st_rs3_data_b47t0_g[23:0]), // Bug 4283 |
---|
1041 | .sel (dmmu_any_sfsr_wr), |
---|
1042 | .dout (dsfsr_din[23:0]) |
---|
1043 | ); |
---|
1044 | |
---|
1045 | wire dsfsr0_clk ; |
---|
1046 | `ifdef FPGA_SYN_CLK_EN |
---|
1047 | `else |
---|
1048 | `ifdef FPGA_SYN_CLK_EN |
---|
1049 | `else |
---|
1050 | clken_buf clkbf_dsfsr0 ( |
---|
1051 | .rclk (clk), |
---|
1052 | .enb_l (dmmu_sfsr_wr_en_l[0]), |
---|
1053 | .tmb_l (~se), |
---|
1054 | .clk (dsfsr0_clk) |
---|
1055 | ) ; |
---|
1056 | `endif |
---|
1057 | `endif |
---|
1058 | |
---|
1059 | // Thread0 |
---|
1060 | `ifdef FPGA_SYN_CLK_DFF |
---|
1061 | dffe_s #(23) dsfsr0_ff ( |
---|
1062 | .din (dsfsr_din[23:1]), |
---|
1063 | .q (dsfsr0[23:1]), |
---|
1064 | .en (~(dmmu_sfsr_wr_en_l[0])), .clk(clk), |
---|
1065 | .se (1'b0), .si (), .so () |
---|
1066 | ); |
---|
1067 | `else |
---|
1068 | `ifdef FPGA_SYN_CLK_DFF |
---|
1069 | dffe_s #(23) dsfsr0_ff ( |
---|
1070 | .din (dsfsr_din[23:1]), |
---|
1071 | .q (dsfsr0[23:1]), |
---|
1072 | .en (~(dmmu_sfsr_wr_en_l[0])), .clk(clk), |
---|
1073 | .se (1'b0), .si (), .so () |
---|
1074 | ); |
---|
1075 | `else |
---|
1076 | dff_s #(23) dsfsr0_ff ( |
---|
1077 | .din (dsfsr_din[23:1]), |
---|
1078 | .q (dsfsr0[23:1]), |
---|
1079 | .clk (dsfsr0_clk), |
---|
1080 | .se (1'b0), .si (), .so () |
---|
1081 | ); |
---|
1082 | `endif |
---|
1083 | `endif |
---|
1084 | |
---|
1085 | `ifdef FPGA_SYN_CLK_DFF |
---|
1086 | dffrle_s #(1) dsfsr0vld_ff ( |
---|
1087 | .din (dsfsr_din[0]), |
---|
1088 | .q (dsfsr0[0]), |
---|
1089 | .rst_l (rst_l), |
---|
1090 | .en (~(dmmu_sfsr_wr_en_l[0])), .clk(clk), |
---|
1091 | .se (1'b0), .si (), .so () |
---|
1092 | ); |
---|
1093 | `else |
---|
1094 | `ifdef FPGA_SYN_CLK_DFF |
---|
1095 | dffrle_s #(1) dsfsr0vld_ff ( |
---|
1096 | .din (dsfsr_din[0]), |
---|
1097 | .q (dsfsr0[0]), |
---|
1098 | .rst_l (rst_l), |
---|
1099 | .en (~(dmmu_sfsr_wr_en_l[0])), .clk(clk), |
---|
1100 | .se (1'b0), .si (), .so () |
---|
1101 | ); |
---|
1102 | `else |
---|
1103 | dffrl_s #(1) dsfsr0vld_ff ( |
---|
1104 | .din (dsfsr_din[0]), |
---|
1105 | .q (dsfsr0[0]), |
---|
1106 | .rst_l (rst_l), |
---|
1107 | .clk (dsfsr0_clk), |
---|
1108 | .se (1'b0), .si (), .so () |
---|
1109 | ); |
---|
1110 | `endif |
---|
1111 | `endif |
---|
1112 | |
---|
1113 | assign tlu_dsfsr_flt_vld[0] = dsfsr0[0] ; |
---|
1114 | |
---|
1115 | wire dsfsr1_clk ; |
---|
1116 | `ifdef FPGA_SYN_CLK_EN |
---|
1117 | `else |
---|
1118 | `ifdef FPGA_SYN_CLK_EN |
---|
1119 | `else |
---|
1120 | clken_buf clkbf_dsfsr1 ( |
---|
1121 | .rclk (clk), |
---|
1122 | .enb_l (dmmu_sfsr_wr_en_l[1]), |
---|
1123 | .tmb_l (~se), |
---|
1124 | .clk (dsfsr1_clk) |
---|
1125 | ) ; |
---|
1126 | `endif |
---|
1127 | `endif |
---|
1128 | |
---|
1129 | // Thread1 |
---|
1130 | `ifdef FPGA_SYN_CLK_DFF |
---|
1131 | dffe_s #(23) dsfsr1_ff ( |
---|
1132 | .din (dsfsr_din[23:1]), |
---|
1133 | .q (dsfsr1[23:1]), |
---|
1134 | .en (~(dmmu_sfsr_wr_en_l[1])), .clk(clk), |
---|
1135 | .se (1'b0), .si (), .so () |
---|
1136 | ); |
---|
1137 | `else |
---|
1138 | `ifdef FPGA_SYN_CLK_DFF |
---|
1139 | dffe_s #(23) dsfsr1_ff ( |
---|
1140 | .din (dsfsr_din[23:1]), |
---|
1141 | .q (dsfsr1[23:1]), |
---|
1142 | .en (~(dmmu_sfsr_wr_en_l[1])), .clk(clk), |
---|
1143 | .se (1'b0), .si (), .so () |
---|
1144 | ); |
---|
1145 | `else |
---|
1146 | dff_s #(23) dsfsr1_ff ( |
---|
1147 | .din (dsfsr_din[23:1]), |
---|
1148 | .q (dsfsr1[23:1]), |
---|
1149 | .clk (dsfsr1_clk), |
---|
1150 | .se (1'b0), .si (), .so () |
---|
1151 | ); |
---|
1152 | `endif |
---|
1153 | `endif |
---|
1154 | |
---|
1155 | `ifdef FPGA_SYN_CLK_DFF |
---|
1156 | dffrle_s #(1) dsfsr1vld_ff ( |
---|
1157 | .din (dsfsr_din[0]), |
---|
1158 | .q (dsfsr1[0]), |
---|
1159 | .rst_l (rst_l), |
---|
1160 | .en (~(dmmu_sfsr_wr_en_l[1])), .clk(clk), |
---|
1161 | .se (1'b0), .si (), .so () |
---|
1162 | ); |
---|
1163 | `else |
---|
1164 | `ifdef FPGA_SYN_CLK_DFF |
---|
1165 | dffrle_s #(1) dsfsr1vld_ff ( |
---|
1166 | .din (dsfsr_din[0]), |
---|
1167 | .q (dsfsr1[0]), |
---|
1168 | .rst_l (rst_l), |
---|
1169 | .en (~(dmmu_sfsr_wr_en_l[1])), .clk(clk), |
---|
1170 | .se (1'b0), .si (), .so () |
---|
1171 | ); |
---|
1172 | `else |
---|
1173 | dffrl_s #(1) dsfsr1vld_ff ( |
---|
1174 | .din (dsfsr_din[0]), |
---|
1175 | .q (dsfsr1[0]), |
---|
1176 | .rst_l (rst_l), |
---|
1177 | .clk (dsfsr1_clk), |
---|
1178 | .se (1'b0), .si (), .so () |
---|
1179 | ); |
---|
1180 | `endif |
---|
1181 | `endif |
---|
1182 | |
---|
1183 | assign tlu_dsfsr_flt_vld[1] = dsfsr1[0] ; |
---|
1184 | |
---|
1185 | wire dsfsr2_clk ; |
---|
1186 | `ifdef FPGA_SYN_CLK_EN |
---|
1187 | `else |
---|
1188 | `ifdef FPGA_SYN_CLK_EN |
---|
1189 | `else |
---|
1190 | clken_buf clkbf_dsfsr2 ( |
---|
1191 | .rclk (clk), |
---|
1192 | .enb_l (dmmu_sfsr_wr_en_l[2]), |
---|
1193 | .tmb_l (~se), |
---|
1194 | .clk (dsfsr2_clk) |
---|
1195 | ) ; |
---|
1196 | `endif |
---|
1197 | `endif |
---|
1198 | |
---|
1199 | // Thread2 |
---|
1200 | `ifdef FPGA_SYN_CLK_DFF |
---|
1201 | dffe_s #(23) dsfsr2_ff ( |
---|
1202 | .din (dsfsr_din[23:1]), |
---|
1203 | .q (dsfsr2[23:1]), |
---|
1204 | .en (~(dmmu_sfsr_wr_en_l[2])), .clk(clk), |
---|
1205 | .se (1'b0), .si (), .so () |
---|
1206 | ); |
---|
1207 | `else |
---|
1208 | `ifdef FPGA_SYN_CLK_DFF |
---|
1209 | dffe_s #(23) dsfsr2_ff ( |
---|
1210 | .din (dsfsr_din[23:1]), |
---|
1211 | .q (dsfsr2[23:1]), |
---|
1212 | .en (~(dmmu_sfsr_wr_en_l[2])), .clk(clk), |
---|
1213 | .se (1'b0), .si (), .so () |
---|
1214 | ); |
---|
1215 | `else |
---|
1216 | dff_s #(23) dsfsr2_ff ( |
---|
1217 | .din (dsfsr_din[23:1]), |
---|
1218 | .q (dsfsr2[23:1]), |
---|
1219 | .clk (dsfsr2_clk), |
---|
1220 | .se (1'b0), .si (), .so () |
---|
1221 | ); |
---|
1222 | `endif |
---|
1223 | `endif |
---|
1224 | |
---|
1225 | `ifdef FPGA_SYN_CLK_DFF |
---|
1226 | dffrle_s #(1) dsfsr2vld_ff ( |
---|
1227 | .din (dsfsr_din[0]), |
---|
1228 | .q (dsfsr2[0]), |
---|
1229 | .rst_l (rst_l), |
---|
1230 | .en (~(dmmu_sfsr_wr_en_l[2])), .clk(clk), |
---|
1231 | .se (1'b0), .si (), .so () |
---|
1232 | ); |
---|
1233 | `else |
---|
1234 | `ifdef FPGA_SYN_CLK_DFF |
---|
1235 | dffrle_s #(1) dsfsr2vld_ff ( |
---|
1236 | .din (dsfsr_din[0]), |
---|
1237 | .q (dsfsr2[0]), |
---|
1238 | .rst_l (rst_l), |
---|
1239 | .en (~(dmmu_sfsr_wr_en_l[2])), .clk(clk), |
---|
1240 | .se (1'b0), .si (), .so () |
---|
1241 | ); |
---|
1242 | `else |
---|
1243 | dffrl_s #(1) dsfsr2vld_ff ( |
---|
1244 | .din (dsfsr_din[0]), |
---|
1245 | .q (dsfsr2[0]), |
---|
1246 | .rst_l (rst_l), |
---|
1247 | .clk (dsfsr2_clk), |
---|
1248 | .se (1'b0), .si (), .so () |
---|
1249 | ); |
---|
1250 | `endif |
---|
1251 | `endif |
---|
1252 | |
---|
1253 | assign tlu_dsfsr_flt_vld[2] = dsfsr2[0] ; |
---|
1254 | |
---|
1255 | wire dsfsr3_clk ; |
---|
1256 | `ifdef FPGA_SYN_CLK_EN |
---|
1257 | `else |
---|
1258 | `ifdef FPGA_SYN_CLK_EN |
---|
1259 | `else |
---|
1260 | clken_buf clkbf_dsfsr3 ( |
---|
1261 | .rclk (clk), |
---|
1262 | .enb_l (dmmu_sfsr_wr_en_l[3]), |
---|
1263 | .tmb_l (~se), |
---|
1264 | .clk (dsfsr3_clk) |
---|
1265 | ) ; |
---|
1266 | `endif |
---|
1267 | `endif |
---|
1268 | |
---|
1269 | // Thread3 |
---|
1270 | `ifdef FPGA_SYN_CLK_DFF |
---|
1271 | dffe_s #(23) dsfsr3_ff ( |
---|
1272 | .din (dsfsr_din[23:1]), |
---|
1273 | .q (dsfsr3[23:1]), |
---|
1274 | .en (~(dmmu_sfsr_wr_en_l[3])), .clk(clk), |
---|
1275 | .se (1'b0), .si (), .so () |
---|
1276 | ); |
---|
1277 | `else |
---|
1278 | `ifdef FPGA_SYN_CLK_DFF |
---|
1279 | dffe_s #(23) dsfsr3_ff ( |
---|
1280 | .din (dsfsr_din[23:1]), |
---|
1281 | .q (dsfsr3[23:1]), |
---|
1282 | .en (~(dmmu_sfsr_wr_en_l[3])), .clk(clk), |
---|
1283 | .se (1'b0), .si (), .so () |
---|
1284 | ); |
---|
1285 | `else |
---|
1286 | dff_s #(23) dsfsr3_ff ( |
---|
1287 | .din (dsfsr_din[23:1]), |
---|
1288 | .q (dsfsr3[23:1]), |
---|
1289 | .clk (dsfsr3_clk), |
---|
1290 | .se (1'b0), .si (), .so () |
---|
1291 | ); |
---|
1292 | `endif |
---|
1293 | `endif |
---|
1294 | |
---|
1295 | `ifdef FPGA_SYN_CLK_DFF |
---|
1296 | dffrle_s #(1) dsfsr3vld_ff ( |
---|
1297 | .din (dsfsr_din[0]), |
---|
1298 | .q (dsfsr3[0]), |
---|
1299 | .rst_l (rst_l), |
---|
1300 | .en (~(dmmu_sfsr_wr_en_l[3])), .clk(clk), |
---|
1301 | .se (1'b0), .si (), .so () |
---|
1302 | ); |
---|
1303 | `else |
---|
1304 | `ifdef FPGA_SYN_CLK_DFF |
---|
1305 | dffrle_s #(1) dsfsr3vld_ff ( |
---|
1306 | .din (dsfsr_din[0]), |
---|
1307 | .q (dsfsr3[0]), |
---|
1308 | .rst_l (rst_l), |
---|
1309 | .en (~(dmmu_sfsr_wr_en_l[3])), .clk(clk), |
---|
1310 | .se (1'b0), .si (), .so () |
---|
1311 | ); |
---|
1312 | `else |
---|
1313 | dffrl_s #(1) dsfsr3vld_ff ( |
---|
1314 | .din (dsfsr_din[0]), |
---|
1315 | .q (dsfsr3[0]), |
---|
1316 | .rst_l (rst_l), |
---|
1317 | .clk (dsfsr3_clk), |
---|
1318 | .se (1'b0), .si (), .so () |
---|
1319 | ); |
---|
1320 | `endif |
---|
1321 | `endif |
---|
1322 | |
---|
1323 | assign tlu_dsfsr_flt_vld[3] = dsfsr3[0] ; |
---|
1324 | |
---|
1325 | dp_mux4ds #(24) dsfsr_msel( |
---|
1326 | .in0 (dsfsr0[23:0]), |
---|
1327 | .in1 (dsfsr1[23:0]), |
---|
1328 | .in2 (dsfsr2[23:0]), |
---|
1329 | .in3 (dsfsr3[23:0]), |
---|
1330 | .sel0_l (~tlu_slxa_thrd_sel[0]), |
---|
1331 | .sel1_l (~tlu_slxa_thrd_sel[1]), |
---|
1332 | .sel2_l (~tlu_slxa_thrd_sel[2]), |
---|
1333 | .sel3_l (~tlu_slxa_thrd_sel[3]), |
---|
1334 | .dout (dsfsr[23:0]) |
---|
1335 | ); |
---|
1336 | |
---|
1337 | //========================================================================================= |
---|
1338 | // I-SFSR |
---|
1339 | //========================================================================================= |
---|
1340 | |
---|
1341 | // Should be able to reduce the width of these regs !!! |
---|
1342 | |
---|
1343 | |
---|
1344 | dp_mux2es #(24) isfsr_wdsel( |
---|
1345 | .in0 (tlu_isfsr_din_g[23:0]), |
---|
1346 | .in1 ({lsu_tlu_st_rs3_data_b47t0_g[23:16], // stxa |
---|
1347 | 2'b00,lsu_tlu_st_rs3_data_b47t0_g[13:0]}), |
---|
1348 | //.in1 (lsu_tlu_st_rs3_data_b47t0_g[23:0]), // Bug 4283 |
---|
1349 | .sel (immu_any_sfsr_wr), |
---|
1350 | .dout (isfsr_din[23:0]) |
---|
1351 | ); |
---|
1352 | |
---|
1353 | wire isfsr0_clk ; |
---|
1354 | `ifdef FPGA_SYN_CLK_EN |
---|
1355 | `else |
---|
1356 | `ifdef FPGA_SYN_CLK_EN |
---|
1357 | `else |
---|
1358 | clken_buf clkbf_isfsr0 ( |
---|
1359 | .rclk (clk), |
---|
1360 | .enb_l (immu_sfsr_wr_en_l[0]), |
---|
1361 | .tmb_l (~se), |
---|
1362 | .clk (isfsr0_clk) |
---|
1363 | ) ; |
---|
1364 | `endif |
---|
1365 | `endif |
---|
1366 | |
---|
1367 | // Thread0 |
---|
1368 | `ifdef FPGA_SYN_CLK_DFF |
---|
1369 | dffe_s #(23) isfsr0_ff ( |
---|
1370 | .din (isfsr_din[23:1]), |
---|
1371 | .q (isfsr0[23:1]), |
---|
1372 | .en (~(immu_sfsr_wr_en_l[0])), .clk(clk), |
---|
1373 | .se (1'b0), .si (), .so () |
---|
1374 | ); |
---|
1375 | `else |
---|
1376 | `ifdef FPGA_SYN_CLK_DFF |
---|
1377 | dffe_s #(23) isfsr0_ff ( |
---|
1378 | .din (isfsr_din[23:1]), |
---|
1379 | .q (isfsr0[23:1]), |
---|
1380 | .en (~(immu_sfsr_wr_en_l[0])), .clk(clk), |
---|
1381 | .se (1'b0), .si (), .so () |
---|
1382 | ); |
---|
1383 | `else |
---|
1384 | dff_s #(23) isfsr0_ff ( |
---|
1385 | .din (isfsr_din[23:1]), |
---|
1386 | .q (isfsr0[23:1]), |
---|
1387 | .clk (isfsr0_clk), |
---|
1388 | .se (1'b0), .si (), .so () |
---|
1389 | ); |
---|
1390 | `endif |
---|
1391 | `endif |
---|
1392 | |
---|
1393 | // Chandra - This has changed. |
---|
1394 | `ifdef FPGA_SYN_CLK_DFF |
---|
1395 | dffrle_s #(1) isfsrvld0_ff ( |
---|
1396 | .din (isfsr_din[0]), |
---|
1397 | .q (isfsr0[0]), |
---|
1398 | .rst_l (rst_l), .en (~(immu_sfsr_wr_en_l[0])), .clk(clk), |
---|
1399 | .se (1'b0), .si (), .so () |
---|
1400 | ); |
---|
1401 | `else |
---|
1402 | `ifdef FPGA_SYN_CLK_DFF |
---|
1403 | dffrle_s #(1) isfsrvld0_ff ( |
---|
1404 | .din (isfsr_din[0]), |
---|
1405 | .q (isfsr0[0]), |
---|
1406 | .rst_l (rst_l), .en (~(immu_sfsr_wr_en_l[0])), .clk(clk), |
---|
1407 | .se (1'b0), .si (), .so () |
---|
1408 | ); |
---|
1409 | `else |
---|
1410 | dffrl_s #(1) isfsrvld0_ff ( |
---|
1411 | .din (isfsr_din[0]), |
---|
1412 | .q (isfsr0[0]), |
---|
1413 | .rst_l (rst_l), .clk (isfsr0_clk), |
---|
1414 | .se (1'b0), .si (), .so () |
---|
1415 | ); |
---|
1416 | `endif |
---|
1417 | `endif |
---|
1418 | |
---|
1419 | assign tlu_isfsr_flt_vld[0] = isfsr0[0] ; |
---|
1420 | |
---|
1421 | wire isfsr1_clk ; |
---|
1422 | `ifdef FPGA_SYN_CLK_EN |
---|
1423 | `else |
---|
1424 | `ifdef FPGA_SYN_CLK_EN |
---|
1425 | `else |
---|
1426 | clken_buf clkbf_isfsr1 ( |
---|
1427 | .rclk (clk), |
---|
1428 | .enb_l (immu_sfsr_wr_en_l[1]), |
---|
1429 | .tmb_l (~se), |
---|
1430 | .clk (isfsr1_clk) |
---|
1431 | ) ; |
---|
1432 | `endif |
---|
1433 | `endif |
---|
1434 | |
---|
1435 | // Thread1 |
---|
1436 | `ifdef FPGA_SYN_CLK_DFF |
---|
1437 | dffe_s #(23) isfsr1_ff ( |
---|
1438 | .din (isfsr_din[23:1]), |
---|
1439 | .q (isfsr1[23:1]), |
---|
1440 | .en (~(immu_sfsr_wr_en_l[1])), .clk(clk), |
---|
1441 | .se (1'b0), .si (), .so () |
---|
1442 | ); |
---|
1443 | `else |
---|
1444 | `ifdef FPGA_SYN_CLK_DFF |
---|
1445 | dffe_s #(23) isfsr1_ff ( |
---|
1446 | .din (isfsr_din[23:1]), |
---|
1447 | .q (isfsr1[23:1]), |
---|
1448 | .en (~(immu_sfsr_wr_en_l[1])), .clk(clk), |
---|
1449 | .se (1'b0), .si (), .so () |
---|
1450 | ); |
---|
1451 | `else |
---|
1452 | dff_s #(23) isfsr1_ff ( |
---|
1453 | .din (isfsr_din[23:1]), |
---|
1454 | .q (isfsr1[23:1]), |
---|
1455 | .clk (isfsr1_clk), |
---|
1456 | .se (1'b0), .si (), .so () |
---|
1457 | ); |
---|
1458 | `endif |
---|
1459 | `endif |
---|
1460 | |
---|
1461 | // Chandra - This has changed. |
---|
1462 | `ifdef FPGA_SYN_CLK_DFF |
---|
1463 | dffrle_s #(1) isfsrvld1_ff ( |
---|
1464 | .din (isfsr_din[0]), |
---|
1465 | .q (isfsr1[0]), |
---|
1466 | .rst_l (rst_l), .en (~(immu_sfsr_wr_en_l[1])), .clk(clk), |
---|
1467 | .se (1'b0), .si (), .so () |
---|
1468 | ); |
---|
1469 | `else |
---|
1470 | `ifdef FPGA_SYN_CLK_DFF |
---|
1471 | dffrle_s #(1) isfsrvld1_ff ( |
---|
1472 | .din (isfsr_din[0]), |
---|
1473 | .q (isfsr1[0]), |
---|
1474 | .rst_l (rst_l), .en (~(immu_sfsr_wr_en_l[1])), .clk(clk), |
---|
1475 | .se (1'b0), .si (), .so () |
---|
1476 | ); |
---|
1477 | `else |
---|
1478 | dffrl_s #(1) isfsrvld1_ff ( |
---|
1479 | .din (isfsr_din[0]), |
---|
1480 | .q (isfsr1[0]), |
---|
1481 | .rst_l (rst_l), .clk (isfsr1_clk), |
---|
1482 | .se (1'b0), .si (), .so () |
---|
1483 | ); |
---|
1484 | `endif |
---|
1485 | `endif |
---|
1486 | |
---|
1487 | assign tlu_isfsr_flt_vld[1] = isfsr1[0] ; |
---|
1488 | |
---|
1489 | wire isfsr2_clk ; |
---|
1490 | `ifdef FPGA_SYN_CLK_EN |
---|
1491 | `else |
---|
1492 | `ifdef FPGA_SYN_CLK_EN |
---|
1493 | `else |
---|
1494 | clken_buf clkbf_isfsr2 ( |
---|
1495 | .rclk (clk), |
---|
1496 | .enb_l (immu_sfsr_wr_en_l[2]), |
---|
1497 | .tmb_l (~se), |
---|
1498 | .clk (isfsr2_clk) |
---|
1499 | ) ; |
---|
1500 | `endif |
---|
1501 | `endif |
---|
1502 | |
---|
1503 | // Thread2 |
---|
1504 | `ifdef FPGA_SYN_CLK_DFF |
---|
1505 | dffe_s #(23) isfsr2_ff ( |
---|
1506 | .din (isfsr_din[23:1]), |
---|
1507 | .q (isfsr2[23:1]), |
---|
1508 | .en (~(immu_sfsr_wr_en_l[2])), .clk(clk), |
---|
1509 | .se (1'b0), .si (), .so () |
---|
1510 | ); |
---|
1511 | `else |
---|
1512 | `ifdef FPGA_SYN_CLK_DFF |
---|
1513 | dffe_s #(23) isfsr2_ff ( |
---|
1514 | .din (isfsr_din[23:1]), |
---|
1515 | .q (isfsr2[23:1]), |
---|
1516 | .en (~(immu_sfsr_wr_en_l[2])), .clk(clk), |
---|
1517 | .se (1'b0), .si (), .so () |
---|
1518 | ); |
---|
1519 | `else |
---|
1520 | dff_s #(23) isfsr2_ff ( |
---|
1521 | .din (isfsr_din[23:1]), |
---|
1522 | .q (isfsr2[23:1]), |
---|
1523 | .clk (isfsr2_clk), |
---|
1524 | .se (1'b0), .si (), .so () |
---|
1525 | ); |
---|
1526 | `endif |
---|
1527 | `endif |
---|
1528 | |
---|
1529 | // Chandra - This has changed. |
---|
1530 | `ifdef FPGA_SYN_CLK_DFF |
---|
1531 | dffrle_s #(1) isfsrvld2_ff ( |
---|
1532 | .din (isfsr_din[0]), |
---|
1533 | .q (isfsr2[0]), |
---|
1534 | .rst_l (rst_l), .en (~(immu_sfsr_wr_en_l[2])), .clk(clk), |
---|
1535 | .se (1'b0), .si (), .so () |
---|
1536 | ); |
---|
1537 | `else |
---|
1538 | `ifdef FPGA_SYN_CLK_DFF |
---|
1539 | dffrle_s #(1) isfsrvld2_ff ( |
---|
1540 | .din (isfsr_din[0]), |
---|
1541 | .q (isfsr2[0]), |
---|
1542 | .rst_l (rst_l), .en (~(immu_sfsr_wr_en_l[2])), .clk(clk), |
---|
1543 | .se (1'b0), .si (), .so () |
---|
1544 | ); |
---|
1545 | `else |
---|
1546 | dffrl_s #(1) isfsrvld2_ff ( |
---|
1547 | .din (isfsr_din[0]), |
---|
1548 | .q (isfsr2[0]), |
---|
1549 | .rst_l (rst_l), .clk (isfsr2_clk), |
---|
1550 | .se (1'b0), .si (), .so () |
---|
1551 | ); |
---|
1552 | `endif |
---|
1553 | `endif |
---|
1554 | |
---|
1555 | assign tlu_isfsr_flt_vld[2] = isfsr2[0] ; |
---|
1556 | |
---|
1557 | wire isfsr3_clk ; |
---|
1558 | `ifdef FPGA_SYN_CLK_EN |
---|
1559 | `else |
---|
1560 | `ifdef FPGA_SYN_CLK_EN |
---|
1561 | `else |
---|
1562 | clken_buf clkbf_isfsr3 ( |
---|
1563 | .rclk (clk), |
---|
1564 | .enb_l (immu_sfsr_wr_en_l[3]), |
---|
1565 | .tmb_l (~se), |
---|
1566 | .clk (isfsr3_clk) |
---|
1567 | ) ; |
---|
1568 | `endif |
---|
1569 | `endif |
---|
1570 | |
---|
1571 | // Thread3 |
---|
1572 | `ifdef FPGA_SYN_CLK_DFF |
---|
1573 | dffe_s #(23) isfsr3_ff ( |
---|
1574 | .din (isfsr_din[23:1]), |
---|
1575 | .q (isfsr3[23:1]), |
---|
1576 | .en (~(immu_sfsr_wr_en_l[3])), .clk(clk), |
---|
1577 | .se (1'b0), .si (), .so () |
---|
1578 | ); |
---|
1579 | `else |
---|
1580 | `ifdef FPGA_SYN_CLK_DFF |
---|
1581 | dffe_s #(23) isfsr3_ff ( |
---|
1582 | .din (isfsr_din[23:1]), |
---|
1583 | .q (isfsr3[23:1]), |
---|
1584 | .en (~(immu_sfsr_wr_en_l[3])), .clk(clk), |
---|
1585 | .se (1'b0), .si (), .so () |
---|
1586 | ); |
---|
1587 | `else |
---|
1588 | dff_s #(23) isfsr3_ff ( |
---|
1589 | .din (isfsr_din[23:1]), |
---|
1590 | .q (isfsr3[23:1]), |
---|
1591 | .clk (isfsr3_clk), |
---|
1592 | .se (1'b0), .si (), .so () |
---|
1593 | ); |
---|
1594 | `endif |
---|
1595 | `endif |
---|
1596 | |
---|
1597 | // Chandra - This has changed. |
---|
1598 | `ifdef FPGA_SYN_CLK_DFF |
---|
1599 | dffrle_s #(1) isfsrvld3_ff ( |
---|
1600 | .din (isfsr_din[0]), |
---|
1601 | .q (isfsr3[0]), |
---|
1602 | .rst_l (rst_l), .en (~(immu_sfsr_wr_en_l[3])), .clk(clk), |
---|
1603 | .se (1'b0), .si (), .so () |
---|
1604 | ); |
---|
1605 | `else |
---|
1606 | `ifdef FPGA_SYN_CLK_DFF |
---|
1607 | dffrle_s #(1) isfsrvld3_ff ( |
---|
1608 | .din (isfsr_din[0]), |
---|
1609 | .q (isfsr3[0]), |
---|
1610 | .rst_l (rst_l), .en (~(immu_sfsr_wr_en_l[3])), .clk(clk), |
---|
1611 | .se (1'b0), .si (), .so () |
---|
1612 | ); |
---|
1613 | `else |
---|
1614 | dffrl_s #(1) isfsrvld3_ff ( |
---|
1615 | .din (isfsr_din[0]), |
---|
1616 | .q (isfsr3[0]), |
---|
1617 | .rst_l (rst_l), .clk (isfsr3_clk), |
---|
1618 | .se (1'b0), .si (), .so () |
---|
1619 | ); |
---|
1620 | `endif |
---|
1621 | `endif |
---|
1622 | |
---|
1623 | assign tlu_isfsr_flt_vld[3] = isfsr3[0] ; |
---|
1624 | |
---|
1625 | dp_mux4ds #(24) isfsr_msel( |
---|
1626 | .in0 (isfsr0[23:0]), |
---|
1627 | .in1 (isfsr1[23:0]), |
---|
1628 | .in2 (isfsr2[23:0]), |
---|
1629 | .in3 (isfsr3[23:0]), |
---|
1630 | .sel0_l (~tlu_slxa_thrd_sel[0]), |
---|
1631 | .sel1_l (~tlu_slxa_thrd_sel[1]), |
---|
1632 | .sel2_l (~tlu_slxa_thrd_sel[2]), |
---|
1633 | .sel3_l (~tlu_slxa_thrd_sel[3]), |
---|
1634 | .dout (isfsr[23:0]) |
---|
1635 | ); |
---|
1636 | |
---|
1637 | //========================================================================================= |
---|
1638 | // D-SFAR |
---|
1639 | //========================================================================================= |
---|
1640 | /* |
---|
1641 | `ifdef SPARC_HPV_EN |
---|
1642 | `else |
---|
1643 | assign dsfar[47:0] = mra_rdata[`MRA_DSFAR_HI:`MRA_DSFAR_LO]; |
---|
1644 | `endif |
---|
1645 | */ |
---|
1646 | |
---|
1647 | //========================================================================================= |
---|
1648 | // Muxing for ldxa read |
---|
1649 | //========================================================================================= |
---|
1650 | |
---|
1651 | // Note - collapse dtsb/itsb into one leg of the mux. Similar for |
---|
1652 | // dtag_access/itag_access. |
---|
1653 | // read of zcps1_itsb,zcps1_dtsb collapsed into read of dtsb. |
---|
1654 | // read of nzcps0_dtsb,nzcps0_itsb collapsed into read of dtag_access. |
---|
1655 | // read of nzcps1_dtsb,nzcps1_itsb collapsed into read of dsfar. |
---|
1656 | |
---|
1657 | // use rs3 to return data. |
---|
1658 | |
---|
1659 | //***************************************************************** |
---|
1660 | // SPARC_HPV_EN |
---|
1661 | //***************************************************************** |
---|
1662 | |
---|
1663 | // Warning for Grape Mapper : Be careful about loading on replicated |
---|
1664 | // msb. |
---|
1665 | |
---|
1666 | // First Level, Mux 1 |
---|
1667 | // This is done in Estage to save on flops. |
---|
1668 | // !!! The sels except b0 are also Estage !!! b0 is delayed by a cycle. |
---|
1669 | mux3ds #(48) ldxa_l1mx1_e( |
---|
1670 | .in0(tsb_ps0[47:0]), // becomes ps0 tsb with SPARC_HPV_EN |
---|
1671 | .in1(tsb_ps1[47:0]), // becomes ps1 tsb with SPARC_HPV_EN |
---|
1672 | .in2(tag_access_w2[47:0]), |
---|
1673 | .sel0(tlu_ldxa_l1mx1_sel[1]), |
---|
1674 | .sel1(tlu_ldxa_l1mx1_sel[2]), |
---|
1675 | .sel2(tlu_ldxa_l1mx1_sel[3]), |
---|
1676 | .dout(ldxa_l1mx1_dout_e[47:0]) |
---|
1677 | ); |
---|
1678 | |
---|
1679 | // New |
---|
1680 | dff_s #(48) l1mx1_ff ( |
---|
1681 | .din (ldxa_l1mx1_dout_e[47:0]), |
---|
1682 | .q (ldxa_l1mx1_dout_m[47:0]), |
---|
1683 | .clk (clk), |
---|
1684 | .se (1'b0), .si (), .so () |
---|
1685 | ); |
---|
1686 | |
---|
1687 | wire [63:0] ldxa_l1mx1_dout_final ; |
---|
1688 | |
---|
1689 | // New |
---|
1690 | assign ldxa_l1mx1_dout_final[63:0] = |
---|
1691 | // Note : this bit of the mx sel is stage delayed relative to the others. |
---|
1692 | tlu_ldxa_l1mx1_sel[0] ? |
---|
1693 | tag_target[63:0] : // tag_target. |
---|
1694 | {{16{ldxa_l1mx1_dout_m[47]}},ldxa_l1mx1_dout_m[47:0]} ; // tsb_ps0/ps1,tag_access |
---|
1695 | |
---|
1696 | /*mux4ds #(64) ldxa_l1mx1( |
---|
1697 | .in0(tag_target[63:0]), |
---|
1698 | .in1({{16{tsb_ps0[47]}},tsb_ps0[47:0]}), // becomes ps0 tsb with SPARC_HPV_EN |
---|
1699 | .in2({{16{tsb_ps1[47]}},tsb_ps1[47:0]}), // becomes ps1 tsb with SPARC_HPV_EN |
---|
1700 | .in3({{16{tag_access_w2[47]}},tag_access_w2[47:0]}), |
---|
1701 | .sel0(tlu_ldxa_l1mx1_sel[0]), |
---|
1702 | .sel1(tlu_ldxa_l1mx1_sel[1]), |
---|
1703 | .sel2(tlu_ldxa_l1mx1_sel[2]), |
---|
1704 | .sel3(tlu_ldxa_l1mx1_sel[3]), |
---|
1705 | .dout(ldxa_l1mx1_dout[63:0]) |
---|
1706 | );*/ |
---|
1707 | |
---|
1708 | wire [47:0] ldxa_l1mx2_dout ; |
---|
1709 | // First Level, Mux 2 - This is done in M stage. |
---|
1710 | mux4ds #(48) ldxa_l1mx2( |
---|
1711 | .in0({24'd0,dsfsr[23:0]}), |
---|
1712 | .in1(dsfar[47:0]), |
---|
1713 | .in2({24'd0,isfsr[23:0]}), |
---|
1714 | .in3({37'd0,ptr_ctxt_cfg[5:3],5'd0,ptr_ctxt_cfg[2:0]}), |
---|
1715 | .sel0(tlu_ldxa_l1mx2_sel[0]), |
---|
1716 | .sel1(tlu_ldxa_l1mx2_sel[1]), |
---|
1717 | .sel2(tlu_ldxa_l1mx2_sel[2]), |
---|
1718 | .sel3(tlu_ldxa_l1mx2_sel[3]), |
---|
1719 | .dout(ldxa_l1mx2_dout[47:0]) |
---|
1720 | ); |
---|
1721 | |
---|
1722 | wire [63:0] tlu_ldxa_data_m ; |
---|
1723 | mux3ds #(64) ldxa_fmx ( |
---|
1724 | .in0 (ldxa_l1mx1_dout_final[63:0]), |
---|
1725 | //.in0 (ldxa_l1mx1_dout[63:0]), |
---|
1726 | .in1 ({{16{ldxa_l1mx2_dout[47]}},ldxa_l1mx2_dout[47:0]}), |
---|
1727 | .in2 ({{16{tlu_idtsb_8k_ptr[47]}},tlu_idtsb_8k_ptr[47:0]}), |
---|
1728 | .sel0 (tlu_ldxa_l2mx1_sel[0]), |
---|
1729 | .sel1 (tlu_ldxa_l2mx1_sel[1]), |
---|
1730 | .sel2 (tlu_ldxa_l2mx1_sel[2]), |
---|
1731 | .dout (tlu_ldxa_data_m[63:0]) |
---|
1732 | //.dout (tlu_ldxa_data_e[63:0]) |
---|
1733 | ); |
---|
1734 | |
---|
1735 | dff_s #(64) stgg_eldxa ( |
---|
1736 | .din (tlu_ldxa_data_m[63:0]), |
---|
1737 | .q (lsu_exu_ldxa_data_g[63:0]), |
---|
1738 | .clk (clk), |
---|
1739 | .se (1'b0), .si (), .so () |
---|
1740 | ); |
---|
1741 | |
---|
1742 | endmodule |
---|
1743 | |
---|
1744 | |
---|