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

Subversion Repositories mips_enhanced

[/] [mips_enhanced/] [trunk/] [grlib-gpl-1.0.19-b3188/] [lib/] [gaisler/] [leon3/] [grfpwx.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dimamali
------------------------------------------------------------------------------
2
--  This file is a part of the GRLIB VHDL IP LIBRARY
3
--  Copyright (C) 2003, Gaisler Research
4
--
5
--  This program is free software; you can redistribute it and/or modify
6
--  it under the terms of the GNU General Public License as published by
7
--  the Free Software Foundation; either version 2 of the License, or
8
--  (at your option) any later version.
9
--
10
--  This program is distributed in the hope that it will be useful,
11
--  but WITHOUT ANY WARRANTY; without even the implied warranty of
12
--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
--  GNU General Public License for more details.
14
--
15
--  You should have received a copy of the GNU General Public License
16
--  along with this program; if not, write to the Free Software
17
--  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
18
-----------------------------------------------------------------------------
19
-- Entity:      grfpwx
20
-- File:        grfpwx.vhd
21
-- Author:      Edvin Catovic - Gaisler Research
22
-- Description: GRFPU/GRFPC wrapper and FP register file
23
------------------------------------------------------------------------------
24
 
25
library IEEE;
26
use IEEE.std_logic_1164.all;
27
library gaisler;
28
use gaisler.leon3.all;
29
library techmap;
30
use techmap.gencomp.all;
31
use techmap.netcomp.all;
32
 
33
entity grfpwx is
34
  generic (fabtech  : integer := 0;
35
           memtech  : integer := 0;
36
           mul      : integer range 0 to 2 := 0;
37
           pclow    : integer range 0 to 2 := 2;
38
           dsu      : integer range 0 to 2 := 0;
39
           disas    : integer range 0 to 2 := 0;
40
           netlist  : integer              := 0;
41
           index    : integer              := 0);
42
  port (
43
    rst    : in  std_ulogic;                    -- Reset
44
    clk    : in  std_ulogic;
45
    holdn  : in  std_ulogic;                    -- pipeline hold
46
    cpi    : in  fpc_in_type;
47
    cpo    : out fpc_out_type
48
    );
49
end;
50
 
51
architecture rtl of grfpwx is
52
 
53
  component grfpw
54
  generic (fabtech  : integer := 0;
55
           memtech  : integer := 0;
56
           mul      : integer range 0 to 2 := 0;
57
           pclow    : integer range 0 to 2 := 2;
58
           dsu      : integer range 0 to 1 := 0;
59
           disas    : integer range 0 to 2 := 0;
60
           index    : integer range 0 to 2 := 0
61
           );
62
  port (
63
    rst    : in  std_ulogic;                    -- Reset
64
    clk    : in  std_ulogic;
65
    holdn  : in  std_ulogic;                    -- pipeline hold
66
    cpi_flush   : in std_ulogic;                          -- pipeline flush
67
    cpi_exack           : in std_ulogic;                          -- FP exception acknowledge
68
    cpi_a_rs1   : in std_logic_vector(4 downto 0);
69
    cpi_d_pc    : in std_logic_vector(31 downto 0);
70
    cpi_d_inst  : in std_logic_vector(31 downto 0);
71
    cpi_d_cnt   : in std_logic_vector(1 downto 0);
72
    cpi_d_trap  : in std_ulogic;
73
    cpi_d_annul : in std_ulogic;
74
    cpi_d_pv    : in std_ulogic;
75
    cpi_a_pc    : in std_logic_vector(31 downto 0);
76
    cpi_a_inst  : in std_logic_vector(31 downto 0);
77
    cpi_a_cnt   : in std_logic_vector(1 downto 0);
78
    cpi_a_trap  : in std_ulogic;
79
    cpi_a_annul : in std_ulogic;
80
    cpi_a_pv    : in std_ulogic;
81
    cpi_e_pc    : in std_logic_vector(31 downto 0);
82
    cpi_e_inst  : in std_logic_vector(31 downto 0);
83
    cpi_e_cnt   : in std_logic_vector(1 downto 0);
84
    cpi_e_trap  : in std_ulogic;
85
    cpi_e_annul : in std_ulogic;
86
    cpi_e_pv    : in std_ulogic;
87
    cpi_m_pc    : in std_logic_vector(31 downto 0);
88
    cpi_m_inst  : in std_logic_vector(31 downto 0);
89
    cpi_m_cnt   : in std_logic_vector(1 downto 0);
90
    cpi_m_trap  : in std_ulogic;
91
    cpi_m_annul : in std_ulogic;
92
    cpi_m_pv    : in std_ulogic;
93
    cpi_x_pc    : in std_logic_vector(31 downto 0);
94
    cpi_x_inst  : in std_logic_vector(31 downto 0);
95
    cpi_x_cnt   : in std_logic_vector(1 downto 0);
96
    cpi_x_trap  : in std_ulogic;
97
    cpi_x_annul : in std_ulogic;
98
    cpi_x_pv    : in std_ulogic;
99
    cpi_lddata        : in std_logic_vector(31 downto 0);     -- load data
100
    cpi_dbg_enable : in std_ulogic;
101
    cpi_dbg_write  : in std_ulogic;
102
    cpi_dbg_fsr    : in std_ulogic;                            -- FSR access
103
    cpi_dbg_addr   : in std_logic_vector(4 downto 0);
104
    cpi_dbg_data   : in std_logic_vector(31 downto 0);
105
 
106
    cpo_data          : out std_logic_vector(31 downto 0); -- store data
107
    cpo_exc             : out std_logic;                         -- FP exception
108
    cpo_cc           : out std_logic_vector(1 downto 0);  -- FP condition codes
109
    cpo_ccv            : out std_ulogic;                         -- FP condition codes valid
110
    cpo_ldlock       : out std_logic;                    -- FP pipeline hold
111
    cpo_holdn         : out std_ulogic;
112
    cpo_dbg_data     : out std_logic_vector(31 downto 0);
113
 
114
    rfi1_rd1addr        : out std_logic_vector(3 downto 0);
115
    rfi1_rd2addr        : out std_logic_vector(3 downto 0);
116
    rfi1_wraddr         : out std_logic_vector(3 downto 0);
117
    rfi1_wrdata         : out std_logic_vector(31 downto 0);
118
    rfi1_ren1        : out std_ulogic;
119
    rfi1_ren2        : out std_ulogic;
120
    rfi1_wren        : out std_ulogic;
121
 
122
    rfi2_rd1addr        : out std_logic_vector(3 downto 0);
123
    rfi2_rd2addr        : out std_logic_vector(3 downto 0);
124
    rfi2_wraddr         : out std_logic_vector(3 downto 0);
125
    rfi2_wrdata         : out std_logic_vector(31 downto 0);
126
    rfi2_ren1        : out std_ulogic;
127
    rfi2_ren2        : out std_ulogic;
128
    rfi2_wren        : out std_ulogic;
129
 
130
    rfo1_data1          : in std_logic_vector(31 downto 0);
131
    rfo1_data2          : in std_logic_vector(31 downto 0);
132
 
133
    rfo2_data1          : in std_logic_vector(31 downto 0);
134
    rfo2_data2          : in std_logic_vector(31 downto 0)
135
    );
136
  end component;
137
 
138
  signal rfi1, rfi2  : fp_rf_in_type;
139
  signal rfo1, rfo2  : fp_rf_out_type;
140
 
141
begin
142
 
143
  x0 : if netlist = 0 generate
144
   grfpw0 : grfpw generic map (fabtech, memtech, mul, pclow, dsu, disas, index)
145
   port map (
146
    rst          ,
147
    clk          ,
148
    holdn        ,
149
    cpi.flush    ,
150
    cpi.exack    ,
151
    cpi.a_rs1    ,
152
    cpi.d.pc     ,
153
    cpi.d.inst   ,
154
    cpi.d.cnt    ,
155
    cpi.d.trap   ,
156
    cpi.d.annul  ,
157
    cpi.d.pv     ,
158
    cpi.a.pc     ,
159
    cpi.a.inst   ,
160
    cpi.a.cnt    ,
161
    cpi.a.trap   ,
162
    cpi.a.annul  ,
163
    cpi.a.pv     ,
164
    cpi.e.pc     ,
165
    cpi.e.inst   ,
166
    cpi.e.cnt    ,
167
    cpi.e.trap   ,
168
    cpi.e.annul  ,
169
    cpi.e.pv     ,
170
    cpi.m.pc     ,
171
    cpi.m.inst   ,
172
    cpi.m.cnt    ,
173
    cpi.m.trap   ,
174
    cpi.m.annul  ,
175
    cpi.m.pv     ,
176
    cpi.x.pc     ,
177
    cpi.x.inst   ,
178
    cpi.x.cnt    ,
179
    cpi.x.trap   ,
180
    cpi.x.annul  ,
181
    cpi.x.pv     ,
182
    cpi.lddata   ,
183
    cpi.dbg.enable  ,
184
    cpi.dbg.write   ,
185
    cpi.dbg.fsr     ,
186
    cpi.dbg.addr    ,
187
    cpi.dbg.data    ,
188
 
189
    cpo.data        ,
190
    cpo.exc         ,
191
    cpo.cc          ,
192
    cpo.ccv         ,
193
    cpo.ldlock      ,
194
    cpo.holdn       ,
195
    cpo.dbg.data    ,
196
 
197
    rfi1.rd1addr    ,
198
    rfi1.rd2addr     ,
199
    rfi1.wraddr      ,
200
    rfi1.wrdata      ,
201
    rfi1.ren1        ,
202
    rfi1.ren2        ,
203
    rfi1.wren        ,
204
 
205
 
206
    rfi2.rd1addr     ,
207
    rfi2.rd2addr     ,
208
    rfi2.wraddr       ,
209
    rfi2.wrdata       ,
210
    rfi2.ren1         ,
211
    rfi2.ren2         ,
212
    rfi2.wren         ,
213
 
214
    rfo1.data1        ,
215
    rfo1.data2        ,
216
    rfo2.data1        ,
217
    rfo2.data2
218
    );
219
  end generate;
220
 
221
  x1 : if netlist = 1 generate
222
   grfpw0 : grfpw_net generic map (fabtech, pclow, dsu, disas)
223
   port map (
224
    rst          ,
225
    clk          ,
226
    holdn        ,
227
    cpi.flush    ,
228
    cpi.exack    ,
229
    cpi.a_rs1    ,
230
    cpi.d.pc     ,
231
    cpi.d.inst   ,
232
    cpi.d.cnt    ,
233
    cpi.d.trap   ,
234
    cpi.d.annul  ,
235
    cpi.d.pv     ,
236
    cpi.a.pc     ,
237
    cpi.a.inst   ,
238
    cpi.a.cnt    ,
239
    cpi.a.trap   ,
240
    cpi.a.annul  ,
241
    cpi.a.pv     ,
242
    cpi.e.pc     ,
243
    cpi.e.inst   ,
244
    cpi.e.cnt    ,
245
    cpi.e.trap   ,
246
    cpi.e.annul  ,
247
    cpi.e.pv     ,
248
    cpi.m.pc     ,
249
    cpi.m.inst   ,
250
    cpi.m.cnt    ,
251
    cpi.m.trap   ,
252
    cpi.m.annul  ,
253
    cpi.m.pv     ,
254
    cpi.x.pc     ,
255
    cpi.x.inst   ,
256
    cpi.x.cnt    ,
257
    cpi.x.trap   ,
258
    cpi.x.annul  ,
259
    cpi.x.pv     ,
260
    cpi.lddata   ,
261
    cpi.dbg.enable  ,
262
    cpi.dbg.write   ,
263
    cpi.dbg.fsr     ,
264
    cpi.dbg.addr    ,
265
    cpi.dbg.data    ,
266
 
267
    cpo.data        ,
268
    cpo.exc         ,
269
    cpo.cc          ,
270
    cpo.ccv         ,
271
    cpo.ldlock      ,
272
    cpo.holdn       ,
273
    cpo.dbg.data    ,
274
 
275
    rfi1.rd1addr    ,
276
    rfi1.rd2addr     ,
277
    rfi1.wraddr      ,
278
    rfi1.wrdata      ,
279
    rfi1.ren1        ,
280
    rfi1.ren2        ,
281
    rfi1.wren        ,
282
 
283
 
284
    rfi2.rd1addr     ,
285
    rfi2.rd2addr     ,
286
    rfi2.wraddr       ,
287
    rfi2.wrdata       ,
288
    rfi2.ren1         ,
289
    rfi2.ren2         ,
290
    rfi2.wren         ,
291
 
292
    rfo1.data1        ,
293
    rfo1.data2        ,
294
    rfo2.data1        ,
295
    rfo2.data2
296
    );
297
  end generate;
298
 
299
   rf1 : regfile_3p generic map (memtech, 4, 32, 1, 16)
300
     port map (clk, rfi1.wraddr, rfi1.wrdata, rfi1.wren, clk, rfi1.rd1addr, rfi1.ren1, rfo1.data1,
301
               rfi1.rd2addr, rfi1.ren2, rfo1.data2);
302
 
303
   rf2 : regfile_3p generic map (memtech, 4, 32, 1, 16)
304
     port map (clk, rfi2.wraddr, rfi2.wrdata, rfi2.wren, clk, rfi2.rd1addr, rfi2.ren1, rfo2.data1,
305
               rfi2.rd2addr, rfi2.ren2, rfo2.data2);
306
 
307
end;

powered by: WebSVN 2.1.0

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