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/] [memctrl/] [memctrl.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:  memctrl
20
-- File: memctrl.vhd
21
-- Author:  Jiri Gaisler - Gaisler Research
22
-- Description:   Memory controller package
23
------------------------------------------------------------------------------
24
 
25
library ieee;
26
use ieee.std_logic_1164.all;
27
library grlib;
28
use grlib.amba.all;
29
library techmap;
30
use techmap.gencomp.all;
31
 
32
package memctrl is
33
 
34
type memory_in_type is record
35
  data          : std_logic_vector(31 downto 0); -- Data bus address
36
  brdyn         : std_logic;
37
  bexcn         : std_logic;
38
  writen        : std_logic;
39
  wrn           : std_logic_vector(3 downto 0);
40
  bwidth        : std_logic_vector(1 downto 0);
41
  sd            : std_logic_vector(63 downto 0);
42
  cb            : std_logic_vector(15 downto 0);
43
  scb           : std_logic_vector(15 downto 0);
44
  edac          : std_logic;
45
end record;
46
 
47
type memory_out_type is record
48
  address       : std_logic_vector(31 downto 0);
49
  data          : std_logic_vector(31 downto 0);
50
  sddata        : std_logic_vector(63 downto 0);
51
  ramsn         : std_logic_vector(7 downto 0);
52
  ramoen        : std_logic_vector(7 downto 0);
53
  ramn          : std_ulogic;
54
  romn          : std_ulogic;
55
  mben          : std_logic_vector(3 downto 0);
56
  iosn          : std_logic;
57
  romsn         : std_logic_vector(7 downto 0);
58
  oen           : std_logic;
59
  writen        : std_logic;
60
  wrn           : std_logic_vector(3 downto 0);
61
  bdrive        : std_logic_vector(3 downto 0);
62
  vbdrive       : std_logic_vector(31 downto 0); --vector bus drive
63
  svbdrive      : std_logic_vector(63 downto 0); --vector bus drive sdram
64
  read          : std_logic;
65
  sa            : std_logic_vector(14 downto 0);
66
  cb            : std_logic_vector(15 downto 0);
67
  scb           : std_logic_vector(15 downto 0);
68
  vcdrive       : std_logic_vector(15 downto 0); --vector bus drive cb
69
  svcdrive      : std_logic_vector(15 downto 0); --vector bus drive cb sdram
70
  ce            : std_ulogic;
71
end record;
72
 
73
type sdctrl_in_type is record
74
  wprot     : std_ulogic;
75
  data      : std_logic_vector (127 downto 0);  -- data in
76
  cb        : std_logic_vector(15 downto 0);
77
end record;
78
 
79
type sdctrl_out_type is record
80
  sdcke     : std_logic_vector ( 1 downto 0);  -- clk en
81
  sdcsn     : std_logic_vector ( 1 downto 0);  -- chip sel
82
  sdwen     : std_ulogic;                       -- write en
83
  rasn      : std_ulogic;                       -- row addr stb
84
  casn      : std_ulogic;                       -- col addr stb
85
  dqm       : std_logic_vector ( 15 downto 0);  -- data i/o mask
86
  bdrive    : std_ulogic;                       -- bus drive
87
  qdrive    : std_ulogic;                       -- bus drive
88
  vbdrive   : std_logic_vector(31 downto 0);   -- vector bus drive
89
  address   : std_logic_vector (16 downto 2);  -- address out
90
  data      : std_logic_vector (127 downto 0);  -- data out
91
  cb        : std_logic_vector(15 downto 0);
92
  ce        : std_ulogic;
93
  ba        : std_logic_vector ( 1 downto 0);  -- bank address
94
  sdck      : std_logic_vector(2 downto 0);
95
  moben     : std_logic;                       -- Mobile support
96
  cal_en    : std_logic_vector(7 downto 0); -- enable delay calibration
97
  cal_inc   : std_logic_vector(7 downto 0); -- inc/dec delay
98
  cal_pll   : std_logic_vector(1 downto 0); -- (enable,inc/dec) pll phase
99
  cal_rst   : std_logic;                    -- calibration reset
100
  odt       : std_logic_vector(1 downto 0);
101
  conf      : std_logic_vector(63 downto 0);
102
end record;
103
 
104
type sdram_out_type is record
105
  sdcke     : std_logic_vector ( 1 downto 0);  -- clk en
106
  sdcsn     : std_logic_vector ( 1 downto 0);  -- chip sel
107
  sdwen     : std_ulogic;                       -- write en
108
  rasn      : std_ulogic;                       -- row addr stb
109
  casn      : std_ulogic;                       -- col addr stb
110
  dqm       : std_logic_vector ( 7 downto 0);  -- data i/o mask
111
end record;
112
 
113
component sdctrl
114
  generic (
115
    hindex  : integer := 0;
116
    haddr   : integer := 0;
117
    hmask   : integer := 16#f00#;
118
    ioaddr  : integer := 16#000#;
119
    iomask  : integer := 16#fff#;
120
    wprot   : integer := 0;
121
    invclk  : integer := 0;
122
    fast    : integer := 0;
123
    pwron   : integer := 0;
124
    sdbits  : integer := 32;
125
    oepol   : integer := 0;
126
    pageburst : integer := 0;
127
    mobile  : integer := 0
128
  );
129
  port (
130
    rst    : in  std_ulogic;
131
    clk    : in  std_ulogic;
132
    ahbsi  : in  ahb_slv_in_type;
133
    ahbso  : out ahb_slv_out_type;
134
    sdi    : in  sdctrl_in_type;
135
    sdo    : out sdctrl_out_type
136
  );
137
end component;
138
 
139
component ftsdctrl is
140
  generic (
141
    hindex  : integer := 0;
142
    haddr   : integer := 0;
143
    hmask   : integer := 16#f00#;
144
    ioaddr  : integer := 16#000#;
145
    iomask  : integer := 16#fff#;
146
    wprot   : integer := 0;
147
    invclk  : integer := 0;
148
    fast    : integer := 0;
149
    pwron   : integer := 0;
150
    sdbits  : integer := 32;
151
    edacen  : integer := 1;
152
    errcnt  : integer := 0;
153
    cntbits : integer range 1 to 8 := 1;
154
    oepol   : integer := 0;
155
    pageburst : integer := 0
156
  );
157
  port (
158
    rst     : in  std_ulogic;
159
    clk     : in  std_ulogic;
160
    ahbsi   : in  ahb_slv_in_type;
161
    ahbso   : out ahb_slv_out_type;
162
    sdi     : in  sdctrl_in_type;
163
    sdo     : out sdctrl_out_type
164
  );
165
end component;
166
 
167
 
168
component srctrl
169
  generic (
170
    hindex  : integer := 0;
171
    romaddr : integer := 0;
172
    rommask : integer := 16#ff0#;
173
    ramaddr : integer := 16#400#;
174
    rammask : integer := 16#ff0#;
175
    ioaddr  : integer := 16#200#;
176
    iomask  : integer := 16#ff0#;
177
    ramws   : integer := 0;
178
    romws   : integer := 2;
179
    iows    : integer := 2;
180
    rmw     : integer := 0;
181
    prom8en : integer := 0;
182
    oepol   : integer := 0;
183
    srbanks : integer range 1 to 5 := 1;
184
    banksz  : integer range 0 to 13 := 13;
185
    romasel : integer range 0 to 28 := 19
186
  );
187
  port (
188
    rst     : in  std_ulogic;
189
    clk     : in  std_ulogic;
190
    ahbsi   : in  ahb_slv_in_type;
191
    ahbso   : out ahb_slv_out_type;
192
    sri     : in  memory_in_type;
193
    sro     : out memory_out_type;
194
    sdo     : out sdctrl_out_type
195
  );
196
end component;
197
 
198
component ftsrctrl is
199
  generic (
200
    hindex       : integer := 0;
201
    romaddr      : integer := 0;
202
    rommask      : integer := 16#ff0#;
203
    ramaddr      : integer := 16#400#;
204
    rammask      : integer := 16#ff0#;
205
    ioaddr       : integer := 16#200#;
206
    iomask       : integer := 16#ff0#;
207
    ramws        : integer := 0;
208
    romws        : integer := 2;
209
    iows         : integer := 2;
210
    rmw          : integer := 0;
211
    srbanks      : integer range 1 to 8  := 1;
212
    banksz       : integer range 0 to 15 := 15;
213
    rombanks     : integer range 1 to 8  := 1;
214
    rombanksz    : integer range 0 to 15 := 15;
215
    rombankszdef : integer range 0 to 15 := 15;
216
    pindex       : integer := 0;
217
    paddr        : integer := 0;
218
    pmask        : integer := 16#fff#;
219
    edacen       : integer range 0 to 1 := 1;
220
    errcnt       : integer range 0 to 1 := 0;
221
    cntbits      : integer range 1 to 8 := 1;
222
    wsreg        : integer := 0;
223
    oepol        : integer := 0;
224
    prom8en      : integer := 0
225
  );
226
  port (
227
    rst          : in  std_ulogic;
228
    clk          : in  std_ulogic;
229
    ahbsi        : in  ahb_slv_in_type;
230
    ahbso        : out ahb_slv_out_type;
231
    apbi         : in  apb_slv_in_type;
232
    apbo         : out apb_slv_out_type;
233
    sri          : in  memory_in_type;
234
    sro          : out memory_out_type;
235
    sdo          : out sdctrl_out_type
236
  );
237
end component;
238
 
239
type sdram_in_type is record
240
  haddr         : std_logic_vector(31 downto 0);  -- memory address
241
  rhaddr        : std_logic_vector(31 downto 0);  -- latched memory address
242
  hready        : std_ulogic;
243
  hsize         : std_logic_vector(1 downto 0);
244
  hsel          : std_ulogic;
245
  hwrite        : std_ulogic;
246
  htrans        : std_logic_vector(1 downto 0);
247
  rhtrans       : std_logic_vector(1 downto 0);
248
  nhtrans       : std_logic_vector(1 downto 0);
249
  idle      : std_ulogic;
250
  enable    : std_ulogic;
251
  error     : std_ulogic;
252
  merror    : std_ulogic;
253
  brmw      : std_ulogic;
254
  edac      : std_ulogic;
255
  srdis         : std_logic;
256
end record;
257
 
258
type sdram_mctrl_out_type is record
259
  address       : std_logic_vector(16 downto 2);
260
  busy          : std_ulogic;
261
  aload         : std_ulogic;
262
  bdrive        : std_ulogic;
263
  hready        : std_ulogic;
264
  hsel          : std_ulogic;
265
  bsel          : std_ulogic;
266
  hresp         : std_logic_vector (1 downto 0);
267
  vhready       : std_ulogic;
268
  prdata        : std_logic_vector (31 downto 0);
269
end record;
270
 
271
type wprot_out_type is record
272
  wprothit      : std_ulogic;
273
end record;
274
 
275
component sdmctrl
276
  generic (
277
    pindex  : integer := 0;
278
    invclk  : integer := 0;
279
    fast    : integer := 0;
280
    wprot   : integer := 0;
281
    sdbits  : integer := 32;
282
    pageburst : integer := 0;
283
    mobile  : integer := 0
284
  );
285
  port (
286
    rst    : in  std_ulogic;
287
    clk    : in  std_ulogic;
288
    sdi    : in  sdram_in_type;
289
    sdo    : out sdram_out_type;
290
    apbi   : in  apb_slv_in_type;
291
    wpo    : in  wprot_out_type;
292
    sdmo   : out sdram_mctrl_out_type
293
  );
294
end component;
295
 
296
component ftsdmctrl
297
  generic (
298
    pindex  : integer := 0;
299
    invclk  : integer := 0;
300
    fast    : integer := 0;
301
    wprot   : integer := 0;
302
    sdbits  : integer := 32;
303
    syncrst : integer := 0;
304
    pageburst : integer := 0
305
  );
306
  port (
307
    rst    : in  std_ulogic;
308
    clk    : in  std_ulogic;
309
    sdi    : in  sdram_in_type;
310
    sdo    : out sdram_out_type;
311
    apbi   : in  apb_slv_in_type;
312
    wpo    : in  wprot_out_type;
313
    sdmo   : out sdram_mctrl_out_type
314
  );
315
end component;
316
 
317
component ftmctrl
318
  generic (
319
    hindex    : integer := 0;
320
    pindex    : integer := 0;
321
    romaddr   : integer := 16#000#;
322
    rommask   : integer := 16#E00#;
323
    ioaddr    : integer := 16#200#;
324
    iomask    : integer := 16#E00#;
325
    ramaddr   : integer := 16#400#;
326
    rammask   : integer := 16#C00#;
327
    paddr     : integer := 0;
328
    pmask     : integer := 16#fff#;
329
    wprot     : integer := 0;
330
    invclk    : integer := 0;
331
    fast      : integer := 0;
332
    romasel   : integer := 28;
333
    sdrasel   : integer := 29;
334
    srbanks   : integer := 4;
335
    ram8      : integer := 0;
336
    ram16     : integer := 0;
337
    sden      : integer := 0;
338
    sepbus    : integer := 0;
339
    sdbits    : integer := 32;
340
    sdlsb     : integer := 2;          -- set to 12 for the GE-HPE board
341
    oepol     : integer := 0;
342
    edac      : integer := 0;
343
    syncrst   : integer := 0;
344
    pageburst : integer := 0;
345
    scantest  : integer := 0;
346
    writefb   : integer := 0;
347
    netlist   : integer := 0
348
  );
349
  port (
350
    rst       : in  std_ulogic;
351
    clk       : in  std_ulogic;
352
    memi      : in  memory_in_type;
353
    memo      : out memory_out_type;
354
    ahbsi     : in  ahb_slv_in_type;
355
    ahbso     : out ahb_slv_out_type;
356
    apbi      : in  apb_slv_in_type;
357
    apbo      : out apb_slv_out_type;
358
    wpo       : in  wprot_out_type;
359
    sdo       : out sdram_out_type
360
  );
361
end component;
362
 
363
component ssrctrl
364
  generic (
365
    hindex  : integer := 0;
366
    pindex  : integer := 0;
367
    romaddr : integer := 0;
368
    rommask : integer := 16#ff0#;
369
    ramaddr : integer := 16#400#;
370
    rammask : integer := 16#ff0#;
371
    ioaddr  : integer := 16#200#;
372
    iomask  : integer := 16#ff0#;
373
    paddr   : integer := 0;
374
    pmask   : integer := 16#fff#;
375
    oepol   : integer := 0;
376
    bus16   : integer := 0
377
  );
378
  port (
379
    rst     : in  std_ulogic;
380
    clk     : in  std_ulogic;
381
    ahbsi   : in  ahb_slv_in_type;
382
    ahbso   : out ahb_slv_out_type;
383
    apbi    : in  apb_slv_in_type;
384
    apbo    : out apb_slv_out_type;
385
    sri     : in  memory_in_type;
386
    sro     : out memory_out_type
387
 
388
  );
389
end component;
390
 
391
 type ddrmem_in_type is record
392
    cke        : std_ulogic;
393
    cs         : std_logic_vector(1 downto 0);
394
    control    : std_logic_vector(2 downto 0);  --RAS,CAS,WE
395
    ba         : std_logic_vector(1 downto 0);
396
    adr        : std_logic_vector(13 downto 0);
397
    dq         : std_logic_vector(63 downto 0);
398
    dm         : std_logic_vector(15 downto 0);
399
    dqs        : std_logic_vector(15 downto 0);
400
    dq_oe      : std_logic_vector(63 downto 0);
401
    dqs_oe     : std_logic_vector(15 downto 0);
402
 end record;
403
 
404
 type ddrmem_out_type is record
405
    dq         : std_logic_vector(63 downto 0);
406
    dqs        : std_logic_vector(15 downto 0);
407
 end record;
408
 
409
component ddrctrl
410
  generic (
411
    hindex1    :     integer := 0;
412
    haddr1     :     integer := 0;
413
    hmask1     :     integer := 16#f80#;
414
    hindex2    :     integer := 0;
415
    haddr2     :     integer := 0;
416
    hmask2     :     integer := 16#f80#;
417
    pindex     :     integer := 3;
418
    paddr      :     integer := 0;
419
    numahb     :     integer := 1;       -- Allowed: 1, 2
420
    ahb1sepclk :     integer := 0;       -- Allowed: 0, 1
421
    ahb2sepclk :     integer := 0;       -- Allowed: 0, 1
422
    modbanks   :     integer := 1;       -- Allowed: 1, 2
423
    numchips   :     integer := 8;       -- Allowed: 1, 2, 4, 8, 16
424
    chipbits   :     integer := 8;       -- Allowed: 4, 8, 16
425
    chipsize   :     integer := 128;     -- Allowed: 64, 128, 256, 512, 1024 (MB)
426
    plldelay   :     integer := 0;       -- Allowed: 0, 1 (Use 200us start up delay)
427
    tech       :     integer := 0;
428
    clkperiod  :     integer := 10);     -- 100 Mhz
429
  port (
430
    rst       : in  std_ulogic;
431
    clk0      : in  std_ulogic;
432
    clk90     : in  std_ulogic;
433
    clk180    : in  std_ulogic;
434
    clk270    : in  std_ulogic;
435
    hclk1     : in  std_ulogic;
436
    hclk2     : in  std_ulogic;
437
    pclk      : in  std_ulogic;
438
    ahb1si    : in  ahb_slv_in_type;
439
    ahb1so    : out ahb_slv_out_type;
440
    ahb2si    : in  ahb_slv_in_type;
441
    ahb2so    : out ahb_slv_out_type;
442
    apbsi     : in  apb_slv_in_type;
443
    apbso     : out apb_slv_out_type;
444
--    dapbso    : out apb_slv_out_type;
445
    ddsi      : out ddrmem_in_type;
446
    ddso      : in  ddrmem_out_type);
447
end component;
448
 
449
component ftsrctrl_v1
450
  generic (
451
      hindex:                 Integer := 1;
452
      romaddr:                Integer := 16#000#;
453
      rommask:                Integer := 16#ff0#;
454
      ramaddr:                Integer := 16#400#;
455
      rammask:                Integer := 16#ff0#;
456
      ioaddr:                 Integer := 16#200#;
457
      iomask:                 Integer := 16#ff0#;
458
      ramws:                  Integer := 0;
459
      romws:                  Integer := 0;
460
      iows:                   Integer := 0;
461
      rmw:                    Integer := 1;
462
      srbanks:                Integer range 1 to 8  := 8;
463
      banksz:                 Integer range 0 to 13 := 0;
464
      rombanks:               Integer range 1 to 8  := 8;
465
      rombanksz:              Integer range 0 to 13 := 0;
466
      rombankszdef:           Integer range 0 to 13 := 6;
467
      romasel:                Integer range 0 to 28 := 0;
468
      pindex:                 Integer := 0;
469
      paddr:                  Integer := 16#000#;
470
      pmask:                  Integer := 16#fff#;
471
      edacen:                 Integer range 0 to 1 := 1;
472
      errcnt:                 Integer range 0 to 1 := 0;
473
      cntbits:                Integer range 1 to 8 := 1;
474
      wsreg:                  Integer := 1;
475
      oepol:                  Integer := 0);
476
  port (
477
    rst    : in  std_ulogic;
478
    clk    : in  std_ulogic;
479
    ahbsi  : in  ahb_slv_in_type;
480
    ahbso  : out ahb_slv_out_type;
481
    apbi   : in  apb_slv_in_type;
482
    apbo   : out apb_slv_out_type;
483
    sri    : in  memory_in_type;
484
    sro    : out memory_out_type;
485
    sdo    : out sdctrl_out_type
486
  );
487
end component;
488
 
489
component ddrsp
490
  generic (
491
    hindex  : integer := 0;
492
    haddr   : integer := 0;
493
    hmask   : integer := 16#f00#;
494
    ioaddr  : integer := 16#000#;
495
    iomask  : integer := 16#fff#;
496
    MHz     : integer := 100;
497
    col     : integer := 9;
498
    Mbit    : integer := 256;
499
    fast    : integer := 0;
500
    pwron   : integer := 0;
501
    oepol   : integer := 0
502
  );
503
  port (
504
    rst     : in  std_ulogic;
505
    clk     : in  std_ulogic;
506
    ahbsi   : in  ahb_slv_in_type;
507
    ahbso   : out ahb_slv_out_type;
508
    sdi     : in  sdctrl_in_type;
509
    sdo     : out sdctrl_out_type
510
  );
511
end component;
512
 
513
component ddrsp64a
514
  generic (
515
    memtech : integer := 0;
516
    hindex  : integer := 0;
517
    haddr   : integer := 0;
518
    hmask   : integer := 16#f00#;
519
    ioaddr  : integer := 16#000#;
520
    iomask  : integer := 16#fff#;
521
    MHz     : integer := 100;
522
    col     : integer := 9;
523
    Mbyte   : integer := 16;
524
    fast    : integer := 0;
525
    pwron   : integer := 0;
526
    oepol   : integer := 0;
527
    mobile  : integer := 0;
528
    confapi : integer := 0;
529
    conf0   : integer := 0;
530
    conf1   : integer := 0;
531
    regoutput : integer := 0
532
  );
533
  port (
534
    rst     : in  std_ulogic;
535
    clk_ddr : in  std_ulogic;
536
    clk_ahb : in  std_ulogic;
537
    ahbsi   : in  ahb_slv_in_type;
538
    ahbso   : out ahb_slv_out_type;
539
    sdi     : in  sdctrl_in_type;
540
    sdo     : out sdctrl_out_type
541
  );
542
end component;
543
 
544
component ddrsp32a
545
  generic (
546
    memtech : integer := 0;
547
    hindex  : integer := 0;
548
    haddr   : integer := 0;
549
    hmask   : integer := 16#f00#;
550
    ioaddr  : integer := 16#000#;
551
    iomask  : integer := 16#fff#;
552
    MHz     : integer := 100;
553
    col     : integer := 9;
554
    Mbyte   : integer := 16;
555
    fast    : integer := 0;
556
    pwron   : integer := 0;
557
    oepol   : integer := 0;
558
    mobile  : integer := 0;
559
    confapi : integer := 0;
560
    conf0   : integer := 0;
561
    conf1   : integer := 0;
562
    regoutput : integer := 0
563
  );
564
  port (
565
    rst     : in  std_ulogic;
566
    clk_ddr : in  std_ulogic;
567
    clk_ahb : in  std_ulogic;
568
    ahbsi   : in  ahb_slv_in_type;
569
    ahbso   : out ahb_slv_out_type;
570
    sdi     : in  sdctrl_in_type;
571
    sdo     : out sdctrl_out_type
572
  );
573
end component;
574
 
575
component ddrsp16a
576
  generic (
577
    memtech : integer := 0;
578
    hindex  : integer := 0;
579
    haddr   : integer := 0;
580
    hmask   : integer := 16#f00#;
581
    ioaddr  : integer := 16#000#;
582
    iomask  : integer := 16#fff#;
583
    MHz     : integer := 100;
584
    col     : integer := 9;
585
    Mbyte   : integer := 16;
586
    fast    : integer := 0;
587
    pwron   : integer := 0;
588
    oepol   : integer := 0;
589
    mobile  : integer := 0;
590
    confapi : integer := 0;
591
    conf0   : integer := 0;
592
    conf1   : integer := 0;
593
    regoutput : integer := 0
594
  );
595
  port (
596
    rst     : in  std_ulogic;
597
    clk_ddr : in  std_ulogic;
598
    clk_ahb : in  std_ulogic;
599
    clkread : in  std_ulogic;
600
    ahbsi   : in  ahb_slv_in_type;
601
    ahbso   : out ahb_slv_out_type;
602
    sdi     : in  sdctrl_in_type;
603
    sdo     : out sdctrl_out_type
604
  );
605
end component;
606
 
607
  component ddrspa
608
  generic (
609
    fabtech : integer := 0;
610
    memtech : integer := 0;
611
    rskew   : integer := 0;
612
    hindex  : integer := 0;
613
    haddr   : integer := 0;
614
    hmask   : integer := 16#f00#;
615
    ioaddr  : integer := 16#000#;
616
    iomask  : integer := 16#fff#;
617
    MHz     : integer := 100;
618
    clkmul  : integer := 2;
619
    clkdiv  : integer := 2;
620
    col     : integer := 9;
621
    Mbyte   : integer := 16;
622
    rstdel  : integer := 200;
623
    pwron   : integer := 0;
624
    oepol   : integer := 0;
625
    ddrbits : integer := 16;
626
    ahbfreq : integer := 50;
627
    mobile  : integer := 0;
628
    confapi : integer := 0;
629
    conf0   : integer := 0;
630
    conf1   : integer := 0;
631
    regoutput : integer := 0
632
  );
633
  port (
634
    rst_ddr : in  std_ulogic;
635
    rst_ahb : in  std_ulogic;
636
    clk_ddr : in  std_ulogic;
637
    clk_ahb : in  std_ulogic;
638
    lock    : out std_ulogic;                   -- DCM locked
639
    clkddro : out std_ulogic;                   -- DCM locked
640
    clkddri : in  std_ulogic;
641
    ahbsi   : in  ahb_slv_in_type;
642
    ahbso   : out ahb_slv_out_type;
643
    ddr_clk     : out std_logic_vector(2 downto 0);
644
    ddr_clkb    : out std_logic_vector(2 downto 0);
645
    ddr_clk_fb_out  : out std_logic;
646
    ddr_clk_fb  : in std_logic;
647
    ddr_cke     : out std_logic_vector(1 downto 0);
648
    ddr_csb     : out std_logic_vector(1 downto 0);
649
    ddr_web     : out std_ulogic;                       -- ddr write enable
650
    ddr_rasb    : out std_ulogic;                       -- ddr ras
651
    ddr_casb    : out std_ulogic;                       -- ddr cas
652
    ddr_dm      : out std_logic_vector (ddrbits/8-1 downto 0);    -- ddr dm
653
    ddr_dqs     : inout std_logic_vector (ddrbits/8-1 downto 0);    -- ddr dqs
654
    ddr_ad      : out std_logic_vector (13 downto 0);   -- ddr address
655
    ddr_ba      : out std_logic_vector (1 downto 0);    -- ddr bank address
656
    ddr_dq      : inout  std_logic_vector (ddrbits-1 downto 0) -- ddr data
657
 
658
  );
659
  end component;
660
 
661
component ddr2sp16a
662
  generic (
663
    memtech : integer := 0;
664
    hindex  : integer := 0;
665
    haddr   : integer := 0;
666
    hmask   : integer := 16#f00#;
667
    ioaddr  : integer := 16#000#;
668
    iomask  : integer := 16#fff#;
669
    MHz     : integer := 100;
670
    TRFC    : integer := 130;
671
    col     : integer := 9;
672
    Mbyte   : integer := 16;
673
    fast    : integer := 0;
674
    pwron   : integer := 0;
675
    oepol   : integer := 0;
676
    readdly : integer := 1;
677
    odten    : integer := 0
678
  );
679
  port (
680
    rst     : in  std_ulogic;
681
    clk_ddr : in  std_ulogic;
682
    clk_ahb : in  std_ulogic;
683
    ahbsi   : in  ahb_slv_in_type;
684
    ahbso   : out ahb_slv_out_type;
685
    sdi     : in  sdctrl_in_type;
686
    sdo     : out sdctrl_out_type
687
  );
688
end component;
689
 
690
component ddr2sp32a
691
  generic (
692
    memtech : integer := 0;
693
    hindex  : integer := 0;
694
    haddr   : integer := 0;
695
    hmask   : integer := 16#f00#;
696
    ioaddr  : integer := 16#000#;
697
    iomask  : integer := 16#fff#;
698
    MHz     : integer := 100;
699
    TRFC    : integer := 130;
700
    col     : integer := 9;
701
    Mbyte   : integer := 16;
702
    fast    : integer := 0;
703
    pwron   : integer := 0;
704
    oepol   : integer := 0;
705
    readdly : integer := 1;
706
    odten    : integer := 0
707
  );
708
  port (
709
    rst     : in  std_ulogic;
710
    clk_ddr : in  std_ulogic;
711
    clk_ahb : in  std_ulogic;
712
    ahbsi   : in  ahb_slv_in_type;
713
    ahbso   : out ahb_slv_out_type;
714
    sdi     : in  sdctrl_in_type;
715
    sdo     : out sdctrl_out_type
716
  );
717
end component;
718
 
719
component ddr2sp64a
720
  generic (
721
    memtech : integer := 0;
722
    hindex  : integer := 0;
723
    haddr   : integer := 0;
724
    hmask   : integer := 16#f00#;
725
    ioaddr  : integer := 16#000#;
726
    iomask  : integer := 16#fff#;
727
    MHz     : integer := 100;
728
    TRFC    : integer := 130;
729
    col     : integer := 9;
730
    Mbyte   : integer := 16;
731
    fast    : integer := 0;
732
    pwron   : integer := 0;
733
    oepol   : integer := 0;
734
    readdly : integer := 1;
735
    odten    : integer := 0
736
  );
737
  port (
738
    rst     : in  std_ulogic;
739
    clk_ddr : in  std_ulogic;
740
    clk_ahb : in  std_ulogic;
741
    ahbsi   : in  ahb_slv_in_type;
742
    ahbso   : out ahb_slv_out_type;
743
    sdi     : in  sdctrl_in_type;
744
    sdo     : out sdctrl_out_type
745
  );
746
end component;
747
 
748
 
749
component ddr2spa
750
  generic (
751
    fabtech : integer := 0;
752
    memtech : integer := 0;
753
    rskew   : integer := 0;
754
    hindex  : integer := 0;
755
    haddr   : integer := 0;
756
    hmask   : integer := 16#f00#;
757
    ioaddr  : integer := 16#000#;
758
    iomask  : integer := 16#fff#;
759
    MHz     : integer := 100;
760
    TRFC    : integer := 130;
761
    clkmul  : integer := 2;
762
    clkdiv  : integer := 2;
763
    col     : integer := 9;
764
    Mbyte   : integer := 16;
765
    rstdel  : integer := 200;
766
    pwron   : integer := 0;
767
    oepol   : integer := 0;
768
    ddrbits : integer := 16;
769
    ahbfreq : integer := 50;
770
    readdly : integer := 1;
771
    ddelayb0 : integer := 0;
772
    ddelayb1 : integer := 0;
773
    ddelayb2 : integer := 0;
774
    ddelayb3 : integer := 0;
775
    ddelayb4 : integer := 0;
776
    ddelayb5 : integer := 0;
777
    ddelayb6 : integer := 0;
778
    ddelayb7 : integer := 0;
779
    numidelctrl : integer := 4;
780
    norefclk : integer := 0;
781
    odten    : integer := 0
782
  );
783
  port (
784
    rst_ddr    : in  std_ulogic;
785
    rst_ahb    : in  std_ulogic;
786
    clk_ddr    : in  std_ulogic;
787
    clk_ahb    : in  std_ulogic;
788
    clkref200  : in  std_ulogic;
789
    lock       : out std_ulogic;                        -- DCM locked
790
    clkddro    : out std_ulogic;                        -- DCM locked
791
    clkddri    : in  std_ulogic;
792
    ahbsi      : in  ahb_slv_in_type;
793
    ahbso      : out ahb_slv_out_type;
794
    ddr_clk     : out std_logic_vector(2 downto 0);
795
    ddr_clkb    : out std_logic_vector(2 downto 0);
796
    ddr_clk_fb_out  : out std_logic;
797
    ddr_clk_fb  : in std_logic;
798
    ddr_cke     : out std_logic_vector(1 downto 0);
799
    ddr_csb     : out std_logic_vector(1 downto 0);
800
    ddr_web     : out std_ulogic;                       -- ddr write enable
801
    ddr_rasb    : out std_ulogic;                       -- ddr ras
802
    ddr_casb    : out std_ulogic;                       -- ddr cas
803
    ddr_dm      : out std_logic_vector (ddrbits/8-1 downto 0);    -- ddr dm
804
    ddr_dqs     : inout std_logic_vector (ddrbits/8-1 downto 0);    -- ddr dqs
805
    ddr_dqsn    : inout std_logic_vector (ddrbits/8-1 downto 0);    -- ddr dqsn
806
    ddr_ad      : out std_logic_vector (13 downto 0);   -- ddr address
807
    ddr_ba      : out std_logic_vector (1 downto 0);    -- ddr bank address
808
    ddr_dq      : inout  std_logic_vector (ddrbits-1 downto 0); -- ddr data
809
    ddr_odt     : out std_logic_vector(1 downto 0)
810
  );
811
  end component;
812
 
813
  component ddr_phy
814
  generic (tech : integer := virtex2; MHz : integer := 100;
815
        rstdelay : integer := 200; dbits : integer := 16;
816
        clk_mul : integer := 2 ; clk_div : integer := 2;
817
        rskew : integer := 0; mobile : integer := 0);
818
  port (
819
    rst       : in  std_ulogic;
820
    clk       : in  std_logic;                  -- input clock
821
    clkout    : out std_ulogic;                 -- system clock
822
    clkread   : out std_ulogic;                 -- system clock
823
    lock      : out std_ulogic;                 -- DCM locked
824
    ddr_clk     : out std_logic_vector(2 downto 0);
825
    ddr_clkb    : out std_logic_vector(2 downto 0);
826
    ddr_clk_fb_out  : out std_logic;
827
    ddr_clk_fb  : in std_logic;
828
    ddr_cke     : out std_logic_vector(1 downto 0);
829
    ddr_csb     : out std_logic_vector(1 downto 0);
830
    ddr_web     : out std_ulogic;                       -- ddr write enable
831
    ddr_rasb    : out std_ulogic;                       -- ddr ras
832
    ddr_casb    : out std_ulogic;                       -- ddr cas
833
    ddr_dm      : out std_logic_vector (dbits/8-1 downto 0);    -- ddr dm
834
    ddr_dqs     : inout std_logic_vector (dbits/8-1 downto 0);    -- ddr dqs
835
    ddr_ad      : out std_logic_vector (13 downto 0);   -- ddr address
836
    ddr_ba      : out std_logic_vector (1 downto 0);    -- ddr bank address
837
    ddr_dq      : inout  std_logic_vector (dbits-1 downto 0); -- ddr data
838
 
839
    sdi         : out sdctrl_in_type;
840
    sdo         : in  sdctrl_out_type);
841
  end component;
842
 
843
  component ddr2_phy
844
    generic (tech : integer := virtex2; MHz : integer := 100;
845
    rstdelay      : integer := 200; dbits  : integer := 16;
846
    clk_mul       : integer := 2; clk_div  : integer := 2;
847
    ddelayb0      : integer := 0; ddelayb1 : integer := 0; ddelayb2 : integer := 0;
848
    ddelayb3      : integer := 0; ddelayb4 : integer := 0; ddelayb5 : integer := 0;
849
    ddelayb6      : integer := 0; ddelayb7 : integer := 0;
850
    numidelctrl   : integer := 4; norefclk : integer := 0; rskew : integer := 0);
851
  port (
852
    rst            : in    std_ulogic;
853
    clk            : in    std_logic;   -- input clock
854
    clkref200      : in    std_logic;   -- input 200MHz clock
855
    clkout         : out   std_ulogic;  -- system clock
856
    lock           : out   std_ulogic;  -- DCM locked
857
 
858
    ddr_clk        : out   std_logic_vector(2 downto 0);
859
    ddr_clkb       : out   std_logic_vector(2 downto 0);
860
    ddr_clk_fb_out : out   std_logic;
861
    ddr_clk_fb     : in    std_logic;
862
    ddr_cke        : out   std_logic_vector(1 downto 0);
863
    ddr_csb        : out   std_logic_vector(1 downto 0);
864
    ddr_web        : out   std_ulogic;  -- ddr write enable
865
    ddr_rasb       : out   std_ulogic;  -- ddr ras
866
    ddr_casb       : out   std_ulogic;  -- ddr cas
867
    ddr_dm         : out   std_logic_vector (dbits/8-1 downto 0);  -- ddr dm
868
    ddr_dqs        : inout std_logic_vector (dbits/8-1 downto 0);  -- ddr dqs
869
    ddr_dqsn       : inout std_logic_vector (dbits/8-1 downto 0);  -- ddr dqs
870
    ddr_ad         : out   std_logic_vector (13 downto 0);         -- ddr address
871
    ddr_ba         : out   std_logic_vector (1 downto 0);          -- ddr bank address
872
    ddr_dq         : inout std_logic_vector (dbits-1 downto 0);    -- ddr data
873
    ddr_odt        : out   std_logic_vector(1 downto 0);
874
 
875
    sdi            : out   sdctrl_in_type;
876
    sdo            : in    sdctrl_out_type
877
    );
878
  end component;
879
 
880
  component ftsrctrl8 is
881
  generic (
882
    hindex       : integer := 0;
883
    ramaddr      : integer := 16#400#;
884
    rammask      : integer := 16#ff0#;
885
    ioaddr       : integer := 16#200#;
886
    iomask       : integer := 16#ff0#;
887
    ramws        : integer := 0;
888
    iows         : integer := 2;
889
    srbanks      : integer range 1 to 8  := 1;
890
    banksz       : integer range 0 to 15 := 15;
891
    pindex       : integer := 0;
892
    paddr        : integer := 0;
893
    pmask        : integer := 16#fff#;
894
    edacen       : integer range 0 to 1 := 1;
895
    errcnt       : integer range 0 to 1 := 1;
896
    cntbits      : integer range 1 to 8 := 1;
897
    wsreg        : integer := 0;
898
    oepol        : integer := 0
899
 
900
  );
901
  port (
902
    rst          : in  std_ulogic;
903
    clk          : in  std_ulogic;
904
    ahbsi        : in  ahb_slv_in_type;
905
    ahbso        : out ahb_slv_out_type;
906
    apbi         : in  apb_slv_in_type;
907
    apbo         : out apb_slv_out_type;
908
    sri          : in  memory_in_type;
909
    sro          : out memory_out_type
910
  );
911
  end component;
912
 
913
  type spimctrl_in_type is record
914
    miso        : std_ulogic;
915
    mosi        : std_ulogic;
916
    cd          : std_ulogic;
917
  end record;
918
 
919
  type spimctrl_out_type is record
920
    mosi        : std_ulogic;
921
    mosioen     : std_ulogic;
922
    sck         : std_ulogic;
923
    csn         : std_ulogic;
924
    cdcsnoen    : std_ulogic;
925
    errorn      : std_ulogic;
926
    ready       : std_ulogic;
927
    initialized : std_ulogic;
928
  end record;
929
 
930
  component spimctrl
931
    generic (
932
      hindex     : integer := 0;
933
      hirq       : integer := 0;
934
      faddr      : integer := 16#000#;
935
      fmask      : integer := 16#fff#;
936
      ioaddr     : integer := 16#000#;
937
      iomask     : integer := 16#fff#;
938
      spliten    : integer := 0;
939
      oepol      : integer := 0;
940
      sdcard     : integer range 0 to 1   := 0;
941
      readcmd    : integer range 0 to 255 := 16#0B#;
942
      dummybyte  : integer range 0 to 1   := 1;
943
      dualoutput : integer range 0 to 1   := 0;
944
      scaler     : integer range 1 to 512 := 1;
945
      altscaler  : integer range 1 to 512 := 1;
946
      pwrupcnt   : integer := 0
947
      );
948
    port (
949
      rstn    : in  std_ulogic;
950
      clk     : in  std_ulogic;
951
      ahbsi   : in  ahb_slv_in_type;
952
      ahbso   : out ahb_slv_out_type;
953
      spii    : in  spimctrl_in_type;
954
      spio    : out spimctrl_out_type
955
    );
956
  end component;
957
 
958
end;

powered by: WebSVN 2.1.0

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