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-midi-ep2s180/] [leon3hpe.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
--  maintained by Florian Wex, Gleichmann Electronics 2007
20
--  updated to grlib-eval-1.0.16 in , September 2007
21
------------------------------------------------------------------------------
22
 
23
-----------------------------------------------------------------------------------------
24
 
25
library ieee;
26
use ieee.std_logic_1164.all;
27
library grlib;
28
use grlib.amba.all;
29
use grlib.stdlib.all;
30
use grlib.devices.all;
31
library techmap;
32
use techmap.gencomp.all;
33
library gaisler;
34
use gaisler.memctrl.all;
35
use gaisler.leon3.all;
36
use gaisler.uart.all;
37
use gaisler.misc.all;
38
use gaisler.can.all;
39
use gaisler.net.all;
40
use gaisler.grusb.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.miscellaneous.all;
47
use gleichmann.multiio.all;
48
use gleichmann.dac.all;
49
use gleichmann.sspi.all;
50
use gleichmann.ge_clkgen.all;
51
use gleichmann.ac97.all;
52
library work;
53
use work.config.all;
54
 
55
 
56
 
57
entity leon3hpe is
58
  generic (
59
    fabtech : integer := CFG_FABTECH;
60
    memtech : integer := CFG_MEMTECH;
61
    padtech : integer := CFG_PADTECH;
62
    clktech : integer := CFG_CLKTECH;
63
    disas   : integer := CFG_DISAS;     -- Enable disassembly to console
64
    dbguart : integer := CFG_DUART;     -- Print UART on console
65
    pclow   : integer := CFG_PCLOW
66
    );
67
  port (
68
    resetn  : in  std_logic;
69
    resoutn : out std_logic;
70
 
71
    clk : in std_logic;
72
 
73
    errorn  : out   std_logic;
74
    address : out   std_logic_vector(27 downto 0);
75
    data    : inout std_logic_vector(31 downto 0);
76
    ramsn   : out   std_logic_vector (4 downto 0);
77
    ramoen  : out   std_logic_vector (4 downto 0);
78
    rwen    : inout std_logic_vector (3 downto 0);
79
    -- ram byte enable for hpe board
80
    -- necessary because individual bytes have to
81
    -- be selected for reading as well
82
    rben    : out   std_logic_vector(3 downto 0);
83
    romsn   : out   std_logic_vector (1 downto 0);
84
    iosn    : out   std_logic;
85
    oen     : out   std_logic;
86
    read    : out   std_logic;
87
    writen  : out   std_logic;
88
 
89
    -- SDRAM interface
90
    sdclk  : out   std_logic_vector(1 downto 0);
91
    sdcke  : out   std_logic_vector(1 downto 0);   -- sdram clock enable
92
    sdaddr : out   std_logic_vector(12 downto 0);
93
    sddq   : inout std_logic_vector(63 downto 0);
94
    sddqm  : out   std_logic_vector(7 downto 0);   -- sdram dqm
95
    sdwen  : out   std_logic;                     -- sdram write enable
96
    sdcasn : out   std_logic;                     -- sdram cas
97
    sdrasn : out   std_logic;                     -- sdram ras
98
    sdcsn  : out   std_logic_vector (1 downto 0);  -- sdram chip select
99
    sdba   : out   std_logic_vector(1 downto 0);   -- sdram bank address
100
 
101
    -- debug support unit
102
    dsutx   : out std_logic;           -- DSU tx data
103
    dsurx   : in  std_logic;           -- DSU rx data
104
    dsubre  : in  std_logic;
105
    dsuactn : out std_logic;
106
 
107
    -- console UART
108
    rxd1 : in  std_logic;
109
    txd1 : out std_logic;
110
 
111
    -- ethernet signals
112
    emdio   : inout std_logic;          -- ethernet PHY interface
113
    etx_clk : in    std_logic;
114
    erx_clk : in    std_logic;
115
    erxd    : in    std_logic_vector(3 downto 0);
116
    erx_dv  : in    std_logic;
117
    erx_er  : in    std_logic;
118
    erx_col : in    std_logic;
119
    erx_crs : in    std_logic;
120
    etxd    : out   std_logic_vector(3 downto 0);
121
    etx_en  : out   std_logic;
122
    etx_er  : out   std_logic;
123
    emdc    : out   std_logic;
124
    ereset  : out   std_logic;
125
 
126
    --  CAN receive and transmit signals
127
    can_txd : out std_logic;
128
    can_rxd : in  std_logic;
129
    can_stb : out std_logic;
130
 
131
    -------------------------------------------------------------------------------------
132
    -- IO SECTION
133
    -------------------------------------------------------------------------------------
134
    dsw : in std_logic_vector(7 downto 0);
135
 
136
    led_enable : out std_logic;
137
 
138
    sevensegment : out std_logic_vector(9 downto 0);  -- 7-segments and 2 strobes
139
 
140
    lcd_enable : out std_logic;
141
    lcd_regsel : out std_logic;
142
    lcd_rw     : out std_logic;
143
 
144
    -- keyboard
145
    tst_col : out std_logic_vector(2 downto 0);  -- column outputs
146
    tst_row : in  std_logic_vector(3 downto 0);  -- row inputs
147
 
148
    -- only one PS/2 interface possible due to routing problems
149
    -- see instantiation of the interface below
150
    ps2_clk  : inout std_logic_vector(1 downto 0);
151
    ps2_data : inout std_logic_vector(1 downto 0);
152
 
153
    -- expansion connector signals
154
    exp_datao : out std_logic_vector(19 downto 0);
155
    exp_datai : in  std_logic_vector(19 downto 0);
156
 
157
    ---------------------------------------------------------------------------
158
    -- VGA interface
159
    ---------------------------------------------------------------------------
160
    vga_clk    : out std_logic;
161
    vga_syncn  : out std_logic;
162
    vga_blankn : out std_logic;
163
    vga_vsync  : out std_logic;
164
    vga_hsync  : out std_logic;
165
    vga_rd     : out std_logic_vector(7 downto 0);
166
    vga_gr     : out std_logic_vector(7 downto 0);
167
    vga_bl     : out std_logic_vector(7 downto 0);
168
 
169
    ---------------------------------------------------------------------------
170
    -- AC97 AUDIO CODEC
171
    ---------------------------------------------------------------------------
172
 
173
    ac97_bit_clk   : in  std_logic;
174
    ac97_sync      : out std_logic;
175
    ac97_sdata_out : out std_logic;
176
    ac97_sdata_in  : in  std_logic;
177
    -- when no crystal is assembled, drive this signal with a 24.5 (or 25) MHz clock
178
    ac97_ext_clk   : out std_logic;
179
    ac97_resetn    : out std_logic;
180
 
181
    -------------------------------------------------------------------------------------
182
    -- USB DEBUG INTERFACE
183
    -------------------------------------------------------------------------------------
184
    usb_clkout    : in    std_logic;
185
    usb_d         : inout std_logic_vector(15 downto 0);
186
    usb_linestate : in    std_logic_vector(1 downto 0);
187
    usb_opmode    : out   std_logic_vector(1 downto 0);
188
    usb_reset     : out   std_logic;
189
    usb_rxactive  : in    std_logic;
190
    usb_rxerror   : in    std_logic;
191
    usb_rxvalid   : in    std_logic;
192
    usb_suspend   : out   std_logic;
193
    usb_termsel   : out   std_logic;
194
    usb_txready   : in    std_logic;
195
    usb_txvalid   : out   std_logic;
196
    usb_validh    : inout std_logic;
197
    usb_xcvrsel   : out   std_logic;
198
    usb_vbus      : in    std_logic;
199
    usb_dbus16    : out   std_logic;
200
    usb_unidir    : out   std_logic;
201
 
202
    ---------------------------------------------------------------------------
203
    -- ADC/DAC INTERFACE
204
    ---------------------------------------------------------------------------
205
    adc_dout : in  std_logic;
206
    adc_ain  : out std_logic;
207
    dac_out  : out std_logic;
208
 
209
    -------------------------------------------------------------------------------------
210
    -- SDCARD interface (SPI mode)
211
    -------------------------------------------------------------------------------------
212
    sdcard_cs   : out std_logic;
213
    sdcard_di   : out std_logic;
214
    sdcard_sclk : out std_logic;
215
    sdcard_do   : in  std_logic;
216
 
217
    -------------------------------------------------------------------------------
218
    -- HPI PORT
219
    -------------------------------------------------------------------------------
220
    hpiaddr : out   std_logic_vector(1 downto 0);
221
    hpidata : inout std_logic_vector(15 downto 0);
222
    hpicsn  : out   std_logic;
223
    hpiwrn  : out   std_logic;
224
    hpirdn  : out   std_logic;
225
    hpiint  : in    std_logic
226
    );
227
end;
228
 
229
architecture rtl of leon3hpe is
230
 
231
  constant blength   : integer := 12;
232
  constant fifodepth : integer := 8;
233
 
234
  signal reset    : std_logic;
235
  signal vcc, gnd : std_logic_vector(4 downto 0);
236
  signal memi     : memory_in_type;
237
  signal memo     : memory_out_type;
238
  signal wpo      : wprot_out_type;
239
 
240
  signal sdi  : sdctrl_in_type;
241
  signal sdo  : sdram_out_type;
242
  signal sdo2 : sdctrl_out_type;
243
  signal sdo3 : sdctrl_out_type;
244
 
245
  signal apbi  : apb_slv_in_type;
246
  signal apbo  : apb_slv_out_vector := (others => apb_none);
247
  signal ahbsi : ahb_slv_in_type;
248
  signal ahbso : ahb_slv_out_vector := (others => ahbs_none);
249
  signal ahbmi : ahb_mst_in_type;
250
  signal ahbmo : ahb_mst_out_vector := (others => ahbm_none);
251
 
252
  signal clkm, clk_25MHz, rstn, sdclkl : std_logic;
253
  -- signal clkvga             : std_logic;
254
  signal cgi                           : clkgen_in_type;
255
  signal cgo                           : clkgen_out_type;
256
  signal u1i, dui                      : uart_in_type;
257
  signal u1o, duo                      : uart_out_type;
258
 
259
  signal irqi : irq_in_vector(0 to CFG_NCPU-1);
260
  signal irqo : irq_out_vector(0 to CFG_NCPU-1);
261
 
262
  signal dbgi : l3_debug_in_vector(0 to CFG_NCPU-1);
263
  signal dbgo : l3_debug_out_vector(0 to CFG_NCPU-1);
264
 
265
  signal dsui : dsu_in_type;
266
  signal dsuo : dsu_out_type;
267
 
268
  signal ethi, ethi1, ethi2 : eth_in_type;
269
  signal etho, etho1, etho2 : eth_out_type;
270
 
271
  signal gpti : gptimer_in_type;
272
 
273
  signal emddis  : std_logic;
274
  signal epwrdwn : std_logic;
275
  signal esleep  : std_logic;
276
  signal epause  : std_logic;
277
 
278
 
279
 
280
-- Adaptions for HPE Compact
281
 
282
  signal dsuact         : std_logic;
283
  signal oen_ctrl       : std_logic;
284
  signal sdram_selected : std_logic;
285
  signal sd_clk         : std_logic;
286
  signal s_ramsn        : std_logic_vector (4 downto 0);
287
  signal s_sddqm        : std_logic_vector (7 downto 0);
288
 
289
  signal shortcut : std_logic;
290
  signal rx       : std_logic;
291
  signal tx       : std_logic;
292
 
293
 
294
  constant BOARD_FREQ : integer := 100_000;  -- input frequency in KHz
295
  constant CPU_FREQ   : integer := BOARD_FREQ * CFG_CLKMUL / CFG_CLKDIV * 1_000;  -- cpu frequency in KHz
296
  constant PS2_SCALER : integer := CPU_FREQ / 10_000;  -- PS2 Freq = 10 kHz
297
  constant IOAEN      : integer := 1;   --CFG_ETH + CFG_CAN;
298
 
299
  signal mioi : MultiIO_in_type;
300
  signal mioo : MultiIO_out_type;
301
 
302
  signal kbdi0, kbdi1 : ps2_in_type;
303
  signal kbdo0, kbdo1 : ps2_out_type;
304
 
305
  -- VGA interface
306
  signal vgao : apbvga_out_type;
307
 
308
  signal uclk : std_logic;
309
  signal usbi : grusb_in_type;
310
  signal usbo : grusb_out_type;
311
 
312
  -- simple SPI controller
313
  signal spii  : sspi_in_type;
314
  signal spio  : sspi_out_type;
315
  signal gspii : spi_in_type;
316
  signal gspio : spi_out_type;
317
 
318
  -- ADC/DAC
319
  signal adcdaci : adcdac_in_type;
320
  signal adcdaco : adcdac_out_type;
321
 
322
  ---------------------------------------------------------------------------------------
323
  -- AC97 AUDIO CODEC
324
  ---------------------------------------------------------------------------------------
325
 
326
  signal dma_ack   : std_logic_vector(8 downto 0);
327
  signal int       : std_logic;
328
  signal dma_req   : std_logic_vector(8 downto 0);
329
  signal suspended : std_logic;
330
 
331
  -- intermediate signals for outputs in order to be able
332
  -- to propagate to two signal sinks
333
  signal ac97_int_sync      : std_logic;
334
  signal ac97_int_sdata_out : std_logic;
335
  signal ac97_int_resetn    : std_logic;
336
  signal ac97_int_irq       : std_logic;
337
 
338
  ---------------------------------------------------------------------------------------
339
  -- HPI SIGNALS
340
  ---------------------------------------------------------------------------------------
341
  signal hpiwriten : std_logic;        -- intermediate signal
342
  signal hpirdata  : std_logic_vector(15 downto 0);
343
  signal hpiwdata  : std_logic_vector(15 downto 0);
344
  signal drive_bus : std_logic;
345
 
346
  signal dbg_equal  : std_logic;
347
  signal sample_clk : std_logic;
348
 
349
  ---------------------------------------------------------------------------------------
350
 
351
begin
352
 
353
----------------------------------------------------------------------
354
---  Reset and Clock generation  -------------------------------------
355
----------------------------------------------------------------------
356
 
357
  reset <= not resetn;
358
 
359
  vcc         <= (others => '1'); gnd <= (others => '0');
360
  cgi.pllctrl <= "00"; cgi.pllrst <= resetn;
361
  cgi.pllref  <= clk;
362
 
363
  vga_clk_gen : if (CFG_VGA_ENABLE /= 0) generate
364
    no_vga_clk_gen : if ((CFG_CLKDIV/CFG_CLKMUL) = 4) generate
365
      clk_25MHz <= clkm;
366
    end generate;
367
    vga_clk_gen : if ((CFG_CLKDIV/CFG_CLKMUL) /= 4) generate
368
      vga_clk_gen_inst : clkgen
369
        generic map (
370
          tech      => clktech,
371
          clk_mul   => 1,
372
          clk_div   => 4,
373
          sdramen   => 0,
374
          noclkfb   => 1,
375
          pcien     => 0,
376
          pcidll    => 0,
377
          pcisysclk => 0,
378
          freq      => BOARD_FREQ,
379
          clk2xen   => 0)
380
        port map (
381
          clkin    => clk,
382
          clk      => clk_25MHz,
383
          pciclkin => gnd(0),
384
          cgi      => cgi,
385
          cgo      => open);
386
    end generate;
387
  end generate;
388
 
389
  clkgen_1 : clkgen
390
    generic map (
391
      tech      => clktech,
392
      clk_mul   => CFG_CLKMUL,
393
      clk_div   => CFG_CLKDIV,
394
      sdramen   => CFG_SDCTRL + CFG_MCTRL_SDEN,
395
      noclkfb   => CFG_CLK_NOFB,
396
      pcien     => 0,
397
      pcidll    => 0,
398
      pcisysclk => 0,
399
      freq      => BOARD_FREQ,
400
      clk2xen   => 1)
401
    port map (
402
      clkin    => clk,
403
      pciclkin => gnd(0),
404
      clk      => clkm,
405
      clkn     => open,
406
      clk2x    => sample_clk,
407
      sdclk    => sdclkl,
408
      pciclk   => open,
409
      cgi      => cgi,
410
      cgo      => cgo,
411
      clk4x    => open);
412
 
413
  rst0 : rstgen                         -- reset generator
414
    port map (resetn, clkm, cgo.clklock, rstn);
415
 
416
---------------------------------------------------------------------- 
417
---  AHB CONTROLLER --------------------------------------------------
418
----------------------------------------------------------------------
419
 
420
  ahb0 : ahbctrl                        -- AHB arbiter/multiplexer
421
    generic map (defmast => CFG_DEFMST, split => CFG_SPLIT,
422
                 rrobin  => CFG_RROBIN, ioaddr => CFG_AHBIO, ioen => IOAEN,
423
                 nahbm   => CFG_NCPU+CFG_AHB_UART+CFG_GRETH+CFG_GRUSB_DCL+CFG_AHB_JTAG,
424
                 nahbs   => 9)
425
    port map (rstn, clkm, ahbmi, ahbmo, ahbsi, ahbso);
426
 
427
----------------------------------------------------------------------
428
---  LEON3 processor and DSU -----------------------------------------
429
----------------------------------------------------------------------
430
 
431
  cpu : for i in 0 to CFG_NCPU-1 generate
432
    u0 : leon3s                         -- LEON3 processor
433
      generic map (i, fabtech, memtech, CFG_NWIN, CFG_DSU, CFG_FPU, CFG_V8,
434
                   0, CFG_MAC, pclow, 0, CFG_NWP, CFG_ICEN, CFG_IREPL, CFG_ISETS, CFG_ILINE,
435
                   CFG_ISETSZ, CFG_ILOCK, CFG_DCEN, CFG_DREPL, CFG_DSETS, CFG_DLINE, CFG_DSETSZ,
436
                   CFG_DLOCK, CFG_DSNOOP, CFG_ILRAMEN, CFG_ILRAMSZ, CFG_ILRAMADDR, CFG_DLRAMEN,
437
                   CFG_DLRAMSZ, CFG_DLRAMADDR, CFG_MMUEN, CFG_ITLBNUM, CFG_DTLBNUM, CFG_TLB_TYPE, CFG_TLB_REP,
438
                   CFG_LDDEL, disas, CFG_ITBSZ, CFG_PWD, CFG_SVT, CFG_RSTADDR, CFG_NCPU-1)
439
      port map (clkm, rstn, ahbmi, ahbmo(i), ahbsi, ahbso,
440
                irqi(i), irqo(i), dbgi(i), dbgo(i));
441
  end generate;
442
  errorn_pad : odpad generic map (tech => padtech) port map (errorn, dbgo(0).error);
443
 
444
  dsugen : if CFG_DSU = 1 generate
445
    dsu0 : dsu3                         -- LEON3 Debug Support Unit
446
      generic map (hindex => 2, haddr => 16#900#, hmask => 16#F00#,
447
                   ncpu   => CFG_NCPU, tbits => 30, tech => memtech, irq => 0, kbytes => CFG_ATBSZ)
448
      port map (rstn, clkm, ahbmi, ahbsi, ahbso(2), dbgo, dbgi, dsui, dsuo);
449
    dsuen_pad  : inpad generic map (tech  => padtech) port map (vcc(0), dsui.enable);
450
    dsubre_pad : inpad generic map (tech  => padtech) port map (dsubre, dsui.break);
451
    dsuact_pad : outpad generic map (tech => padtech) port map (dsuact, dsuo.active);
452
  end generate;
453
  nodsu : if CFG_DSU = 0 generate
454
    ahbso(2) <= ahbs_none; dsuo.tstop <= '0'; dsuo.active <= '0';
455
  end generate;
456
 
457
  dcomgen : if CFG_AHB_UART = 1 generate
458
    dcom0 : ahbuart                     -- Debug UART
459
      generic map (hindex => CFG_NCPU, pindex => 7, paddr => 7)
460
      port map (rstn, clkm, dui, duo, apbi, apbo(7), ahbmi, ahbmo(CFG_NCPU));
461
    dsurx_pad : inpad generic map (tech  => padtech) port map (dsurx, dui.rxd);
462
    dsutx_pad : outpad generic map (tech => padtech) port map (dsutx, duo.txd);
463
  end generate;
464
  nouah : if CFG_AHB_UART = 0 generate apbo(7) <= apb_none; end generate;
465
 
466
  ahbjtaggen0 : if CFG_AHB_JTAG = 1 generate
467
    ahbjtag0 : ahbjtag generic map(tech => fabtech, hindex => CFG_NCPU+CFG_AHB_UART)
468
      port map(rstn, clkm, gnd(0), gnd(0), gnd(0), open, ahbmi, ahbmo(CFG_NCPU+CFG_AHB_UART),
469
               open, open, open, open, open, open, open, gnd(0));
470
  end generate;
471
 
472
-----------------------------------------------------------------------
473
---  USB DEBUG LINK  --------------------------------------------------
474
-----------------------------------------------------------------------
475
 
476
  usb0 : if CFG_GRUSB_DCL = 1 generate
477
    usb_d_pads : for i in 0 to 15 generate
478
      usb_d_pad : iopad generic map(tech => padtech)
479
        port map (usb_d(i), usbo.dataout(i), usbo.oen, usbi.datain(i));
480
    end generate;
481
 
482
    usb_h_pad : iopad generic map(tech => padtech)
483
      port map (usb_validh, usbo.txvalidh, usbo.oen, usbi.rxvalidh);
484
 
485
    usb_i0_pad : inpad generic map (tech => padtech) port map (usb_txready, usbi.txready);
486
    usb_i1_pad : inpad generic map (tech => padtech) port map (usb_rxvalid, usbi.rxvalid);
487
    usb_i2_pad : inpad generic map (tech => padtech) port map (usb_rxerror, usbi.rxerror);
488
    usb_i3_pad : inpad generic map (tech => padtech) port map (usb_rxactive, usbi.rxactive);
489
    usb_i4_pad : inpad generic map (tech => padtech) port map (usb_linestate(0), usbi.linestate(0));
490
    usb_i5_pad : inpad generic map (tech => padtech) port map (usb_linestate(1), usbi.linestate(1));
491
 
492
    usb_i6_pad : inpad generic map (tech  => padtech) port map (usb_vbus, usbi.vbusvalid);
493
    usb_o0_pad : outpad generic map (tech => padtech) port map (usb_reset, usbo.reset);
494
 
495
    usb_o1_pad : outpad generic map (tech => padtech) port map (usb_suspend, usbo.suspendm);
496
    usb_o2_pad : outpad generic map (tech => padtech) port map (usb_termsel, usbo.termselect);
497
    usb_o3_pad : outpad generic map (tech => padtech) port map (usb_xcvrsel, usbo.xcvrselect(0));
498
    usb_o4_pad : outpad generic map (tech => padtech) port map (usb_opmode(0), usbo.opmode(0));
499
    usb_o5_pad : outpad generic map (tech => padtech) port map (usb_opmode(1), usbo.opmode(1));
500
    usb_o6_pad : outpad generic map (tech => padtech) port map (usb_txvalid, usbo.txvalid);
501
 
502
    usb_clk_pad : clkpad generic map (tech => padtech) port map (usb_clkout, uclk);
503
 
504
    -- USB transceiver shall operate in 8-bit mode
505
    usb_dbus16 <= not dsw(1);
506
    -- USB transceiver shall use 8-bit data bus bidirectionally
507
    -- (bits 15 downto 8 are undriven)
508
    usb_unidir <= not dsw(2);
509
 
510
    usb_ctrl : grusb_dcl
511
      generic map (hindex => CFG_NCPU+CFG_AHB_UART+CFG_AHB_JTAG, memtech => memtech)
512
      port map (uclk, usbi, usbo, clkm, rstn, ahbmi, ahbmo(CFG_NCPU+CFG_AHB_UART+CFG_AHB_JTAG));
513
  end generate;
514
 
515
----------------------------------------------------------------------
516
---  Memory controllers ----------------------------------------------
517
----------------------------------------------------------------------
518
 
519
  mg1 : if CFG_SRCTRL = 1 generate      -- 32-bit PROM/SRAM controller
520
    sr0 : srctrl generic map (hindex  => 0,
521
                              ramws   => CFG_SRCTRL_RAMWS, romws => CFG_SRCTRL_PROMWS,
522
                              ramaddr => 16#400#, rmw => 1)
523
      port map (rstn, clkm, ahbsi, ahbso(0), memi, memo, sdo3);
524
    apbo(0) <= apb_none;
525
  end generate;
526
 
527
  mg2 : if CFG_MCTRL_LEON2 = 1 generate  -- LEON2 memory controller
528
    sr1 : mctrl generic map (
529
      hindex => 0, pindex => 0,
530
      paddr  => 0, srbanks => 2, sden => CFG_MCTRL_SDEN,
531
      invclk => CFG_MCTRL_INVCLK, sdlsb => CFG_SDSHIFT,
532
      sepbus => CFG_MCTRL_SEPBUS, sdbits => 32 + 32*CFG_MCTRL_SD64
533
      )
534
      port map (rstn, clkm, memi, memo, ahbsi, ahbso(0), apbi, apbo(0), wpo, sdo);
535
 
536
    sdpads : if CFG_MCTRL_SDEN = 1 generate  -- SDRAM controller
537
      sd2 : if CFG_MCTRL_SEPBUS = 1 generate
538
        sa_pad : outpadv generic map (width => 13) port map (sdaddr, memo.sa(12 downto 0));
539
        ba_pad : outpadv generic map (width => 2) port map (sdba, memo.sa(14 downto 13));
540
        bdr    : for i in 0 to 3 generate
541
          sddq_pad : iopadv generic map (tech => padtech, width => 8)
542
            port map (sddq(31-i*8 downto 24-i*8), memo.data(31-i*8 downto 24-i*8),
543
                      memo.bdrive(i), memi.sd(31-i*8 downto 24-i*8));
544
          sddq2 : if CFG_MCTRL_SD64 = 1 generate
545
            sddq_pad2 : iopadv generic map (tech => padtech, width => 8)
546
              port map (sddq(31-i*8+32 downto 24-i*8+32), memo.data(31-i*8 downto 24-i*8),
547
                        memo.bdrive(i), memi.sd(31-i*8+32 downto 24-i*8+32));
548
          end generate;
549
        end generate;
550
      end generate;
551
      sdwen_pad : outpad generic map (tech => padtech)
552
        port map (sdwen, sdo.sdwen);
553
      sdras_pad : outpad generic map (tech => padtech)
554
        port map (sdrasn, sdo.rasn);
555
      sdcas_pad : outpad generic map (tech => padtech)
556
        port map (sdcasn, sdo.casn);
557
      sddqm_pad : outpadv generic map (width => 8, tech => padtech)
558
        port map (sddqm, sdo.dqm);
559
      sdcke_pad : outpadv generic map (width => 2, tech => padtech)
560
        port map (sdcke, sdo.sdcke);
561
      sdcsn_pad : outpadv generic map (width => 2, tech => padtech)
562
        port map (sdcsn, sdo.sdcsn);
563
    end generate;
564
  end generate;
565
 
566
 
567
  sdclk_pad  : outpad generic map (tech => padtech, slew => 1) port map (sdclk(0), sdclkl);
568
  sdclk_pad2 : outpad generic map (tech => padtech, slew => 1) port map (sdclk(1), gnd(0));
569
 
570
  sd_controller : if CFG_SDCTRL /= 0 generate
571
    sdctrl_1 : sdctrl
572
      generic map (
573
        hindex => 5,
574
        haddr  => 16#600#,
575
        hmask  => 16#F00#,
576
        ioaddr => 16#500#,
577
        iomask => 16#FFF#,
578
        wprot  => 0,
579
        invclk => CFG_SDCTRL_INVCLK,
580
        fast   => 0,
581
        pwron  => 0,
582
        sdbits => 32 + 32*CFG_SDCTRL_SD64)
583
      port map (
584
        rst   => rstn,
585
        clk   => clkm,
586
        ahbsi => ahbsi,
587
        ahbso => ahbso(5),
588
        sdi   => sdi,
589
        sdo   => sdo2);
590
 
591
    -- output signals
592
    sdaddr <= sdo2.address(14 downto 2);
593
    sdba   <= sdo2.address(16 downto 15);
594
    sdcke  <= sdo2.sdcke;
595
    sdwen  <= sdo2.sdwen;
596
    sdcsn  <= sdo2.sdcsn;
597
    sdrasn <= sdo2.rasn;
598
    sdcasn <= sdo2.casn;
599
    sddqm  <= sdo2.dqm(7 downto 0);
600
 
601
    query_64_bit : if (CFG_SDCTRL_SD64 /= 0) generate
602
      sd_pad : iopadv generic map (width => 32)
603
        port map (sddq(63 downto 32),
604
                  sdo2.data(63 downto 32),
605
                  sdo2.bdrive,
606
                  sdi.data(63 downto 32));
607
    end generate;
608
 
609
    sd_pad2 : iopadv generic map (width => 32)
610
      port map (sddq(31 downto 0),
611
                sdo2.data(31 downto 0),
612
                sdo2.bdrive,
613
                sdi.data(31 downto 0));
614
  end generate sd_controller;
615
 
616
  nosd0 : if (CFG_MCTRL_SDEN = 0 and CFG_SDCTRL = 0) generate  -- no SDRAM controller
617
    sdclk_pad : outpad generic map (tech   => padtech, slew => 1) port map (sd_clk, sdclkl);
618
    sdcke_pad : outpadv generic map (width => 2, tech => padtech)
619
      port map (sdcke, sdo3.sdcke);
620
    sdcsn_pad : outpadv generic map (width => 2, tech => padtech)
621
      port map (sdcsn, sdo3.sdcsn);
622
  end generate;
623
 
624
  memi.brdyn  <= '1'; memi.bexcn <= '1';
625
  memi.writen <= '1'; memi.wrn <= "1111"; memi.bwidth <= "10";
626
 
627
  mg0 : if (CFG_MCTRL_LEON2 = 0) and (CFG_SRCTRL = 0) generate  -- no prom/sram controller
628
    apbo(0) <= apb_none; ahbso(0) <= ahbs_none;
629
    rams_pad : outpadv generic map (width => 5, tech => padtech)
630
      port map (ramsn, vcc);
631
    roms_pad : outpadv generic map (width => 2, tech => padtech)
632
      port map (romsn, vcc(1 downto 0));
633
  end generate;
634
 
635
  mgpads : if not ((CFG_MCTRL_LEON2 = 0) and (CFG_SRCTRL = 0)) generate  -- prom/sram controller
636
    addr_pad : outpadv generic map (width => 28, tech => padtech)
637
      port map (address, memo.address(27 downto 0));
638
    rams_pad : outpadv generic map (width => 5, tech => padtech)
639
      port map (ramsn, s_ramsn);
640
    roms_pad : outpadv generic map (width => 2, tech => padtech)
641
      port map (romsn, memo.romsn(1 downto 0));
642
    oen_pad : outpad generic map (tech => padtech)
643
      port map (oen, memo.oen);
644
    rwen_pad : outpadv generic map (width => 4, tech => padtech)
645
      port map (rwen, memo.wrn);
646
    roen_pad : outpadv generic map (width => 5, tech => padtech)
647
      port map (ramoen, memo.ramoen(4 downto 0));
648
    wri_pad : outpad generic map (tech => padtech)
649
      port map (writen, memo.writen);
650
    read_pad : outpad generic map (tech => padtech)
651
      port map (read, memo.read);
652
    iosn_pad : outpad generic map (tech => padtech)
653
      port map (iosn, memo.iosn);
654
    bdr : for i in 0 to 3 generate
655
      data_pad : iopadv generic map (tech => padtech, width => 8)
656
        port map (data(31-i*8 downto 24-i*8), memo.data(31-i*8 downto 24-i*8),
657
                  memo.bdrive(i), memi.data(31-i*8 downto 24-i*8));
658
    end generate;
659
  end generate;
660
 
661
----------------------------------------------------------------------
662
---  APB Bridge and various peripherals -------------------------------
663
----------------------------------------------------------------------
664
 
665
  bpromgen : if CFG_AHBROMEN /= 0 generate
666
    brom : entity work.ahbrom
667
      generic map (hindex => 3, haddr => CFG_AHBRODDR, pipe => CFG_AHBROPIP)
668
      port map (rstn, clkm, ahbsi, ahbso(3));
669
  end generate;
670
  nobpromgen : if CFG_AHBROMEN = 0 generate
671
    ahbso(3) <= ahbs_none;
672
  end generate;
673
 
674
----------------------------------------------------------------------
675
---  APB Bridge and various periherals -------------------------------
676
----------------------------------------------------------------------
677
 
678
  apb0 : apbctrl                        -- AHB/APB bridge
679
    generic map (hindex => 1, haddr => CFG_APBADDR)
680
    port map (rstn, clkm, ahbsi, ahbso(1), apbi, apbo);
681
 
682
  -- APB uart
683
  ua1 : if CFG_UART1_ENABLE /= 0 generate
684
    uart1 : apbuart                     -- UART 1
685
      generic map (pindex   => 1, paddr => 1, pirq => 2, console => dbguart,
686
                   fifosize => CFG_UART1_FIFO)
687
      port map (rstn, clkm, apbi, apbo(1), u1i, u1o);
688
    u1i.rxd <= rxd1; u1i.ctsn <= '0'; u1i.extclk <= '0'; txd1 <= u1o.txd;
689
  end generate;
690
  noua0 : if CFG_UART1_ENABLE = 0 generate apbo(1) <= apb_none; end generate;
691
 
692
  -- interrupt controller
693
  irqctrl : if CFG_IRQ3_ENABLE /= 0 generate
694
    irqctrl0 : irqmp                    -- interrupt controller
695
      generic map (pindex => 2, paddr => 2, ncpu => CFG_NCPU)
696
      port map (rstn, clkm, apbi, apbo(2), irqo, irqi);
697
  end generate;
698
  irq3 : if CFG_IRQ3_ENABLE = 0 generate
699
    x : for i in 0 to CFG_NCPU-1 generate
700
      irqi(i).irl <= "0000";
701
    end generate;
702
    apbo(2) <= apb_none;
703
  end generate;
704
 
705
  -- general purpose timer
706
  gpt : if CFG_GPT_ENABLE /= 0 generate
707
    timer0 : gptimer                    -- timer unit
708
      generic map (pindex => 3, paddr => 3, pirq => CFG_GPT_IRQ,
709
                   sepirq => CFG_GPT_SEPIRQ, sbits => CFG_GPT_SW, ntimers => CFG_GPT_NTIM,
710
                   nbits  => CFG_GPT_TW)
711
      port map (rstn, clkm, apbi, apbo(3), gpti, open);
712
    gpti.dhalt <= dsuo.tstop; gpti.extclk <= '0';
713
  end generate;
714
  notim : if CFG_GPT_ENABLE = 0 generate apbo(3) <= apb_none; end generate;
715
 
716
  -- VGA interface
717
  vga : if CFG_VGA_ENABLE /= 0 generate
718
    vga0 : apbvga generic map(memtech => memtech, pindex => 4, paddr => 4)
719
      port map(rstn, clkm, clk_25MHz, apbi, apbo(4), vgao);
720
    -- port map(rstn, clkm, clkm, apbi, apbo(4), vgao);
721
  end generate;
722
 
723
  novga : if CFG_VGA_ENABLE = 0 generate apbo(4) <= apb_none; vgao <= vgao_none; end generate;
724
 
725
  vert_sync_pad : outpad generic map (tech => padtech)
726
    port map (vga_vsync, vgao.vsync);
727
  horiz_sync_pad : outpad generic map (tech => padtech)
728
    port map (vga_hsync, vgao.hsync);
729
  video_out_r_pad : outpadv generic map (width => 8, tech => padtech)
730
    port map (vga_rd, vgao.video_out_r(7 downto 0));
731
  video_out_g_pad : outpadv generic map (width => 8, tech => padtech)
732
    port map (vga_gr, vgao.video_out_g(7 downto 0));
733
  video_out_b_pad : outpadv generic map (width => 8, tech => padtech)
734
    port map (vga_bl, vgao.video_out_b(7 downto 0));
735
  -- pixel clock = system clock
736
  vga_clk_pad : outpad generic map (tech => padtech)
737
    port map (vga_clk, clk_25MHz);
738
  -- port map (vga_clk, clkm);
739
  -- via syncn, additional sync information could be transported
740
  -- on the green colour channel
741
  -- connecting it to ground disables this feature
742
  vga_syncn_pad : outpad generic map (tech => padtech)
743
    port map (vga_syncn, gnd(0));
744
  -- don't disable output
745
  vga_blankn_pad : outpad generic map (tech => padtech)
746
    port map (vga_blankn, vcc(0));
747
 
748
-----------------------------------------------------------------------
749
---  MULTIIO SECTION --------------------------------------------------
750
-----------------------------------------------------------------------
751
  MULTIIO : if CFG_MULTIIO /= 0 generate
752
    -- human interface controller
753
    mio : MultiIO_APB
754
      generic map (
755
        pindex      => 6,
756
        paddr       => 6,
757
        pmask       => 16#fff#,
758
        pirq        => 6,
759
        clk_freq_in => CPU_FREQ,
760
        hpe_version => midi,
761
        led7act     => '0',
762
        ledact      => '0',
763
        switchact   => '0',  -- switch polarity is inverse to Hpe_compact
764
        buttonact   => '1')
765
      port map (
766
        rst_n       => rstn,
767
        clk         => clkm,
768
        apbi        => apbi,
769
        apbo        => apbo(6),
770
        MultiIO_in  => mioi,
771
        MultiIO_out => mioo);
772
 
773
    mioi.switch_in <= dsw;
774
    mioi.row_in    <= tst_row;
775
 
776
    -- expansion connector
777
    mioi.exp_in <= exp_datai;
778
    exp_datao   <= mioo.exp_out;
779
 
780
    sevensegment <= mioo.led_ca_out(1) &  -- 9
781
                    mioo.led_ca_out(0) &  -- 8
782
                    mioo.led_dp_out &     -- .
783
                    mioo.led_g_out &      -- .
784
                    mioo.led_f_out &      -- .
785
                    mioo.led_e_out &
786
                    mioo.led_d_out &
787
                    mioo.led_c_out &
788
                    mioo.led_b_out &
789
                    mioo.led_a_out;       -- 0
790
    tst_col <= mioo.column_out;
791
 
792
    lcd_regsel <= mioo.lcd_regsel;
793
    lcd_rw     <= mioo.lcd_rw;
794
    lcd_enable <= mioo.lcd_enable;
795
 
796
  end generate;
797
 
798
  nMULTIIO : if CFG_MULTIIO = 0 generate
799
    apbo(6) <= apb_none;
800
  end generate;
801
 
802
-----------------------------------------------------------------------
803
---  ETHERNET ---------------------------------------------------------
804
-----------------------------------------------------------------------
805
 
806
  eth0 : if CFG_GRETH = 1 generate      -- Gaisler ethernet MAC
807
    e1 : greth generic map(hindex    => CFG_NCPU+CFG_AHB_UART+CFG_AHB_JTAG+CFG_GRUSB_DCL,
808
                           pindex    => 15, paddr => 15, pirq => 12, memtech => memtech,
809
                           mdcscaler => CPU_FREQ/1000000, enable_mdio => 1, fifosize => CFG_ETH_FIFO,
810
                           nsync     => 1, edcl => CFG_DSU_ETH, edclbufsz => CFG_ETH_BUF,
811
                           macaddrh  => CFG_ETH_ENM, macaddrl => CFG_ETH_ENL,
812
                           ipaddrh   => CFG_ETH_IPM, ipaddrl => CFG_ETH_IPL)
813
      port map(rst   => rstn, clk => clkm, ahbmi => ahbmi,
814
               ahbmo => ahbmo(CFG_NCPU+CFG_AHB_UART+CFG_AHB_JTAG+CFG_GRUSB_DCL), apbi => apbi,
815
               apbo  => apbo(15), ethi => ethi, etho => etho);
816
 
817
    emdio_pad : iopad generic map (tech => padtech)
818
      port map (emdio, etho.mdio_o, etho.mdio_oe, ethi.mdio_i);
819
    etxc_pad : inpad generic map (tech => padtech)
820
      port map (etx_clk, ethi.tx_clk);
821
    erxc_pad : inpad generic map (tech => padtech)
822
      port map (erx_clk, ethi.rx_clk);
823
    erxd_pad : inpadv generic map (tech => padtech, width => 4)
824
      port map (erxd, ethi.rxd(3 downto 0));
825
    erxdv_pad : inpad generic map (tech => padtech)
826
      port map (erx_dv, ethi.rx_dv);
827
    erxer_pad : inpad generic map (tech => padtech)
828
      port map (erx_er, ethi.rx_er);
829
    erxco_pad : inpad generic map (tech => padtech)
830
      port map (erx_col, ethi.rx_col);
831
    erxcr_pad : inpad generic map (tech => padtech)
832
      port map (erx_crs, ethi.rx_crs);
833
 
834
    etxd_pad : outpadv generic map (tech => padtech, width => 4)
835
      port map (etxd, etho.txd(3 downto 0));
836
    etxen_pad : outpad generic map (tech => padtech)
837
      port map (etx_en, etho.tx_en);
838
    etxer_pad : outpad generic map (tech => padtech)
839
      port map (etx_er, etho.tx_er);
840
    emdc_pad : outpad generic map (tech => padtech)
841
      port map (emdc, etho.mdc);
842
 
843
    emdis_pad : outpad generic map (tech => padtech)
844
      port map (emddis, vcc(0));
845
    eepwrdwn_pad : outpad generic map (tech => padtech)
846
      port map (epwrdwn, gnd(0));
847
    esleep_pad : outpad generic map (tech => padtech)
848
      port map (esleep, gnd(0));
849
    epause_pad : outpad generic map (tech => padtech)
850
      port map (epause, gnd(0));
851
    ereset_pad : outpad generic map (tech => padtech)
852
      port map (ereset, rstn);
853
 
854
  end generate;
855
 
856
 
857
-----------------------------------------------------------------------
858
---  CAN --------------------------------------------------------------
859
-----------------------------------------------------------------------
860
 
861
  can1 : if CFG_CAN /= 0 generate       -- Opencores can MAC
862
    can0 : can_oc
863
      generic map (
864
        slvndx => 6,
865
        ioaddr => CFG_CANIO,
866
        iomask => 16#FF0#,
867
        irq    => 13)
868
      port map (
869
        resetn  => rstn,
870
        clk     => clkm,
871
        ahbsi   => ahbsi,
872
        ahbso   => ahbso(6),
873
        can_rxi => rx,
874
        can_txo => tx
875
        );
876
  end generate;
877
 
878
  ncan : if CFG_CAN = 0 generate
879
    ahbso(6) <= ahbs_none;
880
  end generate;
881
 
882
  -- CAN Transceiver mode (phy)
883
  -- Can stb = 0  operating
884
  -- Can stb = 1  standby
885
  CAN_STB <= '0';
886
 
887
  -- Can rx and tx must be hot-wired in case of testing can
888
  test_can : if CFG_CANLOOP = 1 generate
889
    rx <= tx;
890
  end generate;
891
 
892
  normal_can : if CFG_CANLOOP = 0 generate
893
    rx      <= CAN_RXD;
894
    CAN_TXD <= tx;
895
  end generate;
896
 
897
-----------------------------------------------------------------------
898
---  AHB RAM ----------------------------------------------------------
899
-----------------------------------------------------------------------
900
 
901
  ocram : if CFG_AHBRAMEN = 1 generate
902
    ahbram0 : ahbram generic map (hindex => 7, haddr => CFG_AHBRADDR,
903
                                  tech   => CFG_MEMTECH, kbytes => CFG_AHBRSZ)
904
      port map (rstn, clkm, ahbsi, ahbso(7));
905
  end generate;
906
  nram : if CFG_AHBRAMEN = 0 generate ahbso(7) <= ahbs_none; end generate;
907
 
908
-----------------------------------------------------------------------
909
---  Drive unused bus elements  ---------------------------------------
910
-----------------------------------------------------------------------
911
 
912
  nam1 : for i in (CFG_NCPU+CFG_AHB_UART+CFG_GRETH+CFG_GRUSB_DCL+CFG_AHB_JTAG) to NAHBMST-1 generate
913
    ahbmo(i) <= ahbm_none;
914
  end generate;
915
 
916
  nap0 : for i in 11 to NAPBSLV-1-CFG_GRETH generate apbo(i) <= apb_none; end generate;
917
 
918
  nah0 : for i in 9 to NAHBSLV-1 generate ahbso(i) <= ahbs_none; end generate;
919
 
920
-----------------------------------------------------------------------
921
---  Adaptions for HPE midi ----------------------------------------
922
-----------------------------------------------------------------------
923
 
924
  -- rben vector is pulled down entirely while reading,
925
  -- selected vector elements pulled down while writing
926
  rben <= (others => '0') when memo.ramoen(0) = '0' else
927
          memo.wrn;
928
  -- invert signal for input via a key
929
  -- invert dsuact signal for output on LED
930
  dsuactn <= not dsuact;
931
 
932
  s_ramsn <= memo.ramsn(4 downto 0);
933
 
934
  -- drive reset signal for peripherals like ethernet, flash etc.
935
  -- use USB reset for USB DCL (experimental)
936
  -- USB reset needs to be decoupled from general resout signal
937
  resoutn <= rstn;                      -- reset signal for USB host chip, exp.
938
                                        -- connector
939
 
940
 
941
  ---------------------------------------------------------------------------------------
942
  -- PS/2 interface
943
  ---------------------------------------------------------------------------------------
944
 
945
  -- INTERFACE 0 CANNOT BE USED, SINCE THE OUTPUT SIGNAL PS2CLOCK(0)
946
  -- WOULD HAVE TO BE ASSIGNED TO FPGA INPUT PIN U30!!
947
 
948
  ps2_0if : if CFG_KBD_ENABLE /= 0 generate
949
    -- PS/2 interface 0 (keyboard, bottom connector)
950
    apbps2_0 : apbps2
951
      generic map (
952
        pindex => 10,
953
        paddr  => 10,
954
        pirq   => 4,
955
        fKHz   => PS2_SCALER,  --CPU_FREQ/15,  -- clock divider for APB clock (13.3 kHz selected)
956
        fixed  => 0)  -- clock can be programmed via timer reload reg
957
      port map (
958
        rst  => rstn,
959
        clk  => clkm,
960
        apbi => apbi,
961
        apbo => apbo(10),
962
        ps2i => kbdi0,
963
        ps2o => kbdo0);
964
  end generate ps2_0if;
965
 
966
  no_ps2_1if : if CFG_KBD_ENABLE = 0 generate
967
    apbo(10) <= apb_none;
968
    kbdo0    <= ps2o_none;
969
  end generate no_ps2_1if;
970
 
971
  kbd0_clk_pad : iopad generic map (tech => padtech)
972
    port map (ps2_clk(0), kbdo0.ps2_clk_o, kbdo0.ps2_clk_oe, kbdi0.ps2_clk_i);
973
 
974
  kbd0_data_pad : iopad generic map (tech => padtech)
975
    port map (ps2_data(0), kbdo0.ps2_data_o, kbdo0.ps2_data_oe, kbdi0.ps2_data_i);
976
 
977
 
978
  ps2_1if : if CFG_KBD_ENABLE /= 0 generate
979
    -- PS/2 interface 1 (keyboard, top connector)
980
    apbps2_1 : apbps2
981
      generic map (
982
        pindex => 5,
983
        paddr  => 5,
984
        pirq   => 4,
985
        fKHz   => PS2_SCALER,           -- CPU_FREQ/15,
986
        fixed  => 0)
987
      port map (
988
        rst  => rstn,
989
        clk  => clkm,
990
        apbi => apbi,
991
        apbo => apbo(5),
992
        ps2i => kbdi1,
993
        ps2o => kbdo1);
994
  end generate ps2_1if;
995
 
996
  no_ps2_if : if CFG_KBD_ENABLE = 0 generate
997
    apbo(5) <= apb_none;
998
    kbdo1   <= ps2o_none;
999
  end generate no_ps2_if;
1000
 
1001
  kbd1_clk_pad : iopad generic map (tech => padtech)
1002
    port map (ps2_clk(1), kbdo1.ps2_clk_o, kbdo1.ps2_clk_oe, kbdi1.ps2_clk_i);
1003
 
1004
  kbd1_data_pad : iopad generic map (tech => padtech)
1005
    port map (ps2_data(1), kbdo1.ps2_data_o, kbdo1.ps2_data_oe, kbdi1.ps2_data_i);
1006
 
1007
  -----------------------------------------------------------------------------
1008
  -- ADC/DAC interface
1009
  -----------------------------------------------------------------------------
1010
 
1011
  adcdac_inst : if CFG_ADCDAC /= 0 generate
1012
    adcdac_1 : adcdac
1013
      generic map (
1014
        pindex => 9,
1015
        paddr  => 9,
1016
        pmask  => 16#FFF#,
1017
        nbits  => 10)
1018
      port map (
1019
        rst     => rstn,
1020
        clk     => clkm,
1021
        apbi    => apbi,
1022
        apbo    => apbo(9),
1023
        adcdaci => adcdaci,
1024
        adcdaco => adcdaco);
1025
 
1026
    adcdaci.adc_in <= adc_dout;
1027
    adc_ain        <= adcdaco.adc_fb;
1028
    dac_out        <= adcdaco.dac_out;
1029
 
1030
  end generate;
1031
 
1032
  nadcdac_inst : if CFG_ADCDAC = 0 generate
1033
    apbo(9) <= apb_none;
1034
  end generate;
1035
 
1036
 
1037
  -----------------------------------------------------------------------------
1038
  -- HPI SECTION
1039
  -----------------------------------------------------------------------------
1040
 
1041
  ahb2hpi_inst : if CFG_AHB2HPI /= 0 generate
1042
    ahb2hpi2_1 : ahb2hpi2
1043
      generic map (
1044
        counter_width => 4,
1045
        data_width    => 16,
1046
        address_width => 2,
1047
        hindex        => 8,
1048
        haddr         => 16#240#,
1049
        hmask         => 16#fff#)
1050
      port map (
1051
        HCLK      => clkm,
1052
        HRESETn   => rstn,
1053
        ahbso     => ahbso(8),
1054
        ahbsi     => ahbsi,
1055
        ADDR      => hpiaddr,
1056
        WDATA     => hpiwdata,
1057
        RDATA     => hpirdata,
1058
        nCS       => hpicsn,
1059
        nWR       => hpiwriten,
1060
        nRD       => hpirdn,
1061
        INT       => hpiint,
1062
        drive_bus => drive_bus,
1063
        dbg_equal => dbg_equal
1064
        );
1065
 
1066
    hpidata <= hpiwdata when drive_bus = '1' else
1067
               (others => 'Z');
1068
 
1069
    hpirdata <= hpidata;
1070
 
1071
    hpiwrn <= hpiwriten;
1072
 
1073
  end generate;
1074
  nahb2hpi_inst : if CFG_AHB2HPI = 0 generate
1075
    ahbso(8) <= ahbs_none;
1076
  end generate;
1077
 
1078
  ---------------------------------------------------------------------------------------
1079
  -- Simple SPI Controller
1080
  ---------------------------------------------------------------------------------------
1081
  spi_oc_inst : if CFG_SPI_OC /= 0 generate
1082
    spi_oc_1 : spi_oc
1083
      generic map (
1084
        pindex => 8,
1085
        paddr  => 8,
1086
        pmask  => 16#FFF#,
1087
        pirq   => 5)
1088
      port map (
1089
        rstn    => rstn,
1090
        clk     => clkm,
1091
        apbi    => apbi,
1092
        apbo    => apbo(8),
1093
        spi_in  => spii,
1094
        spi_out => spio);
1095
 
1096
    -- inputs from SD card
1097
    spii.miso <= sdcard_do;
1098
 
1099
    -- outputs to SD card
1100
    sdcard_cs   <= spio.ssn(0);
1101
    sdcard_di   <= spio.mosi;
1102
    sdcard_sclk <= spio.sck;
1103
 
1104
  end generate;
1105
 
1106
  gspi_inst : if CFG_SPICTRL_ENABLE /= 0 and CFG_SPI_OC = 0 generate
1107
    gspi_1 : spictrl
1108
      generic map (
1109
        pindex   => 8,
1110
        paddr    => 8,
1111
        pmask    => 16#FFF#,
1112
        pirq     => 5,
1113
        fdepth   => CFG_SPICTRL_FIFO,                  -- FIFO depth is 2^fdepth
1114
        slvselen => CFG_SPICTRL_SLVREG,                  -- Slave select register enable
1115
        slvselsz => CFG_SPICTRL_SLVS)                  -- Number of slave select signal
1116
      port map (
1117
        rstn => rstn,
1118
        clk  => clkm,
1119
        apbi => apbi,
1120
        apbo => apbo(8),
1121
        spii => gspii,
1122
        spio => gspio);
1123
 
1124
    -- inputs from SD card
1125
    gspii.miso <= sdcard_do;
1126
 
1127
    -- outputs to SD card
1128
    sdcard_cs   <= gspio.ssn(0);
1129
    sdcard_di   <= gspio.mosi;
1130
    sdcard_sclk <= gspio.sck;
1131
 
1132
  end generate;
1133
 
1134
  nspi_inst : if CFG_SPI_OC = 0 and CFG_SPICTRL_ENABLE = 0 generate
1135
    apbo(8) <= apb_none;
1136
  end generate;
1137
 
1138
 
1139
  -----------------------------------------------------------------------------
1140
  -- AUDIO CODEC
1141
  -----------------------------------------------------------------------------
1142
  ac97_oc_inst : if CFG_AC97_OC /= 0 generate
1143
 
1144
    -- DMA not used at the moment
1145
    dma_ack <= (others => '0');
1146
 
1147
    -- drive AC97 external clock with 25 MHz
1148
    ac97_ext_clk <= clk_25MHz;
1149
 
1150
    ac97_oc_1 : ac97_oc
1151
      generic map (
1152
        slvndx => 4,
1153
        ioaddr => 16#300#,
1154
        iomask => 16#FFF#,
1155
        irq    => 7)
1156
      port map (
1157
        resetn => rstn,
1158
        clk    => clkm,
1159
        ahbsi  => ahbsi,
1160
        ahbso  => ahbso(4),
1161
 
1162
        -- AC97 interface
1163
        bit_clk_pad_i     => ac97_bit_clk,
1164
        sdata_pad_i       => ac97_sdata_in,
1165
        -- output signals have to go via
1166
        -- intermediate signals
1167
        sync_pad_o        => ac97_int_sync,
1168
        sdata_pad_o       => ac97_int_sdata_out,
1169
        ac97_reset_padn_o => ac97_int_resetn,
1170
 
1171
        int_o       => ac97_int_irq,
1172
        dma_req_o   => open,
1173
        dma_ack_i   => dma_ack,
1174
        suspended_o => open,
1175
        int_pol     => vcc(0)           -- interrupts active high
1176
        );
1177
 
1178
    -- drive AC97 outputs from intermediate signals
1179
    ac97_sync      <= ac97_int_sync;
1180
    ac97_sdata_out <= ac97_int_sdata_out;
1181
    ac97_resetn    <= ac97_int_resetn;
1182
 
1183
  end generate;
1184
  nac97_oc_inst : if CFG_AC97_OC = 0 generate
1185
    ahbso(4) <= ahbs_none;
1186
  end generate;
1187
 
1188
 
1189
-----------------------------------------------------------------------
1190
---  Boot message  ----------------------------------------------------
1191
-----------------------------------------------------------------------
1192
 
1193
-- pragma translate_off
1194
  x : report_version
1195
    generic map (
1196
      msg1 => "LEON3 Demonstration design for Hpe-midi with module AS1-180",
1197
      msg2 => "GRLIB Version " & tost(LIBVHDL_VERSION/100) & "." & tost((LIBVHDL_VERSION mod 10)/10)
1198
      & "." & tost(LIBVHDL_VERSION mod 100),
1199
      msg3 => "Target technology: " & tech_table(fabtech) & ",  memory library: " & tech_table(memtech),
1200
      mdel => 1
1201
      );
1202
-- pragma translate_on
1203
end;

powered by: WebSVN 2.1.0

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