source: XOpenSparcT1/trunk/T1-CPU/lsu/lsu_dctldp.v @ 6

Revision 6, 52.7 KB checked in by pntsvt00, 13 years ago (diff)

versione iniziale opensparc

Line 
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T1 Processor File: lsu_dctldp.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//FPGA_SYN enables all FPGA related modifications
24`ifdef FPGA_SYN 
25`define FPGA_SYN_CLK_EN
26`define FPGA_SYN_CLK_DFF
27`endif
28
29module lsu_dctldp (/*AUTOARG*/
30   // Outputs
31   so, asi_d, lsu_excpctl_asi_state_m, lsu_dctl_asi_state_m, 
32   lsu_spu_asi_state_e, lsu_tlu_rsr_data_e, lsu_asi_state, 
33   lsu_asi_reg0, lsu_asi_reg1, lsu_asi_reg2, lsu_asi_reg3, 
34   lsu_t0_pctxt_state, lsu_t1_pctxt_state, lsu_t2_pctxt_state, 
35   lsu_t3_pctxt_state, lsu_tlu_dside_ctxt_m, lsu_tlu_pctxt_m, 
36   tlb_ctxt, lsu_pid_state0, lsu_pid_state1, lsu_pid_state2, 
37   lsu_pid_state3, lsu_dtlb_cam_pid_e, bist_ctl_reg_in, 
38   lsu_ifu_direct_map_l1, dc_direct_map, lsu_iobrdge_rd_data, 
39   lsu_ictag_mrgn, lsu_dctag_mrgn, lsu_mamem_mrgn, lsu_dtlb_mrgn, 
40   lsu_itlb_mrgn, lsu_local_ldxa_data_g, lsu_ldst_va_m, 
41   lsu_ldst_va_m_buf, lsu_tlu_ldst_va_m, lsu_tlu_tlb_asi_state_m, 
42   lsu_ifu_asi_state, lsu_tlu_tlb_ldst_va_m, lsu_tlu_tlb_dmp_va_m, 
43   lsu_ifu_asi_addr, lsu_diagnstc_wr_addr_e, 
44   lsu_diagnstc_dc_prty_invrt_e, lsu_ifu_err_addr, 
45   va_wtchpt_msk_match_m, lsu_ldst_va_g, lsu_dp_ctl_reg0, 
46   lsu_dp_ctl_reg1, lsu_dp_ctl_reg2, lsu_dp_ctl_reg3, 
47   lsu_diagnstc_wr_way_e, lsu_diag_va_prty_invrt, 
48   // Inputs
49   rclk, rst_l, si, se, async_tlb_index, lsu_dtlb_dmp_vld_e, 
50   tlu_lsu_asi_m, exu_tlu_wsr_data_m, tlu_lsu_asi_update_g, 
51   asi_state_wr_thrd, ifu_lsu_imm_asi_d, thread0_d, thread1_d, 
52   thread2_d, thread3_d, ifu_lsu_imm_asi_vld_d, lsu_err_addr_sel, 
53   pctxt_state_wr_thrd, sctxt_state_wr_thrd, st_rs3_data_g, 
54   thread0_ctxt, thread1_ctxt, thread2_ctxt, thread3_ctxt, 
55   thread_pctxt, thread_sctxt, thread_actxt, thread_default, 
56   tlu_dtlb_tte_tag_w2, tlu_dtlb_tte_tag_b58t56, thread0_g, 
57   thread1_g, thread2_g, thread3_g, pid_state_wr_en, thread0_e, 
58   thread1_e, thread2_e, thread3_e, thread0_m, thread1_m, thread2_m, 
59   thread3_m, lsu_iobrdge_wr_data, dfture_tap_wr_mx_sel, lctl_rst, 
60   lsu_ctl_state_wr_en, lsuctl_ctlbits_wr_en, dfture_tap_rd_en, 
61   bist_tap_wr_en, bist_ctl_reg_out, mrgn_tap_wr_en, ldiagctl_wr_en, 
62   misc_ctl_sel_din, lsu_asi_sel_fmx1, lsu_asi_sel_fmx2, 
63   exu_lsu_ldst_va_e, tlb_access_en0_g, tlb_access_en1_g, 
64   tlb_access_en2_g, tlb_access_en3_g, tlb_access_sel_thrd0, 
65   tlb_access_sel_thrd1, tlb_access_sel_thrd2, 
66   tlb_access_sel_default, mrgnctl_wr_en, lsu_dcfill_addr_e, 
67   lsu_error_pa_m, stb_ldst_byte_msk, lsu_diagnstc_va_sel, 
68   rst_tri_en
69   );
70
71   input rclk;
72   input rst_l;
73   input si;
74   input se;
75//   input tmb_l ;
76
77   output so;
78
79//   input      async_error_sel ;
80   input [5:0]  async_tlb_index ;
81
82   input        lsu_dtlb_dmp_vld_e ;
83   
84   input [7:0] tlu_lsu_asi_m;
85   input [7:0] exu_tlu_wsr_data_m;
86   input       tlu_lsu_asi_update_g;
87   input [3:0] asi_state_wr_thrd;
88   input [7:0] ifu_lsu_imm_asi_d;
89   input       thread0_d;
90   input       thread1_d;
91   input       thread2_d;
92   input       thread3_d;
93   input       ifu_lsu_imm_asi_vld_d;
94
95   input [2:0]  lsu_err_addr_sel ;
96   
97   output [7:0] asi_d;
98   output [7:0] lsu_excpctl_asi_state_m;
99   output [7:0] lsu_dctl_asi_state_m;
100     
101   output [7:0] lsu_spu_asi_state_e;
102   output [7:0] lsu_tlu_rsr_data_e;
103
104   output  [7:0]   lsu_asi_state ;   // ASI State + imm asi
105   output  [7:0]   lsu_asi_reg0 ;    // ASI State Register.
106   output  [7:0]   lsu_asi_reg1 ;    // ASI State Register.
107   output  [7:0]   lsu_asi_reg2 ;    // ASI State Register.
108   output  [7:0]   lsu_asi_reg3 ;    // ASI State Register.
109
110input  [3:0] pctxt_state_wr_thrd ;
111input  [3:0] sctxt_state_wr_thrd ;   
112//input [63:0] st_rs3_data_g;
113//input [59:56] st_rs3_data_g_59_56;
114//input [51:48] st_rs3_data_g_51_48;
115//input [43:40] st_rs3_data_g_43_40;
116input [32:0]  st_rs3_data_g;
117
118   input     thread0_ctxt;  //should be one hot, force default
119   input     thread1_ctxt;
120   input     thread2_ctxt;
121   input     thread3_ctxt;
122
123   input     thread_pctxt;
124   input     thread_sctxt;
125//   input     thread_nctxt;   
126   input     thread_actxt;
127   input     thread_default;
128   
129input [12:0]  tlu_dtlb_tte_tag_w2 ;
130input [2:0]     tlu_dtlb_tte_tag_b58t56 ;
131
132   input       thread0_g;
133   input       thread1_g;
134   input       thread2_g;
135   input       thread3_g;
136 
137output  [12:0]    lsu_t0_pctxt_state ;  // primary ctxt - thread0
138output  [12:0]    lsu_t1_pctxt_state ;  // primary ctxt - thread1
139output  [12:0]    lsu_t2_pctxt_state ;  // primary ctxt - thread2
140output  [12:0]    lsu_t3_pctxt_state ;  // primary ctxt - thread3
141
142output  [12:0]    lsu_tlu_dside_ctxt_m ;
143output  [12:0]    lsu_tlu_pctxt_m ;
144output  [12:0]    tlb_ctxt ;    // ctxt for xslate or demap.
145
146   input [3:0]    pid_state_wr_en;
147   input          thread0_e;
148   input          thread1_e;
149   input          thread2_e;
150   input          thread3_e;
151
152   input          thread0_m;
153   input          thread1_m;
154   input          thread2_m;
155   input          thread3_m;
156   
157output  [2:0]   lsu_pid_state0 ;        // pid thread0 ; global use
158output  [2:0]   lsu_pid_state1 ;        // pid thread1 ; global use
159output  [2:0]   lsu_pid_state2 ;        // pid thread2 ; global use
160output  [2:0]   lsu_pid_state3 ;        // pid thread3 ; global use
161output  [2:0] lsu_dtlb_cam_pid_e ;
162
163input [27:0]  lsu_iobrdge_wr_data ;
164   input      dfture_tap_wr_mx_sel;
165   input [3:0] lctl_rst;
166   input [3:0] lsu_ctl_state_wr_en;
167   input [3:0] lsuctl_ctlbits_wr_en;
168   input [3:0] dfture_tap_rd_en;
169
170   input      bist_tap_wr_en;
171//  input      bistctl_wr_en;
172   output [6:0] bist_ctl_reg_in;
173   
174   input [10:0] bist_ctl_reg_out;
175   
176   input      mrgn_tap_wr_en;
177
178   output               lsu_ifu_direct_map_l1 ; // l1 icache set to direct map.
179   output   dc_direct_map;
180   input    ldiagctl_wr_en;
181
182   output [43:0] lsu_iobrdge_rd_data ;
183
184   input [3:0]  misc_ctl_sel_din ;  //should force default
185
186output  [3:0]   lsu_ictag_mrgn ;        // icache tag self-timed margin control
187output  [3:0]   lsu_dctag_mrgn ;        // dcache tag self-timed margin control
188
189output  [3:0]   lsu_mamem_mrgn ;        // mamem self-timed margin control
190output  [7:0]   lsu_dtlb_mrgn ;   // dtlb self-timed margin control
191output  [7:0]   lsu_itlb_mrgn ;   // itlb self-timed margin control
192
193output  [47:0]    lsu_local_ldxa_data_g ;  // local ldxa data
194
195//   input          misc_asi_rd_en;
196//input [47:3]  lsu_va_wtchpt_addr ;
197   input [2:0] lsu_asi_sel_fmx1;
198   input [2:0] lsu_asi_sel_fmx2;
199
200input  [47:0]  exu_lsu_ldst_va_e;      // sub VA for mem-ref (src-execute)
201
202output [12:0]  lsu_ldst_va_m; 
203output [47:0]  lsu_ldst_va_m_buf; 
204output [9:0]  lsu_tlu_ldst_va_m; 
205
206   input       tlb_access_en0_g;
207   input       tlb_access_en1_g;
208   input       tlb_access_en2_g;
209   input       tlb_access_en3_g;
210
211output  [7:0]   lsu_tlu_tlb_asi_state_m ;
212output  [7:0]   lsu_ifu_asi_state; 
213
214   input tlb_access_sel_thrd0;
215   input tlb_access_sel_thrd1;
216   input tlb_access_sel_thrd2;
217   input tlb_access_sel_default;
218
219output  [10:0]   lsu_tlu_tlb_ldst_va_m ;
220output  [47:13]         lsu_tlu_tlb_dmp_va_m ;
221output  [17:0]    lsu_ifu_asi_addr ;
222
223   output [10:0]  lsu_diagnstc_wr_addr_e ;
224   output [7:0]   lsu_diagnstc_dc_prty_invrt_e ;
225
226///  output [13:11] lsu_lngltncy_ldst_va;
227   
228   input mrgnctl_wr_en;
229input [10:4]  lsu_dcfill_addr_e ;         // data cache fill addr
230input [28:0]  lsu_error_pa_m ;            // error phy addr
231//   input      sync_error_sel;
232   output  [47:4]    lsu_ifu_err_addr ;    // error address
233
234input [7:0]   stb_ldst_byte_msk ;
235   output va_wtchpt_msk_match_m;
236
237   output [7:0]  lsu_ldst_va_g;
238
239   output [5:0] lsu_dp_ctl_reg0;
240   output [5:0] lsu_dp_ctl_reg1;
241   output [5:0] lsu_dp_ctl_reg2;
242   output [5:0] lsu_dp_ctl_reg3;
243
244   input   [3:0] lsu_diagnstc_va_sel ;
245   output  [1:0] lsu_diagnstc_wr_way_e ;
246   output        lsu_diag_va_prty_invrt ;
247   input   rst_tri_en;
248   
249wire  [12:0]  pctxt_state;
250wire  [12:0]  sctxt_state;
251wire  [2:0]   pid_state;
252
253wire   [13:0] lsu_ctl_reg0;
254wire   [13:0] lsu_ctl_reg1;
255wire   [13:0] lsu_ctl_reg2;
256wire   [13:0] lsu_ctl_reg3;
257
258wire   [13:0] lsu_ctl_reg;
259   
260   wire       clk;
261   assign     clk = rclk;
262
263/********************* ASI state ***********************/   
264   wire [7:0]  tlu_lsu_asi_g;
265   
266dff_s #(8) asi_stgw (
267        .din    (tlu_lsu_asi_m[7:0]),
268        .q      (tlu_lsu_asi_g[7:0]),
269        .clk    (clk),
270        .se     (se),       .si (),          .so ()
271        );
272   
273   wire [7:0]  exu_tlu_wsr_data_w;
274   
275dff_s #(8) ff_wsr_data_w (
276        .din    (exu_tlu_wsr_data_m[7:0]),
277        .q      (exu_tlu_wsr_data_w[7:0]),
278        .clk    (clk),
279        .se     (se),       .si (),          .so ()
280        );
281
282   wire [7:0]  asi_wr_din;
283   
284assign  asi_wr_din[7:0] = tlu_lsu_asi_update_g ? tlu_lsu_asi_g[7:0] : exu_tlu_wsr_data_w[7:0] ;   
285
286// ASI - Thread0
287   wire [7:0] asi_state0;
288   wire [7:0] lsu_asi_reg0;
289
290   wire       asi0_state_clk;
291   
292`ifdef FPGA_SYN_CLK_EN
293`else
294clken_buf asi0_state_clkbuf (
295                .rclk   (clk),
296                .enb_l  (~asi_state_wr_thrd[0]),
297                .tmb_l  (~se),
298                .clk    (asi0_state_clk)
299                ) ;
300`endif
301   
302`ifdef FPGA_SYN_CLK_DFF
303dffe_s #(8) asi0_state_ff (
304        .din    (asi_wr_din[7:0]),
305        .q      (asi_state0[7:0]),
306        .en (~(~asi_state_wr_thrd[0])), .clk(clk),
307        .se     (se),       .si (),          .so ()
308        );
309`else
310dff_s #(8) asi0_state_ff (
311        .din    (asi_wr_din[7:0]),
312        .q      (asi_state0[7:0]),
313        .clk    (asi0_state_clk),
314        .se     (se),       .si (),          .so ()
315        );
316`endif
317
318assign  lsu_asi_reg0[7:0] = asi_state0[7:0] ; 
319
320// ASI - Thread1
321   wire [7:0] asi_state1;
322   wire [7:0] lsu_asi_reg1;
323
324   wire       asi1_state_clk;
325   
326`ifdef FPGA_SYN_CLK_EN
327`else
328clken_buf asi1_state_clkbuf (
329                .rclk   (clk),
330                .enb_l  (~asi_state_wr_thrd[1]),
331                .tmb_l  (~se),
332                .clk    (asi1_state_clk)
333                ) ;
334`endif
335   
336`ifdef FPGA_SYN_CLK_DFF
337dffe_s #(8) asi1_state_ff (
338        .din    (asi_wr_din[7:0]),
339        .q      (asi_state1[7:0]),
340        .en (~(~asi_state_wr_thrd[1])), .clk(clk),
341        .se     (se),       .si (),          .so ()
342        );
343`else
344dff_s #(8) asi1_state_ff (
345        .din    (asi_wr_din[7:0]),
346        .q      (asi_state1[7:0]),
347        .clk    (asi1_state_clk),
348        .se     (se),       .si (),          .so ()
349        );
350`endif
351   
352assign  lsu_asi_reg1[7:0] = asi_state1[7:0] ; 
353
354// ASI - Thread2
355   wire [7:0] asi_state2;
356   wire [7:0] lsu_asi_reg2;
357
358   wire       asi2_state_clk;
359   
360`ifdef FPGA_SYN_CLK_EN
361`else
362clken_buf asi2_state_clkbuf (
363                .rclk   (clk),
364                .enb_l  (~asi_state_wr_thrd[2]),
365                .tmb_l  (~se),
366                .clk    (asi2_state_clk)
367                ) ;
368`endif
369   
370`ifdef FPGA_SYN_CLK_DFF
371dffe_s #(8) asi2_state_ff (
372        .din    (asi_wr_din[7:0]),
373        .q      (asi_state2[7:0]),
374        .en (~(~asi_state_wr_thrd[2])), .clk(clk),
375        .se     (se),       .si (),          .so ()
376        );
377`else
378dff_s #(8) asi2_state_ff (
379        .din    (asi_wr_din[7:0]),
380        .q      (asi_state2[7:0]),
381        .clk    (asi2_state_clk),
382        .se     (se),       .si (),          .so ()
383        );
384`endif
385
386assign  lsu_asi_reg2[7:0] = asi_state2[7:0] ; 
387
388// ASI - Thread3
389   wire [7:0] asi_state3;
390   wire [7:0] lsu_asi_reg3;
391   
392   wire       asi3_state_clk;
393   
394`ifdef FPGA_SYN_CLK_EN
395`else
396clken_buf asi3_state_clkbuf (
397                .rclk   (clk),
398                .enb_l  (~asi_state_wr_thrd[3]),
399                .tmb_l  (~se),
400                .clk    (asi3_state_clk)
401                ) ;
402`endif
403   
404`ifdef FPGA_SYN_CLK_DFF
405dffe_s #(8) asi3_state_ff (
406        .din    (asi_wr_din[7:0]),
407        .q      (asi_state3[7:0]),
408        .en (~(~asi_state_wr_thrd[3])), .clk(clk),
409        .se     (se),       .si (),          .so ()
410        );
411`else
412dff_s #(8) asi3_state_ff (
413        .din    (asi_wr_din[7:0]),
414        .q      (asi_state3[7:0]),
415        .clk    (asi3_state_clk),
416        .se     (se),       .si (),          .so ()
417        );
418`endif
419
420assign  lsu_asi_reg3[7:0] = asi_state3[7:0] ; 
421
422   wire [7:0] asi_state;
423   
424mux4ds #(8) lsu_asi_mux_d (
425   .in0 (asi_state0[7:0]),                       
426   .in1 (asi_state1[7:0]),                       
427   .in2 (asi_state2[7:0]),                       
428   .in3 (asi_state3[7:0]),                       
429   .sel0(thread0_d),
430   .sel1(thread1_d),
431   .sel2(thread2_d),
432   .sel3(thread3_d),
433   .dout(asi_state[7:0])                       
434   );
435
436assign  asi_d[7:0] = ifu_lsu_imm_asi_vld_d ? 
437                     ifu_lsu_imm_asi_d[7:0] : asi_state[7:0];
438
439wire  [7:0] asi_state_e, asi_state_m ;
440   
441dff_s #(8) asistate_stge (
442        .din    (asi_d[7:0]),
443        .q      (asi_state_e[7:0]),
444        .clk    (clk),
445        .se     (se),       .si (),          .so ()
446        );
447
448// Make rsr_data independent of imm_asi.
449dff_s #(8) rdasi_stge (
450        .din    (asi_state[7:0]),
451        .q      (lsu_tlu_rsr_data_e[7:0]),
452        .clk    (clk),
453        .se     (se),       .si (),          .so ()
454        );
455
456//assign lsu_tlu_rsr_data_e[7:0] =  asi_state_e[7:0] ;
457
458assign  lsu_spu_asi_state_e[7:0] = asi_state_e[7:0] ;
459
460dff_s #(8) asistate_stgm (
461        .din    (asi_state_e[7:0]),
462        .q      (asi_state_m[7:0]),
463        .clk    (clk),
464        .se     (se),       .si (),          .so ()
465        );
466
467assign  lsu_excpctl_asi_state_m[7:0] = asi_state_m[7:0] ;
468assign  lsu_dctl_asi_state_m[7:0]    = asi_state_m[7:0] ;
469
470   wire [7:0] lsu_asi_state;
471dff_s #(8) asistate_stgg (
472        .din    (asi_state_m[7:0]),
473        .q      (lsu_asi_state[7:0]),
474        .clk    (clk),
475        .se     (se),       .si (),          .so ()
476        );
477
478
479/*********************context************************/
480wire  [12:0]  pctxt_state0,pctxt_state1;
481wire  [12:0]  pctxt_state2,pctxt_state3;
482wire  [12:0]  sctxt_state0,sctxt_state1;
483wire  [12:0]  sctxt_state2,sctxt_state3;
484
485// PRIMARY CONTEXT - Thread0
486   wire       pctxt0_state_clk;
487
488`ifdef FPGA_SYN_CLK_EN
489`else
490clken_buf pctxt0_state_clkbuf (
491                .rclk   (clk),
492                .enb_l  (~pctxt_state_wr_thrd[0]),
493                .tmb_l  (~se),
494                .clk    (pctxt0_state_clk)
495                ) ;
496`endif
497   
498`ifdef FPGA_SYN_CLK_DFF
499dffe_s #(13) pctxt_state0_ff (
500        .din    (st_rs3_data_g[12:0]),
501        .q      (pctxt_state0[12:0]),
502        .en (~(~pctxt_state_wr_thrd[0])), .clk(clk),
503        .se     (se),       .si (),          .so ()
504        ); 
505`else
506dff_s #(13) pctxt_state0_ff (
507        .din    (st_rs3_data_g[12:0]),
508        .q      (pctxt_state0[12:0]),
509        .clk    (pctxt0_state_clk),
510        .se     (se),       .si (),          .so ()
511        ); 
512`endif
513
514assign  lsu_t0_pctxt_state[12:0] = pctxt_state0[12:0] ;
515
516// PRIMARY CONTEXT - Thread1
517   wire       pctxt1_state_clk;
518
519`ifdef FPGA_SYN_CLK_EN
520`else
521clken_buf pctxt1_state_clkbuf (
522                .rclk   (clk),
523                .enb_l  (~pctxt_state_wr_thrd[1]),
524                .tmb_l  (~se),
525                .clk    (pctxt1_state_clk)
526                ) ;
527`endif
528   
529`ifdef FPGA_SYN_CLK_DFF
530dffe_s #(13) pctxt_state1_ff (
531        .din    (st_rs3_data_g[12:0]),
532        .q      (pctxt_state1[12:0]),
533        .en (~(~pctxt_state_wr_thrd[1])), .clk(clk),
534        .se     (se),       .si (),          .so ()
535        ); 
536`else
537dff_s #(13) pctxt_state1_ff (
538        .din    (st_rs3_data_g[12:0]),
539        .q      (pctxt_state1[12:0]),
540        .clk    (pctxt1_state_clk),
541        .se     (se),       .si (),          .so ()
542        ); 
543`endif
544
545assign  lsu_t1_pctxt_state[12:0] = pctxt_state1[12:0] ;
546
547// PRIMARY CONTEXT - Thread2
548   wire       pctxt2_state_clk;
549
550`ifdef FPGA_SYN_CLK_EN
551`else
552clken_buf pctxt2_state_clkbuf (
553                .rclk   (clk),
554                .enb_l  (~pctxt_state_wr_thrd[2]),
555                .tmb_l  (~se),
556                .clk    (pctxt2_state_clk)
557                ) ;
558`endif
559   
560`ifdef FPGA_SYN_CLK_DFF
561dffe_s #(13) pctxt_state2_ff (
562        .din    (st_rs3_data_g[12:0]),
563        .q      (pctxt_state2[12:0]),
564        .en (~(~pctxt_state_wr_thrd[2])), .clk(clk),
565        .se     (se),       .si (),          .so ()
566        ); 
567`else
568dff_s #(13) pctxt_state2_ff (
569        .din    (st_rs3_data_g[12:0]),
570        .q      (pctxt_state2[12:0]),
571        .clk    (pctxt2_state_clk),
572        .se     (se),       .si (),          .so ()
573        ); 
574`endif
575
576assign  lsu_t2_pctxt_state[12:0] = pctxt_state2[12:0] ;
577
578// PRIMARY CONTEXT - Thread3
579   wire       pctxt3_state_clk;
580
581`ifdef FPGA_SYN_CLK_EN
582`else
583clken_buf pctxt3_state_clkbuf (
584                .rclk   (clk),
585                .enb_l  (~pctxt_state_wr_thrd[3]),
586                .tmb_l  (~se),
587                .clk    (pctxt3_state_clk)
588                ) ;
589`endif
590   
591`ifdef FPGA_SYN_CLK_DFF
592dffe_s #(13) pctxt_state3_ff (
593        .din    (st_rs3_data_g[12:0]),
594        .q      (pctxt_state3[12:0]),
595        .en (~(~pctxt_state_wr_thrd[3])), .clk(clk),
596        .se     (se),       .si (),          .so ()
597        ); 
598`else
599dff_s #(13) pctxt_state3_ff (
600        .din    (st_rs3_data_g[12:0]),
601        .q      (pctxt_state3[12:0]),
602        .clk    (pctxt3_state_clk),
603        .se     (se),       .si (),          .so ()
604        ); 
605`endif
606
607assign  lsu_t3_pctxt_state[12:0] = pctxt_state3[12:0] ;
608   
609// SECONDARY CONTEXT - Thread0
610   wire       sctxt0_state_clk;
611
612`ifdef FPGA_SYN_CLK_EN
613`else
614clken_buf sctxt0_state_clkbuf (
615                .rclk   (clk),
616                .enb_l  (~sctxt_state_wr_thrd[0]),
617                .tmb_l  (~se),
618                .clk    (sctxt0_state_clk)
619                ) ;
620`endif
621   
622`ifdef FPGA_SYN_CLK_DFF
623dffe_s #(13) sctxt_state0_ff (
624        .din    (st_rs3_data_g[12:0]),
625        .q      (sctxt_state0[12:0]),
626        .en (~(~sctxt_state_wr_thrd[0])), .clk(clk),
627        .se     (se),       .si (),          .so ()
628        ); 
629`else
630dff_s #(13) sctxt_state0_ff (
631        .din    (st_rs3_data_g[12:0]),
632        .q      (sctxt_state0[12:0]),
633        .clk    (sctxt0_state_clk),
634        .se     (se),       .si (),          .so ()
635        ); 
636`endif
637
638// SECONDARY CONTEXT - Thread1
639   wire       sctxt1_state_clk;
640
641`ifdef FPGA_SYN_CLK_EN
642`else
643clken_buf sctxt1_state_clkbuf (
644                .rclk   (clk),
645                .enb_l  (~sctxt_state_wr_thrd[1]),
646                .tmb_l  (~se),
647                .clk    (sctxt1_state_clk)
648                ) ;
649`endif
650   
651`ifdef FPGA_SYN_CLK_DFF
652dffe_s #(13) sctxt_state1_ff (
653        .din    (st_rs3_data_g[12:0]),
654        .q      (sctxt_state1[12:0]),
655        .en (~(~sctxt_state_wr_thrd[1])), .clk(clk),
656        .se     (se),       .si (),          .so ()
657        ); 
658`else
659dff_s #(13) sctxt_state1_ff (
660        .din    (st_rs3_data_g[12:0]),
661        .q      (sctxt_state1[12:0]),
662        .clk    (sctxt1_state_clk),
663        .se     (se),       .si (),          .so ()
664        ); 
665`endif
666
667// SECONDARY CONTEXT - Thread2
668   wire       sctxt2_state_clk;
669
670`ifdef FPGA_SYN_CLK_EN
671`else
672clken_buf sctxt2_state_clkbuf (
673                .rclk   (clk),
674                .enb_l  (~sctxt_state_wr_thrd[2]),
675                .tmb_l  (~se),
676                .clk    (sctxt2_state_clk)
677                ) ;
678`endif
679   
680`ifdef FPGA_SYN_CLK_DFF
681dffe_s #(13) sctxt_state2_ff (
682        .din    (st_rs3_data_g[12:0]),
683        .q      (sctxt_state2[12:0]),
684        .en (~(~sctxt_state_wr_thrd[2])), .clk(clk),
685        .se     (se),       .si (),          .so ()
686        ); 
687`else
688dff_s #(13) sctxt_state2_ff (
689        .din    (st_rs3_data_g[12:0]),
690        .q      (sctxt_state2[12:0]),
691        .clk    (sctxt2_state_clk),
692        .se     (se),       .si (),          .so ()
693        ); 
694`endif
695
696// SECONDARY CONTEXT - Thread3
697   wire       sctxt3_state_clk;
698
699`ifdef FPGA_SYN_CLK_EN
700`else
701clken_buf sctxt3_state_clkbuf (
702                .rclk   (clk),
703                .enb_l  (~sctxt_state_wr_thrd[3]),
704                .tmb_l  (~se),
705                .clk    (sctxt3_state_clk)
706                ) ;
707`endif
708   
709`ifdef FPGA_SYN_CLK_DFF
710dffe_s #(13) sctxt_state3_ff (
711        .din    (st_rs3_data_g[12:0]),
712        .q      (sctxt_state3[12:0]),
713        .en (~(~sctxt_state_wr_thrd[3])), .clk(clk),
714        .se     (se),       .si (),          .so ()
715        ); 
716`else
717dff_s #(13) sctxt_state3_ff (
718        .din    (st_rs3_data_g[12:0]),
719        .q      (sctxt_state3[12:0]),
720        .clk    (sctxt3_state_clk),
721        .se     (se),       .si (),          .so ()
722        ); 
723`endif
724
725wire  [12:0]  current_pctxt_e,current_sctxt_e ;
726wire  [12:0]  current_pctxt_m ;
727
728wire  [12:0]  current_ctxt_e,current_ctxt_m ;
729
730mux4ds #(13) current_pctxt_e_mux (
731   .in0 (pctxt_state0[12:0]),                       
732   .in1 (pctxt_state1[12:0]),                       
733   .in2 (pctxt_state2[12:0]),                       
734   .in3 (pctxt_state3[12:0]),                       
735   .sel0(thread0_ctxt),
736   .sel1(thread1_ctxt),
737   .sel2(thread2_ctxt),
738   .sel3(thread3_ctxt),
739   .dout(current_pctxt_e[12:0])                       
740   );
741
742mux4ds #(13) current_sctxt_e_mux (
743   .in0 (sctxt_state0[12:0]),                       
744   .in1 (sctxt_state1[12:0]),                       
745   .in2 (sctxt_state2[12:0]),                       
746   .in3 (sctxt_state3[12:0]),                       
747   .sel0(thread0_ctxt),
748   .sel1(thread1_ctxt),
749   .sel2(thread2_ctxt),
750   .sel3(thread3_ctxt),
751   .dout(current_sctxt_e[12:0])                       
752   );
753 
754   wire [12:0] tlb_actxt;
755 
756assign tlb_actxt[12:0] =
757       {tlu_dtlb_tte_tag_w2[12:0]} ; 
758
759   wire [3:0] thread_sel;
760   assign     thread_sel[0]= thread_pctxt   & ~rst_tri_en;
761   assign     thread_sel[1]= thread_sctxt   & ~rst_tri_en;
762   assign     thread_sel[2]= thread_actxt   & ~rst_tri_en;
763   assign     thread_sel[3]= thread_default |  rst_tri_en;
764
765// change buffer to nand /nor
766   
767mux4ds #(13) tlb_ctxt_mux (
768   .in0 (current_pctxt_e[12:0]),                       
769   .in1 (current_sctxt_e[12:0]),                       
770   .in2 (tlb_actxt[12:0]),                       
771   .in3 ({13'b0}),
772   .sel0(thread_sel[0]),
773   .sel1(thread_sel[1]),
774   .sel2(thread_sel[2]),
775   .sel3(thread_sel[3]),
776   .dout(tlb_ctxt[12:0])                       
777   );
778
779assign  current_ctxt_e[12:0] = tlb_ctxt[12:0] ;
780
781//Bug 3094
782wire    [12:0]  itrap_pctxt_e ;
783mux4ds #(13) itrap_pctxt_e_mux (
784   .in0 (pctxt_state0[12:0]),                       
785   .in1 (pctxt_state1[12:0]),                       
786   .in2 (pctxt_state2[12:0]),                       
787   .in3 (pctxt_state3[12:0]),                       
788   .sel0(thread0_e),
789   .sel1(thread1_e),
790   .sel2(thread2_e),
791   .sel3(thread3_e),
792   .dout(itrap_pctxt_e[12:0])                       
793   );
794
795// Create current ctxt for tlu purpose.
796dff_s #(26) cctxt_stgm (
797        .din    ({current_ctxt_e[12:0],itrap_pctxt_e[12:0]}),
798        .q      ({current_ctxt_m[12:0],current_pctxt_m[12:0]}),
799        .clk    (clk),
800        .se     (se),       .si (),          .so ()
801        );
802
803assign  lsu_tlu_dside_ctxt_m[12:0] = current_ctxt_m[12:0] ;
804assign  lsu_tlu_pctxt_m[12:0] = current_pctxt_m[12:0] ;
805
806   // Primary Context
807mux4ds #(13)     pctxt_mx (
808        .in0    (pctxt_state0[12:0]),
809        .in1    (pctxt_state1[12:0]),
810        .in2    (pctxt_state2[12:0]),
811        .in3    (pctxt_state3[12:0]),
812        .sel0   (thread0_g),
813        .sel1   (thread1_g),
814        .sel2   (thread2_g),
815        .sel3   (thread3_g),
816        .dout   (pctxt_state[12:0])
817        );
818
819// Secondary Context
820mux4ds #(13)     sctxt_mx (
821        .in0    (sctxt_state0[12:0]),
822        .in1    (sctxt_state1[12:0]),
823        .in2    (sctxt_state2[12:0]),
824        .in3    (sctxt_state3[12:0]),
825        .sel0   (thread0_g),
826        .sel1   (thread1_g),
827        .sel2   (thread2_g),
828        .sel3   (thread3_g),
829        .dout   (sctxt_state[12:0])
830        );
831
832/********************partition id********************/
833 // ** Reset put in temporarily to ensure pid is correctly initialized **
834// ** Env/diags should be set-up to initialize pid correctly **
835wire    [2:0]   pid_state0, pid_state1, pid_state2, pid_state3;
836
837// Thread0
838   wire [2:0] pid_state_din;
839   assign     pid_state_din[2:0] = {3{rst_l}} & st_rs3_data_g[2:0];
840
841   wire       pid_state0_clk;
842
843`ifdef FPGA_SYN_CLK_EN
844`else
845clken_buf pid_state0_clkbuf (
846                .rclk   (clk),
847                .enb_l  (~pid_state_wr_en[0]),
848                .tmb_l  (~se),
849                .clk    (pid_state0_clk)
850                ) ;
851`endif
852   
853`ifdef FPGA_SYN_CLK_DFF
854dffe_s #(3) pid0_state (
855        .din    (pid_state_din[2:0]),
856        .q      (pid_state0[2:0]),
857        .en (~(~pid_state_wr_en[0])), .clk(clk),
858        .se     (se),       .si (),          .so ()
859        ); 
860`else
861dff_s #(3) pid0_state (
862        .din    (pid_state_din[2:0]),
863        .q      (pid_state0[2:0]),
864        .clk    (pid_state0_clk),
865        .se     (se),       .si (),          .so ()
866        ); 
867`endif
868
869assign  lsu_pid_state0[2:0] = pid_state0[2:0] ;
870
871// Thread1
872   wire       pid_state1_clk;
873
874`ifdef FPGA_SYN_CLK_EN
875`else
876clken_buf pid_state1_clkbuf (
877                .rclk   (clk),
878                .enb_l  (~pid_state_wr_en[1]),
879                .tmb_l  (~se),
880                .clk    (pid_state1_clk)
881                ) ;
882`endif
883   
884`ifdef FPGA_SYN_CLK_DFF
885dffe_s #(3) pid1_state (
886        .din    (pid_state_din[2:0]),
887        .q      (pid_state1[2:0]),
888        .en (~(~pid_state_wr_en[1])), .clk(clk),
889        .se     (se),       .si (),          .so ()
890        ); 
891`else
892dff_s #(3) pid1_state (
893        .din    (pid_state_din[2:0]),
894        .q      (pid_state1[2:0]),
895        .clk    (pid_state1_clk),
896        .se     (se),       .si (),          .so ()
897        ); 
898`endif
899
900assign  lsu_pid_state1[2:0] = pid_state1[2:0] ;
901
902// Thread2
903   wire       pid_state2_clk;
904
905`ifdef FPGA_SYN_CLK_EN
906`else
907clken_buf pid_state2_clkbuf (
908                .rclk   (clk),
909                .enb_l  (~pid_state_wr_en[2]),
910                .tmb_l  (~se),
911                .clk    (pid_state2_clk)
912                ) ;
913`endif
914   
915`ifdef FPGA_SYN_CLK_DFF
916dffe_s #(3) pid2_state (
917        .din    (pid_state_din[2:0]),
918        .q      (pid_state2[2:0]),
919        .en (~(~pid_state_wr_en[2])), .clk(clk),
920        .se     (se),       .si (),          .so ()
921        ); 
922`else
923dff_s #(3) pid2_state (
924        .din    (pid_state_din[2:0]),
925        .q      (pid_state2[2:0]),
926        .clk    (pid_state2_clk),
927        .se     (se),       .si (),          .so ()
928        ); 
929`endif
930
931assign  lsu_pid_state2[2:0] = pid_state2[2:0] ;
932
933// Thread3
934   wire       pid_state3_clk;
935
936`ifdef FPGA_SYN_CLK_EN
937`else
938clken_buf pid_state3_clkbuf (
939                .rclk   (clk),
940                .enb_l  (~pid_state_wr_en[3]),
941                .tmb_l  (~se),
942                .clk    (pid_state3_clk)
943                ) ;
944`endif
945   
946`ifdef FPGA_SYN_CLK_DFF
947dffe_s #(3) pid3_state (
948        .din    (pid_state_din[2:0]),
949        .q      (pid_state3[2:0]),
950        .en (~(~pid_state_wr_en[3])), .clk(clk),
951        .se     (se),       .si (),          .so ()
952        ); 
953`else
954dff_s #(3) pid3_state (
955        .din    (pid_state_din[2:0]),
956        .q      (pid_state3[2:0]),
957        .clk    (pid_state3_clk),
958        .se     (se),       .si (),          .so ()
959        ); 
960`endif
961
962assign  lsu_pid_state3[2:0] = pid_state3[2:0] ;
963
964wire [2:0] cam_pid_e ;
965// Hypervisor related cam inputs
966mux4ds #(3)     cam_pid_mx (
967        .in0    (pid_state0[2:0]),
968        .in1    (pid_state1[2:0]),
969        .in2    (pid_state2[2:0]),
970        .in3    (pid_state3[2:0]),
971        .sel0   (thread0_e),
972        .sel1   (thread1_e),
973        .sel2   (thread2_e),
974        .sel3   (thread3_e),
975        .dout   (cam_pid_e[2:0])
976        );
977
978assign  lsu_dtlb_cam_pid_e[2:0] =
979  lsu_dtlb_dmp_vld_e ? tlu_dtlb_tte_tag_b58t56[2:0] : cam_pid_e[2:0] ;
980  //thread_actxt ? tlu_dtlb_tte_tag_b58t56[2:0] : cam_pid_e[2:0] ;
981   
982mux4ds #(3)     pid_mx (
983        .in0    (pid_state0[2:0]),
984        .in1    (pid_state1[2:0]),
985        .in2    (pid_state2[2:0]),
986        .in3    (pid_state3[2:0]),
987        .sel0   (thread0_g),
988        .sel1   (thread1_g),
989        .sel2   (thread2_g),
990        .sel3   (thread3_g),
991        .dout   (pid_state[2:0])
992        );
993
994 
995/***********************lsu ctl reg********************/
996// Contents of lsu_ctl_reg
997/*
998  IC. I-Cache Enable. b0           b0
999  DC. D-Cache Enable. b1           b1
1000  IM. I-MMU Enable.   b2           b2
1001  DM. D-MMU Enable.   b3           b3
1002  FM. Parity Mask.(delete) b4-19   --   
1003  Reserved    b20                  --
1004  VW. VA Wtchpt Wr  b21            b4
1005  VR. VA Wtchpt Rd  b22            b5
1006  PW. PA Wtchpt Wr  b23            --
1007  PR. PA Wtchpt Rd  b24            --
1008  VM. VA Wtchpt BMask   b25-32     b6-13
1009  PM. PA Wtchpt BMask   b33-40     --
1010*/
1011
1012   assign lsu_dp_ctl_reg0[5:0] = lsu_ctl_reg0[5:0];
1013   assign lsu_dp_ctl_reg1[5:0] = lsu_ctl_reg1[5:0];
1014   assign lsu_dp_ctl_reg2[5:0] = lsu_ctl_reg2[5:0];
1015   assign lsu_dp_ctl_reg3[5:0] = lsu_ctl_reg3[5:0];
1016   
1017wire  [9:0]  lsu_ctl_reg_din ;
1018
1019//assign  lsu_ctl_reg_din[19:0] = st_rs3_data_g[40:21] ;
1020   wire   lsu_ctl_reg_vw_din, lsu_ctl_reg_vr_din;
1021   wire [7:0] lsu_ctl_reg_vm_din;
1022   
1023assign  lsu_ctl_reg_vw_din = st_rs3_data_g[21] ;
1024assign  lsu_ctl_reg_vr_din = st_rs3_data_g[22] ;
1025assign  lsu_ctl_reg_vm_din[7:0] = st_rs3_data_g[32:25];
1026
1027assign lsu_ctl_reg_din[9:0] = {lsu_ctl_reg_vm_din[7:0],
1028                               lsu_ctl_reg_vr_din,
1029                               lsu_ctl_reg_vw_din};
1030   
1031   
1032wire [3:0]  lsuctl_ctlbits_wr_data ; 
1033
1034assign  lsuctl_ctlbits_wr_data[3:0] =
1035          dfture_tap_wr_mx_sel ? lsu_iobrdge_wr_data[3:0] : st_rs3_data_g[3:0] ;
1036
1037// Thread0
1038   wire [9:0] lsu_ctl_reg0_din;
1039   assign      lsu_ctl_reg0_din[9:0] = {10{~lctl_rst[0]}} & lsu_ctl_reg_din[9:0];
1040
1041   wire        lsu_ctl_state0_clk;
1042 
1043`ifdef FPGA_SYN_CLK_EN
1044`else
1045clken_buf lsu_ctl_state0_clkbuf (
1046                .rclk   (clk),
1047                .enb_l  (~lsu_ctl_state_wr_en[0]),
1048                .tmb_l  (~se),
1049                .clk    (lsu_ctl_state0_clk)
1050                ) ;
1051`endif
1052 
1053`ifdef FPGA_SYN_CLK_DFF
1054dffe_s #(10) lsu_ctl_reg0_ff2 (
1055        .din    (lsu_ctl_reg0_din[9:0]),
1056        .q      (lsu_ctl_reg0[13:4]),
1057        .en (~(~lsu_ctl_state_wr_en[0])), .clk(clk),
1058        .se     (se),       .si (),          .so ()
1059        ); 
1060`else
1061dff_s #(10) lsu_ctl_reg0_ff2 (
1062        .din    (lsu_ctl_reg0_din[9:0]),
1063        .q      (lsu_ctl_reg0[13:4]),
1064        .clk    (lsu_ctl_state0_clk),
1065        .se     (se),       .si (),          .so ()
1066        ); 
1067`endif
1068
1069   wire [3:0]  lsuctl_ctlbits0_wr_data_din;
1070   assign      lsuctl_ctlbits0_wr_data_din[3:0] = {4{~lctl_rst[0]}} & lsuctl_ctlbits_wr_data[3:0];
1071
1072   wire        lsuctl_ctlbits0_clk;
1073   
1074`ifdef FPGA_SYN_CLK_EN
1075`else
1076clken_buf lsuctl_ctlbits0_clkbuf (
1077                .rclk   (clk),
1078                .enb_l  (~lsuctl_ctlbits_wr_en[0]),
1079                .tmb_l  (~se),
1080                .clk    (lsuctl_ctlbits0_clk)
1081                ) ;
1082`endif
1083   
1084`ifdef FPGA_SYN_CLK_DFF
1085dffe_s #(4) lsu_ctl_reg0_ff1 (
1086        .din    (lsuctl_ctlbits0_wr_data_din[3:0]),
1087        .q      (lsu_ctl_reg0[3:0]),
1088        .en (~(~lsuctl_ctlbits_wr_en[0])), .clk(clk),
1089        .se     (se),       .si (),          .so ()
1090        ); 
1091`else
1092dff_s #(4) lsu_ctl_reg0_ff1 (
1093        .din    (lsuctl_ctlbits0_wr_data_din[3:0]),
1094        .q      (lsu_ctl_reg0[3:0]),
1095        .clk    (lsuctl_ctlbits0_clk),
1096        .se     (se),       .si (),          .so ()
1097        ); 
1098`endif
1099
1100// Thread1
1101   wire [9:0] lsu_ctl_reg1_din;
1102   assign      lsu_ctl_reg1_din[9:0] = {10{~lctl_rst[1]}} & lsu_ctl_reg_din[9:0];
1103
1104   wire        lsu_ctl_state1_clk;
1105 
1106`ifdef FPGA_SYN_CLK_EN
1107`else
1108clken_buf lsu_ctl_state1_clkbuf (
1109                .rclk   (clk),
1110                .enb_l  (~lsu_ctl_state_wr_en[1]),
1111                .tmb_l  (~se),
1112                .clk    (lsu_ctl_state1_clk)
1113                ) ;
1114`endif
1115 
1116`ifdef FPGA_SYN_CLK_DFF
1117dffe_s #(10) lsu_ctl_reg1_ff2 (
1118        .din    (lsu_ctl_reg1_din[9:0]),
1119        .q      (lsu_ctl_reg1[13:4]),
1120        .en (~(~lsu_ctl_state_wr_en[1])), .clk(clk),
1121        .se     (se),       .si (),          .so ()
1122        ); 
1123`else
1124dff_s #(10) lsu_ctl_reg1_ff2 (
1125        .din    (lsu_ctl_reg1_din[9:0]),
1126        .q      (lsu_ctl_reg1[13:4]),
1127        .clk    (lsu_ctl_state1_clk),
1128        .se     (se),       .si (),          .so ()
1129        ); 
1130`endif
1131
1132   wire [3:0]  lsuctl_ctlbits1_wr_data_din;
1133   assign      lsuctl_ctlbits1_wr_data_din[3:0] = {4{~lctl_rst[1]}} & lsuctl_ctlbits_wr_data[3:0];
1134
1135   wire        lsuctl_ctlbits1_clk;
1136   
1137`ifdef FPGA_SYN_CLK_EN
1138`else
1139clken_buf lsuctl_ctlbits1_clkbuf (
1140                .rclk   (clk),
1141                .enb_l  (~lsuctl_ctlbits_wr_en[1]),
1142                .tmb_l  (~se),
1143                .clk    (lsuctl_ctlbits1_clk)
1144                ) ;
1145`endif
1146   
1147`ifdef FPGA_SYN_CLK_DFF
1148dffe_s #(4) lsu_ctl_reg1_ff1 (
1149        .din    (lsuctl_ctlbits1_wr_data_din[3:0]),
1150        .q      (lsu_ctl_reg1[3:0]),
1151        .en (~(~lsuctl_ctlbits_wr_en[1])), .clk(clk),
1152        .se     (se),       .si (),          .so ()
1153        ); 
1154`else
1155dff_s #(4) lsu_ctl_reg1_ff1 (
1156        .din    (lsuctl_ctlbits1_wr_data_din[3:0]),
1157        .q      (lsu_ctl_reg1[3:0]),
1158        .clk    (lsuctl_ctlbits1_clk),
1159        .se     (se),       .si (),          .so ()
1160        ); 
1161`endif
1162
1163// Thread2
1164   wire [9:0] lsu_ctl_reg2_din;
1165   assign      lsu_ctl_reg2_din[9:0] = {10{~lctl_rst[2]}} & lsu_ctl_reg_din[9:0];
1166
1167   wire        lsu_ctl_state2_clk;
1168 
1169`ifdef FPGA_SYN_CLK_EN
1170`else
1171clken_buf lsu_ctl_state2_clkbuf (
1172                .rclk   (clk),
1173                .enb_l  (~lsu_ctl_state_wr_en[2]),
1174                .tmb_l  (~se),
1175                .clk    (lsu_ctl_state2_clk)
1176                ) ;
1177`endif
1178 
1179`ifdef FPGA_SYN_CLK_DFF
1180dffe_s #(10) lsu_ctl_reg2_ff2 (
1181        .din    (lsu_ctl_reg2_din[9:0]),
1182        .q      (lsu_ctl_reg2[13:4]),
1183        .en (~(~lsu_ctl_state_wr_en[2])), .clk(clk),
1184        .se     (se),       .si (),          .so ()
1185        ); 
1186`else
1187dff_s #(10) lsu_ctl_reg2_ff2 (
1188        .din    (lsu_ctl_reg2_din[9:0]),
1189        .q      (lsu_ctl_reg2[13:4]),
1190        .clk    (lsu_ctl_state2_clk),
1191        .se     (se),       .si (),          .so ()
1192        ); 
1193`endif
1194
1195   wire [3:0]  lsuctl_ctlbits2_wr_data_din;
1196   assign      lsuctl_ctlbits2_wr_data_din[3:0] = {4{~lctl_rst[2]}} & lsuctl_ctlbits_wr_data[3:0];
1197
1198   wire        lsuctl_ctlbits2_clk;
1199   
1200`ifdef FPGA_SYN_CLK_EN
1201`else
1202clken_buf lsuctl_ctlbits2_clkbuf (
1203                .rclk   (clk),
1204                .enb_l  (~lsuctl_ctlbits_wr_en[2]),
1205                .tmb_l  (~se),
1206                .clk    (lsuctl_ctlbits2_clk)
1207                ) ;
1208`endif
1209   
1210`ifdef FPGA_SYN_CLK_DFF
1211dffe_s #(4) lsu_ctl_reg2_ff1 (
1212        .din    (lsuctl_ctlbits2_wr_data_din[3:0]),
1213        .q      (lsu_ctl_reg2[3:0]),
1214        .en (~(~lsuctl_ctlbits_wr_en[2])), .clk(clk),
1215        .se     (se),       .si (),          .so ()
1216        ); 
1217`else
1218dff_s #(4) lsu_ctl_reg2_ff1 (
1219        .din    (lsuctl_ctlbits2_wr_data_din[3:0]),
1220        .q      (lsu_ctl_reg2[3:0]),
1221        .clk    (lsuctl_ctlbits2_clk),
1222        .se     (se),       .si (),          .so ()
1223        ); 
1224`endif
1225
1226// Thread3
1227   wire [9:0] lsu_ctl_reg3_din;
1228   assign      lsu_ctl_reg3_din[9:0] = {10{~lctl_rst[3]}} & lsu_ctl_reg_din[9:0];
1229
1230   wire        lsu_ctl_state3_clk;
1231 
1232`ifdef FPGA_SYN_CLK_EN
1233`else
1234clken_buf lsu_ctl_state3_clkbuf (
1235                .rclk   (clk),
1236                .enb_l  (~lsu_ctl_state_wr_en[3]),
1237                .tmb_l  (~se),
1238                .clk    (lsu_ctl_state3_clk)
1239                ) ;
1240`endif
1241 
1242`ifdef FPGA_SYN_CLK_DFF
1243dffe_s #(10) lsu_ctl_reg3_ff2 (
1244        .din    (lsu_ctl_reg3_din[9:0]),
1245        .q      (lsu_ctl_reg3[13:4]),
1246        .en (~(~lsu_ctl_state_wr_en[3])), .clk(clk),
1247        .se     (se),       .si (),          .so ()
1248        ); 
1249`else
1250dff_s #(10) lsu_ctl_reg3_ff2 (
1251        .din    (lsu_ctl_reg3_din[9:0]),
1252        .q      (lsu_ctl_reg3[13:4]),
1253        .clk    (lsu_ctl_state3_clk),
1254        .se     (se),       .si (),          .so ()
1255        ); 
1256`endif
1257
1258   wire [3:0]  lsuctl_ctlbits3_wr_data_din;
1259   assign      lsuctl_ctlbits3_wr_data_din[3:0] = {4{~lctl_rst[3]}} & lsuctl_ctlbits_wr_data[3:0];
1260
1261   wire        lsuctl_ctlbits3_clk;
1262   
1263`ifdef FPGA_SYN_CLK_EN
1264`else
1265clken_buf lsuctl_ctlbits3_clkbuf (
1266                .rclk   (clk),
1267                .enb_l  (~lsuctl_ctlbits_wr_en[3]),
1268                .tmb_l  (~se),
1269                .clk    (lsuctl_ctlbits3_clk)
1270                ) ;
1271`endif
1272   
1273`ifdef FPGA_SYN_CLK_DFF
1274dffe_s #(4) lsu_ctl_reg3_ff1 (
1275        .din    (lsuctl_ctlbits3_wr_data_din[3:0]),
1276        .q      (lsu_ctl_reg3[3:0]),
1277        .en (~(~lsuctl_ctlbits_wr_en[3])), .clk(clk),
1278        .se     (se),       .si (),          .so ()
1279        ); 
1280`else
1281dff_s #(4) lsu_ctl_reg3_ff1 (
1282        .din    (lsuctl_ctlbits3_wr_data_din[3:0]),
1283        .q      (lsu_ctl_reg3[3:0]),
1284        .clk    (lsuctl_ctlbits3_clk),
1285        .se     (se),       .si (),          .so ()
1286        ); 
1287`endif
1288
1289// LSU Ctl Reg
1290mux4ds #(14)     lctlrg_mx (
1291        .in0    (lsu_ctl_reg0[13:0]),
1292        .in1    (lsu_ctl_reg1[13:0]),
1293        .in2    (lsu_ctl_reg2[13:0]),
1294        .in3    (lsu_ctl_reg3[13:0]),
1295        .sel0   (thread0_g),
1296        .sel1   (thread1_g),
1297        .sel2   (thread2_g),
1298        .sel3   (thread3_g),
1299        .dout   (lsu_ctl_reg[13:0])
1300        );
1301
1302   wire [3:0] dfture_tap_rd_data;
1303
1304mux4ds #(4)     dfture_tap_rd_data_mx (
1305        .in0    (lsu_ctl_reg0[3:0]),
1306        .in1    (lsu_ctl_reg1[3:0]),
1307        .in2    (lsu_ctl_reg2[3:0]),
1308        .in3    (lsu_ctl_reg3[3:0]),
1309        .sel0   (dfture_tap_rd_en[0]),
1310        .sel1   (dfture_tap_rd_en[1]),
1311        .sel2   (dfture_tap_rd_en[2]),
1312        .sel3   (dfture_tap_rd_en[3]),
1313        .dout   (dfture_tap_rd_data[3:0])
1314        );
1315   
1316   wire [7:0] va_wtchpt_mask;
1317
1318mux4ds #(8)     va_wtchpt_mask_mx (
1319        .in0    (lsu_ctl_reg0[13:6]),
1320        .in1    (lsu_ctl_reg1[13:6]),
1321        .in2    (lsu_ctl_reg2[13:6]),
1322        .in3    (lsu_ctl_reg3[13:6]),
1323        .sel0   (thread0_m),
1324        .sel1   (thread1_m),
1325        .sel2   (thread2_m),
1326        .sel3   (thread3_m),
1327        .dout   (va_wtchpt_mask[7:0])
1328        ); 
1329
1330// Bug 1671 fix
1331//assign va_wtchpt_msk_match_m  =   (stb_ldst_byte_msk[7:0] == va_wtchpt_mask[7:0]);
1332//assign va_wtchpt_msk_match_m  =   |(stb_ldst_byte_msk[7:0] & va_wtchpt_mask[7:0]);
1333
1334assign va_wtchpt_msk_match_m  =   
1335       stb_ldst_byte_msk[0] & va_wtchpt_mask[7] |
1336       stb_ldst_byte_msk[1] & va_wtchpt_mask[6] |
1337       stb_ldst_byte_msk[2] & va_wtchpt_mask[5] |
1338       stb_ldst_byte_msk[3] & va_wtchpt_mask[4] |
1339       stb_ldst_byte_msk[4] & va_wtchpt_mask[3] |
1340       stb_ldst_byte_msk[5] & va_wtchpt_mask[2] |
1341       stb_ldst_byte_msk[6] & va_wtchpt_mask[1] |
1342       stb_ldst_byte_msk[7] & va_wtchpt_mask[0] ;
1343 
1344       
1345   
1346/***********************ldxa****************************/   
1347// BIST_Controller ASI
1348// tap wr takes precedence
1349//wire  [10:0]  bistctl_data_in;
1350//wire  [10:0]  bist_ctl_reg ;
1351
1352//assign  bistctl_data_in[13:0] =
1353//  bist_tap_wr_en ? lsu_iobrdge_wr_data[13:0] : st_rs3_data_g[13:0] ;
1354
1355//assign  bistctl_data_in[10:7] = lsu_iobrdge_wr_data[10:7];
1356//assign  bistctl_data_in[6:0] =
1357//  bist_tap_wr_en ? lsu_iobrdge_wr_data[6:0] : st_rs3_data_g[6:0] ;
1358   
1359assign  bist_ctl_reg_in[6:0] = 
1360bist_tap_wr_en ? lsu_iobrdge_wr_data[6:0] : st_rs3_data_g[6:0];
1361
1362/*   wire bistctl_clk;
1363   
1364`ifdef FPGA_SYN_CLK_EN
1365`else
1366clken_buf bistctl_clkbuf (
1367                .rclk   (clk),
1368                .enb_l  (~bistctl_wr_en),
1369                .tmb_l  (tmb_l),
1370                .clk    (bistctl_clk)
1371                ) ;
1372`endif
1373   
1374`ifdef FPGA_SYN_CLK_DFF
1375dffe_s #(11) bistctl_ff (
1376        .din    (bistctl_data_in[10:0]),
1377        .q      (bist_ctl_reg[10:0]),
1378        .en (~(~bistctl_wr_en)), .clk(clk),
1379        .se     (se),       .si (),          .so ()
1380        );
1381`else
1382dff_s #(11) bistctl_ff (
1383        .din    (bistctl_data_in[10:0]),
1384        .q      (bist_ctl_reg[10:0]),
1385        .clk    (bistctl_clk),
1386        .se     (se),       .si (),          .so ()
1387        );
1388`endif
1389*/
1390   
1391// Self-Timed Margin Control ASI
1392// tap wr takes precedence
1393wire  [27:0]  mrgnctl_data_in;   
1394wire  [27:0]  spc_mrgnctl_data_in;
1395   
1396wire  [27:0]  mrgn_ctl_reg ;
1397
1398//itlb         [27:20]
1399//dtlb         [19:12]
1400//idct (i)     [11: 8]
1401//idct (d)     [ 7: 4]
1402//idct (mamem) [ 3: 0]
1403
1404assign mrgnctl_data_in[27:0] =
1405mrgn_tap_wr_en ? lsu_iobrdge_wr_data[27:0] :
1406                 spc_mrgnctl_data_in[27:0];
1407         
1408assign spc_mrgnctl_data_in[27:0] =       
1409(~rst_l) ?  {8'b01011011, 8'b01011011, 4'b0101,4'b0101,4'b0101} :
1410             st_rs3_data_g[27:0];
1411                               
1412   wire mrgnctl_clk;
1413   
1414`ifdef FPGA_SYN_CLK_EN
1415`else
1416clken_buf mrgnctl_clkbuf (
1417                .rclk   (clk),
1418                .enb_l  (~mrgnctl_wr_en),
1419                .tmb_l  (~se),
1420                .clk    (mrgnctl_clk)
1421                ) ;
1422`endif
1423   
1424`ifdef FPGA_SYN_CLK_DFF
1425dffe_s #(28) mrgnctl_ff (
1426        .din    (mrgnctl_data_in[27:0]),
1427        .q      (mrgn_ctl_reg[27:0]),
1428        .en (~(~mrgnctl_wr_en)), .clk(clk),
1429        .se     (se),       .si (),          .so ()
1430        );
1431`else
1432dff_s #(28) mrgnctl_ff (
1433        .din    (mrgnctl_data_in[27:0]),
1434        .q      (mrgn_ctl_reg[27:0]),
1435        .clk    (mrgnctl_clk),
1436        .se     (se),       .si (),          .so ()
1437        );
1438`endif
1439
1440assign  lsu_itlb_mrgn[7:0] = mrgn_ctl_reg[27:20] ;
1441assign  lsu_dtlb_mrgn[7:0] = mrgn_ctl_reg[19:12] ;
1442assign  lsu_ictag_mrgn[3:0] = mrgn_ctl_reg[11:8] ;
1443assign  lsu_dctag_mrgn[3:0] = mrgn_ctl_reg[7:4] ;
1444assign  lsu_mamem_mrgn[3:0] = mrgn_ctl_reg[3:0] ;
1445
1446// LSU Diag Reg ASI
1447wire  [1:0] ldiagctl_data_in ;
1448
1449wire  [1:0] ldiag_ctl_reg ;
1450
1451assign  ldiagctl_data_in[1:0] = {2{rst_l}} & st_rs3_data_g[1:0] ;
1452
1453   wire ldiagctl_clk;
1454   
1455`ifdef FPGA_SYN_CLK_EN
1456`else
1457clken_buf ldiagctl_clkbuf (
1458                .rclk   (clk),
1459                .enb_l  (~ldiagctl_wr_en),
1460                .tmb_l  (~se),
1461                .clk    (ldiagctl_clk)
1462                ) ;   
1463`endif
1464   
1465`ifdef FPGA_SYN_CLK_DFF
1466dffe_s #(2) ldiagctl_ff (
1467        .din    (ldiagctl_data_in[1:0]),
1468        .q      (ldiag_ctl_reg[1:0]),
1469        .en (~(~ldiagctl_wr_en)), .clk(clk),
1470        .se     (se),       .si (),          .so ()
1471        );
1472`else
1473dff_s #(2) ldiagctl_ff (
1474        .din    (ldiagctl_data_in[1:0]),
1475        .q      (ldiag_ctl_reg[1:0]),
1476        .clk    (ldiagctl_clk),
1477        .se     (se),       .si (),          .so ()
1478        );
1479`endif
1480
1481assign  lsu_ifu_direct_map_l1 = ldiag_ctl_reg[0] ;
1482assign  dc_direct_map = ldiag_ctl_reg[1] ;
1483
1484   wire [43:0] misc_ctl_reg;
1485
1486   wire [3:0] misc_ctl_sel_q;
1487   
1488dff_s #(4) misc_ctl_sel_stgg (
1489    .din ( misc_ctl_sel_din[3:0] ),
1490    .q   ( misc_ctl_sel_q[3:0]   ),       
1491    .clk (clk),
1492    .se  (se),       .si (),          .so ()
1493);
1494   wire [3:0] misc_ctl_sel;
1495 
1496   assign     misc_ctl_sel[0] =  misc_ctl_sel_q [0] & ~rst_tri_en;
1497   assign     misc_ctl_sel[1] =  misc_ctl_sel_q [1] & ~rst_tri_en;
1498   assign     misc_ctl_sel[2] =  misc_ctl_sel_q [2] |  rst_tri_en;
1499   assign     misc_ctl_sel[3] =  misc_ctl_sel_q [3] & ~rst_tri_en;
1500     
1501// Misc Ctl Registers
1502mux4ds #(44)     miscrg_mx (
1503        .in0    ({33'b0,bist_ctl_reg_out[10:0]}),
1504        .in1    ({16'b0,mrgn_ctl_reg[27:0]}),
1505        .in2    ({42'd0,ldiag_ctl_reg[1:0]}),
1506        .in3    ({40'd0,dfture_tap_rd_data[3:0]}),
1507        .sel0   (misc_ctl_sel[0]),
1508        .sel1   (misc_ctl_sel[1]),
1509        .sel2   (misc_ctl_sel[2]),
1510        .sel3   (misc_ctl_sel[3]),
1511        .dout   (misc_ctl_reg[43:0])
1512        );
1513
1514assign  lsu_iobrdge_rd_data[43:0] = misc_ctl_reg[43:0] ;
1515
1516wire    [12:0]  ldxa_data_fmx1 ;
1517   
1518mux3ds #(13)     lsuasi_fmx1 (
1519        .in0    (pctxt_state[12:0]),
1520        .in1    (sctxt_state[12:0]),
1521        .in2    ({10'd0,pid_state[2:0]}),
1522        .sel0   (lsu_asi_sel_fmx1[0]),
1523        .sel1   (lsu_asi_sel_fmx1[1]),
1524        .sel2   (lsu_asi_sel_fmx1[2]),
1525        .dout   (ldxa_data_fmx1[12:0])
1526        );
1527
1528wire  [47:0]  final_ldxa_data_g ;
1529   
1530//mux3ds #(48)     lsuasi_fmx2 (
1531//        .in0    ({35'd0,ldxa_data_fmx1[12:0]}),
1532//        .in1    ({15'd0,lsu_ctl_reg[15:8],2'b00,lsu_ctl_reg[5:4],17'd0,lsu_ctl_reg[3:0]}),
1533//        .in2    ({lsu_va_wtchpt_addr[47:3],3'b000}),
1534//        .sel0   (lsu_asi_sel_fmx2[0]),
1535//        .sel1   (lsu_asi_sel_fmx2[1]),
1536//        .sel2   (lsu_asi_sel_fmx2[2]),
1537//        .dout   (local_ldxa_data_g[47:0])
1538//        );
1539
1540//mux2ds #(48)     lsuasi_final (
1541//        .in0    (local_ldxa_data_g[47:0]),
1542//        .in1    ({4'd0,misc_ctl_reg[43:0]}),
1543//        .sel0   (~misc_asi_rd_en),
1544//        .sel1   (misc_asi_rd_en),
1545//        .dout   (final_ldxa_data_g[47:0])
1546//        );
1547
1548mux3ds #(48)     lsuasi_fmx2 (
1549        .in0    ({35'd0,ldxa_data_fmx1[12:0]}),
1550        .in1    ({15'd0,lsu_ctl_reg[13:6],2'b00,lsu_ctl_reg[5:4],17'd0,lsu_ctl_reg[3:0]}),
1551        .in2    ({4'd0,misc_ctl_reg[43:0]}),
1552        .sel0   (lsu_asi_sel_fmx2[0]),
1553        .sel1   (lsu_asi_sel_fmx2[1]),
1554        .sel2   (lsu_asi_sel_fmx2[2]),
1555        .dout   (final_ldxa_data_g[47:0])
1556        );   
1557
1558assign        lsu_local_ldxa_data_g[47:0] =  final_ldxa_data_g[47:0];
1559
1560
1561/****************va staging*******************/
1562 wire [47:0] ldst_va_m;   
1563dff_s  #(48) va_stgm (
1564        .din    (exu_lsu_ldst_va_e[47:0]),
1565        .q      (ldst_va_m[47:0]),
1566        .clk    (clk),
1567        .se     (se),       .si (),          .so ()
1568        ); 
1569
1570assign lsu_ldst_va_m[12:0] = ldst_va_m[12:0];   
1571
1572assign lsu_ldst_va_m_buf[47:0] = ldst_va_m[47:0];
1573   
1574       
1575assign lsu_tlu_ldst_va_m[9:0] = ldst_va_m[9:0];   
1576   
1577wire [47:0] ldst_va_g;   
1578dff_s  #(48) va_stgg (
1579        .din    (ldst_va_m[47:0]),
1580        .q      (ldst_va_g[47:0]),
1581        .clk    (clk),
1582        .se     (se),       .si (),          .so ()
1583        ); 
1584
1585assign  lsu_ldst_va_g[7:0] = ldst_va_g[7:0] ;
1586
1587
1588wire  [7:0] asi_state_g ;
1589assign  asi_state_g[7:0] = lsu_asi_state[7:0] ; 
1590
1591wire  [7:0] tlb_asi_state0,tlb_asi_state1,tlb_asi_state2,tlb_asi_state3 ;
1592wire  [47:13] lngltncy_dmp_va ;
1593   
1594// Thread 0
1595   wire [47:0] ldst_va0;
1596
1597   wire        tlb_access0_clk;
1598   
1599`ifdef FPGA_SYN_CLK_EN
1600`else
1601clken_buf tlb_access0_clkbuf (
1602                .rclk   (clk),
1603                .enb_l  (~tlb_access_en0_g),
1604                .tmb_l  (~se),
1605                .clk    (tlb_access0_clk)
1606                ) ;
1607`endif
1608   
1609`ifdef FPGA_SYN_CLK_DFF
1610dffe_s #(56)  asi_thrd0 (
1611        .din    ({asi_state_g[7:0],   ldst_va_g[47:0]}),
1612        .q      ({tlb_asi_state0[7:0],ldst_va0[47:0]}),
1613        .en (~(~tlb_access_en0_g)), .clk(clk),
1614        .se     (se),       .si (),          .so ()
1615        );
1616`else
1617dff_s #(56)  asi_thrd0 (
1618        .din    ({asi_state_g[7:0],   ldst_va_g[47:0]}),
1619        .q      ({tlb_asi_state0[7:0],ldst_va0[47:0]}),
1620        .clk    (tlb_access0_clk),
1621        .se     (se),       .si (),          .so ()
1622        );
1623`endif
1624
1625// Thread 1
1626   wire [47:0] ldst_va1;
1627
1628   wire        tlb_access1_clk;
1629   
1630`ifdef FPGA_SYN_CLK_EN
1631`else
1632clken_buf tlb_access1_clkbuf (
1633                .rclk   (clk),
1634                .enb_l  (~tlb_access_en1_g),
1635                .tmb_l  (~se),
1636                .clk    (tlb_access1_clk)
1637                ) ;
1638`endif
1639   
1640`ifdef FPGA_SYN_CLK_DFF
1641dffe_s #(56)  asi_thrd1 (
1642        .din    ({asi_state_g[7:0],   ldst_va_g[47:0]}),
1643        .q      ({tlb_asi_state1[7:0],ldst_va1[47:0]}),
1644        .en (~(~tlb_access_en1_g)), .clk(clk),
1645        .se     (se),       .si (),          .so ()
1646        );
1647`else
1648dff_s #(56)  asi_thrd1 (
1649        .din    ({asi_state_g[7:0],   ldst_va_g[47:0]}),
1650        .q      ({tlb_asi_state1[7:0],ldst_va1[47:0]}),
1651        .clk    (tlb_access1_clk),
1652        .se     (se),       .si (),          .so ()
1653        );
1654`endif
1655
1656// Thread 2
1657   wire [47:0] ldst_va2;
1658
1659   wire        tlb_access2_clk;
1660   
1661`ifdef FPGA_SYN_CLK_EN
1662`else
1663clken_buf tlb_access2_clkbuf (
1664                .rclk   (clk),
1665                .enb_l  (~tlb_access_en2_g),
1666                .tmb_l  (~se),
1667                .clk    (tlb_access2_clk)
1668                ) ;
1669`endif
1670   
1671`ifdef FPGA_SYN_CLK_DFF
1672dffe_s #(56)  asi_thrd2 (
1673        .din    ({asi_state_g[7:0],   ldst_va_g[47:0]}),
1674        .q      ({tlb_asi_state2[7:0],ldst_va2[47:0]}),
1675        .en (~(~tlb_access_en2_g)), .clk(clk),
1676        .se     (se),       .si (),          .so ()
1677        );
1678`else
1679dff_s #(56)  asi_thrd2 (
1680        .din    ({asi_state_g[7:0],   ldst_va_g[47:0]}),
1681        .q      ({tlb_asi_state2[7:0],ldst_va2[47:0]}),
1682        .clk    (tlb_access2_clk),
1683        .se     (se),       .si (),          .so ()
1684        );
1685`endif
1686
1687// Thread 3
1688   wire [47:0] ldst_va3;
1689
1690   wire        tlb_access3_clk;
1691   
1692`ifdef FPGA_SYN_CLK_EN
1693`else
1694clken_buf tlb_access3_clkbuf (
1695                .rclk   (clk),
1696                .enb_l  (~tlb_access_en3_g),
1697                .tmb_l  (~se),
1698                .clk    (tlb_access3_clk)
1699                ) ;
1700`endif
1701   
1702`ifdef FPGA_SYN_CLK_DFF
1703dffe_s #(56)  asi_thrd3 (
1704        .din    ({asi_state_g[7:0],   ldst_va_g[47:0]}),
1705        .q      ({tlb_asi_state3[7:0],ldst_va3[47:0]}),
1706        .en (~(~tlb_access_en3_g)), .clk(clk),
1707        .se     (se),       .si (),          .so ()
1708        );
1709`else
1710dff_s #(56)  asi_thrd3 (
1711        .din    ({asi_state_g[7:0],   ldst_va_g[47:0]}),
1712        .q      ({tlb_asi_state3[7:0],ldst_va3[47:0]}),
1713        .clk    (tlb_access3_clk),
1714        .se     (se),       .si (),          .so ()
1715        );
1716`endif
1717
1718   wire [47:0] ldst_va_dout;
1719   
1720mux4ds #(56)     ldst_va_mx (
1721        .in0    ({tlb_asi_state0[7:0],ldst_va0[47:0]}),
1722        .in1    ({tlb_asi_state1[7:0],ldst_va1[47:0]}),
1723        .in2    ({tlb_asi_state2[7:0],ldst_va2[47:0]}),
1724        .in3    ({tlb_asi_state3[7:0],ldst_va3[47:0]}),
1725        .sel0   (tlb_access_sel_thrd0),
1726        .sel1   (tlb_access_sel_thrd1),
1727        .sel2   (tlb_access_sel_thrd2),
1728        .sel3   (tlb_access_sel_default),
1729        .dout   ({lsu_tlu_tlb_asi_state_m[7:0], ldst_va_dout[47:0]})
1730        );
1731
1732assign  lsu_ifu_asi_state[7:0] = lsu_tlu_tlb_asi_state_m[7:0] ;
1733
1734wire [17:0] lngltncy_ldst_va ;
1735
1736assign  lngltncy_ldst_va[17:0] = ldst_va_dout[17:0];
1737assign  lngltncy_dmp_va[47:13] = ldst_va_dout[47:13];   
1738assign  lsu_tlu_tlb_ldst_va_m[10:0] = lngltncy_ldst_va[10:0] ;
1739assign  lsu_tlu_tlb_dmp_va_m[47:13] = lngltncy_dmp_va[47:13] ;
1740assign  lsu_ifu_asi_addr[17:0] = lngltncy_ldst_va[17:0] ;
1741
1742// Diagnostics
1743
1744//wire  [3:0]   lsu_diag_access_sel_d1 ;
1745
1746//dff #(4)  diagsel_stgd1 (
1747//        .din    (lsu_diag_access_sel[3:0]),
1748//        .q      (lsu_diag_access_sel_d1[3:0]),
1749//        .clk    (clk),
1750//        .se     (se),       .si (),          .so ()
1751//        );
1752  wire [3:0] diagnstc_va_sel;
1753//change buffer to nand / nor
1754assign     diagnstc_va_sel[0] =   lsu_diagnstc_va_sel[0] & ~rst_tri_en;
1755assign     diagnstc_va_sel[1] =   lsu_diagnstc_va_sel[1] & ~rst_tri_en;
1756assign     diagnstc_va_sel[2] =   lsu_diagnstc_va_sel[2] & ~rst_tri_en;
1757assign     diagnstc_va_sel[3] =   lsu_diagnstc_va_sel[3] |  rst_tri_en;
1758   
1759wire    [20:0] diag_va ;
1760mux4ds #(21)     diag_va_mx (
1761        .in0    (ldst_va0[20:0]),
1762        .in1    (ldst_va1[20:0]),
1763        .in2    (ldst_va2[20:0]),
1764        .in3    (ldst_va3[20:0]),
1765        .sel0   (diagnstc_va_sel[0]),
1766        .sel1   (diagnstc_va_sel[1]),
1767        .sel2   (diagnstc_va_sel[2]),
1768        .sel3   (diagnstc_va_sel[3]),
1769        .dout   (diag_va[20:0])
1770        );
1771
1772assign  lsu_diagnstc_wr_addr_e[10:0] = diag_va[10:0] ;
1773assign  lsu_diagnstc_dc_prty_invrt_e[7:0] = diag_va[20:13] ;   
1774
1775//assign  lsu_lngltncy_ldst_va[13:11]= lngltncy_ldst_va[13:11] ;
1776
1777//assign  lsu_diagnstc_wr_way_e[0] = ~diag_va[12] & ~diag_va[11] ;
1778//assign  lsu_diagnstc_wr_way_e[1] = ~diag_va[12] &  diag_va[11] ;
1779//assign  lsu_diagnstc_wr_way_e[2] =  diag_va[12] & ~diag_va[11] ;
1780//assign  lsu_diagnstc_wr_way_e[3] =  diag_va[12] &  diag_va[11] ;
1781
1782assign  lsu_diagnstc_wr_way_e[1:0] =  {diag_va[12],  diag_va[11]};
1783   
1784   
1785assign  lsu_diag_va_prty_invrt = diag_va[13] ;
1786
1787/***************error addr***************/
1788wire  [10:4] dcfill_addr_m,dcfill_addr_g ;
1789
1790dff_s #(7)  filla_stgm (
1791        .din    (lsu_dcfill_addr_e[10:4]),
1792        .q      (dcfill_addr_m[10:4]),
1793        .clk    (clk),
1794        .se     (se),       .si (),          .so ()
1795        ); 
1796
1797dff_s #(7)  filla_stgg (
1798        .din    (dcfill_addr_m[10:4]),
1799        .q      (dcfill_addr_g[10:4]),
1800        .clk    (clk),
1801        .se     (se),       .si (),          .so ()
1802        ); 
1803
1804wire  [28:0]  error_pa_g ;
1805dff_s #(29)  epa_stgg (
1806        .din    (lsu_error_pa_m[28:0]),
1807        .q      (error_pa_g[28:0]),
1808        .clk    (clk),
1809        .se     (se),       .si (),          .so ()
1810        ); 
1811
1812wire  [47:4]  err_addr_g ;
1813
1814mux3ds #(44)     erra_mx (
1815        .in0    (ldst_va_g[47:4]),
1816        .in1    ({38'd0,async_tlb_index[5:0]}),
1817        .in2    ({8'd0,error_pa_g[28:0],dcfill_addr_g[10:4]}),
1818        .sel0   (lsu_err_addr_sel[0]),
1819        .sel1   (lsu_err_addr_sel[1]),
1820        .sel2   (lsu_err_addr_sel[2]),
1821        .dout   (err_addr_g[47:4])
1822        );
1823
1824/*assign  err_addr_g[47:4] =
1825  sync_error_sel ?  ldst_va_g[47:4] :
1826        async_error_sel ? {38'd0,async_tlb_index[5:0]} :
1827                        {8'd0,error_pa_g[28:0],dcfill_addr_g[10:4]} ;*/
1828
1829dff_s #(44)  errad_stgg (
1830        .din    (err_addr_g[47:4]),
1831        .q      (lsu_ifu_err_addr[47:4]),
1832        .clk    (clk),
1833        .se     (se),       .si (),          .so ()
1834        ); 
1835     
1836endmodule // lsu_dctldp
Note: See TracBrowser for help on using the repository browser.