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-gr-cpci-ax/] [leon3ax.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, Gaisler Research
4
--
5
--  This program is free software; you can redistribute it and/or modify
6
--  it under the terms of the GNU General Public License as published by
7
--  the Free Software Foundation; either version 2 of the License, or
8
--  (at your option) any later version.
9
--
10
--  This program is distributed in the hope that it will be useful,
11
--  but WITHOUT ANY WARRANTY; without even the implied warranty of
12
--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
--  GNU General Public License for more details.
14
--
15
--  You should have received a copy of the GNU General Public License
16
--  along with this program; if not, write to the Free Software
17
--  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18
------------------------------------------------------------------------------
19
 
20
library ieee;
21
use ieee.std_logic_1164.all;
22
library grlib;
23
use grlib.amba.all;
24
use grlib.stdlib.all;
25
library techmap;
26
use techmap.gencomp.all;
27
library gaisler;
28
use gaisler.memctrl.all;
29
use gaisler.leon3.all;
30
use gaisler.uart.all;
31
use gaisler.misc.all;
32
use gaisler.pci.all;
33
use gaisler.net.all;
34
library esa;
35
use esa.memoryctrl.all;
36
use esa.pcicomp.all;
37
use work.config.all;
38
 
39
entity leon3ax is
40
  generic (
41
    fabtech       : integer := CFG_FABTECH;
42
    memtech       : integer := CFG_MEMTECH;
43
    padtech       : integer := CFG_PADTECH;
44
    clktech       : integer := CFG_CLKTECH;
45
    disas         : integer := CFG_DISAS;                -- Disassembly to console
46
    dbguart       : integer := CFG_DUART;                -- Print UART on console
47
    pclow         : integer := CFG_PCLOW);
48
  port (
49
    resetn        : in     std_logic;
50
    clk           : in     std_logic;
51
    errorn        : out    std_logic;
52
 
53
    sa            : out    std_logic_vector(15 downto 0);-- {sa(15) unused}
54
    sd            : inout  std_logic_vector(63 downto 0);
55
    scb           : inout  std_logic_vector(7 downto 0); -- {unused by default}
56
    sdclkfb       : in     std_logic;                   -- {unused by default}
57
    sdcsn         : out    std_logic_vector(1 downto 0); -- SDRAM chip select
58
    sdwen         : out    std_logic;                   -- SDRAM write enable
59
    sdrasn        : out    std_logic;                   -- SDRAM RAS
60
    sdcasn        : out    std_logic;                   -- SDRAM CAS
61
    sddqm         : out    std_logic_vector(7 downto 0); -- SDRAM DQM
62
 
63
    dsutx         : out    std_logic;                   -- DSU tx data
64
    dsurx         : in     std_logic;                   -- DSU rx data
65
    dsuen         : in     std_logic;
66
    dsubre        : in     std_logic;
67
    dsuact        : out    std_logic;
68
 
69
    txd           : out    std_logic_vector(1 to 2);     -- UART tx data
70
    rxd           : in     std_logic_vector(1 to 2);     -- UART rx data
71
    rtsn          : out    std_logic_vector(1 to 2);     -- UART rtsn
72
    ctsn          : in     std_logic_vector(1 to 2);     -- UART ctsn
73
 
74
    address       : out    std_logic_vector(27 downto 0);
75
    data          : inout  std_logic_vector(31 downto 0);
76
 
77
    ramsn         : out    std_logic_vector(4 downto 0);
78
    ramoen        : out    std_logic_vector(4 downto 0);
79
    rwen          : out    std_logic_vector(3 downto 0);
80
    ramben        : out    std_logic_vector(3 downto 0);
81
    oen           : out    std_logic;
82
    writen        : out    std_logic;
83
    read          : out    std_logic;
84
    iosn          : out    std_logic;
85
    romsn         : out    std_logic_vector(1 downto 0);
86
 
87
    cb            : inout  std_logic_vector(7 downto 0); -- {unused by default}
88
    bexcn         : in     std_logic;                    -- {unused by default}
89
    brdyn         : in     std_logic;                    -- {unused by default}
90
 
91
    gpio          : inout  std_logic_vector(15 downto 0);-- {unused by default}
92
    pciio         : inout  std_logic_vector(31 downto 0);-- {unused by default}
93
 
94
    pci_rst       : inout  std_logic;                   -- PCI bus
95
    pci_clk       : in     std_logic;
96
 
97
    pci_gnt       : in     std_logic;
98
    pci_idsel     : in     std_logic;
99
    pci_lock      : inout  std_logic;
100
    pci_ad        : inout  std_logic_vector(63 downto 0);
101
    pci_cbe       : inout  std_logic_vector(7 downto 0);
102
    pci_frame     : inout  std_logic;
103
    pci_irdy      : inout  std_logic;
104
    pci_trdy      : inout  std_logic;
105
    pci_devsel    : inout  std_logic;
106
    pci_stop      : inout  std_logic;
107
    pci_perr      : inout  std_logic;
108
    pci_par       : inout  std_logic;
109
    pci_req       : inout  std_logic;
110
    pci_serr      : inout  std_logic;
111
    pci_host      : in     std_logic;
112
    pci_66        : in     std_logic;
113
 
114
    --pci_arb_gnt   : out    std_logic_vector(7 downto 0);
115
    pci_arb_req   : in     std_logic_vector(7 downto 0);
116
 
117
    pci_ack64n    : inout  std_logic;                    -- {unused by default}
118
    pci_par64     : inout  std_logic;                    -- {unused by default}
119
    pci_req64n    : inout  std_logic;                    -- {unused by default}
120
    pci_en64      : in     std_logic);                   -- {unused by default}
121
end;
122
 
123
architecture rtl of leon3ax is
124
 
125
   --attribute syn_hier : string;
126
   --attribute syn_hier of rtl : architecture is "hard";
127
 
128
   --attribute syn_preserve_sr_priority : boolean;
129
   --attribute syn_preserve_sr_priority of rtl : architecture is true;
130
 
131
   constant    blength        : Integer := 12;
132
   constant    fifodepth      : integer := 8;
133
 
134
   constant    sdbits         : Integer := 64;
135
 
136
   signal      vcc, gnd       : std_logic_vector(4 downto 0);
137
   signal      memi           : memory_in_type;
138
   signal      memo           : memory_out_type;
139
   signal      wpo            : wprot_out_type;
140
   signal      sdi            : sdctrl_in_type;
141
   signal      sdo            : sdram_out_type;
142
   signal      sdo2, sdo3     : sdctrl_out_type;
143
 
144
   signal      apbi           : apb_slv_in_type;
145
   signal      apbo           : apb_slv_out_vector := (others => apb_none);
146
   signal      ahbsi          : ahb_slv_in_type;
147
   signal      ahbso          : ahb_slv_out_vector := (others => ahbs_none);
148
   signal      ahbmi          : ahb_mst_in_type;
149
   signal      ahbmo          : ahb_mst_out_vector := (others => ahbm_none);
150
 
151
   signal      clki, rstn, rstraw, pciclk, sdclkl : std_logic;
152
   signal      cgi            : clkgen_in_type;
153
   signal      cgo            : clkgen_out_type;
154
 
155
   signal      u1i, u2i, dui  : uart_in_type;
156
   signal      u1o, u2o, duo  : uart_out_type;
157
 
158
   signal      irqi           : irq_in_vector(0 to CFG_NCPU-1);
159
   signal      irqo           : irq_out_vector(0 to CFG_NCPU-1);
160
 
161
   signal      dbgi           : l3_debug_in_vector(0 to CFG_NCPU-1);
162
   signal      dbgo           : l3_debug_out_vector(0 to CFG_NCPU-1);
163
 
164
   signal      dsui           : dsu_in_type;
165
   signal      dsuo           : dsu_out_type;
166
 
167
   signal      pcii           : pci_in_type;
168
   signal      pcio           : pci_out_type;
169
 
170
   signal      ethi, ethi1, ethi2   : eth_in_type;
171
   signal      etho, etho1, etho2   : eth_out_type;
172
 
173
   signal      gpti                 : gptimer_in_type;
174
 
175
   signal      pci_arb_req_n        : std_logic_vector(0 to 7);
176
   signal      pci_arb_gnt_n        : std_logic_vector(0 to 7);
177
 
178
   signal      rben                 : std_logic_vector(3 downto 0);
179
 
180
   signal      lclk, lpci_clk       : Std_ULogic;
181
 
182
   signal      gpioi                : gpio_in_type;
183
   signal      gpioo                : gpio_out_type;
184
 
185
   --dummy signals to iopads for unused ports
186
   signal      cbin, cbout    : std_logic_vector(7 downto 0);
187
 
188
begin
189
 
190
----------------------------------------------------------------------
191
---  Reset and Clock generation  -------------------------------------
192
----------------------------------------------------------------------
193
 
194
   vcc         <= (others => '1');
195
   gnd         <= (others => '0');
196
   cgi.pllctrl <= "00";
197
   cgi.pllrst  <= rstraw;
198
 
199
   cgi.pllref  <= '0';
200
 
201
   clk_pad : clkpad
202
      generic map (tech => clktech, level => ttl)
203
      port map (clk, lclk);
204
 
205
   pci_clk_pad : clkpad
206
      generic map (tech => clktech, level => pci33)
207
      port map (pci_clk, lpci_clk);
208
 
209
   clkgen0 : clkgen        -- clock generator
210
      generic map (
211
         tech        => clktech,
212
         clk_mul     => CFG_CLKMUL,
213
         clk_div     => CFG_CLKDIV,
214
         sdramen     => CFG_SDEN,
215
         noclkfb     => CFG_CLK_NOFB,
216
         pcien       => CFG_PCI,
217
         pcidll      => CFG_PCIDLL,
218
         pcisysclk   => CFG_PCISYSCLK)
219
      port map (
220
         clkin       => lclk,
221
         pciclkin    => lpci_clk,
222
         clk         => clki,
223
         clkn        => open,
224
         clk2x       => open,
225
         sdclk       => open,
226
         pciclk      => pciclk,
227
         cgi         => cgi,
228
         cgo         => cgo);
229
 
230
   rst0: rstgen             -- reset generator
231
      -- generic map (
232
      --   acthigh     => 0);
233
      port map(
234
         rstin       => resetn,
235
         clk         => clki,
236
         clklock     => cgo.clklock,
237
         rstout      => rstn,
238
         rstoutraw   => rstraw);
239
 
240
----------------------------------------------------------------------
241
---  AHB CONTROLLER --------------------------------------------------
242
----------------------------------------------------------------------
243
   ahb0: ahbctrl           -- AHB arbiter/multiplexer
244
      generic map (
245
        defmast      => CFG_DEFMST,
246
        split        => CFG_SPLIT,
247
        rrobin       => CFG_RROBIN,
248
        -- timeout      => 0,
249
        ioaddr       => CFG_AHBIO,
250
        ioen         => CFG_SDCTRL,
251
        nahbs        => 8,
252
        nahbm        => 8)
253
        -- iomask       => 16#fff#,
254
        -- cfgaddr      => 16#ff0#,
255
        -- cfgmask      => 16#ff0#,
256
      port map(
257
        rst          => rstn,
258
        clk          => clki,
259
        msti         => ahbmi,
260
        msto         => ahbmo,
261
        slvi         => ahbsi,
262
        slvo         => ahbso);
263
 
264
----------------------------------------------------------------------
265
---  LEON3 processor and DSU -----------------------------------------
266
----------------------------------------------------------------------
267
 
268
  l3 : if CFG_LEON3 = 1 generate
269
    cpu : for i in 0 to CFG_NCPU-1 generate
270
        u0: leon3s           -- LEON3 processor
271
           generic map(
272
              hindex         => i,
273
              fabtech        => fabtech,
274
              memtech        => memtech,
275
              nwindows       => CFG_NWIN,
276
              dsu            => CFG_DSU,
277
              fpu            => CFG_FPU,
278
              v8             => CFG_V8,
279
              cp             => 0,
280
              mac            => CFG_MAC,
281
              pclow          => pclow,
282
              smp            => CFG_NCPU-1,
283
              nwp            => CFG_NWP,
284
              icen           => CFG_ICEN,
285
              irepl          => CFG_IREPL,
286
              isets          => CFG_ISETS,
287
              ilinesize      => CFG_ILINE,
288
              isetsize       => CFG_ISETSZ,
289
              isetlock       => CFG_ILOCK,
290
              dcen           => CFG_DCEN,
291
              drepl          => CFG_DREPL,
292
              dsets          => CFG_DSETS,
293
              dlinesize      => CFG_DLINE,
294
              dsetsize       => CFG_DSETSZ,
295
              dsetlock       => CFG_DLOCK,
296
              dsnoop         => CFG_DSNOOP,
297
              ilram          => CFG_ILRAMEN,
298
              ilramsize      => CFG_ILRAMSZ,
299
              ilramstart     => CFG_ILRAMADDR,
300
              dlram          => CFG_DLRAMEN,
301
              dlramsize      => CFG_DLRAMSZ,
302
              dlramstart     => CFG_DLRAMADDR,
303
              mmuen          => CFG_MMUEN,
304
              itlbnum        => CFG_ITLBNUM,
305
              dtlbnum        => CFG_DTLBNUM,
306
              tlb_type       => CFG_TLB_TYPE,
307
              TLB_REP        => CFG_TLB_REP,
308
              lddel          => CFG_LDDEL,
309
              disas          => disas,
310
              tbuf           => CFG_ITBSZ,
311
              pwd            => CFG_PWD)
312
           port map(
313
              clk            => clki,
314
              rstn           => rstn,
315
              ahbi           => ahbmi,
316
              ahbo           => ahbmo(i),
317
              ahbsi          => ahbsi,
318
              ahbso          => ahbso,
319
              irqi           => irqi(i),
320
              irqo           => irqo(i),
321
              dbgi           => dbgi(i),
322
              dbgo           => dbgo(i));
323
    end generate;
324
 
325
    errorn_pad : odpad
326
       generic map (tech => padtech)
327
      port map (errorn, dbgo(0).error);
328
 
329
    dcomgen : if CFG_DSU = 1 generate
330
      dsu0: dsu3                 -- LEON3 Debug Support Unit
331
         generic map(
332
            hindex         => 2,
333
            haddr          => 16#900#,
334
            hmask          => 16#F00#,
335
            ncpu           => CFG_NCPU,
336
            tbits          => 30,
337
            tech           => memtech,
338
            irq            => 0,
339
            kbytes         => CFG_ATBSZ)
340
         port map(
341
            rst            => rstn,
342
            clk            => clki,
343
            ahbmi          => ahbmi,
344
            ahbsi          => ahbsi,
345
            ahbso          => ahbso(2),
346
            dbgi           => dbgo,
347
            dbgo           => dbgi,
348
            dsui           => dsui,
349
            dsuo           => dsuo);
350
 
351
      dsuen_pad : inpad
352
         generic map (tech => padtech)
353
         port map (dsuen, dsui.enable);
354
      dsubre_pad : inpad
355
         generic map (tech => padtech)
356
         port map (dsubre, dsui.break);
357
      dsuact_pad : outpad
358
         generic map (tech => padtech)
359
         port map (dsuact, dsuo.active);
360
 
361
    end generate;
362
  end generate;
363
 
364
  nodsu : if CFG_DSU = 0 generate
365
      ahbso(2) <= ahbs_none; dsuo.tstop <= '0'; dsuo.active <= '0';
366
  end generate;
367
 
368
 
369
  ahbuart0 : if CFG_AHB_UART = 1 generate
370
      dcom0: ahbuart       -- Debug UART
371
         generic map(
372
             hindex        => CFG_NCPU,
373
             pindex        => 7,
374
             paddr         => 7)
375
             --pmask         => 16#fff#,
376
             --debug         => 0)
377
         port map(
378
             rst           => rstn,
379
             clk           => clki,
380
             uarti         => dui,
381
             uarto         => duo,
382
             apbi          => apbi,
383
             apbo          => apbo(7),
384
             ahbi          => ahbmi,
385
             ahbo          => ahbmo(CFG_NCPU));
386
 
387
      dsurx_pad : inpad
388
         generic map (tech => padtech)
389
         port map (dsurx, dui.rxd);
390
      dsutx_pad : outpad
391
         generic map (tech => padtech)
392
         port map (dsutx, duo.txd);
393
 
394
   end generate;
395
 
396
----------------------------------------------------------------------
397
---  Memory controllers ----------------------------------------------
398
----------------------------------------------------------------------
399
 
400
   mg1 : if CFG_SRCTRL = 1 generate  -- 32-bit PROM/SRAM controller
401
      sr0: srctrl
402
         generic map(
403
             hindex     => 0,
404
             --romaddr    => 0,
405
             --rommask    => 16#ff0#,
406
             ramaddr    => 16#400#,
407
             --rammask    => 16#ff0#,
408
             ramws      => CFG_SRCTRL_RAMWS,
409
             romws      => CFG_SRCTRL_PROMWS,
410
             rmw        => 0,
411
             prom8en    => 1,
412
             oepol      => 1)
413
         port map(
414
             rst        => rstn,
415
             clk        => clki,
416
             ahbsi      => ahbsi,
417
             ahbso      => ahbso(0),
418
             sri        => memi,
419
             sro        => memo,
420
             sdo        => sdo3);
421
   end generate;
422
 
423
   sd1 : if CFG_SDCTRL = 1 generate
424
         sdc : sdctrl
425
            generic map(
426
                hindex  => 3,
427
                haddr   => 16#600#,
428
                hmask   => 16#E00#,
429
                ioaddr  => 1,
430
                -- iomask  => 16#fff#,
431
                -- wprot   => 0,
432
                invclk  => CFG_INVCLK,
433
                fast    => 0,
434
                pwron   => 0,
435
                sdbits  => sdbits,
436
                oepol   => 1)
437
            port map(
438
                rst     => rstn,
439
                clk     => clki,
440
                ahbsi   => ahbsi,
441
                ahbso   => ahbso(3),
442
                sdi     => sdi,
443
                sdo     => sdo2);
444
 
445
         --sdclk_pad : outpad
446
         --   generic map (tech => padtech)
447
         --   port map (sdclk, sdclkl);
448
 
449
         sa_pad : outpadv
450
            generic map (width => 15, tech => padtech)
451
            port map (sa(14 downto 0), sdo2.address);
452
         sa(15) <= '0';
453
 
454
         sd_pad : iopadvv
455
            generic map (width => 32, tech => padtech, oepol => 1)
456
            port map (sd(31 downto 0), sdo2.data(31 downto 0),
457
               sdo2.vbdrive, sdi.data(31 downto 0));
458
 
459
         byteenable_pads : outpadv
460
            generic map (width =>4, tech => padtech)
461
            port map (ramben, memo.mben);
462
 
463
         sdwen_pad : outpad
464
            generic map (tech => padtech)
465
            port map (sdwen, sdo2.sdwen);
466
         sdcsn_pad : outpadv
467
            generic map (width =>2, tech => padtech)
468
            port map (sdcsn, sdo2.sdcsn);
469
         sdras_pad : outpad
470
            generic map (tech => padtech)
471
            port map (sdrasn, sdo2.rasn);
472
         sdcas_pad : outpad
473
            generic map (tech => padtech)
474
            port map (sdcasn, sdo2.casn);
475
         sddqm_pad : outpadv
476
            generic map (width =>8, tech => padtech)
477
            port map (sddqm, sdo2.dqm);
478
   end generate;
479
 
480
   mg2 : if CFG_MCTRL_LEON2 = 1 generate   -- LEON2 memory controller
481
      sr1: mctrl
482
         generic map(
483
            hindex      => 0,
484
            pindex      => 0,
485
            --romaddr     => 16#000#,
486
            --rommask     => 16#E00#,
487
            --ioaddr      => 16#200#,
488
            --iomask      => 16#E00#,
489
            --ramaddr     => 16#400#,
490
            --rammask     => 16#C00#,
491
            paddr       => 0,
492
            --pmask       => 16#fff#,
493
            --wprot       => 0,
494
            invclk      => 0,
495
            fast        => 0,
496
            --romasel     => 28,
497
            --sdrasel     => 30,
498
            srbanks     => 4,
499
            ram8        => 1,
500
            ram16       => 1,
501
            sden        => CFG_MCTRL_SDEN,
502
            sepbus      => 1,
503
            sdbits      => sdbits,
504
            oepol       => 1)
505
         port map(
506
            rst         => rstn,
507
            clk         => clki,
508
            memi        => memi,
509
            memo        => memo,
510
            ahbsi       => ahbsi,
511
            ahbso       => ahbso(0),
512
            apbi        => apbi,
513
            apbo        => apbo(0),
514
            wpo         => wpo,
515
            sdo         => sdo);
516
 
517
         brdyn_pad : inpad generic map (tech => padtech) port map (brdyn, memi.brdyn);
518
         bexcn_pad : inpad generic map (tech => padtech) port map (bexcn, memi.bexcn);
519
 
520
         sdpads : if CFG_SDEN = 1 generate     -- SDRAM controller
521
            sd2 : if CFG_MCTRL_SEPBUS = 1 generate
522
               sa_pad : outpadv generic map (width => 15)
523
                  port map (sa(14 downto 0), memo.sa);
524
               sa(15) <= '0';
525
               sd_pad : iopadvv
526
                 generic map (tech => padtech, width => 32, oepol => 1)
527
                 port map (
528
                   sd(31 downto 0),
529
                   memo.sddata(31 downto 0),
530
                   memo.svbdrive(31 downto 0),
531
                   memi.sd(31 downto 0));
532
               sd2 : if CFG_MCTRL_SD64 = 1 generate
533
                 sd_pad2 : iopadvv
534
                   generic map (tech => padtech, width => 32, oepol => 1)
535
                   port map (
536
                     sd(63 downto 32),
537
                     memo.sddata(63 downto 32),
538
                     memo.svbdrive(63 downto 32),
539
                     memi.sd(63 downto 32));
540
               end generate;
541
            end generate;
542
 
543
         sdwen_pad : outpad
544
            generic map (tech => padtech)
545
            port map (sdwen, sdo.sdwen);
546
         sdras_pad : outpad
547
            generic map (tech => padtech)
548
            port map (sdrasn, sdo.rasn);
549
         sdcas_pad : outpad
550
            generic map (tech => padtech)
551
            port map (sdcasn, sdo.casn);
552
         sddqm_pad : outpadv
553
            generic map (width =>8, tech => padtech)
554
         port map (sddqm, sdo.dqm);
555
 
556
         sdcsn_pad : outpadv generic map (width =>2, tech => padtech)
557
         port map (sdcsn, sdo.sdcsn);
558
      end generate;
559
   end generate;
560
 
561
   --dummy pads for cb signals. used in ft version
562
   cbout <= (others => '0');
563
 
564
   cb_pad : iopadv
565
      generic map(width => 8, tech => padtech, oepol => 0)
566
      port map(cb, cbout, vcc(0), cbin);
567
 
568
 
569
   nosd0 : if (CFG_SDEN = 0) generate     -- no SDRAM controller
570
      --sdclk_pad : outpad
571
      --   generic map (tech => padtech)
572
      --   port map (sdclk, sdclkl);
573
      sdcsn_pad : outpadv
574
         generic map (width =>2, tech => padtech)
575
         port map (sdcsn, sdo3.sdcsn);
576
   end generate;
577
 
578
   memi.writen <= '1';
579
   memi.wrn    <= "1111";
580
   memi.bwidth <= "00";
581
 
582
   mg0 : if (CFG_MCTRL_LEON2 + CFG_SRCTRL) = 0 generate  -- no prom/sram controller
583
      rams_pad : outpadv
584
         generic map (width => 5, tech => padtech)
585
         port map (ramsn, vcc);
586
      roms_pad : outpadv
587
         generic map (width => 2, tech => padtech)
588
         port map (romsn, vcc(1 downto 0));
589
   end generate;
590
 
591
   mgpads : if (CFG_MCTRL_LEON2 + CFG_SRCTRL) /= 0 generate  -- prom/sram controller
592
      addr_pad : outpadv
593
         generic map (width => 28, tech => padtech)
594
         port map (address, memo.address(27 downto 0));
595
      rams_pad : outpadv
596
         generic map (width => 5, tech => padtech)
597
         port map (ramsn, memo.ramsn(4 downto 0));
598
      roms_pad : outpadv
599
         generic map (width => 2, tech => padtech)
600
         port map (romsn, memo.romsn(1 downto 0));
601
      oen_pad  : outpad
602
         generic map (tech => padtech)
603
         port map (oen, memo.oen);
604
      rwen_pad : outpadv
605
         generic map (width => 4, tech => padtech)
606
         port map (rwen, memo.wrn);
607
      roen_pad : outpadv
608
         generic map (width => 5, tech => padtech)
609
         port map (ramoen, memo.ramoen(4 downto 0));
610
      wri_pad  : outpad
611
         generic map (tech => padtech)
612
         port map (writen, memo.writen);
613
      read_pad : outpad
614
         generic map (tech => padtech)
615
         port map (read, memo.read);
616
      iosn_pad : outpad
617
         generic map (tech => padtech)
618
         port map (iosn, memo.iosn);
619
      byteenable_pads : outpadv
620
         generic map (width =>4, tech => padtech)
621
         port map (ramben, memo.mben);
622
 
623
      bdr : for i in 0 to 3 generate
624
         data_pad : iopadvv
625
            generic map (tech => padtech, width => 8, oepol => 1)
626
            port map (
627
         data(31-i*8 downto 24-i*8),
628
         memo.data(31-i*8 downto 24-i*8),
629
         memo.vbdrive(31-i*8 downto 24-i*8),
630
         memi.data(31-i*8 downto 24-i*8));
631
      end generate;
632
   end generate;
633
 
634
----------------------------------------------------------------------
635
---  APB Bridge and various periherals -------------------------------
636
----------------------------------------------------------------------
637
   apb0: apbctrl              -- AHB/APB bridge
638
   generic map(
639
      hindex   => 1,
640
      haddr    => CFG_APBADDR)
641
      -- hmask    => 16#fff#
642
   port map(
643
      rst      => rstn,
644
      clk      => clki,
645
      ahbi     => ahbsi,
646
      ahbo     => ahbso(1),
647
      apbi     => apbi,
648
      apbo     => apbo);
649
 
650
   ua1 : if CFG_UART1_ENABLE /= 0 generate
651
      uart1 : apbuart         -- UART 1
652
         generic map(
653
            pindex      => 1,
654
            paddr       => 1,
655
            --pmask       => 16#fff#,
656
            console     => dbguart,
657
            pirq        => 2,
658
            --parity      => 0,
659
            --flow        => 0,
660
            fifosize    => CFG_UART1_FIFO)
661
         port map(
662
            rst         => rstn,
663
            clk         => clki,
664
            apbi        => apbi,
665
            apbo        => apbo(1),
666
            uarti       => u1i,
667
            uarto       => u1o);
668
      u1i.rxd     <= rxd(1);
669
      u1i.ctsn    <= ctsn(1);
670
      u1i.extclk  <= '0';
671
      txd(1)      <= u1o.txd;
672
      rtsn(1)     <= u1o.rtsn;
673
   end generate;
674
 
675
   ua2 : if CFG_UART2_ENABLE /= 0 generate
676
      uart2 : apbuart           -- UART 2
677
         generic map(
678
            pindex      => 9,
679
            paddr       => 9,
680
            --pmask       => 16#fff#,
681
            console     => dbguart,
682
            pirq        => 3,
683
            --parity      => 0,
684
            --flow        => 0,
685
            fifosize    => CFG_UART2_FIFO)
686
         port map(
687
            rst         => rstn,
688
            clk         => clki,
689
            apbi        => apbi,
690
            apbo        => apbo(9),
691
            uarti       => u2i,
692
            uarto       => u2o);
693
 
694
      u2i.rxd     <= rxd(2);
695
      u2i.ctsn    <= ctsn(2);
696
      u2i.extclk  <= '0';
697
      txd(2)      <= u2o.txd;
698
      rtsn(2)     <= u2o.rtsn;
699
   end generate;
700
 
701
   irqctrl : if CFG_IRQ3_ENABLE /= 0 generate  -- interrupt controller
702
      irqctrl0: irqmp
703
         generic map(
704
            pindex      => 2,
705
            paddr       => 2,
706
            --pmask       => 16#fff#,
707
            ncpu        => CFG_NCPU)
708
         port map(
709
            rst         => rstn,
710
            clk         => clki,
711
            apbi        => apbi,
712
            apbo        => apbo(2),
713
            irqi        => irqo,
714
            irqo        => irqi);
715
   end generate;
716
 
717
   irq3 : if CFG_IRQ3_ENABLE = 0 generate
718
      x : for i in 0 to CFG_NCPU-1 generate
719
         irqi(i).irl <= "0000";
720
      end generate;
721
   end generate;
722
 
723
   gpt : if CFG_GPT_ENABLE /= 0 generate     -- timer unit
724
      timer0: gptimer
725
         generic map(
726
             pindex     => 3,
727
             paddr      => 3,
728
             -- pmask      => 16#fff#,
729
             pirq       => CFG_GPT_IRQ,
730
             sepirq     => CFG_GPT_SEPIRQ,
731
             sbits      => CFG_GPT_SW,
732
             ntimers    => CFG_GPT_NTIM,
733
             nbits      => CFG_GPT_TW)
734
         port map(
735
             rst        => rstn,
736
             clk        => clki,
737
             apbi       => apbi,
738
             apbo       => apbo(3),
739
             gpti       => gpti,
740
             gpto       => open);
741
 
742
      gpti.dhalt  <= dsuo.tstop;
743
      gpti.extclk <= '0';
744
   end generate;
745
 
746
   gpio0 : if CFG_GRGPIO_ENABLE /= 0 generate     -- GPIO unit
747
      grgpio0: grgpio
748
         generic map(
749
             pindex     => 8,
750
             paddr      => 8,
751
             -- pmask      => 16#fff#,
752
             imask      => CFG_GRGPIO_IMASK,
753
             nbits      => 16,
754
             oepol      => 1)
755
         port map(
756
             rst        => rstn,
757
             clk        => clki,
758
             apbi       => apbi,
759
             apbo       => apbo(8),
760
             gpioi      => gpioi,
761
             gpioo      => gpioo);
762
 
763
      pio_pads : for i in 0 to 15 generate
764
        pio_pad : iopad generic map (tech => padtech, oepol => 1)
765
            port map (gpio(i), gpioo.dout(i), gpioo.oen(i), gpioi.din(i));
766
      end generate;
767
   end generate;
768
 
769
-----------------------------------------------------------------------
770
---  PCI   ------------------------------------------------------------
771
-----------------------------------------------------------------------
772
 
773
   pp : if CFG_PCI /= 0 generate
774
      pci_gr0 : if CFG_PCI = 1 generate      -- simple target-only
775
         pci_gr0: pci_target
776
            generic map(
777
               hindex      => CFG_NCPU+CFG_AHB_UART,
778
               -- abits       => 21,
779
               device_id   => CFG_PCIDID,
780
               vendor_id   => CFG_PCIVID,
781
               oepol       => 1)
782
               -- nsync       => 1)
783
            port map(
784
               rst         => rstn,
785
               clk         => clki,
786
               pciclk      => pciclk,
787
               pcii        => pcii,
788
               pcio        => pcio,
789
               ahbmi       => ahbmi,
790
               ahbmo       => ahbmo(CFG_NCPU+CFG_AHB_UART));
791
      end generate;
792
 
793
      pci_mtf0 : if CFG_PCI = 2 generate     -- master/target with fifo
794
         pci0: pci_mtf
795
            generic map(
796
                memtech    => memtech,
797
                hmstndx    => CFG_NCPU+CFG_AHB_UART,
798
                dmamst     => NAHBMST,
799
                --readpref   => 0,
800
                --abits      => 21,
801
                --dmaabits   => 26,
802
                fifodepth  => log2(CFG_PCIDEPTH),
803
                device_id  => CFG_PCIDID,
804
                vendor_id  => CFG_PCIVID,
805
                --master     => 1;
806
                hslvndx    => 4,
807
                pindex     => 6,
808
                paddr      => 6,
809
                --pmask      => 16#fff#,
810
                haddr      => 16#E00#,
811
                --hmask      => 16#F00#,
812
                ioaddr     => 16#400#,
813
                nsync      => 2,
814
                oepol      => 1)
815
             port map(
816
                rst        => rstn,
817
                clk        => clki,
818
                pciclk     => pciclk,
819
                pcii       => pcii,
820
                pcio       => pcio,
821
                apbi       => apbi,
822
                apbo       => apbo(6),
823
                ahbmi      => ahbmi,
824
                ahbmo      => ahbmo(CFG_NCPU+CFG_AHB_UART),
825
                ahbsi      => ahbsi,
826
                ahbso      => ahbso(4));
827
      end generate;
828
 
829
      pci_mtf1 : if CFG_PCI = 3 generate  -- master/target with fifo and DMA
830
         dma: pcidma
831
            generic map(
832
               memtech     => memtech,
833
               dmstndx     => CFG_NCPU+CFG_AHB_UART+1,
834
               dapbndx     => 5,
835
               dapbaddr    => 5,
836
               --dapbmask    => 16#fff#,
837
               blength     => blength,
838
               mstndx      => CFG_NCPU+CFG_AHB_UART,
839
               --abits       => 21,
840
               --dmaabits    => 26,
841
               fifodepth   => log2(fifodepth),
842
               device_id   => CFG_PCIDID,
843
               vendor_id   => CFG_PCIVID,
844
               slvndx      => 4,
845
               apbndx      => 4,
846
               apbaddr     => 4,
847
               --apbmask     => 16#fff#,
848
               haddr       => 16#E00#,
849
               --hmask       => 16#F00#,
850
               ioaddr      => 16#800#,
851
               nsync       => 1)
852
            port map(
853
               rst         => rstn,
854
               clk         => clki,
855
               pciclk      => pciclk,
856
               pcii        => pcii,
857
               pcio        => pcio,
858
               dapbo       => apbo(5),
859
               dahbmo      => ahbmo(CFG_NCPU+CFG_AHB_UART+1),
860
               apbi        => apbi,
861
               apbo        => apbo(4),
862
               ahbmi       => ahbmi,
863
               ahbmo       => ahbmo(CFG_NCPU+CFG_AHB_UART),
864
               ahbsi       => ahbsi,
865
               ahbso       => ahbso(4));
866
      end generate;
867
 
868
      pci_trc0 : if CFG_PCITBUFEN /= 0 generate  -- PCI trace buffer
869
         pt0: pcitrace
870
            generic map(
871
               depth       => (6 + log2(CFG_PCITBUF/256)),
872
               --iregs       => 1,
873
               memtech     => memtech,
874
               pindex      => 11,
875
               paddr       => 16#100#,
876
               pmask       => 16#f00#)
877
            port map(
878
               rst         => rstn,
879
               clk         => clki,
880
               pciclk      => pciclk,
881
               pcii        => pcii,
882
               apbi        => apbi,
883
               apbo        => apbo(11));
884
      end generate;
885
 
886
      pcia0 : if CFG_PCI_ARB = 1 generate   -- PCI arbiter
887
         pciarb0: pciarb
888
            generic map(
889
               pindex      => 10,
890
               paddr       => 10,
891
               --pmask       => 16#FFF#,
892
               nb_agents   => 8,
893
               apb_en      => CFG_PCI_ARBAPB)
894
            port map(
895
               clk         => pciclk,
896
               rst_n       => pcii.rst,
897
               req_n       => pci_arb_req_n,
898
               frame_n     => pcii.frame,
899
               gnt_n       => pci_arb_gnt_n,
900
               pclk        => clki,
901
               prst_n      => rstn,
902
               apbi        => apbi,
903
               apbo        => apbo(10));
904
 
905
         --pgnt_pad : outpadv
906
         --   generic map (tech => padtech, width => 8)
907
         --   port map (pci_arb_gnt, pci_arb_gnt_n);
908
         preq_pad : inpadv
909
            generic map (tech => padtech, width => 8)
910
            port map (pci_arb_req, pci_arb_req_n);
911
      end generate;
912
 
913
      pcipads0 : pcipads      -- PCI pads
914
         generic map (
915
            padtech     => padtech,
916
            oepol       => 1)
917
         port map (
918
            pci_rst     => pci_rst,
919
            pci_gnt     => pci_gnt,
920
            pci_idsel   => pci_idsel,
921
            pci_lock    => pci_lock,
922
            pci_ad      => pci_ad(31 downto 0),
923
            pci_cbe     => pci_cbe(3 downto 0),
924
            pci_frame   => pci_frame,
925
            pci_irdy    => pci_irdy,
926
            pci_trdy    => pci_trdy,
927
            pci_devsel  => pci_devsel,
928
            pci_stop    => pci_stop,
929
            pci_perr    => pci_perr,
930
            pci_par     => pci_par,
931
            pci_req     => pci_req,
932
            pci_serr    => pci_serr,
933
            pci_host    => pci_host,
934
            pci_66      => pci_66,
935
            pcii        => pcii,
936
            pcio        => pcio);
937
   end generate;
938
 
939
-----------------------------------------------------------------------
940
---  AHB RAM ----------------------------------------------------------
941
-----------------------------------------------------------------------
942
   ocram : if CFG_AHBRAMEN = 1 generate
943
      ahbram0: ahbram
944
         generic map(
945
            hindex   => 7,
946
            haddr    => CFG_AHBRADDR,
947
            hmask    => 16#fff#,
948
            tech     => CFG_MEMTECH,
949
            kbytes   => CFG_AHBRSZ)
950
         port map(
951
            rst      => rstn,
952
            clk      => clki,
953
            ahbsi    => ahbsi,
954
            ahbso    => ahbso(7));
955
   end generate;
956
 
957
-----------------------------------------------------------------------
958
---  Boot message  ----------------------------------------------------
959
-----------------------------------------------------------------------
960
 
961
-- pragma translate_off
962
   x : report_version
963
      generic map (
964
         msg1 => "LEON3 GR-CPCI-AX Demonstration design",
965
         msg2 => "GRLIB Version " & tost(LIBVHDL_VERSION/1000) & "." & tost((LIBVHDL_VERSION mod 1000)/100)
966
           & "." & tost(LIBVHDL_VERSION mod 100) & ", build " & tost(LIBVHDL_BUILD),
967
         msg3 => "Target technology: " & tech_table(fabtech) &
968
                 ",  memory library: " & tech_table(memtech),
969
         mdel => 1);
970
-- pragma translate_on
971
end;

powered by: WebSVN 2.1.0

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