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/] [spw/] [wrapper/] [grspw_gen.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:      grspw_gen
20
-- File:        grspw_gen.vhd
21
-- Author:      Marko Isomaki - Gaisler Research 
22
-- Description: Generic GRSPW core
23
------------------------------------------------------------------------------
24
library ieee;
25
use ieee.std_logic_1164.all;
26
library grlib;
27
use grlib.stdlib.all;
28
library techmap;
29
use techmap.gencomp.all;
30
library spw;
31
use spw.spwcomp.all;
32
 
33
entity grspw_gen is
34
  generic(
35
    tech         : integer := 0;
36
    sysfreq      : integer := 10000;
37
    usegen       : integer range 0 to 1  := 1;
38
    nsync        : integer range 1 to 2  := 1;
39
    rmap         : integer range 0 to 1  := 0;
40
    rmapcrc      : integer range 0 to 1  := 0;
41
    fifosize1    : integer range 4 to 32 := 32;
42
    fifosize2    : integer range 16 to 64 := 64;
43
    rxclkbuftype : integer range 0 to 2 := 0;
44
    rxunaligned  : integer range 0 to 1 := 0;
45
    rmapbufs     : integer range 2 to 8 := 4;
46
    ft           : integer range 0 to 2 := 0;
47
    scantest     : integer range 0 to 1 := 0;
48
    techfifo     : integer range 0 to 1 := 1;
49
    ports        : integer range 1 to 2 := 1;
50
    memtech      : integer := 0
51
  );
52
  port(
53
    rst          : in  std_ulogic;
54
    clk          : in  std_ulogic;
55
    txclk        : in  std_ulogic;
56
    --ahb mst in
57
    hgrant       : in  std_ulogic;
58
    hready       : in  std_ulogic;
59
    hresp        : in  std_logic_vector(1 downto 0);
60
    hrdata       : in  std_logic_vector(31 downto 0);
61
    --ahb mst out
62
    hbusreq      : out  std_ulogic;
63
    hlock        : out  std_ulogic;
64
    htrans       : out  std_logic_vector(1 downto 0);
65
    haddr        : out  std_logic_vector(31 downto 0);
66
    hwrite       : out  std_ulogic;
67
    hsize        : out  std_logic_vector(2 downto 0);
68
    hburst       : out  std_logic_vector(2 downto 0);
69
    hprot        : out  std_logic_vector(3 downto 0);
70
    hwdata       : out  std_logic_vector(31 downto 0);
71
    --apb slv in 
72
    psel         : in   std_ulogic;
73
    penable      : in   std_ulogic;
74
    paddr        : in   std_logic_vector(31 downto 0);
75
    pwrite       : in   std_ulogic;
76
    pwdata       : in   std_logic_vector(31 downto 0);
77
    --apb slv out
78
    prdata       : out  std_logic_vector(31 downto 0);
79
    --spw in
80
    di           : in   std_logic_vector(1 downto 0);
81
    si           : in   std_logic_vector(1 downto 0);
82
    --spw out
83
    do           : out  std_logic_vector(1 downto 0);
84
    so           : out  std_logic_vector(1 downto 0);
85
    --time iface
86
    tickin       : in   std_ulogic;
87
    tickout      : out  std_ulogic;
88
    --irq
89
    irq          : out  std_logic;
90
    --misc     
91
    clkdiv10     : in   std_logic_vector(7 downto 0);
92
    dcrstval     : in   std_logic_vector(9 downto 0);
93
    timerrstval  : in   std_logic_vector(11 downto 0);
94
    --rmapen
95
    rmapen       : in   std_ulogic;
96
    linkdis      : out  std_ulogic;
97
    testclk      : in   std_ulogic := '0';
98
    testrst      : in   std_ulogic := '0';
99
    testen       : in   std_ulogic := '0'
100
    );
101
end entity;
102
 
103
architecture rtl of grspw_gen is
104
  constant fabits1      : integer := log2(fifosize1);
105
  constant fabits2      : integer := log2(fifosize2);
106
  constant rfifo        : integer := 5 + log2(rmapbufs);
107
 
108
  signal rxclki, nrxclki, rxclko : std_logic_vector(1 downto 0);
109
 
110
  --rx ahb fifo
111
  signal rxrenable    : std_ulogic;
112
  signal rxraddress   : std_logic_vector(4 downto 0);
113
  signal rxwrite      : std_ulogic;
114
  signal rxwdata      : std_logic_vector(31 downto 0);
115
  signal rxwaddress   : std_logic_vector(4 downto 0);
116
  signal rxrdata      : std_logic_vector(31 downto 0);
117
  --tx ahb fifo
118
  signal txrenable    : std_ulogic;
119
  signal txraddress   : std_logic_vector(4 downto 0);
120
  signal txwrite      : std_ulogic;
121
  signal txwdata      : std_logic_vector(31 downto 0);
122
  signal txwaddress   : std_logic_vector(4 downto 0);
123
  signal txrdata      : std_logic_vector(31 downto 0);
124
  --nchar fifo
125
  signal ncrenable    : std_ulogic;
126
  signal ncraddress   : std_logic_vector(5 downto 0);
127
  signal ncwrite      : std_ulogic;
128
  signal ncwdata      : std_logic_vector(8 downto 0);
129
  signal ncwaddress   : std_logic_vector(5 downto 0);
130
  signal ncrdata      : std_logic_vector(8 downto 0);
131
  --rmap buf
132
  signal rmrenable    : std_ulogic;
133
  signal rmrenablex   : std_ulogic;
134
  signal rmraddress   : std_logic_vector(7 downto 0);
135
  signal rmwrite      : std_ulogic;
136
  signal rmwdata      : std_logic_vector(7 downto 0);
137
  signal rmwaddress   : std_logic_vector(7 downto 0);
138
  signal rmrdata      : std_logic_vector(7 downto 0);
139
  --misc
140
  signal rxclk, nrxclk : std_logic_vector(ports-1 downto 0);
141
 
142
  attribute syn_netlist_hierarchy : boolean;
143
  attribute syn_netlist_hierarchy of rtl : architecture is false;
144
 
145
begin
146
 
147
  grspwc0 : grspwc
148
    generic map(
149
      sysfreq      => sysfreq,
150
      usegen       => usegen,
151
      nsync        => nsync,
152
      rmap         => rmap,
153
      rmapcrc      => rmapcrc,
154
      fifosize1    => fifosize1,
155
      fifosize2    => fifosize2,
156
      rxunaligned  => rxunaligned,
157
      rmapbufs     => rmapbufs,
158
      scantest     => scantest,
159
      ports        => ports,
160
      tech         => tech)
161
    port map(
162
      rst          => rst,
163
      clk          => clk,
164
      txclk        => txclk,
165
      --ahb mst in
166
      hgrant       => hgrant,
167
      hready       => hready,
168
      hresp        => hresp,
169
      hrdata       => hrdata,
170
      --ahb mst out
171
      hbusreq      => hbusreq,
172
      hlock        => hlock,
173
      htrans       => htrans,
174
      haddr        => haddr,
175
      hwrite       => hwrite,
176
      hsize        => hsize,
177
      hburst       => hburst,
178
      hprot        => hprot,
179
      hwdata       => hwdata,
180
      --apb slv in 
181
      psel         => psel,
182
      penable      => penable,
183
      paddr        => paddr,
184
      pwrite       => pwrite,
185
      pwdata       => pwdata,
186
      --apb slv out
187
      prdata       => prdata,
188
      --spw in
189
      di           => di,
190
      si           => si,
191
      --spw out
192
      do           => do,
193
      so           => so,
194
      --time iface
195
      tickin       => tickin,
196
      tickout      => tickout,
197
      --clk bufs
198
      rxclki       => rxclki,
199
      nrxclki      => nrxclki,
200
      rxclko       => rxclko,
201
      --irq
202
      irq          => irq,
203
      --misc     
204
      clkdiv10     => clkdiv10,
205
      dcrstval     => dcrstval,
206
      timerrstval  => timerrstval,
207
      --rmapen    
208
      rmapen       => rmapen,
209
      --rx ahb fifo
210
      rxrenable    => rxrenable,
211
      rxraddress   => rxraddress,
212
      rxwrite      => rxwrite,
213
      rxwdata      => rxwdata,
214
      rxwaddress   => rxwaddress,
215
      rxrdata      => rxrdata,
216
      --tx ahb fifo
217
      txrenable    => txrenable,
218
      txraddress   => txraddress,
219
      txwrite      => txwrite,
220
      txwdata      => txwdata,
221
      txwaddress   => txwaddress,
222
      txrdata      => txrdata,
223
      --nchar fifo
224
      ncrenable    => ncrenable,
225
      ncraddress   => ncraddress,
226
      ncwrite      => ncwrite,
227
      ncwdata      => ncwdata,
228
      ncwaddress   => ncwaddress,
229
      ncrdata      => ncrdata,
230
      --rmap buf
231
      rmrenable    => rmrenable,
232
      rmraddress   => rmraddress,
233
      rmwrite      => rmwrite,
234
      rmwdata      => rmwdata,
235
      rmwaddress   => rmwaddress,
236
      rmrdata      => rmrdata,
237
      linkdis      => linkdis,
238
      testclk      => clk,
239
      testrst      => testrst,
240
      testen       => testen
241
      );
242
 
243
 
244
  ntst: if scantest = 0 generate
245
    cloop : for i in 0 to ports-1 generate
246
      rx_clkbuf : techbuf generic map(tech => tech, buftype => rxclkbuftype)
247
        port map(i => rxclko(i), o => rxclki(i));
248
    end generate;
249
    rmrenablex <= rmrenable;
250
  end generate;
251
  tst: if scantest = 1 generate
252
    cloop : for i in 0 to ports-1 generate
253
      rxclk(i) <= clk when testen = '1' else rxclko(i);
254
      nrxclk(i) <= clk when testen = '1' else not rxclko(i);
255
      rx_clkbuf : techbuf generic map(tech => tech, buftype => rxclkbuftype)
256
        port map(i => rxclk(i), o => rxclki(i));
257
      nrx_clkbuf : techbuf generic map(tech => tech, buftype => rxclkbuftype)
258
        port map(i => nrxclk(i), o => nrxclki(i));
259
    end generate;
260
    rmrenablex <= rmrenable and not testen;
261
  end generate;
262
 
263
  ------------------------------------------------------------------------------
264
  -- FIFOS ---------------------------------------------------------------------
265
  ------------------------------------------------------------------------------
266
 
267
  nft : if ft = 0 generate
268
    --receiver AHB FIFO
269
    rx_ram0 : syncram_2p generic map(memtech*techfifo, fabits1, 32)
270
    port map(clk, rxrenable, rxraddress(fabits1-1 downto 0),
271
      rxrdata, clk, rxwrite,
272
      rxwaddress(fabits1-1 downto 0), rxwdata);
273
 
274
    --receiver nchar FIFO
275
    rx_ram1 : syncram_2p generic map(memtech*techfifo, fabits2, 9)
276
    port map(clk, ncrenable, ncraddress(fabits2-1 downto 0),
277
      ncrdata, clk, ncwrite,
278
      ncwaddress(fabits2-1 downto 0), ncwdata);
279
 
280
    --transmitter FIFO
281
    tx_ram0 : syncram_2p generic map(memtech*techfifo, fabits1, 32)
282
    port map(clk, txrenable, txraddress(fabits1-1 downto 0),
283
      txrdata, clk, txwrite, txwaddress(fabits1-1 downto 0), txwdata);
284
 
285
    --RMAP Buffer
286
    rmap_ram : if (rmap = 1) generate
287
      ram0 : syncram_2p generic map(memtech, rfifo, 8)
288
      port map(clk, rmrenablex, rmraddress(rfifo-1 downto 0),
289
        rmrdata, clk, rmwrite, rmwaddress(rfifo-1 downto 0),
290
        rmwdata);
291
    end generate;
292
  end generate;
293
 
294
  ft1 : if ft /= 0 generate
295
    --receiver AHB FIFO
296
    rx_ram0 : syncram_2pft generic map(memtech*techfifo, fabits1, 32, 0, 0, ft*techfifo)
297
    port map(clk, rxrenable, rxraddress(fabits1-1 downto 0),
298
      rxrdata, clk, rxwrite,
299
      rxwaddress(fabits1-1 downto 0), rxwdata);
300
 
301
    --receiver nchar FIFO
302
    rx_ram1 : syncram_2pft generic map(memtech*techfifo, fabits2, 9, 0, 0, 2*techfifo)
303
    port map(clk, ncrenable, ncraddress(fabits2-1 downto 0),
304
      ncrdata, clk, ncwrite,
305
      ncwaddress(fabits2-1 downto 0), ncwdata);
306
 
307
    --transmitter FIFO
308
    tx_ram0 : syncram_2pft generic map(memtech*techfifo, fabits1, 32, 0, 0, ft*techfifo)
309
    port map(clk, txrenable, txraddress(fabits1-1 downto 0),
310
      txrdata, clk, txwrite, txwaddress(fabits1-1 downto 0), txwdata);
311
 
312
    --RMAP Buffer
313
    rmap_ram : if (rmap = 1) generate
314
      ram0 : syncram_2pft generic map(memtech, rfifo, 8, 0, 0, 2)
315
      port map(clk, rmrenablex, rmraddress(rfifo-1 downto 0),
316
        rmrdata, clk, rmwrite, rmwaddress(rfifo-1 downto 0),
317
        rmwdata);
318
    end generate;
319
  end generate;
320
 
321
end architecture;

powered by: WebSVN 2.1.0

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