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

Subversion Repositories mips_enhanced

[/] [mips_enhanced/] [trunk/] [grlib-gpl-1.0.19-b3188/] [designs/] [leon3-altera-ep2s60-ddr/] [leon3mp.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dimamali
-----------------------------------------------------------------------------
2
--  LEON3 Demonstration design
3
--  Copyright (C) 2004 Jiri Gaisler, 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
 
20
library ieee;
21
use ieee.std_logic_1164.all;
22
library grlib;
23
use grlib.amba.all;
24
use grlib.stdlib.all;
25
library techmap;
26
use techmap.gencomp.all;
27
library gaisler;
28
use gaisler.memctrl.all;
29
use gaisler.leon3.all;
30
use gaisler.uart.all;
31
use gaisler.misc.all;
32
use gaisler.ata.all;
33
use gaisler.jtag.all;
34
library esa;
35
use esa.memoryctrl.all;
36
use work.config.all;
37
 
38
entity leon3mp is
39
  generic (
40
    fabtech : integer := CFG_FABTECH;
41
    memtech : integer := CFG_MEMTECH;
42
    padtech : integer := CFG_PADTECH;
43
    clktech : integer := CFG_CLKTECH;
44
    ncpu    : integer := CFG_NCPU;
45
    disas   : integer := CFG_DISAS;     -- Enable disassembly to console
46
    dbguart : integer := CFG_DUART;     -- Print UART on console
47
    pclow   : integer := CFG_PCLOW;
48
    freq    : integer := 50000         -- frequency of main clock (used for PLLs)
49
    );
50
  port (
51
 
52
    resetn  : in  std_ulogic;
53
    clk     : in  std_ulogic;
54
    errorn  : out   std_ulogic;
55
 
56
    -- flash/ethernet bus
57
    address : out   std_logic_vector(23 downto 0);
58
    data    : inout std_logic_vector(31 downto 0);
59
    romsn   : out std_ulogic;
60
    oen     : out std_logic;
61
    writen  : out std_logic;
62
    byten   : out std_logic;
63
    wpn     : out std_logic;
64
 
65
    -- SSRAM
66
    ssram_ce1n  : out std_logic;
67
    ssram_ce2   : out std_logic;
68
    ssram_ce3n  : out std_logic;
69
    ssram_wen   : out std_logic;
70
    ssram_bw    : out std_logic_vector (0 to 3);
71
    ssram_oen   : out std_ulogic;
72
    ssaddr      : out std_logic_vector(20 downto 2);
73
    ssdata      : inout std_logic_vector(31 downto 0);
74
    ssram_clk   : out std_ulogic;
75
    ssram_adscn : out std_ulogic;
76
    ssram_adsp_n : out std_ulogic;
77
    ssram_adv_n : out std_ulogic;
78
 
79
-- pragma translate_off
80
    iosn    : out   std_ulogic;
81
-- pragma translate_on
82
 
83
    ddr_clkin   : in  std_logic;
84
    ddr_clk     : out std_logic;
85
    ddr_clkn    : out std_logic;
86
    ddr_cke     : out std_logic;
87
    ddr_csb     : out std_logic;
88
    ddr_web     : out std_ulogic;                       -- ddr write enable
89
    ddr_rasb    : out std_ulogic;                       -- ddr ras
90
    ddr_casb    : out std_ulogic;                       -- ddr cas
91
    ddr_dm      : out std_logic_vector (1 downto 0);    -- ddr dm
92
    ddr_dqs     : inout std_logic_vector (1 downto 0);  -- ddr dqs
93
    ddr_ad      : out std_logic_vector (12 downto 0);   -- ddr address
94
    ddr_ba      : out std_logic_vector (1 downto 0);    -- ddr bank address
95
    ddr_dq      : inout std_logic_vector (15 downto 0); -- ddr data
96
 
97
    -- debug support unit
98
    dsubren             : in  std_ulogic;
99
    dsuact              : out std_ulogic;
100
 
101
    -- console/debug UART
102
    rxd1 : in  std_logic;
103
    txd1 : out std_logic;
104
 
105
    -- ATA signals
106
    ata_data  : inout std_logic_vector(15 downto 0);
107
    ata_da    : out std_logic_vector(2 downto 0);
108
    ata_cs0   : out std_logic;
109
    ata_cs1   : out std_logic;
110
    ata_dior  : out std_logic;
111
    ata_diow  : out std_logic;
112
    ata_iordy : in std_logic;
113
    ata_intrq : in std_logic;
114
    ata_dmarq : in std_logic;
115
    ata_dmack : out std_logic;
116
 
117
    -- Signals nedded to use CompactFlash with ATA controller
118
    cf_power   : out std_logic; -- To turn on power to the CompactFlash 
119
    cf_gnd_da  : out std_logic_vector(10 downto 3); -- grounded address lines
120
    cf_atasel  : out std_logic; -- grounded to select true IDE mode
121
    cf_we      : out std_logic; -- should be connected to VCC in true IDE mode
122
--    cf_csel    : out std_logic;
123
 
124
    -- for smsc lan chip
125
    eth_aen   : out std_logic;
126
    eth_readn : out std_logic;
127
    eth_writen: out std_logic;
128
    eth_nbe   : out std_logic_vector(3 downto 0);
129
 
130
    eth_lclk     : out std_ulogic;
131
    eth_nads     : out std_logic;
132
    eth_ncycle   : out std_logic;
133
    eth_wnr      : out std_logic;
134
    eth_nvlbus   : out std_logic;
135
    eth_nrdyrtn  : out std_logic;
136
    eth_ndatacs  : out std_logic;
137
 
138
    gpio         : inout std_logic_vector(CFG_GRGPIO_WIDTH-1 downto 0)   -- I/O port
139
    );
140
end;
141
 
142
architecture rtl of leon3mp is
143
 
144
  constant blength   : integer := 12;
145
  constant fifodepth : integer := 8;
146
 
147
  constant maxahbm : integer := NCPU+CFG_AHB_UART+CFG_AHB_JTAG+CFG_ATA;
148
 
149
  signal vcc, gnd    : std_logic_vector(7 downto 0);
150
  signal memi, smemi : memory_in_type;
151
  signal memo, smemo : memory_out_type;
152
  signal wpo         : wprot_out_type;
153
 
154
  signal ddsi  : ddrmem_in_type;
155
  signal ddso  : ddrmem_out_type;
156
 
157
  signal ddrclkfb, ssrclkfb, ddr_clkl, ddr_clk90l, ddr_clknl, ddr_clk270l : std_ulogic;
158
  signal ddr_clkv       : std_logic_vector(2 downto 0);
159
  signal ddr_clkbv      : std_logic_vector(2 downto 0);
160
  signal ddr_ckev       : std_logic_vector(1 downto 0);
161
  signal ddr_csbv       : std_logic_vector(1 downto 0);
162
  signal ddr_adl        : std_logic_vector (13 downto 0);
163
  signal clklock, lock, clkml, rst, ndsuact : std_ulogic;
164
  signal tck, tckn, tms, tdi, tdo : std_ulogic;
165
  signal ddrclk, ddrrst : std_ulogic;
166
 
167
 
168
--  attribute syn_keep : boolean;
169
--  attribute syn_preserve : boolean;
170
--  attribute syn_keep of clkml : signal is true;
171
--  attribute syn_preserve of clkml : signal is true;
172
 
173
  --for smc lan chip
174
  signal s_eth_aen   : std_logic;
175
  signal s_eth_readn : std_logic;
176
  signal s_eth_writen: std_logic;
177
  signal s_eth_nbe   : std_logic_vector(3 downto 0);
178
  signal ssd, prd    : std_logic_vector(31 downto 0);
179
 
180
  signal apbi  : apb_slv_in_type;
181
  signal apbo  : apb_slv_out_vector := (others => apb_none);
182
  signal ahbsi : ahb_slv_in_type;
183
  signal ahbso : ahb_slv_out_vector := (others => ahbs_none);
184
  signal ahbmi : ahb_mst_in_type;
185
  signal ahbmo : ahb_mst_out_vector;
186
 
187
  signal clkm, rstn, ssram_clkl : std_ulogic;
188
  signal cgi                : clkgen_in_type;
189
  signal cgo                : clkgen_out_type;
190
  signal u1i, dui           : uart_in_type;
191
  signal u1o, duo           : uart_out_type;
192
 
193
  signal irqi : irq_in_vector(0 to NCPU-1);
194
  signal irqo : irq_out_vector(0 to NCPU-1);
195
 
196
  signal dbgi : l3_debug_in_vector(0 to NCPU-1);
197
  signal dbgo : l3_debug_out_vector(0 to NCPU-1);
198
 
199
  signal dsui : dsu_in_type;
200
  signal dsuo : dsu_out_type;
201
 
202
  signal cf  : cf_out_type;
203
  signal atai : ata_in_type;
204
  signal atao : ata_out_type;
205
 
206
  signal gpti : gptimer_in_type;
207
  signal gpioi : gpio_in_type;
208
  signal gpioo : gpio_out_type;
209
 
210
  constant IOAEN : integer := 1;
211
  constant BOARD_FREQ : integer := 50000;   -- input frequency in KHz
212
  constant CPU_FREQ : integer := BOARD_FREQ * CFG_CLKMUL / CFG_CLKDIV;  -- cpu frequency in KHz
213
 
214
  signal dsubre : std_ulogic;
215
 
216
  component smc_mctrl
217
  generic (
218
    hindex    : integer := 0;
219
    pindex    : integer := 0;
220
    romaddr   : integer := 16#000#;
221
    rommask   : integer := 16#E00#;
222
    ioaddr    : integer := 16#200#;
223
    iomask    : integer := 16#E00#;
224
    ramaddr   : integer := 16#400#;
225
    rammask   : integer := 16#C00#;
226
    paddr     : integer := 0;
227
    pmask     : integer := 16#fff#;
228
    wprot     : integer := 0;
229
    invclk    : integer := 0;
230
    fast      : integer := 0;
231
    romasel   : integer := 28;
232
    sdrasel   : integer := 29;
233
    srbanks   : integer := 4;
234
    ram8      : integer := 0;
235
    ram16     : integer := 0;
236
    sden      : integer := 0;
237
    sepbus    : integer := 0;
238
    sdbits    : integer := 32;
239
    sdlsb     : integer := 2;
240
    oepol     : integer := 0;
241
    syncrst   : integer := 0
242
  );
243
  port (
244
    rst       : in  std_ulogic;
245
    clk       : in  std_ulogic;
246
    memi      : in  memory_in_type;
247
    memo      : out memory_out_type;
248
    ahbsi     : in  ahb_slv_in_type;
249
    ahbso     : out ahb_slv_out_type;
250
    apbi      : in  apb_slv_in_type;
251
    apbo      : out apb_slv_out_type;
252
    wpo       : in  wprot_out_type;
253
    sdo       : out sdram_out_type;
254
    eth_aen   : out std_ulogic; -- for smsc lan chip
255
    eth_readn : out std_ulogic; -- for smsc lan chip
256
    eth_writen: out std_ulogic;  -- for smsc lan chip
257
    eth_nbe   : out std_logic_vector(3 downto 0) -- for smsc lan chip
258
  );
259
  end component;
260
 
261
begin
262
 
263
----------------------------------------------------------------------
264
---  Reset and Clock generation  -------------------------------------
265
----------------------------------------------------------------------
266
 
267
  vcc <= (others => '1'); gnd <= (others => '0');
268
  cgi.pllctrl <= "00"; cgi.pllrst <= not resetn; cgi.pllref <= '0';
269
 
270
  clklock <=  cgo.clklock and lock;
271
 
272
  clkgen0 : clkgen  -- clock generator using toplevel generic 'freq'
273
    generic map (tech => CFG_CLKTECH, clk_mul => CFG_CLKMUL,
274
                 clk_div => CFG_CLKDIV, sdramen => CFG_MCTRL_SDEN,
275
                 freq => freq)
276
    port map (clkin => clk, pciclkin => gnd(0), clk => clkm, clkn => open,
277
              clk2x => open, sdclk => ssram_clkl, pciclk => open,
278
              cgi => cgi, cgo => cgo);
279
 
280
  ssrclk_pad : outpad generic map (tech => padtech, slew => 1, strength => 24)
281
        port map (ssram_clk, ssram_clkl);
282
 
283
  rst0 : rstgen                         -- reset generator
284
    port map (resetn, clkm, clklock, rstn);
285
 
286
---------------------------------------------------------------------- 
287
---  AHB CONTROLLER --------------------------------------------------
288
----------------------------------------------------------------------
289
 
290
  ahb0 : ahbctrl                -- AHB arbiter/multiplexer
291
  generic map (defmast => CFG_DEFMST, split => CFG_SPLIT,
292
        rrobin => CFG_RROBIN, ioaddr => CFG_AHBIO,
293
        ioen => IOAEN, nahbm => maxahbm, nahbs => 8)
294
  port map (rstn, clkm, ahbmi, ahbmo, ahbsi, ahbso);
295
 
296
----------------------------------------------------------------------
297
---  LEON3 processor and DSU -----------------------------------------
298
----------------------------------------------------------------------
299
 
300
  l3 : if CFG_LEON3 = 1 generate
301
    cpu : for i in 0 to NCPU-1 generate
302
      u0 : leon3s                         -- LEON3 processor
303
        generic map (i, fabtech, memtech, CFG_NWIN, CFG_DSU, CFG_FPU, CFG_V8,
304
                   0, CFG_MAC, pclow, 0, CFG_NWP, CFG_ICEN, CFG_IREPL, CFG_ISETS, CFG_ILINE,
305
                   CFG_ISETSZ, CFG_ILOCK, CFG_DCEN, CFG_DREPL, CFG_DSETS, CFG_DLINE, CFG_DSETSZ,
306
                   CFG_DLOCK, CFG_DSNOOP, CFG_ILRAMEN, CFG_ILRAMSZ, CFG_ILRAMADDR, CFG_DLRAMEN,
307
                   CFG_DLRAMSZ, CFG_DLRAMADDR, CFG_MMUEN, CFG_ITLBNUM, CFG_DTLBNUM, CFG_TLB_TYPE, CFG_TLB_REP,
308
                   CFG_LDDEL, disas, CFG_ITBSZ, CFG_PWD, CFG_SVT, CFG_RSTADDR, NCPU-1)
309
        port map (clkm, rstn, ahbmi, ahbmo(i), ahbsi, ahbso,
310
                irqi(i), irqo(i), dbgi(i), dbgo(i));
311
    end generate;
312
    errorn_pad : odpad generic map (tech => padtech) port map (errorn, dbgo(0).error);
313
 
314
    dsugen : if CFG_DSU = 1 generate
315
      dsu0 : dsu3                         -- LEON3 Debug Support Unit
316
        generic map (hindex => 2, haddr => 16#900#, hmask => 16#F00#,
317
                   ncpu   => NCPU, tbits => 30, tech => memtech, irq => 0, kbytes => CFG_ATBSZ)
318
        port map (rstn, clkm, ahbmi, ahbsi, ahbso(2), dbgo, dbgi, dsui, dsuo);
319
 
320
      dsui.enable <= '1';
321
 
322
      dsubre_pad : inpad generic map (tech  => padtech) port map (dsubre, dsui.break);
323
      dsuact_pad : outpad generic map (tech => padtech) port map (dsuact, dsuo.active);
324
    end generate;
325
  end generate;
326
  nodcom : if CFG_DSU = 0 generate ahbso(2) <= ahbs_none; end generate;
327
 
328
  dcomgen : if CFG_AHB_UART = 1 generate
329
    dcom0 : ahbuart                     -- Debug UART
330
      generic map (hindex => NCPU, pindex => 4, paddr => 7)
331
      port map (rstn, clkm, dui, duo, apbi, apbo(4), ahbmi, ahbmo(NCPU));
332
    dsurx_pad : inpad generic map (tech  => padtech) port map (rxd1, dui.rxd);
333
    dsutx_pad : outpad generic map (tech => padtech) port map (txd1, duo.txd);
334
  end generate;
335
  nouah : if CFG_AHB_UART = 0 generate apbo(7) <= apb_none; end generate;
336
 
337
  ahbjtaggen0 :if CFG_AHB_JTAG = 1 generate
338
    ahbjtag0 : ahbjtag generic map(tech => fabtech, hindex => NCPU+CFG_AHB_UART)
339
      port map(rstn, clkm, tck, tms, tdi, tdo, ahbmi, ahbmo(NCPU+CFG_AHB_UART),
340
               open, open, open, open, open, open, open, gnd(0));
341
  end generate;
342
 
343
----------------------------------------------------------------------
344
---  Memory controllers ----------------------------------------------
345
----------------------------------------------------------------------
346
 
347
  mg2 : if CFG_MCTRL_LEON2 = 1 generate         -- LEON2 memory controller
348
    sr1 : smc_mctrl generic map (hindex => 0, pindex => 0, paddr => 0,
349
        ramaddr => 16#400#+16#600#*CFG_DDRSP, rammask =>16#F00#, srbanks => 1,
350
        sden => 0, ram8 => 1)
351
    port map (rstn, clkm, memi, memo, ahbsi, ahbso(0), apbi, apbo(0), wpo, open,
352
             s_eth_aen, s_eth_readn, s_eth_writen, s_eth_nbe);
353
  end generate;
354
 
355
  wpn <= '1'; byten <= '0';
356
 
357
  memi.brdyn  <= '1'; memi.bexcn <= '1';
358
  memi.writen <= '1'; memi.wrn <= "1111"; memi.bwidth <= "00";
359
 
360
  mg0 : if CFG_MCTRL_LEON2 = 0 generate  -- no prom/sram pads
361
    apbo(0) <= apb_none; ahbso(0) <= ahbs_none;
362
    roms_pad : outpad generic map (tech => padtech)
363
      port map (romsn, vcc(0));
364
  end generate;
365
 
366
  mgpads : if CFG_MCTRL_LEON2 = 1 generate      -- prom/sram pads
367
    addr_pad : outpadv generic map (width => 24, tech => padtech)
368
      port map (address, memo.address(23 downto 0));
369
    roms_pad : outpad generic map (tech => padtech)
370
      port map (romsn, memo.romsn(0));
371
    oen_pad : outpad generic map (tech => padtech)
372
      port map (oen, memo.oen);
373
    wri_pad : outpad generic map (tech => padtech)
374
      port map (writen, memo.writen);
375
-- pragma translate_off
376
   iosn_pad : outpad generic map (tech => padtech)
377
      port map (iosn, memo.iosn);
378
-- pragma translate_on
379
 
380
    ssram_adv_n_pad : outpad generic map (tech => padtech)
381
        port map (ssram_adv_n, vcc(0));
382
    ssram_adsp_n_pad : outpad generic map (tech => padtech)
383
        port map (ssram_adsp_n, gnd(0));
384
    ssaddr_pad : outpadv generic map (width => 19, tech => padtech)
385
        port map (ssaddr, memo.address(20 downto 2));
386
    ssram_adscn_pad : outpad generic map (tech => padtech)
387
        port map (ssram_adscn, vcc(0));
388
    ssram_ce1n_pad : outpad generic map (tech => padtech)
389
        port map (ssram_ce1n, gnd(0));
390
    ssram_ce2_pad : outpad generic map (tech => padtech)
391
        port map (ssram_ce2, vcc(0));
392
    ssrams_pad : outpad generic map ( tech => padtech)
393
        port map (ssram_ce3n, memo.ramsn(0));
394
    ssram_oen_pad  : outpad generic map (tech => padtech)
395
        port map (ssram_oen, memo.oen);
396
    ssram_rwen_pad : outpadv generic map (width => 4, tech => padtech)
397
        port map (ssram_bw, memo.wrn);
398
    ssram_wri_pad  : outpad generic map (tech => padtech)
399
        port map (ssram_wen, memo.writen);
400
    ssram_data_pads : iopadvv generic map (tech => padtech, width => 32)
401
      port map (ssdata, memo.data, memo.vbdrive, ssd);
402
 
403
    memi.data(31 downto 0) <= ssd when memo.ramsn(0) = '0' else prd;
404
 
405
   -- for smc lan chip
406
   eth_aen_pad : outpad generic map (tech => padtech)
407
      port map (eth_aen, s_eth_aen);
408
   eth_readn_pad : outpad generic map (tech => padtech)
409
      port map (eth_readn, s_eth_readn);
410
   eth_writen_pad : outpad generic map (tech => padtech)
411
      port map (eth_writen, s_eth_writen);
412
   eth_nbe_pad : outpadv generic map (width => 4, tech => padtech)
413
      port map (eth_nbe, s_eth_nbe);
414
 
415
   data_pad : iopadvv generic map (tech => padtech, width => 32)
416
        port map (data(31 downto 0), memo.data(31 downto 0),
417
                  memo.vbdrive, prd);
418
  end generate;
419
 
420
  ddrsp0 : if (CFG_DDRSP /= 0) generate
421
    ddrc0 : ddrspa generic map ( fabtech => fabtech, memtech => memtech,
422
        hindex => 3, haddr => 16#400#, hmask => 16#F00#, ioaddr => 1,
423
        pwron => CFG_DDRSP_INIT, MHz => BOARD_FREQ/1000,
424
        clkmul => CFG_DDRSP_FREQ/5, clkdiv => 10, ahbfreq => CPU_FREQ/1000,
425
        col => CFG_DDRSP_COL, Mbyte => CFG_DDRSP_SIZE, ddrbits => 16)
426
     port map (
427
        resetn, rstn, ddr_clkin, clkm, lock, clkml, clkml, ahbsi, ahbso(3),
428
        ddr_clkv, ddr_clkbv, open, gnd(0),
429
        ddr_ckev, ddr_csbv, ddr_web, ddr_rasb, ddr_casb,
430
        ddr_dm, ddr_dqs, ddr_adl, ddr_ba, ddr_dq);
431
        ddr_ad <= ddr_adl(12 downto 0);
432
        ddr_clk <= ddr_clkv(0); ddr_clkn <= ddr_clkbv(0);
433
        ddr_cke <= ddr_ckev(0); ddr_csb <= ddr_csbv(0);
434
  end generate;
435
 
436
  ddrsp1 : if (CFG_DDRSP = 0) generate
437
    ddr_cke <= '0'; ddr_csb <= '1'; lock <= '1';
438
  end generate;
439
 
440
----------------------------------------------------------------------
441
---  APB Bridge and various periherals -------------------------------
442
----------------------------------------------------------------------
443
 
444
  apb0 : apbctrl                        -- AHB/APB bridge
445
    generic map (hindex => 1, haddr => CFG_APBADDR)
446
    port map (rstn, clkm, ahbsi, ahbso(1), apbi, apbo);
447
 
448
  ua1 : if CFG_UART1_ENABLE /= 0 generate
449
    uart1 : apbuart                     -- UART 1
450
      generic map (pindex   => 1, paddr => 1, pirq => 2, console => dbguart,
451
                   fifosize => CFG_UART1_FIFO)
452
      port map (rstn, clkm, apbi, apbo(1), u1i, u1o);
453
    u1i.ctsn <= '0'; u1i.extclk <= '0';
454
    upads : if CFG_AHB_UART = 0 generate
455
      u1i.rxd <= rxd1; txd1 <= u1o.txd;
456
    end generate;
457
  end generate;
458
  noua0 : if CFG_UART1_ENABLE = 0 generate apbo(1) <= apb_none; end generate;
459
 
460
  irqctrl : if CFG_IRQ3_ENABLE /= 0 generate
461
    irqctrl0 : irqmp                    -- interrupt controller
462
      generic map (pindex => 2, paddr => 2, ncpu => NCPU)
463
      port map (rstn, clkm, apbi, apbo(2), irqo, irqi);
464
  end generate;
465
  irq3 : if CFG_IRQ3_ENABLE = 0 generate
466
    x : for i in 0 to NCPU-1 generate
467
      irqi(i).irl <= "0000";
468
    end generate;
469
    apbo(2) <= apb_none;
470
  end generate;
471
 
472
  gpt : if CFG_GPT_ENABLE /= 0 generate
473
    timer0 : gptimer                    -- timer unit
474
      generic map (pindex => 3, paddr => 3, pirq => CFG_GPT_IRQ,
475
        sepirq => CFG_GPT_SEPIRQ, sbits => CFG_GPT_SW, ntimers => CFG_GPT_NTIM,
476
        nbits  => CFG_GPT_TW)
477
      port map (rstn, clkm, apbi, apbo(3), gpti, open);
478
    gpti.dhalt <= dsuo.active; gpti.extclk <= '0';
479
  end generate;
480
  notim : if CFG_GPT_ENABLE = 0 generate apbo(3) <= apb_none; end generate;
481
 
482
  gpio0 : if CFG_GRGPIO_ENABLE /= 0 generate     -- GPIO unit
483
    grgpio0: grgpio
484
    generic map(pindex => 5, paddr => 5, imask => CFG_GRGPIO_IMASK, nbits => CFG_GRGPIO_WIDTH)
485
    port map(rst => rstn, clk => clkm, apbi => apbi, apbo => apbo(5),
486
    gpioi => gpioi, gpioo => gpioo);
487
    pio_pads : for i in 0 to CFG_GRGPIO_WIDTH-1 generate
488
        pio_pad : iopad generic map (tech => padtech)
489
            port map (gpio(i), gpioo.dout(i), gpioo.oen(i), gpioi.din(i));
490
    end generate;
491
  end generate;
492
 
493
 
494
-----------------------------------------------------------------------
495
---  ATA Controller ---------------------------------------------------
496
-----------------------------------------------------------------------
497
 
498
  atac : if CFG_ATA = 1 generate
499
     atac0 : atactrl generic map(tech => 0, fdepth => CFG_ATAFIFO,
500
        mhindex => CFG_NCPU+CFG_AHB_UART+CFG_AHB_JTAG,
501
        shindex => 5, haddr => CFG_ATAIO, hmask => 16#fff#, pirq => CFG_ATAIRQ,
502
        mwdma => CFG_ATADMA, TWIDTH  => 8, -- counter width
503
         -- PIO mode 0 settings (@100MHz clock)
504
         PIO_mode0_T1   => 6,   -- 70ns
505
         PIO_mode0_T2   => 28,  -- 290ns
506
         PIO_mode0_T4   => 2,   -- 30ns
507
         PIO_mode0_Teoc => 23   -- 240ns ==> T0 - T1 - T2 = 600 - 70 - 290 = 240
508
      )
509
      port map( rst => rstn, arst => vcc(0), clk => clkm, ahbsi => ahbsi,
510
         ahbso => ahbso(5), ahbmi => ahbmi, ahbmo => ahbmo(NCPU+CFG_AHB_UART+CFG_AHB_JTAG),
511
         cfo => cf, atai => atai, atao => atao);
512
 
513
       ata_data_pad : iopadv generic map (tech => padtech, width => 16, oepol => 1)
514
         port map (ata_data, atao.ddo, atao.oen, atai.ddi);
515
       ata_da_pad : outpadv generic map (tech => padtech, width => 3)
516
         port map (ata_da, atao.da);
517
       ata_cs0_pad : outpad generic map (tech => padtech)
518
         port map (ata_cs0, atao.cs0);
519
       ata_cs1_pad : outpad generic map (tech => padtech)
520
         port map (ata_cs1, atao.cs1);
521
       ata_dior_pad : outpad generic map (tech => padtech)
522
         port map (ata_dior, atao.dior);
523
       ata_diow_pad : outpad generic map (tech => padtech)
524
         port map (ata_diow, atao.diow);
525
       iordy_pad : inpad generic map (tech => padtech)
526
         port map (ata_iordy, atai.iordy);
527
       intrq_pad : inpad generic map (tech => padtech)
528
         port map (ata_intrq, atai.intrq);
529
       dmarq_pad : inpad generic map (tech => padtech)
530
         port map (ata_dmarq, atai.dmarq);
531
       dmack_pad : outpad generic map (tech => padtech)
532
         port map (ata_dmack, atao.dmack);
533
 
534
       -- for CompactFlach mode selection
535
       cf_gnd_da_pad : outpadv generic map (tech => padtech, width => 8)
536
         port map (cf_gnd_da, cf.da);
537
       cf_atasel_pad : outpad generic map (tech => padtech)
538
         port map (cf_atasel, cf.atasel);
539
       cf_we_pad : outpad generic map (tech => padtech)
540
         port map (cf_we, cf.we);
541
       cf_power_pad : outpad generic map (tech => padtech)
542
         port map (cf_power, cf.power);
543
--       cf_csel_pad : outpad generic map (tech => padtech)
544
--         port map (cf_csel, cf.csel);
545
 
546
    end generate;
547
 
548
-----------------------------------------------------------------------
549
---  AHB ROM ----------------------------------------------------------
550
-----------------------------------------------------------------------
551
 
552
  bpromgen : if CFG_AHBROMEN /= 0 generate
553
    brom : entity work.ahbrom
554
      generic map (hindex => 6, haddr => CFG_AHBRODDR, pipe => CFG_AHBROPIP)
555
      port map ( rstn, clkm, ahbsi, ahbso(6));
556
  end generate;
557
  nobpromgen : if CFG_AHBROMEN = 0 generate
558
     ahbso(6) <= ahbs_none;
559
  end generate;
560
 
561
-----------------------------------------------------------------------
562
---  AHB RAM ----------------------------------------------------------
563
-----------------------------------------------------------------------
564
 
565
  ahbramgen : if CFG_AHBRAMEN = 1 generate
566
    ahbram0 : ahbram generic map (hindex => 7, haddr => CFG_AHBRADDR,
567
                                  tech   => CFG_MEMTECH, kbytes => CFG_AHBRSZ)
568
      port map (rstn, clkm, ahbsi, ahbso(7));
569
  end generate;
570
  nram : if CFG_AHBRAMEN = 0 generate ahbso(7) <= ahbs_none; end generate;
571
 
572
-----------------------------------------------------------------------
573
---  Drive unused bus elements  ---------------------------------------
574
-----------------------------------------------------------------------
575
 
576
  nam1 : for i in (NCPU+CFG_AHB_UART+CFG_AHB_JTAG+CFG_ATA) to NAHBMST-1 generate
577
    ahbmo(i) <= ahbm_none;
578
  end generate;
579
--  nap0 : for i in 6 to NAPBSLV-1 generate apbo(i) <= apb_none; end generate;
580
--  nah0 : for i in 7 to NAHBSLV-1 generate ahbso(i) <= ahbs_none; end generate;
581
 
582
  -- invert signal for input via a key
583
  dsubre  <= not dsubren;
584
 
585
  -- for smc lan chip
586
  eth_lclk     <= vcc(0);
587
  eth_nads     <= gnd(0);
588
  eth_ncycle   <= vcc(0);
589
  eth_wnr      <= vcc(0);
590
  eth_nvlbus   <= vcc(0);
591
  eth_nrdyrtn  <= vcc(0);
592
  eth_ndatacs  <= vcc(0);
593
 
594
-----------------------------------------------------------------------
595
---  Boot message  ----------------------------------------------------
596
-----------------------------------------------------------------------
597
 
598
-- pragma translate_off
599
  x : report_version
600
  generic map (
601
   msg1 => "LEON3 Altera EP2C60 SSRAM/DDR Demonstration design",
602
   msg2 => "GRLIB Version " & tost(LIBVHDL_VERSION/1000) & "." & tost((LIBVHDL_VERSION mod 1000)/100)
603
      & "." & tost(LIBVHDL_VERSION mod 100) & ", build " & tost(LIBVHDL_BUILD),
604
   msg3 => "Target technology: " & tech_table(fabtech) & ",  memory library: " & tech_table(memtech),
605
   mdel => 1
606
  );
607
-- pragma translate_on
608
 
609
end;

powered by: WebSVN 2.1.0

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