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

Subversion Repositories sparc64soc

[/] [sparc64soc/] [trunk/] [T1-CPU/] [ifu/] [sparc_ifu_swpla.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dmitryr
// ========== Copyright Header Begin ==========================================
2
// 
3
// OpenSPARC T1 Processor File: sparc_ifu_swpla.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
//  Module Name: sparc_ifu_lfsr5
24
//  Description:
25
//  The IFQ is the icache input queue.  This communicates between the
26
//  IFU and the outside world.  It handles icache misses and
27
//  invalidate requests from the crossbar.
28
*/
29
////////////////////////////////////////////////////////////////////////
30
 
31
module sparc_ifu_swpla(/*AUTOARG*/
32
   // Outputs
33
   out,
34
   // Inputs
35
   in
36
   );
37
 
38
   input [31:0]  in;
39
   output        out;
40
 
41
   wire [31:0]    in;
42
   reg           out;
43
 
44
 
45
   always @ (in)
46
     begin
47
              if (in[31:30] == 2'b01)            // call
48
                out = 1'b1;
49
              else if (in[31:30] == 2'b00)       // branch, sethi, nop
50
                begin
51
                   if (in[24:22] == 3'b100) // nop/sethi
52
                     out = 1'b0;
53
                   else // branch
54
                     out = 1'b1;
55
                end // if (in[31:30] == 2'b00)
56
              else if (in[31:30] == 2'b10)        // arith, shift, mem#, mov
57
                begin
58
                   if (in[24:23] == 2'b11)  // wrpr, vis, save, jmpl
59
                     out = 1'b1;
60
                   else if (in[24] == 1'b0) // arith
61
                     begin
62
                              if (in[22] == 1'b0) // alu op
63
                                out = 1'b0;
64
                              else if ((in[22] == 1'b1) && (in[20:19] == 2'b00))
65
                                // subc or addc
66
                                out = 1'b0;
67
                              else // mul, div
68
                                out = 1'b1;
69
                     end // if (in[24] == 1'b0)
70
                   else // if (in[24:23] == 2'b10)  shft, mov, rdpr, tag
71
                     begin
72
                              if (in[22:19] == 4'h4) // mulscc
73
                                out = 1'b1;
74
                              else if (in[22] == 1'b0)  // shft, tag
75
                                out = 1'b0;
76
                              else if  ((in[22:19] == 4'hc) ||  (in[22:19] == 4'hf)) // mov
77
                                out = 1'b0;
78
//                            else if (in[22:19] == 4'ha)  // rdpr
79
//                              out = 1'b0;
80
                              else // rdsr, mem#, popc, flushw, rdpr
81
                                out = 1'b1;
82
                     end // if ((in[24] == 1'b1) && (in[23] == 1'b0))
83
                end // if (in[31:30] == 2'b10)
84
              else // ld st
85
                begin
86
//                 if (in[24] & in[22] & in[21] & ~in[20] & in[19]) // prefetch
87
//                   out = 1'b0;
88
             if (in[24] | in[23] | ~in[21]) // fp, alt space or ld
89
                     out = 1'b1;
90
//                 else if (in[24]) // FP and CAS
91
//                   out = 1'b1;
92
//                 else if (in[23] & in[20] & in[19]) // stda
93
//                   out = 1'b1;
94
                   else if ((~in[23]) && (in[22:19] == 4'he))  // stx
95
                     out = 1'b0;
96
                   else if (in[22:21] == 2'b01) // other st
97
                     out = 1'b0;
98
                   else // other atomic
99
                     out = 1'b1;
100
                end // else: !if(in[31:30] == 2'b10)
101
     end // always @ (in)
102
 
103
   sink #(32) s0(.in (in));
104
 
105
endmodule // sparc_ifu_swpla
106
 
107
 

powered by: WebSVN 2.1.0

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