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-ge-hpe-mini/] [leon3mini.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
--  modified by Thomas Ameseder, Gleichmann Electronics 2004, 2005 to
20
--  support the use of an external AHB slave and different HPE board versions
21
------------------------------------------------------------------------------
22
--  further adapted from Hpe_compact to Hpe_mini (Feb. 2005)
23
------------------------------------------------------------------------------
24
 
25
 
26
library ieee;
27
use ieee.std_logic_1164.all;
28
library grlib;
29
use grlib.amba.all;
30
use grlib.stdlib.all;
31
use grlib.devices.all;
32
library techmap;
33
use techmap.gencomp.all;
34
library gaisler;
35
use gaisler.memctrl.all;
36
use gaisler.leon3.all;
37
use gaisler.uart.all;
38
use gaisler.misc.all;
39
use gaisler.net.all;
40
use gaisler.ata.all;
41
use gaisler.jtag.all;
42
library esa;
43
use esa.memoryctrl.all;
44
library gleichmann;
45
use gleichmann.hpi.all;
46
use gleichmann.dac.all;
47
 
48
use work.config.all;
49
 
50
 
51
entity leon3mini is
52
  generic (
53
    fabtech : integer := CFG_FABTECH;
54
    memtech : integer := CFG_MEMTECH;
55
    padtech : integer := CFG_PADTECH;
56
    clktech : integer := CFG_CLKTECH;
57
    disas   : integer := CFG_DISAS;     -- Enable disassembly to console
58
    dbguart : integer := CFG_DUART;     -- Print UART on console
59
    pclow   : integer := CFG_PCLOW;
60
    freq    : integer := 25000          -- frequency of main clock (used for PLLs)
61
    );
62
  port (
63
    resetn  : in  std_ulogic;
64
    resoutn : out std_logic;
65
    clk     : in  std_ulogic;
66
 
67
    errorn  : out   std_ulogic;
68
    address : out   std_logic_vector(15 downto 2);
69
    data    : inout std_logic_vector(31 downto 0);
70
 
71
-- pragma translate_off
72
    ramsn  : out std_logic_vector (4 downto 0);
73
    ramoen : out std_logic_vector (4 downto 0);
74
    rben   : out std_logic_vector(3 downto 0);
75
    rwen   : out std_logic_vector(3 downto 0);
76
 
77
    romsn  : out std_logic_vector (1 downto 0);
78
    iosn   : out std_ulogic;
79
    oen    : out std_ulogic;
80
    read   : out std_ulogic;
81
    writen : out std_ulogic;
82
-- pragma translate_on
83
 
84
    sdcke  : out std_logic_vector (1 downto 0);  -- sdram clock enable
85
    sdcsn  : out std_logic_vector (1 downto 0);  -- sdram chip select
86
    sdwen  : out std_ulogic;                     -- sdram write enable
87
    sdrasn : out std_ulogic;                     -- sdram ras
88
    sdcasn : out std_ulogic;                     -- sdram cas
89
    sddqm  : out std_logic_vector (3 downto 0);  -- sdram dqm
90
    sdclk  : out std_ulogic;
91
    sdba   : out std_logic_vector(1 downto 0);   -- sdram bank address
92
 
93
    -- debug support unit
94
    dsuen   : in  std_ulogic;
95
    dsubre  : in  std_ulogic;
96
    dsuactn : out std_ulogic;
97
 
98
    -- UART for serial DCL/console I/O
99
    serrx     : in  std_ulogic;
100
    sertx     : out std_ulogic;
101
    sersrcsel : in  std_ulogic;
102
 
103
--    dsutx   : out std_ulogic;           -- DSU tx data
104
--    dsurx   : in  std_ulogic;           -- DSU rx data
105
--    rxd1 : in  std_ulogic;
106
--    txd1 : out std_ulogic;
107
--    gpio   : inout std_logic_vector(7 downto 0);  -- I/O port, unused at the moment
108
 
109
    -- ethernet signals
110
    emdio   : inout std_logic;          -- ethernet PHY interface
111
    etx_clk : in    std_ulogic;
112
    erx_clk : in    std_ulogic;
113
    erxd    : in    std_logic_vector(3 downto 0);
114
    erx_dv  : in    std_ulogic;
115
    erx_er  : in    std_ulogic;
116
    erx_col : in    std_ulogic;
117
    erx_crs : in    std_ulogic;
118
    etxd    : out   std_logic_vector(3 downto 0);
119
    etx_en  : out   std_ulogic;
120
    etx_er  : out   std_ulogic;
121
    emdc    : out   std_ulogic;
122
 
123
    ata_rst   : out   std_logic;
124
    ata_data  : inout std_logic_vector(15 downto 0);
125
    ata_da    : out   std_logic_vector(2 downto 0);
126
    ata_cs0   : out   std_logic;
127
    ata_cs1   : out   std_logic;
128
    ata_dior  : out   std_logic;
129
    ata_diow  : out   std_logic;
130
    ata_iordy : in    std_logic;
131
    ata_intrq : in    std_logic;
132
    ata_dmack : out   std_logic;
133
 
134
    sample_clock : out std_ulogic;
135
 
136
-------------------------------------------------------------------------------
137
-- HPI PORT
138
-------------------------------------------------------------------------------
139
    hpiaddr : out   std_logic_vector(1 downto 0);
140
    hpidata : inout std_logic_vector(15 downto 0);
141
    hpicsn  : out   std_ulogic;
142
    hpiwrn  : out   std_ulogic;
143
    hpirdn  : out   std_ulogic;
144
    hpiint  : in    std_ulogic;
145
 
146
    -- equality flag for R/W data
147
    dbg_equal : out std_ulogic;
148
-------------------------------------------------------------------------------
149
 
150
 
151
    dac       : out std_ulogic;
152
    vga_vsync : out std_ulogic;
153
    vga_hsync : out std_ulogic;
154
    vga_rd    : out std_logic_vector(1 downto 0);
155
    vga_gr    : out std_logic_vector(1 downto 0);
156
    vga_bl    : out std_logic_vector(1 downto 0)
157
 
158
    );
159
end;
160
 
161
architecture rtl of leon3mini is
162
 
163
  constant blength   : integer := 12;
164
  constant fifodepth : integer := 8;
165
 
166
  signal vcc, gnd   : std_logic_vector(4 downto 0);
167
  signal memi       : memory_in_type;
168
  signal memo       : memory_out_type;
169
  signal wpo        : wprot_out_type;
170
  signal sdi        : sdctrl_in_type;
171
  signal sdo        : sdram_out_type;
172
  signal sdo2, sdo3 : sdctrl_out_type;
173
 
174
  signal apbi  : apb_slv_in_type;
175
  signal apbo  : apb_slv_out_vector := (others => apb_none);
176
  signal ahbsi : ahb_slv_in_type;
177
  signal ahbso : ahb_slv_out_vector := (others => ahbs_none);
178
  signal ahbmi : ahb_mst_in_type;
179
  signal ahbmo : ahb_mst_out_vector := (others => ahbm_none);
180
 
181
  signal clkm, rstn, sdclkl : std_ulogic;
182
  signal cgi                : clkgen_in_type;
183
  signal cgo                : clkgen_out_type;
184
  signal u1i, dui           : uart_in_type;
185
  signal u1o, duo           : uart_out_type;
186
 
187
  signal irqi : irq_in_vector(0 to CFG_NCPU-1);
188
  signal irqo : irq_out_vector(0 to CFG_NCPU-1);
189
 
190
  signal dbgi : l3_debug_in_vector(0 to CFG_NCPU-1);
191
  signal dbgo : l3_debug_out_vector(0 to CFG_NCPU-1);
192
 
193
  signal dsui : dsu_in_type;
194
  signal dsuo : dsu_out_type;
195
 
196
  signal ethi, ethi1, ethi2 : eth_in_type;
197
  signal etho, etho1, etho2 : eth_out_type;
198
 
199
  signal atai : ata_in_type;
200
  signal atao : ata_out_type;
201
 
202
  signal gpti : gptimer_in_type;
203
 
204
  signal sa : std_logic_vector(14 downto 0);  -- ?
205
  signal sd : std_logic_vector(63 downto 0);  -- ?
206
 
207
  signal emddis : std_ulogic;
208
  signal ereset : std_ulogic;
209
 
210
  signal epwrdwn : std_ulogic;
211
  signal esleep  : std_ulogic;
212
  signal epause  : std_ulogic;
213
 
214
  signal tck, tms, tdi, tdo : std_ulogic;
215
 
216
-- Adaptions for HPE Compact
217
 
218
  signal dsuact         : std_logic;
219
  signal oen_ctrl       : std_logic;
220
  signal sdram_selected : std_logic;
221
 
222
  signal shortcut : std_logic;
223
  signal rx       : std_logic;
224
  signal tx       : std_logic;
225
 
226
  signal rxd1  : std_logic;
227
  signal txd1  : std_logic;
228
  signal dsutx : std_ulogic;            -- DSU tx data
229
  signal dsurx : std_ulogic;            -- DSU rx data
230
 
231
  ---------------------------------------------------------------------------------------
232
  -- HPI SIGNALS
233
  ---------------------------------------------------------------------------------------
234
--  signal hpiaddr      : std_logic_vector(1 downto 0);
235
--  signal hpidata      : std_logic_vector(15 downto 0);
236
--  signal hpicsn       : std_ulogic;
237
--  signal hpiwrn       : std_ulogic;
238
--  signal hpirdn       : std_ulogic;
239
--  signal hpiint       : std_ulogic;
240
 
241
  signal hpiwriten : std_ulogic;        -- intermediate signal
242
  signal hpirdata  : std_logic_vector(15 downto 0);
243
  signal hpiwdata  : std_logic_vector(15 downto 0);
244
  signal drive_bus : std_ulogic;
245
 
246
  signal dbg_rdata : std_logic_vector(15 downto 0);
247
  signal dbg_wdata : std_logic_vector(15 downto 0);
248
  ---------------------------------------------------------------------------------------
249
 
250
  signal vgao      : apbvga_out_type;
251
  signal video_clk : std_logic;
252
  signal clk_sel   : std_logic_vector(1 downto 0);
253
 
254
  constant BOARD_FREQ : integer := freq;  -- input frequency in KHz
255
  constant CPU_FREQ   : integer := BOARD_FREQ * CFG_CLKMUL / CFG_CLKDIV;  -- cpu frequency in KHz
256
begin
257
 
258
----------------------------------------------------------------------
259
---  Reset and Clock generation  -------------------------------------
260
----------------------------------------------------------------------
261
 
262
  vcc         <= (others => '1'); gnd <= (others => '0');
263
  cgi.pllctrl <= "00"; cgi.pllrst <= not resetn; cgi.pllref <= clk;  --'0'; --pllref;
264
 
265
  clkgen0 : clkgen                      -- clock generator using toplevel generic 'freq'
266
    generic map (tech    => CFG_CLKTECH, clk_mul => CFG_CLKMUL,
267
                 clk_div => CFG_CLKDIV, sdramen => CFG_MCTRL_SDEN,
268
                 noclkfb => CFG_CLK_NOFB, freq => freq)
269
    port map (clkin => clk, pciclkin => gnd(0), clk => clkm, clkn => open,
270
              clk2x => open, sdclk => sdclkl, pciclk => open,
271
              cgi   => cgi, cgo => cgo);
272
 
273
  rst0 : rstgen                         -- reset generator
274
    port map (resetn, clkm, cgo.clklock, rstn);
275
 
276
---------------------------------------------------------------------- 
277
---  AHB CONTROLLER --------------------------------------------------
278
----------------------------------------------------------------------
279
 
280
  ahb0 : ahbctrl                        -- AHB arbiter/multiplexer
281
    generic map (defmast => CFG_DEFMST, split => CFG_SPLIT,
282
                 rrobin  => CFG_RROBIN, ioaddr => CFG_AHBIO,
283
                 nahbm   => 8, nahbs => 8)
284
    port map (rstn, clkm, ahbmi, ahbmo, ahbsi, ahbso);
285
 
286
----------------------------------------------------------------------
287
---  LEON3 processor and DSU -----------------------------------------
288
----------------------------------------------------------------------
289
 
290
  l3 : if CFG_LEON3 = 1 generate
291
    cpu : for i in 0 to CFG_NCPU-1 generate
292
      u0 : leon3s                       -- LEON3 processor
293
        generic map (i, fabtech, memtech, CFG_NWIN, CFG_DSU, CFG_FPU, CFG_V8,
294
                     0, CFG_MAC, pclow, 0, CFG_NWP, CFG_ICEN, CFG_IREPL, CFG_ISETS, CFG_ILINE,
295
                     CFG_ISETSZ, CFG_ILOCK, CFG_DCEN, CFG_DREPL, CFG_DSETS, CFG_DLINE, CFG_DSETSZ,
296
                     CFG_DLOCK, CFG_DSNOOP, CFG_ILRAMEN, CFG_ILRAMSZ, CFG_ILRAMADDR, CFG_DLRAMEN,
297
                     CFG_DLRAMSZ, CFG_DLRAMADDR, CFG_MMUEN, CFG_ITLBNUM, CFG_DTLBNUM, CFG_TLB_TYPE, CFG_TLB_REP,
298
                     CFG_LDDEL, disas, CFG_ITBSZ, CFG_PWD, CFG_SVT, CFG_RSTADDR,
299
                     CFG_NCPU-1)
300
        port map (clkm, rstn, ahbmi, ahbmo(i), ahbsi, ahbso,
301
                  irqi(i), irqo(i), dbgi(i), dbgo(i));
302
    end generate;
303
    errorn_pad : odpad generic map (tech => padtech) port map (errorn, dbgo(0).error);
304
 
305
    dsugen : if CFG_DSU = 1 generate
306
      dsu0 : dsu3                       -- LEON3 Debug Support Unit
307
        generic map (hindex => 2, haddr => 16#900#, hmask => 16#F00#,
308
                     ncpu   => CFG_NCPU, tbits => 30, tech => memtech, irq => 0, kbytes => CFG_ATBSZ)
309
        port map (rstn, clkm, ahbmi, ahbsi, ahbso(2), dbgo, dbgi, dsui, dsuo);
310
      dsuen_pad  : inpad generic map (tech  => padtech) port map (dsuen, dsui.enable);
311
      --    **** tame: do not use inversion
312
      dsubre_pad : inpad generic map (tech  => padtech) port map (dsubre, dsui.break);
313
      dsuact_pad : outpad generic map (tech => padtech) port map (dsuact, dsuo.active);
314
    end generate;
315
  end generate;
316
  nodcom : if CFG_DSU = 0 generate ahbso(2) <= ahbs_none; end generate;
317
 
318
  dcomgen : if CFG_AHB_UART = 1 generate
319
    dcom0 : ahbuart                     -- Debug UART
320
      generic map (hindex => CFG_NCPU, pindex => 4, paddr => 7)
321
      port map (rstn, clkm, dui, duo, apbi, apbo(4), ahbmi, ahbmo(CFG_NCPU));
322
    dsurx_pad : inpad generic map (tech  => padtech) port map (dsurx, dui.rxd);
323
    dsutx_pad : outpad generic map (tech => padtech) port map (dsutx, duo.txd);
324
  end generate;
325
  nouah : if CFG_AHB_UART = 0 generate apbo(4) <= apb_none; end generate;
326
 
327
  ahbjtaggen0 : if CFG_AHB_JTAG = 1 generate
328
    ahbjtag0 : ahbjtag generic map(tech => fabtech, hindex => CFG_NCPU+CFG_AHB_UART)
329
      port map(rstn, clkm, tck, tms, tdi, tdo, ahbmi, ahbmo(CFG_NCPU+CFG_AHB_UART),
330
               open, open, open, open, open, open, open, gnd(0));
331
  end generate;
332
 
333
----------------------------------------------------------------------
334
---  Memory controllers ----------------------------------------------
335
----------------------------------------------------------------------
336
 
337
  mg2 : if CFG_MCTRL_LEON2 = 1 generate      -- LEON2 memory controller
338
    sr1 : mctrl generic map (hindex => 0, pindex => 0,
339
                             paddr  => 0, fast => 0, srbanks => 1, sden => CFG_MCTRL_SDEN)
340
      port map (rstn, clkm, memi, memo, ahbsi, ahbso(0), apbi, apbo(0), wpo, sdo);
341
    sdpads : if CFG_MCTRL_SDEN = 1 generate  -- SDRAM pads
342
      sdwen_pad : outpad generic map (tech => padtech)
343
        port map (sdwen, sdo.sdwen);
344
      sdras_pad : outpad generic map (tech => padtech)
345
        port map (sdrasn, sdo.rasn);
346
      sdcas_pad : outpad generic map (tech => padtech)
347
        port map (sdcasn, sdo.casn);
348
      sddqm_pad : outpadv generic map (width => 4, tech => padtech)
349
        port map (sddqm, sdo.dqm(3 downto 0));
350
      sdclk_pad : outpad generic map (tech   => padtech, slew => 1) port map (sdclk, sdclkl);
351
      sdcke_pad : outpadv generic map (width => 2, tech => padtech)
352
        port map (sdcke, sdo.sdcke);
353
      sdcsn_pad : outpadv generic map (width => 2, tech => padtech)
354
        port map (sdcsn, sdo.sdcsn);
355
    end generate;
356
    addr_pad : outpadv generic map (width => 14, tech => padtech)
357
      port map (address, memo.address(15 downto 2));
358
    bdr : for i in 0 to 3 generate
359
      data_pad : iopadv generic map (tech => padtech, width => 8)
360
        port map (data(31-i*8 downto 24-i*8), memo.data(31-i*8 downto 24-i*8),
361
                  memo.bdrive(i), memi.data(31-i*8 downto 24-i*8));
362
    end generate;
363
  end generate;
364
 
365
  nosd0 : if (CFG_MCTRL_SDEN = 0) generate  -- no SDRAM controller
366
    sdclk_pad : outpad generic map (tech   => padtech, slew => 1) port map (sdclk, sdclkl);
367
    sdcke_pad : outpadv generic map (width => 2, tech => padtech)
368
      port map (sdcke, sdo3.sdcke);
369
    sdcsn_pad : outpadv generic map (width => 2, tech => padtech)
370
      port map (sdcsn, sdo3.sdcsn);
371
  end generate;
372
 
373
  memi.brdyn  <= '1'; memi.bexcn <= '1';
374
  memi.writen <= '1'; memi.wrn <= "1111"; memi.bwidth <= "10";
375
 
376
 
377
-- pragma translate_off
378
  mgpads : if CFG_MCTRL_LEON2 = 1 generate
379
    rams_pad : outpadv generic map (width => 5, tech => padtech)
380
      port map (ramsn, memo.ramsn(4 downto 0));
381
    roms_pad : outpadv generic map (width => 2, tech => padtech)
382
      port map (romsn, memo.romsn(1 downto 0));
383
    oen_pad : outpad generic map (tech => padtech)
384
      port map (oen, memo.oen);
385
    rwen_pad : outpadv generic map (width => 4, tech => padtech)
386
      port map (rwen, memo.wrn);
387
    roen_pad : outpadv generic map (width => 5, tech => padtech)
388
      port map (ramoen, memo.ramoen(4 downto 0));
389
    wri_pad : outpad generic map (tech => padtech)
390
      port map (writen, memo.writen);
391
    read_pad : outpad generic map (tech => padtech)
392
      port map (read, memo.read);
393
    iosn_pad : outpad generic map (tech => padtech)
394
      port map (iosn, memo.iosn);
395
  end generate;
396
-- pragma translate_on
397
 
398
----------------------------------------------------------------------
399
---  APB Bridge and various periherals -------------------------------
400
----------------------------------------------------------------------
401
 
402
  apb0 : apbctrl                        -- AHB/APB bridge
403
    generic map (hindex => 1, haddr => CFG_APBADDR)
404
    port map (rstn, clkm, ahbsi, ahbso(1), apbi, apbo);
405
 
406
  ua1 : if CFG_UART1_ENABLE /= 0 generate
407
    uart1 : apbuart                     -- UART 1
408
      generic map (pindex   => 1, paddr => 1, pirq => 2, console => dbguart,
409
                   fifosize => CFG_UART1_FIFO)
410
      port map (rstn, clkm, apbi, apbo(1), u1i, u1o);
411
    u1i.rxd <= rxd1; u1i.ctsn <= '0'; u1i.extclk <= '0'; txd1 <= u1o.txd;
412
  end generate;
413
  noua0 : if CFG_UART1_ENABLE = 0 generate apbo(1) <= apb_none; end generate;
414
 
415
  irqctrl : if CFG_IRQ3_ENABLE /= 0 generate
416
    irqctrl0 : irqmp                    -- interrupt controller
417
      generic map (pindex => 2, paddr => 2, ncpu => CFG_NCPU)
418
      port map (rstn, clkm, apbi, apbo(2), irqo, irqi);
419
  end generate;
420
  irq3 : if CFG_IRQ3_ENABLE = 0 generate
421
    x : for i in 0 to CFG_NCPU-1 generate
422
      irqi(i).irl <= "0000";
423
    end generate;
424
    apbo(2) <= apb_none;
425
  end generate;
426
 
427
  gpt : if CFG_GPT_ENABLE /= 0 generate
428
    timer0 : gptimer                    -- timer unit
429
      generic map (pindex => 3, paddr => 3, pirq => CFG_GPT_IRQ,
430
                   sepirq => CFG_GPT_SEPIRQ, sbits => CFG_GPT_SW, ntimers => CFG_GPT_NTIM,
431
                   nbits  => CFG_GPT_TW)
432
      port map (rstn, clkm, apbi, apbo(3), gpti, open);
433
    gpti.dhalt <= dsuo.active; gpti.extclk <= '0';
434
  end generate;
435
  notim : if CFG_GPT_ENABLE = 0 generate apbo(3) <= apb_none; end generate;
436
 
437
  vga : if CFG_VGA_ENABLE /= 0 generate
438
    vga0 : apbvga generic map(memtech => memtech, pindex => 5, paddr => 6)
439
      port map(rstn, clkm, clk, apbi, apbo(5), vgao);
440
  end generate;
441
  vert_sync_pad : outpad generic map (tech => padtech)
442
    port map (vga_vsync, vgao.vsync);
443
  horiz_sync_pad : outpad generic map (tech => padtech)
444
    port map (vga_hsync, vgao.hsync);
445
  video_out_r_pad : outpadv generic map (width => 2, tech => padtech)
446
    port map (vga_rd, vgao.video_out_r(7 downto 6));
447
  video_out_g_pad : outpadv generic map (width => 2, tech => padtech)
448
    port map (vga_gr, vgao.video_out_g(7 downto 6));
449
  video_out_b_pad : outpadv generic map (width => 2, tech => padtech)
450
    port map (vga_bl, vgao.video_out_b(7 downto 6));
451
 
452
  svga : if CFG_SVGA_ENABLE /= 0 generate
453
    svga0 : svgactrl generic map(memtech => memtech, pindex => 6, paddr => 6,
454
                                 hindex  => CFG_NCPU+CFG_AHB_UART+CFG_AHB_JTAG,
455
                                 clk0    => 40000, clk1 => 1000000000/((BOARD_FREQ * CFG_CLKMUL)/CFG_CLKDIV),
456
                                 clk2    => 20000, clk3 => 15385, burstlen => 6)
457
      port map(rstn, clkm, video_clk, apbi, apbo(6), vgao, ahbmi,
458
               ahbmo(CFG_NCPU+CFG_AHB_UART+CFG_AHB_JTAG), clk_sel);
459
    video_clk <= clk when clk_sel = "00" else clkm;
460
  end generate;
461
 
462
  novga : if CFG_VGA_ENABLE+CFG_SVGA_ENABLE = 0 generate
463
    apbo(6) <= apb_none; vgao <= vgao_none;
464
  end generate;
465
 
466
-----------------------------------------------------------------------
467
---  ETHERNET ---------------------------------------------------------
468
-----------------------------------------------------------------------
469
 
470
  eth0 : if CFG_GRETH = 1 generate      -- Gaisler ethernet MAC
471
    e1 : greth generic map(hindex    => CFG_NCPU+CFG_AHB_UART+CFG_AHB_JTAG+CFG_SVGA_ENABLE,
472
                           pindex    => 15, paddr => 15, pirq => 12, memtech => memtech,
473
                           mdcscaler => CPU_FREQ/1000, enable_mdio => 1, fifosize => CFG_ETH_FIFO,
474
                           nsync     => 1, edcl => CFG_DSU_ETH, edclbufsz => CFG_ETH_BUF,
475
                           macaddrh  => CFG_ETH_ENM, macaddrl => CFG_ETH_ENL,
476
                           ipaddrh   => CFG_ETH_IPM, ipaddrl => CFG_ETH_IPL)
477
      port map(rst    => rstn, clk => clkm, ahbmi => ahbmi,
478
                ahbmo => ahbmo(CFG_NCPU+CFG_AHB_UART+CFG_AHB_JTAG+CFG_SVGA_ENABLE), apbi => apbi,
479
                apbo  => apbo(15), ethi => ethi, etho => etho);
480
 
481
    emdio_pad : iopad generic map (tech => padtech)
482
      port map (emdio, etho.mdio_o, etho.mdio_oe, ethi.mdio_i);
483
    etxc_pad : inpad generic map (tech => padtech)
484
      port map (etx_clk, ethi.tx_clk);
485
    erxc_pad : inpad generic map (tech => padtech)
486
      port map (erx_clk, ethi.rx_clk);
487
    erxd_pad : inpadv generic map (tech => padtech, width => 4)
488
      port map (erxd, ethi.rxd(3 downto 0));
489
    erxdv_pad : inpad generic map (tech => padtech)
490
      port map (erx_dv, ethi.rx_dv);
491
    erxer_pad : inpad generic map (tech => padtech)
492
      port map (erx_er, ethi.rx_er);
493
    erxco_pad : inpad generic map (tech => padtech)
494
      port map (erx_col, ethi.rx_col);
495
    erxcr_pad : inpad generic map (tech => padtech)
496
      port map (erx_crs, ethi.rx_crs);
497
 
498
    etxd_pad : outpadv generic map (tech => padtech, width => 4)
499
      port map (etxd, etho.txd(3 downto 0));
500
    etxen_pad : outpad generic map (tech => padtech)
501
      port map (etx_en, etho.tx_en);
502
    etxer_pad : outpad generic map (tech => padtech)
503
      port map (etx_er, etho.tx_er);
504
    emdc_pad : outpad generic map (tech => padtech)
505
      port map (emdc, etho.mdc);
506
 
507
    emdis_pad : outpad generic map (tech => padtech)
508
      port map (emddis, vcc(0));
509
    eepwrdwn_pad : outpad generic map (tech => padtech)
510
      port map (epwrdwn, gnd(0));
511
    esleep_pad : outpad generic map (tech => padtech)
512
      port map (esleep, gnd(0));
513
    epause_pad : outpad generic map (tech => padtech)
514
      port map (epause, gnd(0));
515
    ereset_pad : outpad generic map (tech => padtech)
516
      port map (ereset, gnd(0));
517
 
518
  end generate;
519
 
520
-----------------------------------------------------------------------
521
---  ATA Controller ---------------------------------------------------
522
-----------------------------------------------------------------------
523
  atac : if CFG_ATA = 1 generate
524
    atac0 : atactrl
525
      generic map(
526
        shindex => 5,
527
        haddr   => CFG_ATAIO,
528
        hmask   => 16#fff#,
529
        pirq    => CFG_ATAIRQ,
530
 
531
        TWIDTH => 8,                    -- counter width
532
 
533
        -- PIO mode 0 settings (@100MHz clock)
534
        PIO_mode0_T1   => 6,            -- 70ns
535
        PIO_mode0_T2   => 28,           -- 290ns
536
        PIO_mode0_T4   => 2,            -- 30ns
537
        PIO_mode0_Teoc => 23            -- 240ns ==> T0 - T1 - T2 = 600 - 70 - 290 = 240
538
        )
539
      port map(
540
        rst   => rstn,
541
        arst  => '1',
542
        clk   => clkm,
543
        ahbsi => ahbsi,
544
        ahbso => ahbso(5),
545
        ahbmo => open,
546
        ahbmi => ahbmi,
547
 
548
        -- ATA signals
549
        atai => atai,
550
        atao => atao
551
        );
552
 
553
    ata_rst_pad : outpad generic map (tech => padtech)
554
      port map (ata_rst, atao.rstn);
555
    ata_data_pad : iopadv generic map (tech => padtech, width => 16, oepol => 1)
556
      port map (ata_data, atao.ddo, atao.oen, atai.ddi);
557
    ata_da_pad : outpadv generic map (tech => padtech, width => 3)
558
      port map (ata_da, atao.da);
559
    ata_cs0_pad : outpad generic map (tech => padtech)
560
      port map (ata_cs0, atao.cs0);
561
    ata_cs1_pad : outpad generic map (tech => padtech)
562
      port map (ata_cs1, atao.cs1);
563
    ata_dior_pad : outpad generic map (tech => padtech)
564
      port map (ata_dior, atao.dior);
565
    ata_diow_pad : outpad generic map (tech => padtech)
566
      port map (ata_diow, atao.diow);
567
    iordy_pad : inpad generic map (tech => padtech)
568
      port map (ata_iordy, atai.iordy);
569
    intrq_pad : inpad generic map (tech => padtech)
570
      port map (ata_intrq, atai.intrq);
571
    dmack_pad : outpad generic map (tech => padtech)
572
      port map (ata_dmack, atao.dmack);
573
  end generate;
574
 
575
-----------------------------------------------------------------------
576
---  AHB ROM ----------------------------------------------------------
577
-----------------------------------------------------------------------
578
 
579
  bpromgen : if CFG_AHBROMEN /= 0 generate
580
    brom : entity work.ahbrom
581
      generic map (hindex => 6, haddr => CFG_AHBRODDR, pipe => CFG_AHBROPIP)
582
      port map (rstn, clkm, ahbsi, ahbso(6));
583
  end generate;
584
  nobpromgen : if CFG_AHBROMEN = 0 generate
585
    ahbso(6) <= ahbs_none;
586
  end generate;
587
 
588
-----------------------------------------------------------------------
589
---  AHB RAM ----------------------------------------------------------
590
-----------------------------------------------------------------------
591
 
592
  ahbramgen : if CFG_AHBRAMEN = 1 generate
593
    ahbram0 : ahbram generic map (hindex => 3, haddr => CFG_AHBRADDR,
594
                                  tech   => CFG_MEMTECH, kbytes => CFG_AHBRSZ)
595
      port map (rstn, clkm, ahbsi, ahbso(3));
596
  end generate;
597
  nram : if CFG_AHBRAMEN = 0 generate ahbso(3) <= ahbs_none; end generate;
598
 
599
-----------------------------------------------------------------------
600
---  AHB DAC IF -------------------------------------------------------
601
-----------------------------------------------------------------------
602
 
603
  dac_ahb_inst : if CFG_DAC_AHB /= 0 generate
604
    dac_ahb_1 : dac_ahb
605
      generic map(length => 16, hindex => 4, haddr => 16#010#, hmask => 16#FFF#, tech => fabtech, kbytes => 1)
606
      port map(rst       => rstn, clk => clkm, ahbsi => ahbsi, ahbso => ahbso(4), dac_out => dac);
607
  end generate;
608
  ndac_ahb_inst : if CFG_DAC_AHB = 0 generate
609
    ahbso(4) <= ahbs_none;
610
  end generate;
611
 
612
  -----------------------------------------------------------------------------
613
  -- HPI SECTION
614
  -----------------------------------------------------------------------------
615
 
616
  ahb2hpi_inst : if CFG_AHB2HPI /= 0 generate
617
    ahb2hpi2_1 : ahb2hpi2
618
      generic map (
619
        counter_width => 4,
620
        data_width    => 16,
621
        address_width => 2,
622
        hindex        => 7,
623
        haddr         => 16#240#,
624
        hmask         => 16#fff#)
625
      port map (
626
        HCLK      => clkm,
627
        HRESETn   => rstn,
628
        ahbso     => ahbso(7),
629
        ahbsi     => ahbsi,
630
        ADDR      => hpiaddr,
631
        WDATA     => hpiwdata,
632
        RDATA     => hpirdata,
633
        nCS       => hpicsn,
634
        nWR       => hpiwriten,
635
        nRD       => hpirdn,
636
        INT       => hpiint,
637
        drive_bus => drive_bus,
638
        dbg_equal => dbg_equal
639
        );
640
 
641
    hpidata <= hpiwdata when drive_bus = '1' else
642
               (others => 'Z');
643
 
644
    hpirdata <= hpidata;
645
 
646
    hpiwrn <= hpiwriten;
647
 
648
  end generate;
649
  nahb2hpi_inst : if CFG_AHB2HPI = 0 generate
650
    ahbso(7) <= ahbs_none;
651
  end generate;
652
 
653
 
654
-----------------------------------------------------------------------
655
---  Drive unused bus elements  ---------------------------------------
656
-----------------------------------------------------------------------
657
 
658
  nam1 : for i in (CFG_NCPU+CFG_AHB_UART+CFG_AHB_JTAG+CFG_SVGA_ENABLE+CFG_GRETH) to NAHBMST-1 generate
659
    ahbmo(i) <= ahbm_none;
660
  end generate;
661
  nap0 : for i in 7 to NAPBSLV-1-CFG_GRETH generate apbo(i) <= apb_none; end generate;
662
  nah0 : for i in 8 to NAHBSLV-1 generate ahbso(i)          <= ahbs_none; end generate;
663
 
664
 
665
-----------------------------------------------------------------------
666
---  Adaptions for HPE Mini -- ----------------------------------------
667
-----------------------------------------------------------------------
668
 
669
  dsuactn <= not dsuact;
670
 
671
  sdba <= memo.address(16 downto 15);   -- the bank address
672
 
673
  resoutn <= rstn;
674
  dual_uart : if CFG_AHB_UART /= 0 and CFG_UART1_ENABLE /= 0 generate
675
    with sersrcsel select
676
      sertx <= txd1 when '1', dsutx when others;
677
 
678
    rxd1  <= serrx when sersrcsel = '1' else '-';
679
    dsurx <= serrx when sersrcsel = '0' else '-';
680
  end generate dual_uart;
681
 
682
  console_uart : if CFG_AHB_UART = 0 and CFG_UART1_ENABLE /= 0 generate
683
    sertx <= txd1;
684
    rxd1  <= serrx;
685
  end generate console_uart;
686
 
687
  dcl_uart : if CFG_AHB_UART /= 0 and CFG_UART1_ENABLE = 0 generate
688
    sertx <= dsutx;
689
    dsurx <= serrx;
690
  end generate dcl_uart;
691
 
692
  no_uart : if CFG_AHB_UART = 0 and CFG_UART1_ENABLE = 0 generate
693
    sertx <= '-';
694
    dsurx <= '-';
695
    rxd1  <= '-';
696
  end generate no_uart;
697
 
698
-----------------------------------------------------------------------
699
---  Boot message  ----------------------------------------------------
700
-----------------------------------------------------------------------
701
 
702
-- pragma translate_off
703
  x : report_version
704
    generic map (
705
      msg1 => "LEON3 Demonstration design for HPE_mini board",
706
      msg2 => "GRLIB Version " & tost(LIBVHDL_VERSION/1000) & "." & tost((LIBVHDL_VERSION mod 1000)/100)
707
      & "." & tost(LIBVHDL_VERSION mod 100) & ", build " & tost(LIBVHDL_BUILD),
708
      msg3 => "Target technology: " & tech_table(fabtech) & ",  memory library: " & tech_table(memtech),
709
      mdel => 1
710
      );
711
-- pragma translate_on
712
 
713
 
714
 
715
end rtl;

powered by: WebSVN 2.1.0

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