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/] [spacewire/] [grspw.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
20
-- File:        grspw.vhd
21
-- Author:      Marko Isomaki - Gaisler Research 
22
-- Description: GRLIB wrapper for grspw core
23
------------------------------------------------------------------------------
24
library ieee;
25
use ieee.std_logic_1164.all;
26
library grlib;
27
use grlib.amba.all;
28
library techmap;
29
use techmap.gencomp.all;
30
use techmap.netcomp.all;
31
use grlib.stdlib.all;
32
use grlib.devices.all;
33
library gaisler;
34
use gaisler.spacewire.all;
35
library spw;
36
use spw.spwcomp.all;
37
 
38
entity grspw is
39
  generic(
40
    tech         : integer range 0 to NTECH := DEFFABTECH;
41
    hindex       : integer range 0 to NAHBMST-1 := 0;
42
    pindex       : integer range 0 to NAPBSLV-1 := 0;
43
    paddr        : integer range 0 to 16#FFF#   := 0;
44
    pmask        : integer range 0 to 16#FFF#   := 16#FFF#;
45
    pirq         : integer range 0 to NAHBIRQ-1 := 0;
46
    sysfreq      : integer := 10000;
47
    usegen       : integer range 0 to 1  := 1;
48
    nsync        : integer range 1 to 2  := 1;
49
    rmap         : integer range 0 to 1  := 0;
50
    rmapcrc      : integer range 0 to 1  := 0;
51
    fifosize1    : integer range 4 to 32 := 32;
52
    fifosize2    : integer range 16 to 64 := 64;
53
    rxclkbuftype : integer range 0 to 2 := 0;
54
    rxunaligned  : integer range 0 to 1 := 0;
55
    rmapbufs     : integer range 2 to 8 := 4;
56
    ft           : integer range 0 to 2 := 0;
57
    scantest     : integer range 0 to 1 := 0;
58
    techfifo     : integer range 0 to 1 := 1;
59
    netlist      : integer range 0 to 1 := 0;
60
    ports        : integer range 1 to 2 := 1;
61
    memtech      : integer range 0 to NTECH := DEFMEMTECH
62
  );
63
  port(
64
    rst        : in  std_ulogic;
65
    clk        : in  std_ulogic;
66
    txclk      : in  std_ulogic;
67
    ahbmi      : in  ahb_mst_in_type;
68
    ahbmo      : out ahb_mst_out_type;
69
    apbi       : in  apb_slv_in_type;
70
    apbo       : out apb_slv_out_type;
71
    swni       : in  grspw_in_type;
72
    swno       : out grspw_out_type
73
  );
74
end entity;
75
 
76
architecture rtl of grspw is
77
  constant fabits1      : integer := log2(fifosize1);
78
  constant fabits2      : integer := log2(fifosize2);
79
  constant rfifo        : integer := 5 + log2(rmapbufs);
80
  constant REVISION     : integer := 0;
81
  constant pconfig      : apb_config_type := (
82
 
83
    1 => apb_iobar(paddr, pmask));
84
 
85
  constant hconfig : ahb_config_type := (
86
 
87
  others => zero32);
88
 
89
  signal rxclki, nrxclki, rxclko : std_logic_vector(1 downto 0);
90
 
91
  --rx ahb fifo
92
  signal rxrenable    : std_ulogic;
93
  signal rxraddress   : std_logic_vector(4 downto 0);
94
  signal rxwrite      : std_ulogic;
95
  signal rxwdata      : std_logic_vector(31 downto 0);
96
  signal rxwaddress   : std_logic_vector(4 downto 0);
97
  signal rxrdata      : std_logic_vector(31 downto 0);
98
  --tx ahb fifo
99
  signal txrenable    : std_ulogic;
100
  signal txraddress   : std_logic_vector(4 downto 0);
101
  signal txwrite      : std_ulogic;
102
  signal txwdata      : std_logic_vector(31 downto 0);
103
  signal txwaddress   : std_logic_vector(4 downto 0);
104
  signal txrdata      : std_logic_vector(31 downto 0);
105
  --nchar fifo
106
  signal ncrenable    : std_ulogic;
107
  signal ncraddress   : std_logic_vector(5 downto 0);
108
  signal ncwrite      : std_ulogic;
109
  signal ncwdata      : std_logic_vector(8 downto 0);
110
  signal ncwaddress   : std_logic_vector(5 downto 0);
111
  signal ncrdata      : std_logic_vector(8 downto 0);
112
  --rmap buf
113
  signal rmrenable    : std_ulogic;
114
  signal rmrenablex   : std_ulogic;
115
  signal rmraddress   : std_logic_vector(7 downto 0);
116
  signal rmwrite      : std_ulogic;
117
  signal rmwdata      : std_logic_vector(7 downto 0);
118
  signal rmwaddress   : std_logic_vector(7 downto 0);
119
  signal rmrdata      : std_logic_vector(7 downto 0);
120
  --misc
121
  signal irq          : std_ulogic;
122
  signal rxclk, nrxclk : std_logic_vector(ports-1 downto 0);
123
  signal testin       : std_logic_vector(3 downto 0);
124
 
125
begin
126
 
127
  testin <= ahbmi.testen & "000";
128
 
129
rtl : if netlist = 0 generate
130
  grspwc0 : grspwc
131
    generic map(
132
      sysfreq      => sysfreq,
133
      usegen       => usegen,
134
      nsync        => nsync,
135
      rmap         => rmap,
136
      rmapcrc      => rmapcrc,
137
      fifosize1    => fifosize1,
138
      fifosize2    => fifosize2,
139
      rxunaligned  => rxunaligned,
140
      rmapbufs     => rmapbufs,
141
      scantest     => scantest,
142
      ports        => ports,
143
      tech         => tech)
144
    port map(
145
      rst          => rst,
146
      clk          => clk,
147
      txclk        => txclk,
148
      --ahb mst in
149
      hgrant       => ahbmi.hgrant(hindex),
150
      hready       => ahbmi.hready,
151
      hresp        => ahbmi.hresp,
152
      hrdata       => ahbmi.hrdata,
153
      --ahb mst out
154
      hbusreq      => ahbmo.hbusreq,
155
      hlock        => ahbmo.hlock,
156
      htrans       => ahbmo.htrans,
157
      haddr        => ahbmo.haddr,
158
      hwrite       => ahbmo.hwrite,
159
      hsize        => ahbmo.hsize,
160
      hburst       => ahbmo.hburst,
161
      hprot        => ahbmo.hprot,
162
      hwdata       => ahbmo.hwdata,
163
      --apb slv in 
164
      psel         => apbi.psel(pindex),
165
      penable      => apbi.penable,
166
      paddr        => apbi.paddr,
167
      pwrite       => apbi.pwrite,
168
      pwdata       => apbi.pwdata,
169
      --apb slv out
170
      prdata       => apbo.prdata,
171
      --spw in
172
      di           => swni.d,
173
      si           => swni.s,
174
      --spw out
175
      do           => swno.d,
176
      so           => swno.s,
177
      --time iface
178
      tickin       => swni.tickin,
179
      tickout      => swno.tickout,
180
      --clk bufs
181
      rxclki       => rxclki,
182
      nrxclki      => nrxclki,
183
      rxclko       => rxclko,
184
      --irq
185
      irq          => irq,
186
      --misc     
187
      clkdiv10     => swni.clkdiv10,
188
      dcrstval     => swni.dcrstval,
189
      timerrstval  => swni.timerrstval,
190
      --rmapen    
191
      rmapen       => swni.rmapen,
192
      --rx ahb fifo
193
      rxrenable    => rxrenable,
194
      rxraddress   => rxraddress,
195
      rxwrite      => rxwrite,
196
      rxwdata      => rxwdata,
197
      rxwaddress   => rxwaddress,
198
      rxrdata      => rxrdata,
199
      --tx ahb fifo
200
      txrenable    => txrenable,
201
      txraddress   => txraddress,
202
      txwrite      => txwrite,
203
      txwdata      => txwdata,
204
      txwaddress   => txwaddress,
205
      txrdata      => txrdata,
206
      --nchar fifo
207
      ncrenable    => ncrenable,
208
      ncraddress   => ncraddress,
209
      ncwrite      => ncwrite,
210
      ncwdata      => ncwdata,
211
      ncwaddress   => ncwaddress,
212
      ncrdata      => ncrdata,
213
      --rmap buf
214
      rmrenable    => rmrenable,
215
      rmraddress   => rmraddress,
216
      rmwrite      => rmwrite,
217
      rmwdata      => rmwdata,
218
      rmwaddress   => rmwaddress,
219
      rmrdata      => rmrdata,
220
      linkdis      => swno.linkdis,
221
      testclk      => clk,
222
      testrst      => ahbmi.testrst,
223
      testen       => ahbmi.testen
224
      );
225
end generate;
226
 
227
struct : if netlist = 1 generate
228
  grspwc0 : grspwc_net
229
    generic map(
230
      tech         => tech,
231
      sysfreq      => sysfreq,
232
      usegen       => usegen,
233
      nsync        => nsync,
234
      rmap         => rmap,
235
      rmapcrc      => rmapcrc,
236
      fifosize1    => fifosize1,
237
      fifosize2    => fifosize2,
238
      rxunaligned  => rxunaligned,
239
      rmapbufs     => rmapbufs,
240
      scantest     => scantest)
241
    port map(
242
      rst          => rst,
243
      clk          => clk,
244
      txclk        => txclk,
245
      --ahb mst in
246
      hgrant       => ahbmi.hgrant(hindex),
247
      hready       => ahbmi.hready,
248
      hresp        => ahbmi.hresp,
249
      hrdata       => ahbmi.hrdata,
250
      --ahb mst out
251
      hbusreq      => ahbmo.hbusreq,
252
      hlock        => ahbmo.hlock,
253
      htrans       => ahbmo.htrans,
254
      haddr        => ahbmo.haddr,
255
      hwrite       => ahbmo.hwrite,
256
      hsize        => ahbmo.hsize,
257
      hburst       => ahbmo.hburst,
258
      hprot        => ahbmo.hprot,
259
      hwdata       => ahbmo.hwdata,
260
      --apb slv in 
261
      psel         => apbi.psel(pindex),
262
      penable      => apbi.penable,
263
      paddr        => apbi.paddr,
264
      pwrite       => apbi.pwrite,
265
      pwdata       => apbi.pwdata,
266
      --apb slv out
267
      prdata       => apbo.prdata,
268
      --spw in
269
      di           => swni.d,
270
      si           => swni.s,
271
      --spw out
272
      do           => swno.d,
273
      so           => swno.s,
274
      --time iface
275
      tickin       => swni.tickin,
276
      tickout      => swno.tickout,
277
      --clk bufs
278
      rxclki       => rxclki,
279
      nrxclki      => nrxclki,
280
      rxclko       => rxclko,
281
      --irq
282
      irq          => irq,
283
      --misc     
284
      clkdiv10     => swni.clkdiv10,
285
      dcrstval     => swni.dcrstval,
286
      timerrstval  => swni.timerrstval,
287
      --rmapen    
288
      rmapen       => swni.rmapen,
289
      --rx ahb fifo
290
      rxrenable    => rxrenable,
291
      rxraddress   => rxraddress,
292
      rxwrite      => rxwrite,
293
      rxwdata      => rxwdata,
294
      rxwaddress   => rxwaddress,
295
      rxrdata      => rxrdata,
296
      --tx ahb fifo
297
      txrenable    => txrenable,
298
      txraddress   => txraddress,
299
      txwrite      => txwrite,
300
      txwdata      => txwdata,
301
      txwaddress   => txwaddress,
302
      txrdata      => txrdata,
303
      --nchar fifo
304
      ncrenable    => ncrenable,
305
      ncraddress   => ncraddress,
306
      ncwrite      => ncwrite,
307
      ncwdata      => ncwdata,
308
      ncwaddress   => ncwaddress,
309
      ncrdata      => ncrdata,
310
      --rmap buf
311
      rmrenable    => rmrenable,
312
      rmraddress   => rmraddress,
313
      rmwrite      => rmwrite,
314
      rmwdata      => rmwdata,
315
      rmwaddress   => rmwaddress,
316
      rmrdata      => rmrdata,
317
      linkdis      => swno.linkdis,
318
      testclk      => clk,
319
      testrst      => ahbmi.testrst,
320
      testen       => ahbmi.testen
321
      );
322
end generate;
323
 
324
  irqdrv : process(irq)
325
  begin
326
    apbo.pirq        <= (others => '0');
327
    apbo.pirq(pirq)  <= irq;
328
  end process;
329
 
330
  ahbmo.hirq       <= (others => '0');
331
  ahbmo.hconfig    <= hconfig;
332
  ahbmo.hindex     <= hindex;
333
 
334
  apbo.pconfig <= pconfig;
335
  apbo.pindex  <= pindex;
336
 
337
  ntst: if scantest = 0 generate
338
    cloop : for i in 0 to ports-1 generate
339
      rx_clkbuf : techbuf generic map(tech => tech, buftype => rxclkbuftype)
340
        port map(i => rxclko(i), o => rxclki(i));
341
    end generate;
342
    rmrenablex <= rmrenable;
343
  end generate;
344
  tst: if scantest = 1 generate
345
    cloop : for i in 0 to ports-1 generate
346
      rxclk(i) <= clk when ahbmi.testen = '1' else rxclko(i);
347
      nrxclk(i) <= clk when ahbmi.testen = '1' else not rxclko(i);
348
      rx_clkbuf : techbuf generic map(tech => tech, buftype => rxclkbuftype)
349
        port map(i => rxclk(i), o => rxclki(i));
350
      nrx_clkbuf : techbuf generic map(tech => tech, buftype => rxclkbuftype)
351
        port map(i => nrxclk(i), o => nrxclki(i));
352
    end generate;
353
    rmrenablex <= rmrenable and not ahbmi.testen;
354
  end generate;
355
 
356
  ------------------------------------------------------------------------------
357
  -- FIFOS ---------------------------------------------------------------------
358
  ------------------------------------------------------------------------------
359
 
360
  nft : if ft = 0 generate
361
    --receiver AHB FIFO
362
    rx_ram0 : syncram_2p generic map(memtech*techfifo, fabits1, 32)
363
    port map(clk, rxrenable, rxraddress(fabits1-1 downto 0), rxrdata, clk,
364
        rxwrite, rxwaddress(fabits1-1 downto 0), rxwdata, testin);
365
 
366
    --receiver nchar FIFO
367
    rx_ram1 : syncram_2p generic map(memtech*techfifo, fabits2, 9)
368
    port map(clk, ncrenable, ncraddress(fabits2-1 downto 0), ncrdata, clk,
369
        ncwrite, ncwaddress(fabits2-1 downto 0), ncwdata, testin);
370
 
371
    --transmitter FIFO
372
    tx_ram0 : syncram_2p generic map(memtech*techfifo, fabits1, 32)
373
    port map(clk, txrenable, txraddress(fabits1-1 downto 0), txrdata, clk,
374
        txwrite, txwaddress(fabits1-1 downto 0), txwdata, testin);
375
 
376
    --RMAP Buffer
377
    rmap_ram : if (rmap = 1) generate
378
      ram0 : syncram_2p generic map(memtech, rfifo, 8)
379
      port map(clk, rmrenablex, rmraddress(rfifo-1 downto 0), rmrdata, clk,
380
        rmwrite, rmwaddress(rfifo-1 downto 0), rmwdata, testin);
381
    end generate;
382
  end generate;
383
 
384
  ft1 : if ft /= 0 generate
385
    --receiver AHB FIFO
386
    rx_ram0 : syncram_2pft generic map(memtech*techfifo, fabits1, 32, 0, 0, ft*techfifo)
387
    port map(clk, rxrenable, rxraddress(fabits1-1 downto 0), rxrdata, clk,
388
        rxwrite, rxwaddress(fabits1-1 downto 0), rxwdata, open, testin);
389
 
390
    --receiver nchar FIFO
391
    rx_ram1 : syncram_2pft generic map(memtech*techfifo, fabits2, 9, 0, 0, 2*techfifo)
392
    port map(clk, ncrenable, ncraddress(fabits2-1 downto 0),
393
      ncrdata, clk, ncwrite,
394
      ncwaddress(fabits2-1 downto 0), ncwdata, open, testin);
395
 
396
    --transmitter FIFO
397
    tx_ram0 : syncram_2pft generic map(memtech*techfifo, fabits1, 32, 0, 0, ft*techfifo)
398
    port map(clk, txrenable, txraddress(fabits1-1 downto 0),
399
      txrdata, clk, txwrite, txwaddress(fabits1-1 downto 0), txwdata, open, testin);
400
 
401
    --RMAP Buffer
402
    rmap_ram : if (rmap = 1) generate
403
      ram0 : syncram_2pft generic map(memtech, rfifo, 8, 0, 0, 2)
404
      port map(clk, rmrenablex, rmraddress(rfifo-1 downto 0),
405
        rmrdata, clk, rmwrite, rmwaddress(rfifo-1 downto 0),
406
        rmwdata, open, testin);
407
    end generate;
408
  end generate;
409
 
410
-- pragma translate_off
411
    msg0 : if (rmap = 0) generate
412
      bootmsg : report_version
413
        generic map ("grspw" & tost(pindex) &
414
          ": Spacewire link rev " & tost(REVISION) & ", AHB fifos 2x" &
415
          tost(fifosize1*4)  & " bytes, rx fifo " & tost(fifosize2) &
416
         " bytes, irq " & tost(pirq));
417
    end generate;
418
 
419
    msg1 : if (rmap = 1) generate
420
      bootmsg : report_version
421
        generic map ("grspw" & tost(pindex) &
422
          ": Spacewire link rev " & tost(REVISION) & ", AHB fifos 2x " &
423
          tost(fifosize1*4)  & " bytes, rx fifo " & tost(fifosize2) &
424
         " bytes, irq " & tost(pirq) & " , RMAP Buffer " &
425
         tost(rmapbufs*32) & " bytes");
426
    end generate;
427
 
428
    pr0 : process is
429
    begin
430
      wait for 100 ns;
431
      if sysfreq < 10000 then
432
        print("WARNING: System frequency too low for GRSPW");
433
      end if;
434
      wait;
435
    end process;
436
 
437
-- pragma translate_on
438
 
439
end architecture;

powered by: WebSVN 2.1.0

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