OpenCores
URL https://opencores.org/ocsvn/s1_core/s1_core/trunk

Subversion Repositories s1_core

[/] [s1_core/] [trunk/] [hdl/] [rtl/] [sparc_core/] [lsu_asi_decode.v] - Blame information for rev 113

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 95 fafa1971
// ========== Copyright Header Begin ==========================================
2
// 
3
// OpenSPARC T1 Processor File: lsu_asi_decode.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:    ASI Decode for LSU
24
*/
25
////////////////////////////////////////////////////////////////////////
26
// Global header file includes
27
////////////////////////////////////////////////////////////////////////
28 113 albert.wat
`include        "sys.h" // system level definition file which contains the
29 95 fafa1971
                                        // time scale definition
30
 
31
////////////////////////////////////////////////////////////////////////
32
// Local header file includes / local defines
33
////////////////////////////////////////////////////////////////////////    
34
 
35
module lsu_asi_decode (/*AUTOARG*/
36
   // Outputs
37
   asi_internal_d, nucleus_asi_d, primary_asi_d, secondary_asi_d,
38
   lendian_asi_d, nofault_asi_d, quad_asi_d, binit_quad_asi_d,
39
   dcache_byp_asi_d, tlb_lng_ltncy_asi_d, tlb_byp_asi_d,
40
   as_if_user_asi_d, atomic_asi_d, blk_asi_d, dc_diagnstc_asi_d,
41
   dtagv_diagnstc_asi_d, wr_only_asi_d, rd_only_asi_d, unimp_asi_d,
42
   ifu_nontlb_asi_d, recognized_asi_d, ifill_tlb_asi_d,
43
   dfill_tlb_asi_d, rd_only_ltlb_asi_d, wr_only_ltlb_asi_d,
44
   phy_use_ec_asi_d, phy_byp_ec_asi_d, mmu_rd_only_asi_d,
45
   intrpt_disp_asi_d, dmmu_asi58_d, immu_asi50_d,
46
   // Inputs
47
   asi_d
48
   );
49
 
50
input   [7:0]    asi_d ;
51
output          asi_internal_d ;
52
output          nucleus_asi_d ;
53
output          primary_asi_d ;
54
output          secondary_asi_d ;
55
output          lendian_asi_d ;
56
output          nofault_asi_d ;
57
output          quad_asi_d ;
58
output          binit_quad_asi_d ;
59
output          dcache_byp_asi_d ;
60
output          tlb_lng_ltncy_asi_d ;
61
output          tlb_byp_asi_d ;
62
output          as_if_user_asi_d ;
63
output          atomic_asi_d ;
64
output          blk_asi_d ;
65
//output                blk_cmt_asi_d ;
66
output          dc_diagnstc_asi_d;
67
output          dtagv_diagnstc_asi_d;
68
output          wr_only_asi_d ;
69
output          rd_only_asi_d ;
70
output          unimp_asi_d ;
71
output          ifu_nontlb_asi_d ;      // non-tlb asi's in ifu
72
output          recognized_asi_d ;
73
output          ifill_tlb_asi_d ;       // itlb fill asi
74
output          dfill_tlb_asi_d ;       // dtlb fill asi
75
output          rd_only_ltlb_asi_d ;    // read-only long-latency asi
76
output          wr_only_ltlb_asi_d ;    // write-only long-latency asi
77
output          phy_use_ec_asi_d ;
78
output          phy_byp_ec_asi_d ;
79
 
80
output          mmu_rd_only_asi_d ;     // does not include asi with va
81
output          intrpt_disp_asi_d ;
82
output          dmmu_asi58_d ;
83
output    immu_asi50_d;
84
 
85
wire    quad_ldd_real, quad_ldd_real_little ;
86
wire    asi_if_user_prim_all_d,asi_if_user_sec_all_d ;
87
wire    asi_if_user_prim_d,asi_if_user_sec_d ;
88
wire    nucleus_asi_exact_d ;
89
wire    prim_asi_exact_d ;
90
wire    phy_use_ec_asi ;
91
wire    phy_byp_ec_asi ;
92
wire    sec_asi_exact_d ;
93
wire    idemap,ddemap,ddata_in,ddaccess ;
94
wire    dtag_read,idata_in,idaccess,invld_all,itag_read ;
95
wire    blk_asif_usr_plittle, blk_asif_usr_slittle ;
96
wire    blk_plittle, blk_slittle ;
97
wire    blk_asif_usr_p, blk_asif_usr_s ;
98
wire    blk_cmt_p, blk_cmt_s;
99
wire    blk_p, blk_s ;
100
wire    binit_nucleus_d, binit_nucleus_little_d ;
101
wire    real_mem_little,real_io_little ;
102
   wire unimp_CD_prm;
103
   wire unimp_CD_sec;
104
 
105
// Start decode in d-stage. Required late e-stage. The logic could
106
// be moved to the e-stage to save staging flops.
107
 
108
wire    dtsb_8k_ptr, dtsb_64k_ptr, dtsb_dir_ptr;
109
wire    itsb_8k_ptr, itsb_64k_ptr;
110
assign  dtsb_8k_ptr = (asi_d[7:0] == 8'h59) ;
111
assign  dtsb_64k_ptr = (asi_d[7:0] == 8'h5A) ;
112
assign  dtsb_dir_ptr = (asi_d[7:0] == 8'h5B) ;
113
assign  itsb_8k_ptr = (asi_d[7:0] == 8'h51) ;
114
assign  itsb_64k_ptr = (asi_d[7:0] == 8'h52) ;
115
 
116
assign  mmu_rd_only_asi_d =
117
        dtsb_8k_ptr | dtsb_64k_ptr | dtsb_dir_ptr | itsb_8k_ptr | itsb_64k_ptr ;
118
 
119
assign intrpt_disp_asi_d = (asi_d[7:0] == 8'h73) ; // INTR_W 
120
 
121
assign  dmmu_asi58_d =  (asi_d[7:0] == 8'h58) ;
122
assign  immu_asi50_d =  (asi_d[7:0] == 8'h50) ;
123
 
124
// ASI Internal Registers - switches out thread among other things
125
assign  asi_internal_d =
126
        (asi_d[7:0] == 8'h40) |  // streaming/ma
127
        (asi_d[7:0] == 8'h45) |  // LSU Control 
128
        (asi_d[7:0] == 8'h50) | // I-TSB Tag Target/SFSR/TSB/Tag-Access
129
        itsb_8k_ptr           | // I-TSB 8K Ptr 
130
        itsb_64k_ptr          | // I-TSB 64K Ptr
131
        dmmu_asi58_d |
132
        //(asi_d[7:0] == 8'h58) | // D-TSB Tag Target/SFSR/SFAR/TSB/Tag-Access/VA-PA-Watchpt
133
        (asi_d[7:0] == 8'h21) | // Primary/Secondary Context
134
        (asi_d[7:0] == 8'h20) | // Scratchpad.
135
        (asi_d[7:0] == 8'h25) | // Queue
136
        (asi_d[7:0] == 8'h4F) | // Hyp Scratchpad
137
        dtsb_8k_ptr           | // D-TSB 8K Ptr
138
        dtsb_64k_ptr          | // D-TSB 64K Ptr
139
        dtsb_dir_ptr          | // D-TSB Direct Ptr
140
        (asi_d[7:0] == 8'h72) | // INTR_RECEIVE
141
        intrpt_disp_asi_d     | // INTR_W
142
        (asi_d[7:0] == 8'h74) | // INTR_R
143
        (asi_d[7:0] == 8'h44) | // Self-Timed Margin Ctl
144
        (asi_d[7:0] == 8'h31) | // dmmu_zctxt_ps0_tsb
145
        (asi_d[7:0] == 8'h32) | // dmmu_zctxt_ps1_tsb
146
        (asi_d[7:0] == 8'h39) | // dmmu_nzctxt_ps0_tsb
147
        (asi_d[7:0] == 8'h3A) | // dmmu_nzctxt_ps1_tsb
148
        (asi_d[7:0] == 8'h33) | // dmmu_zctxt_cfg_tsb
149
        (asi_d[7:0] == 8'h3B) | // dmmu_nzctxt_cfg_tsb
150
        (asi_d[7:0] == 8'h35) | // immu_zctxt_ps0_tsb
151
        (asi_d[7:0] == 8'h36) | // immu_zctxt_ps1_tsb
152
        (asi_d[7:0] == 8'h3D) | // immu_nzctxt_ps0_tsb
153
        (asi_d[7:0] == 8'h3E) | // immu_nzctxt_ps1_tsb
154
        (asi_d[7:0] == 8'h37) | // immu_zctxt_cfg_tsb
155
        (asi_d[7:0] == 8'h3F) | // immu_nzctxt_cfg_tsb
156
        dc_diagnstc_asi_d     | // Dcache Diagnostic
157
        dtagv_diagnstc_asi_d  | // Dcache Diagnostic
158
        tlb_lng_ltncy_asi_d   |
159
        ifu_nontlb_asi_d      ;
160
 
161
assign  ifu_nontlb_asi_d =
162
        (asi_d[7:0] == 8'h42) | // instruction-mask
163
        (asi_d[7:0] == 8'h43) | // error-inj
164
        (asi_d[7:0] == 8'h4B) | // sparc-error-enable
165
        (asi_d[7:0] == 8'h4C) | // sparc-error-status
166
        (asi_d[7:0] == 8'h4D) | // sparc-error-address
167
        (asi_d[7:0] == 8'h66) | // icache-instr
168
        (asi_d[7:0] == 8'h67) ; // icache-tag
169
 
170
assign  dc_diagnstc_asi_d = (asi_d[7:0] == 8'h46) ;
171
assign  dtagv_diagnstc_asi_d = (asi_d[7:0] == 8'h47) ;
172
 
173
assign  idemap = (asi_d[7:0] == 8'h57) ; // I-MMU Demap Operation
174
assign  ddemap = (asi_d[7:0] == 8'h5F) ; // D-MMU Demap Operation
175
assign  ddata_in = (asi_d[7:0] == 8'h5C) ; // D-TLB Data-In
176
assign  ddaccess = (asi_d[7:0] == 8'h5D) ; // D-TLB Data-Access
177
assign  dtag_read = (asi_d[7:0] == 8'h5E) ; // D-TLB Tag Read
178
assign  idata_in = (asi_d[7:0] == 8'h54) ; // I-TLB Data-In
179
assign  idaccess = (asi_d[7:0] == 8'h55) ; // I-TLB Data-Access
180
assign  invld_all = (asi_d[7:0] == 8'h60) ; // I/D Invalidate All
181
assign  itag_read = (asi_d[7:0] == 8'h56) ; // I-TLB Tag Read
182
 
183
assign  tlb_lng_ltncy_asi_d =
184
        idemap          | ddemap        | ddata_in      |
185
        ddaccess        | dtag_read     | idata_in      |
186
        idaccess        | invld_all     | itag_read     ;
187
 
188
assign  wr_only_ltlb_asi_d =
189
        ddata_in        |       idata_in        |
190
        idemap          |       ddemap          |
191
        invld_all ;
192
 
193
assign  rd_only_ltlb_asi_d =
194
        dtag_read       |       itag_read       ;
195
 
196
assign  ifill_tlb_asi_d =       // itlb fill asi
197
        idata_in        |       idaccess        ;
198
 
199
assign  dfill_tlb_asi_d =       // i/d tlb fill asi
200
        ddata_in        |       ddaccess        ;
201
 
202
assign  nucleus_asi_exact_d =
203
        (asi_d[7:0] == 8'h04) |  // asi_nucleus
204
        (asi_d[7:0] == 8'h0C) ; // asi_nucleus_little
205
 
206
// Nucleus Ctxt
207
assign  nucleus_asi_d =
208
         nucleus_asi_exact_d |
209
        (asi_d[7:0] == 8'h24) | // asi_nucleus_quad_ldd
210
        (asi_d[7:0] == 8'h2C) ; // asi_nucleus_quad_ldd_little
211
 
212
assign  asi_if_user_prim_d =
213
        (asi_d[7:0] == 8'h10) |  // asi_as_if_user_primary
214
        (asi_d[7:0] == 8'h18) ;  // asi_as_if_user_primary_little
215
 
216
// asi_if_user primary asi
217
assign  asi_if_user_prim_all_d =
218
         asi_if_user_prim_d   |
219
        (asi_d[7:0] == 8'h22) |  // asi_as_if_user_primary_quad_ldd (blk-init)
220
        (asi_d[7:0] == 8'h2A) ;  // asi_as_if_user_primary_quad_ldd_little (blk-init)
221
 
222
assign  prim_asi_exact_d =
223
        (asi_d[7:0] == 8'h80) |  // asi_primary
224
        (asi_d[7:0] == 8'h88) ;  // asi_primary_little
225
 
226
// Primary Ctxt
227
assign  primary_asi_d =
228
         asi_if_user_prim_all_d   |
229
         prim_asi_exact_d     |
230
        (asi_d[7:0] == 8'h82) |  // asi_primary_no_fault
231
        (asi_d[7:0] == 8'h8A) |  // asi_primary_no_fault_little
232
        (asi_d[7:0] == 8'hE2) |  // asi_primary_quad_ldd (blk-init)
233
        (asi_d[7:0] == 8'hEA) |  // asi_primary_quad_ldd_little (blk-init)
234
        blk_asif_usr_p | blk_asif_usr_plittle |
235
        blk_plittle | blk_p | // block primary asi
236
        blk_cmt_p |     // Bug 4051
237
  unimp_CD_prm ;  // Bug 4532
238
 
239
assign  asi_if_user_sec_d =
240
        (asi_d[7:0] == 8'h11) | // asi_as_if_user_secondary
241
        (asi_d[7:0] == 8'h19) ; // asi_as_if_user_secondary_little
242
 
243
// asi_if_user secondary asi
244
assign  asi_if_user_sec_all_d =
245
         asi_if_user_sec_d   |
246
        (asi_d[7:0] == 8'h23) |  // asi_as_if_user_secondary_quad_ldd (blk-init)
247
        (asi_d[7:0] == 8'h2B) ;  // asi_as_if_user_secondary_quad_ldd_little (blk-init)
248
 
249
assign  as_if_user_asi_d = asi_if_user_prim_all_d | asi_if_user_sec_all_d |
250
blk_asif_usr_p | blk_asif_usr_plittle | blk_asif_usr_s | blk_asif_usr_slittle ;
251
 
252
assign  sec_asi_exact_d =
253
        (asi_d[7:0] == 8'h81) | // asi_secondary
254
        (asi_d[7:0] == 8'h89) ; // asi_secondary_little
255
 
256
// Secondary Ctxt
257
assign  secondary_asi_d =
258
         asi_if_user_sec_all_d    |
259
         sec_asi_exact_d      |
260
        (asi_d[7:0] == 8'h83) | // asi_secondary_no_fault
261
        (asi_d[7:0] == 8'h8B) | // asi_secondary_no_fault_little
262
        (asi_d[7:0] == 8'hE3) |  // asi_secondary_quad_ldd (blk-init)
263
        (asi_d[7:0] == 8'hEB) |  // asi_secondary_quad_ldd_little (blk-init)
264
        blk_asif_usr_s | blk_asif_usr_slittle |
265
        blk_slittle |  blk_s | // block secondary asi
266
        blk_cmt_s |  // Bug 4051
267
  unimp_CD_sec; // Bug 4532
268
 
269
// Little Endian
270
assign  lendian_asi_d =
271
        (asi_d[7:0] == 8'h0C) | // asi_nucleus_little
272
        (asi_d[7:0] == 8'h2C) | // asi_nucleus_quad_ldd_little 
273
        (asi_d[7:0] == 8'h18) |  // asi_as_if_user_primary_little
274
        (asi_d[7:0] == 8'h8A) |  // asi_primary_no_fault_little
275
        (asi_d[7:0] == 8'h8B) | // asi_secondary_no_fault_little
276
        (asi_d[7:0] == 8'h2A) |  // asi_as_if_user_primary_quad_ldd_little (blk-init)
277
        (asi_d[7:0] == 8'hEA) |  // asi_primary_quad_ldd_little (blk-init)
278
        (asi_d[7:0] == 8'h19) | // asi_as_if_user_secondary_little
279
        (asi_d[7:0] == 8'h89) | // asi_secondary_little
280
        (asi_d[7:0] == 8'h88) |  // asi_primary_little
281
        (asi_d[7:0] == 8'h2B) |  // asi_as_if_user_secondary_quad_ldd_little (blk-init)
282
        (asi_d[7:0] == 8'hEB) |  // asi_secondary_quad_ldd_little (blk-init)
283
        real_mem_little |
284
        real_io_little  |
285
        //(asi_d[7:0] == 8'h1D) |       // asi_phys_bypass_ec_with_ebit_littl
286
        //(asi_d[7:0] == 8'h1C) |       // asi_phys_bypass_ec_with_ebit_littl
287
        blk_asif_usr_plittle  | blk_asif_usr_slittle |  // little
288
        blk_plittle           | blk_slittle |           // little
289
        quad_ldd_real_little  | // asi_quad_ldd_real_little
290
        binit_nucleus_little_d ;// asi_nucleus_blk_init_st_quad_ldd_little
291
 
292
// No Fault
293
assign  nofault_asi_d =
294
        (asi_d[7:0] == 8'h82) |  // asi_primary_no_fault
295
        (asi_d[7:0] == 8'h8A) |  // asi_primary_no_fault_little
296
        (asi_d[7:0] == 8'h83) | // asi_secondary_no_fault
297
        (asi_d[7:0] == 8'h8B) ; // asi_secondary_no_fault_little
298
 
299
assign  binit_nucleus_d =
300
        (asi_d[7:0] == 8'h27) ;  // asi_nucleus_blk_init_st_quad_ldd
301
assign  binit_nucleus_little_d =
302
        (asi_d[7:0] == 8'h2F) ;  // asi_nucleus_blk_init_st_quad_ldd_little
303
 
304
// Quad (These are duplicated - they can be shared)
305
assign  binit_quad_asi_d =
306
        binit_nucleus_d |       // asi_nucleus_blk_init_st_quad_ldd
307
        binit_nucleus_little_d |// asi_nucleus_blk_init_st_quad_ldd_little
308
        (asi_d[7:0] == 8'h22) |  // asi_as_if_user_primary_quad_ldd (blk-init)
309
        (asi_d[7:0] == 8'h2A) |  // asi_as_if_user_primary_quad_ldd_little (blk-init)
310
        (asi_d[7:0] == 8'h23) |  // asi_as_if_user_secondary_quad_ldd (blk-init)
311
        (asi_d[7:0] == 8'h2B) |  // asi_as_if_user_secondary_quad_ldd_little (blk-init)
312
        (asi_d[7:0] == 8'hE2) |  // asi_primary_quad_ldd (blk-init)
313
        (asi_d[7:0] == 8'hEA) |  // asi_primary_quad_ldd_little (blk-init)
314
        (asi_d[7:0] == 8'hE3) |  // asi_secondary_quad_ldd (blk-init)
315
        (asi_d[7:0] == 8'hEB) ;  // asi_secondary_quad_ldd_little (blk-init)
316
 
317
assign  quad_ldd_real =
318
        (asi_d[7:0] == 8'h26) ; // asi_quad_ldd_real
319
assign  quad_ldd_real_little =
320
        (asi_d[7:0] == 8'h2E) ; // asi_quad_ldd_real_little
321
 
322
assign  quad_asi_d =
323
        binit_quad_asi_d      | // blk-init quad asi
324
        quad_ldd_real         | // asi_quad_ldd_real
325
        quad_ldd_real_little  | // asi_quad_ldd_real_little
326
        (asi_d[7:0] == 8'h24) | // asi_nucleus_quad_ldd 
327
        (asi_d[7:0] == 8'h2C) ; // asi_nucleus_quad_ldd_little 
328
 
329
// EC
330
assign  real_io_little = (asi_d[7:0] == 8'h1D) ;
331
assign  real_mem_little = (asi_d[7:0] == 8'h1C) ;
332
 
333
assign  phy_byp_ec_asi =
334
        (asi_d[7:0] == 8'h15) |  // asi_phys_bypass_ec_with_ebit(real_io)
335
        real_io_little ;        // asi_phys_bypass_ec_with_ebit_little(real_io_little)
336
        //(asi_d[7:0] == 8'h1D) ;       // asi_phys_bypass_ec_with_ebit_little(real_io_little)
337
                                // asi assumed for io address specifically !!
338
                                // asi assumed for io address specifically !!
339
 
340
assign  phy_use_ec_asi =
341
        (asi_d[7:0] == 8'h14) |  // asi_phys_use_ec(real_mem)
342
        real_mem_little ;       // asi_phys_use_ec_little(real_mem_little)
343
        //(asi_d[7:0] == 8'h1C) ;       // asi_phys_use_ec_little(real_mem_little)
344
 
345
assign  phy_use_ec_asi_d = phy_use_ec_asi ;
346
assign  phy_byp_ec_asi_d = phy_byp_ec_asi ;
347
 
348
// Physical Use - Always results in R->P xslation.
349
assign  tlb_byp_asi_d =
350
                phy_byp_ec_asi | phy_use_ec_asi |
351
                quad_ldd_real  | quad_ldd_real_little ;
352
 
353
// Atomic asi
354
assign  atomic_asi_d = nucleus_asi_exact_d | prim_asi_exact_d | sec_asi_exact_d |
355
                asi_if_user_prim_d | asi_if_user_sec_d | phy_use_ec_asi ;
356
 
357
assign  dcache_byp_asi_d = tlb_byp_asi_d ;
358
 
359
// ASI causing Data Access Exceptions - (TBD)
360
 
361
assign  rd_only_asi_d =
362
        (asi_d[7:0] == 8'h82) |  // asi_primary_no_fault
363
        (asi_d[7:0] == 8'h8A) |  // asi_primary_no_fault_little
364
        (asi_d[7:0] == 8'h83) | // asi_secondary_no_fault
365
        (asi_d[7:0] == 8'h8B) | // asi_secondary_no_fault_little
366
        (asi_d[7:0] == 8'h74) ; // asi_swrvr_udb_intr_r !! Does not have to be done by intrpt blk !!
367
 
368
assign  wr_only_asi_d =
369
        (asi_d[7:0] == 8'h73) ; // asi_swrvr_udb_intr_w
370
 
371
// Block Asi
372
assign  blk_asif_usr_p = (asi_d[7:0] == 8'h16) ; // asi_block_as_if_user_primary
373
assign  blk_asif_usr_plittle = (asi_d[7:0] == 8'h1E) ; // asi_block_as_if_user_primary_little
374
assign  blk_asif_usr_s = (asi_d[7:0] == 8'h17) ; // asi_block_as_if_user_secondary
375
assign  blk_asif_usr_slittle = (asi_d[7:0] == 8'h1F) ; // asi_block_as_if_user_secondary_little
376
assign  blk_plittle = (asi_d[7:0] == 8'hF8) ; // asi_block_primary_little 
377
assign  blk_slittle = (asi_d[7:0] == 8'hF9) ; // asi_block_secondary_little 
378
assign  blk_cmt_p = (asi_d[7:0] == 8'hE0) ; // asi_block_commit_primary ?? behaviour 
379
assign  blk_cmt_s = (asi_d[7:0] == 8'hE1) ; // asi_block_commit_secondary ?? behaviour 
380
assign  blk_p = (asi_d[7:0] == 8'hF0) ; // asi_block_primary
381
assign  blk_s = (asi_d[7:0] == 8'hF1) ; // asi_block_secondary
382
 
383
//assign        blk_cmt_asi_d = blk_cmt_p | blk_cmt_s ;
384
 
385
assign  blk_asi_d =
386
        blk_asif_usr_p  | blk_asif_usr_s |
387
        blk_plittle     | blk_slittle    |
388
        //blk_cmt_p     | blk_cmt_s      |
389
        blk_p           | blk_s          |
390
        blk_asif_usr_plittle  | blk_asif_usr_slittle |  // little
391
        blk_plittle           | blk_slittle ;           // little
392
 
393
// add to little-endian decode
394
// add to use_real ...
395
//assign      as_if_supv = 
396
//    (asi_d[7:0] == 8'h??) | // asi_if_supv_real 
397
//    (asi_d[7:0] == 8'h??) ; // asi_if_supv_real_little 
398
 
399
wire    unimp_C ;
400
assign  unimp_C =
401
        ((asi_d[7:4]==4'hC) &
402
                ~((asi_d[3:0]==4'h6) |
403
                  (asi_d[3:0]==4'h7) |
404
                  (asi_d[3:0]==4'hE) |
405
                  (asi_d[3:0]==4'hF))) ;
406
 
407
wire    unimp_D ;
408
assign  unimp_D =
409
        ((asi_d[7:4]==4'hD) &
410
                ~((asi_d[3:0]==4'h4) |
411
                  (asi_d[3:0]==4'h5) |
412
                  (asi_d[3:0]==4'h6) |
413
                  (asi_d[3:0]==4'h7) |
414
                  (asi_d[3:0]==4'hC) |
415
                  (asi_d[3:0]==4'hD) |
416
                  (asi_d[3:0]==4'hE) |
417
                  (asi_d[3:0]==4'hF))) ;
418
 
419
assign  unimp_CD_prm =
420
(asi_d[7:0] == 8'hC0) |
421
(asi_d[7:0] == 8'hC2) |
422
(asi_d[7:0] == 8'hC4) |
423
(asi_d[7:0] == 8'hC8) |
424
(asi_d[7:0] == 8'hCA) |
425
(asi_d[7:0] == 8'hCC) |
426
(asi_d[7:0] == 8'hD0) |
427
(asi_d[7:0] == 8'hD2) |
428
(asi_d[7:0] == 8'hD8) |
429
(asi_d[7:0] == 8'hDA) ;
430
 
431
assign  unimp_CD_sec =
432
(asi_d[7:0] == 8'hC1) |
433
(asi_d[7:0] == 8'hC3) |
434
(asi_d[7:0] == 8'hC5) |
435
(asi_d[7:0] == 8'hC9) |
436
(asi_d[7:0] == 8'hCB) |
437
(asi_d[7:0] == 8'hCD) |
438
(asi_d[7:0] == 8'hD1) |
439
(asi_d[7:0] == 8'hD3) |
440
(asi_d[7:0] == 8'hD9) |
441
(asi_d[7:0] == 8'hDB) ;
442
 
443
 
444
// Unimplemented asi
445
assign  unimp_asi_d =
446
// Bug 4692 - all unimplemented internal asi are now
447
// illegal.
448
//      (asi_d[7:0] == 8'h6E) | // asi_icache_pre_decode
449
//      (asi_d[7:0] == 8'h6F) | // asi_icache_next_field
450
//      (asi_d[7:0] == 8'h48) | // asi_intr_dispatch_status
451
//      (asi_d[7:0] == 8'h49) | // asi_intr_receive
452
//      (asi_d[7:0] == 8'h4A) | // asi_upa_config_register
453
//      (asi_d[7:0] == 8'h4E) | // asi_ecache_tag_data
454
//      dflush_asi_d |      //Bug 4580
455
        unimp_C | unimp_D | // Bug 4438 
456
        blk_cmt_p | blk_cmt_s ;
457
 
458
// Set of recognized asi's
459
assign  recognized_asi_d =
460
        asi_internal_d | nucleus_asi_d |  primary_asi_d | secondary_asi_d | lendian_asi_d |
461
        nofault_asi_d | quad_asi_d | tlb_byp_asi_d | unimp_asi_d | blk_asi_d ;
462
 
463
// Displacement Flush for L2
464
//assign        dflush_asi_d =
465
//      (asi_d[7:0] == 8'h30) ; // asi_direct_map_ecache
466
 
467
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.