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-lattice/] [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
library esa;
41
use esa.memoryctrl.all;
42
library gleichmann;
43
use gleichmann.hpi.all;
44
use gleichmann.multiio.all;
45
use gleichmann.dac.all;
46
use gleichmann.ge_clkgen.all;
47
library ec;
48
use ec.components.all;
49
 
50
use work.config.all;
51
 
52
 
53
entity leon3mini is
54
  generic (
55
    fabtech   : integer := CFG_FABTECH;
56
    memtech   : integer := CFG_MEMTECH;
57
    padtech   : integer := CFG_PADTECH;
58
    clktech   : integer := CFG_CLKTECH;
59
    disas     : integer := CFG_DISAS;   -- Enable disassembly to console
60
    dbguart   : integer := CFG_DUART;   -- Print UART on console
61
    pclow     : integer := CFG_PCLOW;
62
    ddrfreq   : integer := 100000;      -- frequency of ddr clock in kHz 
63
    cpufreq   : integer := 50000;       -- frequency of cpu/ahb clock in kHz
64
    boardfreq : string  := "25"         -- frequency of ddr clock in MHz 
65
    );
66
  port (
67
    resetn  : in  std_ulogic;
68
    resoutn : out std_logic;
69
    clk     : in  std_ulogic;
70
 
71
    errorn  : out   std_ulogic;
72
    address : out   std_logic_vector(24 downto 2);
73
    data    : inout std_logic_vector(31 downto 0);
74
 
75
    ramsn : out std_ulogic;
76
    rben  : out std_logic_vector(3 downto 0);
77
 
78
    romsn   : out std_ulogic;
79
--    iosn    : out   std_ulogic;
80
    oen     : out std_ulogic;
81
    --   read    : out   std_ulogic;
82
    writen  : out std_ulogic;
83
    romwpn  : out std_ulogic;
84
    romrstn : out std_ulogic;
85
 
86
    -- ddr memory  
87
    ddr_clk0   : out   std_logic;
88
    ddr_clk0b  : out   std_logic;
89
    ddr_clk_fb : in    std_logic;
90
    ddr_cke0   : out   std_logic;
91
    ddr_cs0b   : out   std_logic;
92
    ddr_web    : out   std_ulogic;                      -- ddr write enable
93
    ddr_rasb   : out   std_ulogic;                      -- ddr ras
94
    ddr_casb   : out   std_ulogic;                      -- ddr cas
95
    ddr_dm     : out   std_logic_vector (3 downto 0);   -- ddr dm
96
    ddr_dqs    : inout std_logic_vector (3 downto 0);   -- ddr dqs
97
    ddr_ad     : out   std_logic_vector (12 downto 0);  -- ddr address
98
    ddr_ba     : out   std_logic_vector (1 downto 0);   -- ddr bank address
99
    ddr_dq     : inout std_logic_vector (31 downto 0);  -- ddr data
100
    ddr_clk1   : out   std_logic;                       -- ddr module 1
101
    ddr_clk1b  : out   std_logic;                       -- ddr module 1
102
    ddr_cke1   : out   std_logic;                       -- ddr module 1
103
    ddr_cs1b   : out   std_logic;                       -- ddr module 1
104
 
105
    -- debug support unit
106
    -- dsuen   : in  std_ulogic;
107
    dsubre : in std_ulogic;
108
    -- dsuactn : out std_ulogic;
109
 
110
    -- UART for serial DCL/console I/O
111
    serrx : in  std_ulogic;
112
    sertx : out std_ulogic;
113
 
114
    -- ethernet signals
115
    emdio   : inout std_logic;          -- ethernet PHY interface
116
    etx_clk : in    std_ulogic;
117
    erx_clk : in    std_ulogic;
118
    erxd    : in    std_logic_vector(3 downto 0);
119
    erx_dv  : in    std_ulogic;
120
    erx_er  : in    std_ulogic;
121
    erx_col : in    std_ulogic;
122
    erx_crs : in    std_ulogic;
123
    etxd    : out   std_logic_vector(3 downto 0);
124
    etx_en  : out   std_ulogic;
125
    etx_er  : out   std_ulogic;
126
    emdc    : out   std_ulogic;
127
 
128
--    sample_clock : out std_ulogic;
129
 
130
-------------------------------------------------------------------------------
131
-- HPI PORT
132
-------------------------------------------------------------------------------
133
    hpiaddr : out   std_logic_vector(1 downto 0);
134
    hpidata : inout std_logic_vector(15 downto 0);
135
    hpicsn  : out   std_ulogic;
136
    hpiwrn  : out   std_ulogic;
137
    hpirdn  : out   std_ulogic;
138
    hpiint  : in    std_ulogic;
139
 
140
    -- equality flag for R/W data
141
--    dbg_equal : out std_ulogic;
142
-------------------------------------------------------------------------------
143
 
144
    -------------------------------------------------------------------------------------
145
    -- IO SECTION
146
    -------------------------------------------------------------------------------------
147
    dsw : in  std_logic_vector(3 downto 0);
148
    led : out std_logic_vector(7 downto 0);  -- 8 leds
149
 
150
    sevensegment : out std_logic_vector(9 downto 0);  -- 7-segments and 2 strobes
151
 
152
    lcd_enable : out std_logic;
153
    lcd_regsel : out std_logic;
154
    lcd_rw     : out std_logic;
155
 
156
    -- keyboard
157
    tst_col : out std_logic_vector(2 downto 0);  -- column outputs
158
    tst_row : in  std_logic_vector(3 downto 0);  -- row inputs
159
 
160
    -- expansion connector signals
161
    exp_datao : out std_logic_vector(19 downto 0);
162
    exp_datai : in  std_logic_vector(19 downto 0);
163
 
164
    -- audio codec
165
    codec_mode   : out std_ulogic;
166
    codec_mclk   : out std_ulogic;
167
    codec_sclk   : out std_ulogic;
168
    codec_cs     : out std_ulogic;
169
    codec_sdin   : out std_ulogic;
170
    codec_din    : out std_ulogic;  -- I2S format serial data input to the sigma-delta stereo DAC
171
    codec_bclk   : out std_ulogic;      -- I2S serial-bit clock
172
--  codec_dout   : in  std_ulogic;         -- I2S format serial data output from the sigma-delta stereo ADC
173
    codec_lrcin  : out std_ulogic;      -- I2S DAC-word clock signal
174
    codec_lrcout : out std_ulogic;      -- I2S ADC-word clock signal
175
 
176
    dac       : out std_ulogic;
177
    vga_vsync : out std_ulogic;
178
    vga_hsync : out std_ulogic;
179
    vga_rd    : out std_logic_vector(1 downto 0);
180
    vga_gr    : out std_logic_vector(1 downto 0);
181
    vga_bl    : out std_logic_vector(1 downto 0)
182
 
183
    );
184
end;
185
 
186
architecture rtl of leon3mini is
187
 
188
 
189
  component clkgen_lattice
190
    generic (
191
      clk_mul    : string := "2";
192
      clk_div    : string := "1";
193
      freq       : string := "25";      -- clock frequency in MHz
194
      ddrclk_mul : string := "4";
195
      ddrclk_div : string := "1");
196
    port (
197
      clkin   : in  std_logic;
198
      clk0    : out std_logic;          -- main clock
199
      clk180  : out std_logic;          -- main clock phase 180
200
      clk270  : out std_logic;          -- main clock phase 270
201
      ddrclk  : out std_logic;
202
      ddrclkb : out std_logic;
203
      clkm    : out std_logic;
204
      cgi     : in  clkgen_in_type;
205
      cgo     : out clkgen_out_type);
206
  end component;
207
 
208
 
209
  constant blength   : integer := 12;
210
  constant fifodepth : integer := 8;
211
 
212
  signal vcc, gnd   : std_logic_vector(4 downto 0);
213
  signal memi       : memory_in_type;
214
  signal memo       : memory_out_type;
215
  signal wpo        : wprot_out_type;
216
  signal sdi        : sdctrl_in_type;
217
  signal sdo        : sdram_out_type;
218
  signal sdo2, sdo3 : sdctrl_out_type;
219
 
220
  signal apbi  : apb_slv_in_type;
221
  signal apbo  : apb_slv_out_vector := (others => apb_none);
222
  signal ahbsi : ahb_slv_in_type;
223
  signal ahbso : ahb_slv_out_vector := (others => ahbs_none);
224
  signal ahbmi : ahb_mst_in_type;
225
  signal ahbmo : ahb_mst_out_vector := (others => ahbm_none);
226
 
227
  signal ddrclk0, ddrclk90, ddrclk180, ddrclk270, ddrclk, ddrclkb : std_ulogic;
228
  signal clkm, rstn, sdclkl                                       : std_ulogic;
229
  signal cgi                                                      : clkgen_in_type;
230
  signal cgo                                                      : clkgen_out_type;
231
  signal u1i, dui                                                 : uart_in_type;
232
  signal u1o, duo                                                 : uart_out_type;
233
 
234
  signal irqi : irq_in_vector(0 to CFG_NCPU-1);
235
  signal irqo : irq_out_vector(0 to CFG_NCPU-1);
236
 
237
  signal dbgi : l3_debug_in_vector(0 to CFG_NCPU-1);
238
  signal dbgo : l3_debug_out_vector(0 to CFG_NCPU-1);
239
 
240
  signal dsui : dsu_in_type;
241
  signal dsuo : dsu_out_type;
242
 
243
  signal ethi, ethi1, ethi2 : eth_in_type;
244
  signal etho, etho1, etho2 : eth_out_type;
245
 
246
  signal gpti : gptimer_in_type;
247
 
248
 
249
-- Adaptions for HPE Compact
250
 
251
--  signal dsubre         : std_logic;
252
  signal dsuact   : std_logic;
253
  signal oen_ctrl : std_logic;
254
 
255
  signal shortcut               : std_logic;
256
  signal rx                     : std_logic;
257
  signal tx                     : std_logic;
258
  signal duart, ldsuen          : std_logic;
259
  signal rsertx, rserrx, rdsuen : std_logic;
260
 
261
  -- ram write enable, not needed on the port
262
  signal rwen : std_logic_vector(3 downto 0);
263
 
264
  signal rxd1  : std_logic;
265
  signal txd1  : std_logic;
266
  signal dsutx : std_ulogic;            -- DSU tx data
267
  signal dsurx : std_ulogic;            -- DSU rx data
268
 
269
  ---------------------------------------------------------------------------------------
270
  -- HPI SIGNALS
271
  ---------------------------------------------------------------------------------------
272
--  signal hpiaddr      : std_logic_vector(1 downto 0);
273
--  signal hpidata      : std_logic_vector(15 downto 0);
274
--  signal hpicsn       : std_ulogic;
275
--  signal hpiwrn       : std_ulogic;
276
--  signal hpirdn       : std_ulogic;
277
--  signal hpiint       : std_ulogic;
278
 
279
  signal hpiwriten : std_ulogic;        -- intermediate signal
280
  signal hpirdata  : std_logic_vector(15 downto 0);
281
  signal hpiwdata  : std_logic_vector(15 downto 0);
282
  signal drive_bus : std_ulogic;
283
 
284
  signal dbg_rdata : std_logic_vector(15 downto 0);
285
  signal dbg_wdata : std_logic_vector(15 downto 0);
286
  ---------------------------------------------------------------------------------------
287
 
288
  signal vgao : apbvga_out_type;
289
  signal ddsi : ddrmem_in_type;
290
  signal ddso : ddrmem_out_type;
291
 
292
  constant modbanks : integer := CFG_DDRMP_NCS;    -- Allowed: 1,2 (banks on module)
293
  constant numchips : integer := CFG_DDRMP_NDEV;   -- Allowed: 1, 2, 4, 8, 16
294
  constant chipbits : integer := CFG_DDRMP_NBITS;  -- Allowed: 4, 8, 16
295
  constant chipsize : integer := CFG_DDRMP_MBITS;  -- Allowed: 64, 128, 256, 512, 1024 (Mbit)
296
 
297
--  attribute syn_useioff : boolean; 
298
--  attribute syn_useioff of rtl : architecture is false;
299
 
300
  ---------------------------------------------------------------------------------------
301
  -- IO SECTION
302
  ---------------------------------------------------------------------------------------
303
 
304
  signal mioi : MultiIO_in_type;
305
  signal mioo : MultiIO_out_type;
306
 
307
  signal dsuactn : std_ulogic;
308
--  signal errorn : std_ulogic;
309
 
310
  -- synplify attribute to flatten netlist
311
  attribute syn_netlist_hierarchy        : boolean;
312
  attribute syn_netlist_hierarchy of rtl : architecture is false;
313
 
314
begin
315
 
316
  romwpn  <= '1';
317
  romrstn <= rstn;
318
 
319
----------------------------------------------------------------------
320
---  Reset and Clock generation  -------------------------------------
321
----------------------------------------------------------------------
322
 
323
  vcc         <= (others => '1'); gnd <= (others => '0');
324
  cgi.pllctrl <= "00"; cgi.pllrst <= not resetn;
325
  ddrclk90    <= '0'; sdclkl <= clkm;
326
 
327
  -- do not change the generics (ddr requirements)
328
  clkgen0 : clkgen_lattice              -- clock generator
329
    generic map (freq       => boardfreq,
330
                 clk_mul    => "1",
331
                 clk_div    => "1",
332
                 ddrclk_mul => "4",
333
                 ddrclk_div => "1")     -- 25 MHz cpu clock and 100 MHz DDR clock
334
    port map (clkin  => clk, clkm => clkm, clk0 => ddrclk0, clk180 => ddrclk180,
335
              clk270 => ddrclk270, ddrclk => ddrclk, ddrclkb => ddrclkb,
336
              cgi    => cgi, cgo => cgo);
337
 
338
  ddrclk_pad : outpad generic map (tech => padtech, level => sstl2_i)
339
    port map (ddr_clk0, ddrclk);
340
  ddrclkn_pad : outpad generic map (tech => padtech, level => sstl2_i)
341
    port map (ddr_clk0b, ddrclkb);
342
 
343
  rst0 : rstgen port map (resetn, clkm, cgo.clklock, rstn);
344
 
345
---------------------------------------------------------------------- 
346
---  AHB CONTROLLER --------------------------------------------------
347
----------------------------------------------------------------------
348
 
349
  ahb0 : ahbctrl                        -- AHB arbiter/multiplexer
350
    generic map (defmast => CFG_DEFMST, split => CFG_SPLIT,
351
                 rrobin  => CFG_RROBIN, ioaddr => CFG_AHBIO,
352
                 ioen    => 1, nahbm => 4, nahbs => 8)
353
    port map (rstn, clkm, ahbmi, ahbmo, ahbsi, ahbso);
354
 
355
----------------------------------------------------------------------
356
---  LEON3 processor and DSU -----------------------------------------
357
----------------------------------------------------------------------
358
 
359
  l3 : if CFG_LEON3 = 1 generate
360
    cpu : for i in 0 to CFG_NCPU-1 generate
361
      u0 : leon3s                       -- LEON3 processor
362
        generic map (i, fabtech, memtech, CFG_NWIN, CFG_DSU, CFG_FPU, CFG_V8,
363
                     0, CFG_MAC, pclow, 0, CFG_NWP, CFG_ICEN, CFG_IREPL, CFG_ISETS, CFG_ILINE,
364
                     CFG_ISETSZ, CFG_ILOCK, CFG_DCEN, CFG_DREPL, CFG_DSETS, CFG_DLINE, CFG_DSETSZ,
365
                     CFG_DLOCK, CFG_DSNOOP, CFG_ILRAMEN, CFG_ILRAMSZ, CFG_ILRAMADDR, CFG_DLRAMEN,
366
                     CFG_DLRAMSZ, CFG_DLRAMADDR, CFG_MMUEN, CFG_ITLBNUM, CFG_DTLBNUM, CFG_TLB_TYPE, CFG_TLB_REP,
367
                     CFG_LDDEL, disas, CFG_ITBSZ, CFG_PWD, CFG_SVT, CFG_RSTADDR,
368
                     CFG_NCPU-1)
369
        port map (clkm, rstn, ahbmi, ahbmo(i), ahbsi, ahbso,
370
                  irqi(i), irqo(i), dbgi(i), dbgo(i));
371
    end generate;
372
    errorn_pad : odpad generic map (tech => padtech) port map (errorn, dbgo(0).error);
373
 
374
    dsugen : if CFG_DSU = 1 generate
375
      dsu0 : dsu3                       -- LEON3 Debug Support Unit
376
        generic map (hindex => 2, haddr => 16#900#, hmask => 16#F00#,
377
                     ncpu   => CFG_NCPU, tbits => 30, tech => memtech, irq => 0, kbytes => CFG_ATBSZ)
378
        port map (rstn, clkm, ahbmi, ahbsi, ahbso(2), dbgo, dbgi, dsui, dsuo);
379
      --    dsuen_pad  : inpad generic map (tech  => padtech) port map (dsuen, dsui.enable);
380
      dsui.enable <= '1';
381
      --    **** tame: do not use inversion
382
      dsubre_pad : inpad generic map (tech  => padtech) port map (dsubre, dsui.break);
383
      dsuact_pad : outpad generic map (tech => padtech) port map (dsuact, dsuo.active);
384
    end generate;
385
  end generate;
386
  nodcom : if CFG_DSU = 0 generate ahbso(2) <= ahbs_none; end generate;
387
 
388
  dcomgen : if CFG_AHB_UART = 1 generate
389
    dcom0 : ahbuart                     -- Debug UART
390
      generic map (hindex => CFG_NCPU, pindex => 4, paddr => 7)
391
      port map (rstn, clkm, dui, duo, apbi, apbo(4), ahbmi, ahbmo(CFG_NCPU));
392
    dsurx_pad : inpad generic map (tech  => padtech) port map (dsurx, dui.rxd);
393
    dsutx_pad : outpad generic map (tech => padtech) port map (dsutx, duo.txd);
394
  end generate;
395
  nouah : if CFG_AHB_UART = 0 generate apbo(4) <= apb_none; end generate;
396
 
397
----------------------------------------------------------------------
398
---  Memory controllers ----------------------------------------------
399
----------------------------------------------------------------------
400
 
401
  mg1 : if CFG_SRCTRL = 1 generate      -- 32-bit PROM/SRAM controller
402
    sr0 : srctrl generic map (hindex => 5, ramws => CFG_SRCTRL_RAMWS,
403
                              romws  => CFG_SRCTRL_PROMWS, ramaddr => 16#400#, rmw => 1)
404
      port map (rstn, clkm, ahbsi, ahbso(5), memi, memo, sdo3);
405
    apbo(0) <= apb_none;
406
  end generate;
407
 
408
  mg2 : if CFG_MCTRL_LEON2 = 1 generate  -- LEON2 memory controller
409
    sr1 : mctrl generic map (hindex => 5, pindex => 0,
410
                             paddr  => 0, srbanks => 1, ramaddr => 16#600#, sden => 0)
411
      port map (rstn, clkm, memi, memo, ahbsi, ahbso(5), apbi, apbo(0), wpo, sdo);
412
  end generate;
413
 
414
  memi.brdyn  <= '1'; memi.bexcn <= '1';
415
  memi.writen <= '1'; memi.wrn <= "1111"; memi.bwidth <= "10";
416
 
417
  mg0 : if (CFG_MCTRL_LEON2 = 0) and (CFG_SRCTRL = 0) generate
418
    apbo(0) <= apb_none; ahbso(0) <= ahbs_none;
419
    rams_pad : outpad generic map (tech => padtech)
420
      port map (ramsn, vcc(0));
421
    roms_pad : outpad generic map (tech => padtech)
422
      port map (romsn, vcc(0));
423
  end generate;
424
 
425
  mgpads : if not ((CFG_MCTRL_LEON2 = 0) and (CFG_SRCTRL = 0)) generate
426
    addr_pad : outpadv generic map (width => 23, tech => padtech)
427
      port map (address, memo.address(24 downto 2));
428
    rams_pad : outpad generic map (tech => padtech)
429
      port map (ramsn, memo.ramsn(0));
430
    roms_pad : outpad generic map (tech => padtech)
431
      port map (romsn, memo.romsn(0));
432
    oen_pad : outpad generic map (tech => padtech)
433
      port map (oen, memo.oen);
434
    rwen_pad : outpadv generic map (width => 4, tech => padtech)
435
      port map (rwen, memo.wrn);
436
    rben_pad : outpadv generic map (width => 4, tech => padtech)
437
      port map (rben, memo.mben);
438
--    roen_pad : outpad generic map (tech => padtech)
439
--      port map (ramoen, memo.ramoen(0));
440
    wri_pad : outpad generic map (tech => padtech)
441
      port map (writen, memo.writen);
442
    --   read_pad : outpad generic map (tech => padtech)
443
    --     port map (read, memo.read);
444
    -- iosn_pad : outpad generic map (tech => padtech)
445
    -- port map (iosn, memo.iosn);
446
    bdr : for i in 0 to 3 generate
447
      data_pad : iopadv generic map (tech => padtech, width => 8)
448
        port map (data(31-i*8 downto 24-i*8), memo.data(31-i*8 downto 24-i*8),
449
                  memo.bdrive(i), memi.data(31-i*8 downto 24-i*8));
450
    end generate;
451
  end generate;
452
 
453
----------------------------------------------------------------------
454
---  DDR memory controller -------------------------------------------
455
----------------------------------------------------------------------
456
 
457
  -- not tested/working at the moment
458
 
459
  ddr0 : if CFG_DDRMP_EN = 1 generate
460
    ddrc : ddrctrl
461
      generic map(
462
        hindex1    => 0, haddr1 => 16#600#, hmask1 => 16#FC0#,
463
        hindex2    => 7, haddr2 => 16#D00#, hmask2 => 16#FC0#,
464
        pindex     => 8, paddr => 8, numahb => 1,
465
        ahb1sepclk => 1, ahb2sepclk => 1, modbanks => modbanks,
466
        numchips   => numchips, chipbits => chipbits, chipsize => chipsize,
467
        plldelay   => 1, tech => fabtech, clkperiod => (1000000/ddrfreq))
468
      port map(rst    => rstn, clk0 => ddrclk0, clk90 => ddrclk90,
469
               clk180 => ddrclk180, clk270 => ddrclk270, hclk1 => clkm, hclk2 => clkm,
470
               pclk   => clkm, ahb1si => ahbsi, ahb1so => ahbso(0), ahb2si => ahbsi,
471
               ahb2so => open, apbsi => apbi, apbso => apbo(8), ddsi => ddsi,
472
               ddso   => ddso);
473
 
474
    -- Outpads
475
    ddr_cke_pad  : outpad generic map (tech  => padtech, level => sstl2_i) port map (ddr_cke0, ddsi.cke);
476
    ddr_csb_pad  : outpad generic map (tech  => padtech, level => sstl2_i) port map (ddr_cs0b, ddsi.cs(0));
477
    ddr_web_pad  : outpad generic map (tech  => padtech, level => sstl2_i) port map (ddr_web, ddsi.control(0));
478
    ddr_casb_pad : outpad generic map (tech  => padtech, level => sstl2_i) port map (ddr_casb, ddsi.control(1));
479
    ddr_rasb_pad : outpad generic map (tech  => padtech, level => sstl2_i) port map (ddr_rasb, ddsi.control(2));
480
    ddr_dm_pad   : outpadv generic map (tech => padtech, level => sstl2_i, width => 4) port map (ddr_dm, ddsi.dm(3 downto 0));
481
    ddr_ad_pad   : outpadv generic map (tech => padtech, level => sstl2_i, width => 13) port map (ddr_ad, ddsi.adr(12 downto 0));
482
    ddr_ba_pad   : outpadv generic map (tech => padtech, level => sstl2_i, width => 2) port map (ddr_ba, ddsi.ba);
483
 
484
    -- InOut-pads
485
 
486
    ddr_dq_pad : for i in 0 to 31 generate
487
      dq_pad : iopad generic map (tech => padtech, level => sstl2_ii)
488
        port map (pad => ddr_dq(i), i => ddsi.dq(i), en => ddsi.dq_oe(i), o => ddso.dq(i));
489
    end generate;
490
 
491
 
492
    ddr_dqs_pad : for i in 0 to 3 generate
493
      dqs_pad : iopad generic map (tech => padtech, level => sstl2_ii)
494
        port map (pad => ddr_dqs(i), i => ddsi.dqs(i), en => ddsi.dqs_oe(i), o => ddso.dqs(i));
495
    end generate;
496
 
497
    -- ddr module 1
498
    ddr_clk1 <= '0'; ddr_clk1b <= '0'; ddr_cke1 <= '0'; ddr_cs1b <= '1';
499
  end generate;
500
 
501
----------------------------------------------------------------------
502
---  APB Bridge and various periherals -------------------------------
503
----------------------------------------------------------------------
504
 
505
  apb0 : apbctrl                        -- AHB/APB bridge
506
    generic map (hindex => 1, haddr => CFG_APBADDR)
507
    port map (rstn, clkm, ahbsi, ahbso(1), apbi, apbo);
508
 
509
  ua1 : if CFG_UART1_ENABLE /= 0 generate
510
    uart1 : apbuart                     -- UART 1
511
      generic map (pindex   => 1, paddr => 1, pirq => 2, console => dbguart,
512
                   fifosize => CFG_UART1_FIFO)
513
      port map (rstn, clkm, apbi, apbo(1), u1i, u1o);
514
    u1i.rxd <= rxd1; u1i.ctsn <= '0'; u1i.extclk <= '0'; txd1 <= u1o.txd;
515
  end generate;
516
  noua0 : if CFG_UART1_ENABLE = 0 generate apbo(1) <= apb_none; end generate;
517
 
518
  irqctrl : if CFG_IRQ3_ENABLE /= 0 generate
519
    irqctrl0 : irqmp                    -- interrupt controller
520
      generic map (pindex => 2, paddr => 2, ncpu => CFG_NCPU)
521
      port map (rstn, clkm, apbi, apbo(2), irqo, irqi);
522
  end generate;
523
  irq3 : if CFG_IRQ3_ENABLE = 0 generate
524
    x : for i in 0 to CFG_NCPU-1 generate
525
      irqi(i).irl <= "0000";
526
    end generate;
527
    apbo(2) <= apb_none;
528
  end generate;
529
 
530
  gpt : if CFG_GPT_ENABLE /= 0 generate
531
    timer0 : gptimer                    -- timer unit
532
      generic map (pindex => 3, paddr => 3, pirq => CFG_GPT_IRQ,
533
                   sepirq => CFG_GPT_SEPIRQ, sbits => CFG_GPT_SW, ntimers => CFG_GPT_NTIM,
534
                   nbits  => CFG_GPT_TW)
535
      port map (rstn, clkm, apbi, apbo(3), gpti, open);
536
    gpti.dhalt <= dsuo.active; gpti.extclk <= '0';
537
  end generate;
538
  notim : if CFG_GPT_ENABLE = 0 generate apbo(3) <= apb_none; end generate;
539
 
540
  vga : if CFG_VGA_ENABLE /= 0 generate
541
    vga0 : apbvga generic map(memtech => memtech, pindex => 5, paddr => 5)
542
      port map(rstn, clkm, clk, apbi, apbo(5), vgao);
543
  end generate;
544
  novga         : if CFG_VGA_ENABLE = 0 generate apbo(5) <= apb_none; vgao <= vgao_none; end generate;
545
  vert_sync_pad : outpad generic map (tech => padtech)
546
    port map (vga_vsync, vgao.vsync);
547
  horiz_sync_pad : outpad generic map (tech => padtech)
548
    port map (vga_hsync, vgao.hsync);
549
  video_out_r_pad : outpadv generic map (width => 2, tech => padtech)
550
    port map (vga_rd, vgao.video_out_r(7 downto 6));
551
  video_out_g_pad : outpadv generic map (width => 2, tech => padtech)
552
    port map (vga_gr, vgao.video_out_g(7 downto 6));
553
  video_out_b_pad : outpadv generic map (width => 2, tech => padtech)
554
    port map (vga_bl, vgao.video_out_b(7 downto 6));
555
 
556
-----------------------------------------------------------------------
557
---  MULTIIO SECTION --------------------------------------------------
558
-----------------------------------------------------------------------
559
  MULTIIO : if CFG_MULTIIO /= 0 generate
560
    -- human interface controller
561
    mio : MultiIO_APB
562
      generic map (
563
        pindex      => 6,
564
        paddr       => 6,
565
        pmask       => 16#fff#,
566
        pirq        => 6,
567
        clk_freq_in => cpufreq,
568
        led7act     => '0',
569
        ledact      => '0',
570
        switchact   => '0',             -- switch polarity is inverse to Hpe_compact
571
        buttonact   => '1')
572
      port map (
573
        rst_n       => rstn,
574
        clk         => clkm,
575
        apbi        => apbi,
576
        apbo        => apbo(6),
577
        MultiIO_in  => mioi,
578
        MultiIO_out => mioo);
579
 
580
    mioi.switch_in <= "0000" & dsw;
581
    mioi.row_in    <= tst_row;
582
    sevensegment   <= mioo.led_ca_out(1) &  -- 9
583
                      mioo.led_ca_out(0) &  -- 8
584
                      mioo.led_dp_out &     -- .
585
                      mioo.led_g_out &      -- .
586
                      mioo.led_f_out &      -- .
587
                      mioo.led_e_out &
588
                      mioo.led_d_out &
589
                      mioo.led_c_out &
590
                      mioo.led_b_out &
591
                      mioo.led_a_out;       -- 0
592
    tst_col <= mioo.column_out;
593
    led     <= mioo.led_out when dsubre = '0' else
594
               vcc(4 downto 0) & vcc(0) & (not dsuact) & dbgo(0).error;
595
 
596
    lcd_regsel <= mioo.lcd_regsel;
597
    lcd_rw     <= mioo.lcd_rw;
598
    lcd_enable <= mioo.lcd_enable;
599
 
600
    -- expansion connector
601
    exp_datao   <= mioo.exp_out;
602
    mioi.exp_in <= exp_datai;
603
 
604
    codec_mode   <= mioo.codec_mode;
605
    codec_mclk   <= mioo.codec_mclk;
606
    codec_sclk   <= mioo.codec_sclk;
607
    codec_sdin   <= mioo.codec_sdin;
608
    codec_cs     <= mioo.codec_cs;
609
    codec_din    <= mioo.codec_din;
610
    codec_bclk   <= mioo.codec_bclk;
611
    codec_lrcin  <= mioo.codec_lrcin;
612
    codec_lrcout <= mioo.codec_lrcout;
613
 
614
  end generate;
615
 
616
  nMULTIIO : if CFG_MULTIIO = 0 generate
617
    apbo(6) <= apb_none;
618
  end generate;
619
 
620
-----------------------------------------------------------------------
621
---  ETHERNET ---------------------------------------------------------
622
-----------------------------------------------------------------------
623
 
624
  eth0 : if CFG_GRETH = 1 generate      -- Gaisler ethernet MAC
625
    e1 : greth generic map(hindex    => CFG_NCPU+CFG_AHB_UART,
626
                           pindex    => 15, paddr => 15, pirq => 12, memtech => memtech,
627
                           mdcscaler => cpufreq/1000, enable_mdio => 1, fifosize => CFG_ETH_FIFO,
628
                           nsync     => 1, edcl => CFG_DSU_ETH, edclbufsz => CFG_ETH_BUF,
629
                           macaddrh  => CFG_ETH_ENM, macaddrl => CFG_ETH_ENL,
630
                           ipaddrh   => CFG_ETH_IPM, ipaddrl => CFG_ETH_IPL)
631
      port map(rst   => rstn, clk => clkm, ahbmi => ahbmi,
632
               ahbmo => ahbmo(CFG_NCPU+CFG_AHB_UART), apbi => apbi,
633
               apbo  => apbo(15), ethi => ethi, etho => etho);
634
 
635
    emdio_pad : iopad generic map (tech => padtech)
636
      port map (emdio, etho.mdio_o, etho.mdio_oe, ethi.mdio_i);
637
    etxc_pad : inpad generic map (tech => padtech)
638
      port map (etx_clk, ethi.tx_clk);
639
    erxc_pad : inpad generic map (tech => padtech)
640
      port map (erx_clk, ethi.rx_clk);
641
    erxd_pad : inpadv generic map (tech => padtech, width => 4)
642
      port map (erxd, ethi.rxd(3 downto 0));
643
    erxdv_pad : inpad generic map (tech => padtech)
644
      port map (erx_dv, ethi.rx_dv);
645
    erxer_pad : inpad generic map (tech => padtech)
646
      port map (erx_er, ethi.rx_er);
647
    erxco_pad : inpad generic map (tech => padtech)
648
      port map (erx_col, ethi.rx_col);
649
    erxcr_pad : inpad generic map (tech => padtech)
650
      port map (erx_crs, ethi.rx_crs);
651
 
652
    etxd_pad : outpadv generic map (tech => padtech, width => 4)
653
      port map (etxd, etho.txd(3 downto 0));
654
    etxen_pad : outpad generic map (tech => padtech)
655
      port map (etx_en, etho.tx_en);
656
    etxer_pad : outpad generic map (tech => padtech)
657
      port map (etx_er, etho.tx_er);
658
    emdc_pad : outpad generic map (tech => padtech)
659
      port map (emdc, etho.mdc);
660
 
661
  end generate;
662
 
663
 
664
  -----------------------------------------------------------------------------
665
  -- HPI SECTION
666
  -----------------------------------------------------------------------------
667
 
668
  ahb2hpi_inst : if CFG_AHB2HPI /= 0 generate
669
    ahb2hpi2_1 : ahb2hpi2
670
      generic map (
671
        counter_width => 4,
672
        data_width    => 16,
673
        address_width => 2,
674
        hindex        => 8,
675
        haddr         => 16#240#,
676
        hmask         => 16#fff#)
677
      port map (
678
        HCLK      => clkm,
679
        HRESETn   => rstn,
680
        ahbso     => ahbso(8),
681
        ahbsi     => ahbsi,
682
        ADDR      => hpiaddr,
683
        WDATA     => hpiwdata,
684
        RDATA     => hpirdata,
685
        nCS       => hpicsn,
686
        nWR       => hpiwriten,
687
        nRD       => hpirdn,
688
        INT       => hpiint,
689
        drive_bus => drive_bus);
690
 
691
    hpidata <= hpiwdata when drive_bus = '1' else
692
               (others => 'Z');
693
 
694
    hpirdata <= hpidata;
695
 
696
    hpiwrn <= hpiwriten;
697
 
698
  end generate;
699
  nahb2hpi_inst : if CFG_AHB2HPI = 0 generate
700
    ahbso(8) <= ahbs_none;
701
  end generate;
702
 
703
-----------------------------------------------------------------------
704
---  AHB ROM ----------------------------------------------------------
705
-----------------------------------------------------------------------
706
 
707
  bpromgen : if CFG_AHBROMEN /= 0 generate
708
    brom : entity work.ahbrom
709
      generic map (hindex => 6, haddr => CFG_AHBRODDR, pipe => CFG_AHBROPIP)
710
      port map (rstn, clkm, ahbsi, ahbso(6));
711
  end generate;
712
  nobpromgen : if CFG_AHBROMEN = 0 generate
713
    ahbso(6) <= ahbs_none;
714
  end generate;
715
 
716
-----------------------------------------------------------------------
717
---  AHB RAM ----------------------------------------------------------
718
-----------------------------------------------------------------------
719
 
720
  ahbramgen : if CFG_AHBRAMEN = 1 generate
721
    ahbram0 : ahbram generic map (hindex => 3, haddr => CFG_AHBRADDR,
722
                                  tech   => CFG_MEMTECH, kbytes => CFG_AHBRSZ)
723
      port map (rstn, clkm, ahbsi, ahbso(3));
724
  end generate;
725
  nram : if CFG_AHBRAMEN = 0 generate ahbso(3) <= ahbs_none; end generate;
726
 
727
-----------------------------------------------------------------------
728
---  AHB DAC IF -------------------------------------------------------
729
-----------------------------------------------------------------------
730
 
731
  dac_ahb_inst : if CFG_DAC_AHB /= 0 generate
732
    dac_ahb_1 : dac_ahb
733
      generic map(length => 16, hindex => 4, haddr => 16#010#, hmask => 16#FFF#, tech => fabtech, kbytes => 1)
734
      port map(rst       => rstn, clk => clkm, ahbsi => ahbsi, ahbso => ahbso(4), dac_out => dac);
735
  end generate;
736
  ndac_ahb_inst : if CFG_DAC_AHB = 0 generate
737
    ahbso(4) <= ahbs_none;
738
  end generate;
739
 
740
 
741
-----------------------------------------------------------------------
742
---  Drive unused bus elements  ---------------------------------------
743
-----------------------------------------------------------------------
744
 
745
  nam1 : for i in (CFG_NCPU+CFG_AHB_UART+CFG_GRETH) to NAHBMST-1 generate
746
    ahbmo(i) <= ahbm_none;
747
  end generate;
748
  nap0 : for i in 9 to NAPBSLV-1-CFG_GRETH generate apbo(i) <= apb_none; end generate;
749
  nah0 : for i in 8 to NAHBSLV-1 generate ahbso(i)          <= ahbs_none; end generate;
750
 
751
-----------------------------------------------------------------------
752
---  Adaptions for HPE Mini    ----------------------------------------
753
-----------------------------------------------------------------------
754
 
755
  -- invert dsuact signal for output on LED
756
  dsuactn <= not dsuact;
757
 
758
  resoutn <= rstn;
759
 
760
-----------------------------------------------------------------------
761
---  Boot message  ----------------------------------------------------
762
-----------------------------------------------------------------------
763
 
764
-- pragma translate_off
765
  x : report_version
766
    generic map (
767
      msg1 => "LEON3 Demonstration design for HPE_mini board",
768
      msg2 => "GRLIB Version " & tost(LIBVHDL_VERSION/100) & "." & tost((LIBVHDL_VERSION mod 10)/10)
769
      & "." & tost(LIBVHDL_VERSION mod 100),
770
      msg3 => "Target technology: " & tech_table(fabtech) & ",  memory library: " & tech_table(memtech),
771
      mdel => 1
772
      );
773
-- pragma translate_on
774
 
775
  dsuen_pad : inpad generic map (tech => padtech) port map ('1', ldsuen);
776
  duart  <= rdsuen when CFG_AHB_UART /= 0 else '0';
777
  rxd1   <= txd1   when duart = '1'       else rserrx;
778
  rsertx <= dsutx  when duart = '1'       else txd1;
779
  dsurx  <= rserrx when duart = '1'       else '1';
780
 
781
  p1 : process(clkm)
782
  begin
783
    if rising_edge(clkm) then
784
      sertx <= rsertx; rserrx <= serrx; rdsuen <= ldsuen;
785
    end if;
786
  end process;
787
 
788
end rtl;

powered by: WebSVN 2.1.0

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