OSDN Git Service

0ddf5357b7434c104a5a6e56e3d40f80442c026c
[fpga-leon-mjpeg/leon-mjpeg.git] / grlib-gpl-1.0.22-b4095 / designs / leon3-gr-xc3s-1500-mjpeg / leon3mp.vhd
1 -----------------------------------------------------------------------------
2 --  LEON3 Demonstration design
3 --  Copyright (C) 2004 Jiri Gaisler, Gaisler Research
4 ------------------------------------------------------------------------------
5 --  This file is a part of the GRLIB VHDL IP LIBRARY
6 --  Copyright (C) 2003 - 2008, Gaisler Research
7 --  Copyright (C) 2008 - 2010, Aeroflex Gaisler
8 --
9 --  This program is free software; you can redistribute it and/or modify
10 --  it under the terms of the GNU General Public License as published by
11 --  the Free Software Foundation; either version 2 of the License, or
12 --  (at your option) any later version.
13 --
14 --  This program is distributed in the hope that it will be useful,
15 --  but WITHOUT ANY WARRANTY; without even the implied warranty of
16 --  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 --  GNU General Public License for more details.
18 --
19 --  You should have received a copy of the GNU General Public License
20 --  along with this program; if not, write to the Free Software
21 --  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
22 ------------------------------------------------------------------------------
23
24
25 library ieee;
26 use ieee.std_logic_1164.all;
27 library grlib, techmap;
28 use grlib.amba.all;
29 use grlib.stdlib.all;
30 use techmap.gencomp.all;
31 library gaisler;
32 use gaisler.memctrl.all;
33 use gaisler.leon3.all;
34 use gaisler.uart.all;
35 use gaisler.misc.all;
36 use gaisler.can.all;
37 use gaisler.net.all;
38 use gaisler.jtag.all;
39 use gaisler.spacewire.all;
40 use gaisler.grusb.all;
41 use gaisler.ata.all;
42
43 library esa;
44 use esa.memoryctrl.all;
45
46 library kuri;
47 use kuri.mjpeg.all;
48
49 use work.config.all;
50
51 entity leon3mp is
52   generic (
53     fabtech       : integer := CFG_FABTECH;
54     memtech       : integer := CFG_MEMTECH;
55     padtech       : integer := CFG_PADTECH;
56     clktech       : integer := CFG_CLKTECH;
57     disas         : integer := CFG_DISAS;       -- Enable disassembly to console
58     dbguart       : integer := CFG_DUART;       -- Print UART on console
59     pclow         : integer := CFG_PCLOW
60   );
61   port (
62     resetn        : in  std_ulogic;
63     clk           : in  std_ulogic;     -- 50 MHz main clock
64     clk3          : in  std_ulogic;     -- 25 MHz ethernet clock
65     pllref        : in  std_ulogic; 
66     errorn        : out std_ulogic;
67     wdogn         : out std_ulogic;
68     address       : out std_logic_vector(27 downto 0);
69     data          : inout std_logic_vector(31 downto 0);
70     ramsn         : out std_logic_vector (4 downto 0);
71     ramoen        : out std_logic_vector (4 downto 0);
72     rwen          : out std_logic_vector (3 downto 0);
73     oen           : out std_ulogic;
74     writen        : out std_ulogic;
75     read          : out std_ulogic;
76     iosn          : out std_ulogic;
77     bexcn         : in  std_ulogic;                     -- DSU rx data
78     brdyn         : in  std_ulogic;                     -- DSU rx data
79     romsn         : out std_logic_vector (1 downto 0);
80     sdclk         : out std_ulogic;
81     sdcsn         : out std_logic_vector (1 downto 0);    -- sdram chip select
82     sdwen         : out std_ulogic;                       -- sdram write enable
83     sdrasn        : out std_ulogic;                       -- sdram ras
84     sdcasn        : out std_ulogic;                       -- sdram cas
85     sddqm         : out std_logic_vector (3 downto 0);    -- sdram dqm
86
87     dsuen         : in std_ulogic;
88     dsubre        : in std_ulogic;
89     dsuact        : out std_ulogic;
90
91     txd1          : out std_ulogic;                     -- UART1 tx data
92     rxd1          : in  std_ulogic;                     -- UART1 rx data
93     ctsn1         : in  std_ulogic;                     -- UART1 rx data
94     rtsn1         : out std_ulogic;                     -- UART1 rx data
95     txd2          : out std_ulogic;                     -- UART2 tx data
96     rxd2          : in  std_ulogic;                     -- UART2 rx data
97     ctsn2         : in  std_ulogic;                     -- UART1 rx data
98     rtsn2         : out std_ulogic;                     -- UART1 rx data
99
100     pio           : inout std_logic_vector(17 downto 0);        -- I/O port
101
102     emdio         : inout std_logic;            -- ethernet PHY interface
103     etx_clk       : in std_ulogic;
104     erx_clk       : in std_ulogic;
105     erxd          : in std_logic_vector(3 downto 0);   
106     erx_dv        : in std_ulogic; 
107     erx_er        : in std_ulogic; 
108     erx_col       : in std_ulogic;
109     erx_crs       : in std_ulogic;
110     emdint        : in std_ulogic;
111     etxd          : out std_logic_vector(3 downto 0);   
112     etx_en        : out std_ulogic; 
113     etx_er        : out std_ulogic; 
114     emdc          : out std_ulogic;
115
116     ps2clk        : inout std_logic_vector(1 downto 0);
117     ps2data       : inout std_logic_vector(1 downto 0);
118
119     vid_clock     : out std_ulogic;
120     vid_blankn    : out std_ulogic;
121     vid_syncn     : out std_ulogic;
122     vid_hsync     : out std_ulogic;
123     vid_vsync     : out std_ulogic;
124     vid_r         : out std_logic_vector(7 downto 0);
125     vid_g         : out std_logic_vector(7 downto 0);
126     vid_b         : out std_logic_vector(7 downto 0);
127
128     spw_clk       : in  std_ulogic;
129     spw_rxdp      : in  std_logic_vector(0 to 2);
130     spw_rxdn      : in  std_logic_vector(0 to 2);
131     spw_rxsp      : in  std_logic_vector(0 to 2);
132     spw_rxsn      : in  std_logic_vector(0 to 2);
133     spw_txdp      : out std_logic_vector(0 to 2);
134     spw_txdn      : out std_logic_vector(0 to 2);
135     spw_txsp      : out std_logic_vector(0 to 2);
136     spw_txsn      : out std_logic_vector(0 to 2);
137
138     usb_clkout    : in std_ulogic;
139     usb_d         : inout std_logic_vector(15 downto 0);
140     usb_linestate : in std_logic_vector(1 downto 0);
141     usb_opmode    : out std_logic_vector(1 downto 0);
142     usb_reset     : out std_ulogic;
143     usb_rxactive  : in std_ulogic;
144     usb_rxerror   : in std_ulogic;
145     usb_rxvalid   : in std_ulogic;
146     usb_suspend   : out std_ulogic;
147     usb_termsel   : out std_ulogic;
148     usb_txready   : in std_ulogic;
149     usb_txvalid   : out std_ulogic;
150     usb_validh    : inout std_ulogic;
151     usb_xcvrsel   : out std_ulogic;
152     usb_vbus      : in std_ulogic;
153
154     ata_rstn  : out std_logic; 
155     ata_data  : inout std_logic_vector(15 downto 0);
156     ata_da    : out std_logic_vector(2 downto 0);  
157     ata_cs0   : out std_logic;
158     ata_cs1   : out std_logic;
159     ata_dior  : out std_logic;
160     ata_diow  : out std_logic;
161     ata_iordy : in std_logic;
162     ata_intrq : in std_logic;
163     ata_dmarq : in std_logic; 
164     ata_dmack : out std_logic;
165     --ata_dasp  : in std_logic
166     ata_csel  : out std_logic
167
168         );
169 end;
170
171 architecture rtl of leon3mp is
172
173 attribute syn_netlist_hierarchy : boolean;
174 attribute syn_netlist_hierarchy of rtl : architecture is false;
175
176 constant blength : integer := 12;
177 constant fifodepth : integer := 8;
178 constant maxahbm : integer := CFG_NCPU+CFG_AHB_UART+CFG_GRETH+
179         CFG_AHB_JTAG+CFG_SPW_NUM*CFG_SPW_EN+CFG_GRUSB_DCL+CFG_SVGA_ENABLE+
180         CFG_ATA+CFG_GRUSBDC+1;
181
182 signal vcc, gnd   : std_logic_vector(4 downto 0);
183 signal memi  : memory_in_type;
184 signal memo  : memory_out_type;
185 signal wpo   : wprot_out_type;
186 signal sdi   : sdctrl_in_type;
187 signal sdo   : sdram_out_type;
188 signal sdo2, sdo3 : sdctrl_out_type;
189
190 signal apbi  : apb_slv_in_type;
191 signal apbo  : apb_slv_out_vector := (others => apb_none);
192 signal ahbsi : ahb_slv_in_type;
193 signal ahbso : ahb_slv_out_vector := (others => ahbs_none);
194 signal ahbmi : ahb_mst_in_type;
195 signal ahbmo : ahb_mst_out_vector := (others => ahbm_none);
196
197 signal clkm, rstn, rstraw, sdclkl : std_ulogic;
198 signal cgi, cgi2   : clkgen_in_type;
199 signal cgo, cgo2   : clkgen_out_type;
200 signal u1i, u2i, dui : uart_in_type;
201 signal u1o, u2o, duo : uart_out_type;
202
203 signal irqi : irq_in_vector(0 to CFG_NCPU-1);
204 signal irqo : irq_out_vector(0 to CFG_NCPU-1);
205
206 signal dbgi : l3_debug_in_vector(0 to CFG_NCPU-1);
207 signal dbgo : l3_debug_out_vector(0 to CFG_NCPU-1);
208
209 signal dsui : dsu_in_type;
210 signal dsuo : dsu_out_type; 
211
212 signal ethi, ethi1, ethi2 : eth_in_type;
213 signal etho, etho1, etho2 : eth_out_type;
214
215 signal gpti : gptimer_in_type;
216 signal gpto : gptimer_out_type;
217
218 signal gpioi : gpio_in_type;
219 signal gpioo : gpio_out_type;
220
221 signal can_lrx, can_ltx   : std_logic_vector(0 to 7);
222
223 signal lclk, rst, ndsuact, wdogl : std_ulogic;
224 signal tck, tckn, tms, tdi, tdo : std_ulogic;
225
226 signal ethclk : std_ulogic;
227
228 signal kbdi  : ps2_in_type;
229 signal kbdo  : ps2_out_type;
230 signal moui  : ps2_in_type;
231 signal mouo  : ps2_out_type;
232 signal vgao  : apbvga_out_type;
233
234 constant BOARD_FREQ : integer := 50000;   -- input frequency in KHz
235 constant CPU_FREQ : integer := BOARD_FREQ * CFG_CLKMUL / CFG_CLKDIV;  -- cpu frequency in KHz
236 constant IOAEN : integer := CFG_CAN + CFG_ATA + CFG_GRUSBDC;
237
238 signal spwi : grspw_in_type_vector(0 to 2);
239 signal spwo : grspw_out_type_vector(0 to 2);
240 signal dtmp    : std_logic_vector(2 downto 0);
241 signal stmp    : std_logic_vector(2 downto 0);
242 signal spw_clkl   : std_ulogic;
243 signal spw_clkln  : std_ulogic;
244 signal rxclko     : std_logic_vector(CFG_SPW_NUM-1 downto 0);
245 signal stati : ahbstat_in_type;
246
247 signal uclk : std_ulogic;
248 signal usbi : grusb_in_type;
249 signal usbo : grusb_out_type;
250
251 signal idei : ata_in_type;
252 signal ideo : ata_out_type;
253
254 constant SPW_LOOP_BACK : integer := 0;
255
256 signal dac_clk, video_clk, clk50 : std_logic;  -- signals to vga_clkgen.
257 signal clk_sel : std_logic_vector(1 downto 0);
258                          
259 attribute keep : boolean;
260 attribute syn_keep : boolean;
261 attribute syn_preserve : boolean;
262 attribute syn_keep of clk50 : signal is true;
263 attribute syn_preserve of clk50 : signal is true;
264 attribute keep of clk50 : signal is true;
265 attribute syn_keep of video_clk : signal is true;
266 attribute syn_preserve of video_clk : signal is true;
267 attribute keep of video_clk : signal is true;
268
269 begin
270
271 ----------------------------------------------------------------------
272 ---  Reset and Clock generation  -------------------------------------
273 ----------------------------------------------------------------------
274   
275   vcc <= (others => '1'); gnd <= (others => '0');
276   cgi.pllctrl <= "00"; cgi.pllrst <= rstraw;
277
278   pllref_pad : clkpad generic map (tech => padtech) port map (pllref, cgi.pllref); 
279   ethclk_pad : inpad generic map (tech => padtech) port map(clk3, ethclk);
280   clk_pad : clkpad generic map (tech => padtech) port map (clk, lclk); 
281   clkgen0 : clkgen              -- clock generator
282     generic map (clktech, CFG_CLKMUL, CFG_CLKDIV, CFG_MCTRL_SDEN,
283         CFG_CLK_NOFB, 0, 0, 0, BOARD_FREQ)
284     port map (lclk, lclk, clkm, open, open, sdclkl, open, cgi, cgo, open, clk50);
285
286   sdclk_pad : outpad generic map (tech => padtech, slew => 1, strength => 24) 
287         port map (sdclk, sdclkl);
288
289   resetn_pad : inpad generic map (tech => padtech) port map (resetn, rst); 
290   rst0 : rstgen                 -- reset generator
291   port map (rst, clkm, cgo.clklock, rstn, rstraw);
292
293 ----------------------------------------------------------------------
294 ---  AHB CONTROLLER --------------------------------------------------
295 ----------------------------------------------------------------------
296
297   ahb0 : ahbctrl                -- AHB arbiter/multiplexer
298   generic map (defmast => CFG_DEFMST, split => CFG_SPLIT, 
299         rrobin => CFG_RROBIN, ioaddr => CFG_AHBIO,
300         ioen => IOAEN, nahbm => maxahbm, nahbs => 8)
301   port map (rstn, clkm, ahbmi, ahbmo, ahbsi, ahbso);
302
303 ----------------------------------------------------------------------
304 ---  LEON3 processor and DSU -----------------------------------------
305 ----------------------------------------------------------------------
306
307   l3 : if CFG_LEON3 = 1 generate
308     cpu : for i in 0 to CFG_NCPU-1 generate
309       u0 : leon3s                       -- LEON3 processor      
310       generic map (i, fabtech, memtech, CFG_NWIN, CFG_DSU, CFG_FPU, CFG_V8, 
311         0, CFG_MAC, pclow, 0, CFG_NWP, CFG_ICEN, CFG_IREPL, CFG_ISETS, CFG_ILINE, 
312         CFG_ISETSZ, CFG_ILOCK, CFG_DCEN, CFG_DREPL, CFG_DSETS, CFG_DLINE, CFG_DSETSZ,
313         CFG_DLOCK, CFG_DSNOOP, CFG_ILRAMEN, CFG_ILRAMSZ, CFG_ILRAMADDR, CFG_DLRAMEN,
314         CFG_DLRAMSZ, CFG_DLRAMADDR, CFG_MMUEN, CFG_ITLBNUM, CFG_DTLBNUM, CFG_TLB_TYPE, CFG_TLB_REP, 
315         CFG_LDDEL, disas, CFG_ITBSZ, CFG_PWD, CFG_SVT, CFG_RSTADDR, CFG_NCPU-1, 0, 0,
316         CFG_MMU_PAGE, CFG_BP)
317       port map (clkm, rstn, ahbmi, ahbmo(i), ahbsi, ahbso, 
318                 irqi(i), irqo(i), dbgi(i), dbgo(i));
319     end generate;
320     errorn_pad : odpad generic map (tech => padtech) port map (errorn, dbgo(0).error);
321     
322     dsugen : if CFG_DSU = 1 generate
323       dsu0 : dsu3                       -- LEON3 Debug Support Unit
324       generic map (hindex => 2, haddr => 16#900#, hmask => 16#F00#, 
325          ncpu => CFG_NCPU, tbits => 30, tech => memtech, irq => 0, kbytes => CFG_ATBSZ)
326       port map (rstn, clkm, ahbmi, ahbsi, ahbso(2), dbgo, dbgi, dsui, dsuo);
327       dsuen_pad : inpad generic map (tech => padtech) port map (dsuen, dsui.enable); 
328       dsubre_pad : inpad generic map (tech => padtech) port map (dsubre, dsui.break); 
329       dsuact_pad : outpad generic map (tech => padtech) port map (dsuact, ndsuact);
330       ndsuact <= not dsuo.active;
331     end generate;
332   end generate;
333   nodsu : if CFG_DSU = 0 generate 
334     dsuo.tstop <= '0'; dsuo.active <= '0';
335   end generate;
336
337   dcomgen : if CFG_AHB_UART = 1 generate
338     dcom0: ahbuart              -- Debug UART
339     generic map (hindex => CFG_NCPU, pindex => 7, paddr => 7)
340     port map (rstn, clkm, dui, duo, apbi, apbo(7), ahbmi, ahbmo(CFG_NCPU));
341     dsurx_pad : inpad generic map (tech => padtech) port map (rxd2, dui.rxd); 
342     dsutx_pad : outpad generic map (tech => padtech) port map (txd2, duo.txd);
343   end generate;
344   nouah : if CFG_AHB_UART = 0 generate apbo(7) <= apb_none; end generate;
345
346   ahbjtaggen0 :if CFG_AHB_JTAG = 1 generate
347     ahbjtag0 : ahbjtag generic map(tech => fabtech, hindex => CFG_NCPU+CFG_AHB_UART)
348       port map(rstn, clkm, tck, tms, tdi, tdo, ahbmi, ahbmo(CFG_NCPU+CFG_AHB_UART),
349                open, open, open, open, open, open, open, gnd(0));
350   end generate;
351   
352 ----------------------------------------------------------------------
353 ---  Memory controllers ----------------------------------------------
354 ----------------------------------------------------------------------
355
356   memi.writen <= '1'; memi.wrn <= "1111"; memi.bwidth <= "00";
357   brdyn_pad : inpad generic map (tech => padtech) port map (brdyn, memi.brdyn);
358   bexcn_pad : inpad generic map (tech => padtech) port map (bexcn, memi.bexcn);
359
360   mctrl0 : mctrl generic map (hindex => 0, pindex => 0,
361         paddr => 0, srbanks => 2, ram8 => CFG_MCTRL_RAM8BIT, 
362         ram16 => CFG_MCTRL_RAM16BIT, sden => CFG_MCTRL_SDEN, 
363         invclk => CFG_CLK_NOFB, sepbus => CFG_MCTRL_SEPBUS,
364         pageburst => CFG_MCTRL_PAGE)
365   port map (rstn, clkm, memi, memo, ahbsi, ahbso(0), apbi, apbo(0), wpo, sdo);
366   sdpads : if CFG_MCTRL_SDEN = 1 generate               -- SDRAM controller
367       sdwen_pad : outpad generic map (tech => padtech) 
368            port map (sdwen, sdo.sdwen);
369       sdras_pad : outpad generic map (tech => padtech) 
370            port map (sdrasn, sdo.rasn);
371       sdcas_pad : outpad generic map (tech => padtech) 
372            port map (sdcasn, sdo.casn);
373       sddqm_pad : outpadv generic map (width =>4, tech => padtech) 
374            port map (sddqm, sdo.dqm(3 downto 0));
375   end generate;
376   sdcsn_pad : outpadv generic map (width =>2, tech => padtech) 
377            port map (sdcsn, sdo.sdcsn); 
378
379   addr_pad : outpadv generic map (width => 28, tech => padtech) 
380         port map (address, memo.address(27 downto 0)); 
381   rams_pad : outpadv generic map (width => 5, tech => padtech) 
382         port map (ramsn, memo.ramsn(4 downto 0)); 
383   roms_pad : outpadv generic map (width => 2, tech => padtech) 
384         port map (romsn, memo.romsn(1 downto 0)); 
385   oen_pad  : outpad generic map (tech => padtech) 
386         port map (oen, memo.oen);
387   rwen_pad : outpadv generic map (width => 4, tech => padtech) 
388         port map (rwen, memo.wrn); 
389   roen_pad : outpadv generic map (width => 5, tech => padtech) 
390         port map (ramoen, memo.ramoen(4 downto 0));
391   wri_pad  : outpad generic map (tech => padtech) 
392         port map (writen, memo.writen);
393   read_pad : outpad generic map (tech => padtech) 
394         port map (read, memo.read); 
395   iosn_pad : outpad generic map (tech => padtech) 
396         port map (iosn, memo.iosn);
397   bdr : for i in 0 to 3 generate
398       data_pad : iopadv generic map (tech => padtech, width => 8)
399       port map (data(31-i*8 downto 24-i*8), memo.data(31-i*8 downto 24-i*8),
400         memo.bdrive(i), memi.data(31-i*8 downto 24-i*8));
401   end generate;
402
403 ----------------------------------------------------------------------
404 ---  APB Bridge and various periherals -------------------------------
405 ----------------------------------------------------------------------
406
407   bpromgen : if CFG_AHBROMEN /= 0 generate
408     brom : entity work.ahbrom
409       generic map (hindex => 6, haddr => CFG_AHBRODDR, pipe => CFG_AHBROPIP)
410       port map ( rstn, clkm, ahbsi, ahbso(6));
411   end generate;
412
413 ----------------------------------------------------------------------
414 ---  APB Bridge and various periherals -------------------------------
415 ----------------------------------------------------------------------
416
417   apb0 : apbctrl                                -- AHB/APB bridge
418   generic map (hindex => 1, haddr => CFG_APBADDR, nslaves => 16)
419   port map (rstn, clkm, ahbsi, ahbso(1), apbi, apbo );
420
421   ua1 : if CFG_UART1_ENABLE /= 0 generate
422     uart1 : apbuart                     -- UART 1
423     generic map (pindex => 1, paddr => 1,  pirq => 2, console => dbguart,
424         fifosize => CFG_UART1_FIFO)
425     port map (rstn, clkm, apbi, apbo(1), u1i, u1o);
426     u1i.extclk <= '0';
427     rxd1_pad : inpad generic map (tech => padtech) port map (rxd1, u1i.rxd); 
428     txd1_pad : outpad generic map (tech => padtech) port map (txd1, u1o.txd);
429     cts1_pad : inpad generic map (tech => padtech) port map (ctsn1, u1i.ctsn); 
430     rts1_pad : outpad generic map (tech => padtech) port map (rtsn1, u1o.rtsn);
431   end generate;
432   noua0 : if CFG_UART1_ENABLE = 0 generate apbo(1) <= apb_none; end generate;
433
434   ua2 : if CFG_UART2_ENABLE /= 0 generate
435     uart2 : apbuart                     -- UART 2
436     generic map (pindex => 9, paddr => 9,  pirq => 3, fifosize => CFG_UART2_FIFO)
437     port map (rstn, clkm, apbi, apbo(9), u2i, u2o);
438     u2i.extclk <= '0';
439     rxd2_pad : inpad generic map (tech => padtech) port map (rxd2, u2i.rxd); 
440     txd2_pad : outpad generic map (tech => padtech) port map (txd2, u2o.txd);
441     cts2_pad : inpad generic map (tech => padtech) port map (ctsn2, u2i.ctsn); 
442     rts2_pad : outpad generic map (tech => padtech) port map (rtsn2, u2o.rtsn);
443   end generate;
444   noua1 : if CFG_UART2_ENABLE = 0 generate 
445     apbo(9) <= apb_none;  rtsn2 <= '0';
446   end generate;
447
448   irqctrl : if CFG_IRQ3_ENABLE /= 0 generate
449     irqctrl0 : irqmp                    -- interrupt controller
450     generic map (pindex => 2, paddr => 2, ncpu => CFG_NCPU)
451     port map (rstn, clkm, apbi, apbo(2), irqo, irqi);
452   end generate;
453   irq3 : if CFG_IRQ3_ENABLE = 0 generate
454     x : for i in 0 to CFG_NCPU-1 generate
455       irqi(i).irl <= "0000";
456     end generate;
457     apbo(2) <= apb_none;
458   end generate;
459
460   gpt : if CFG_GPT_ENABLE /= 0 generate
461     timer0 : gptimer                    -- timer unit
462     generic map (pindex => 3, paddr => 3, pirq => CFG_GPT_IRQ, 
463         sepirq => CFG_GPT_SEPIRQ, sbits => CFG_GPT_SW, ntimers => CFG_GPT_NTIM, 
464         nbits => CFG_GPT_TW, wdog => CFG_GPT_WDOGEN*CFG_GPT_WDOG)
465     port map (rstn, clkm, apbi, apbo(3), gpti, gpto);
466     gpti.dhalt <= dsuo.tstop; gpti.extclk <= '0';
467   end generate;
468   wden : if CFG_GPT_WDOGEN /= 0 generate
469     wdogl <= gpto.wdogn or not rstn;
470     wdogn_pad : odpad generic map (tech => padtech) port map (wdogn, wdogl);
471   end generate;
472   wddis : if CFG_GPT_WDOGEN = 0 generate
473     wdogn_pad : odpad generic map (tech => padtech) port map (wdogn, vcc(0));
474   end generate;
475
476   nogpt : if CFG_GPT_ENABLE = 0 generate apbo(3) <= apb_none; end generate;
477
478   kbd : if CFG_KBD_ENABLE /= 0 generate
479     ps21 : apbps2 generic map(pindex => 4, paddr => 4, pirq => 4)
480       port map(rstn, clkm, apbi, apbo(4), moui, mouo);
481     ps20 : apbps2 generic map(pindex => 5, paddr => 5, pirq => 5)
482       port map(rstn, clkm, apbi, apbo(5), kbdi, kbdo);
483   end generate;
484   nokbd : if CFG_KBD_ENABLE = 0 generate 
485         apbo(4) <= apb_none; mouo <= ps2o_none;
486         apbo(5) <= apb_none; kbdo <= ps2o_none;
487   end generate;
488   kbdclk_pad : iopad generic map (tech => padtech)
489       port map (ps2clk(0),kbdo.ps2_clk_o, kbdo.ps2_clk_oe, kbdi.ps2_clk_i);
490   kbdata_pad : iopad generic map (tech => padtech)
491         port map (ps2data(0), kbdo.ps2_data_o, kbdo.ps2_data_oe, kbdi.ps2_data_i);
492   mouclk_pad : iopad generic map (tech => padtech)
493       port map (ps2clk(1),mouo.ps2_clk_o, mouo.ps2_clk_oe, moui.ps2_clk_i);
494   mouata_pad : iopad generic map (tech => padtech)
495         port map (ps2data(1), mouo.ps2_data_o, mouo.ps2_data_oe, moui.ps2_data_i);
496
497   vga : if CFG_VGA_ENABLE /= 0 generate
498     vga0 : apbvga generic map(memtech => memtech, pindex => 6, paddr => 6)
499        port map(rstn, clkm, ethclk, apbi, apbo(6), vgao);
500     video_clock_pad : outpad generic map ( tech => padtech)
501         port map (vid_clock, video_clk);
502     video_clk <= not ethclk;
503    end generate;
504   
505   svga : if CFG_SVGA_ENABLE /= 0 generate
506     svga0 : svgactrl generic map(memtech => memtech, pindex => 6, paddr => 6,
507         hindex => CFG_NCPU+CFG_AHB_UART+CFG_AHB_JTAG, 
508         clk0 => 40000, clk1 => 1000000000/((BOARD_FREQ * CFG_CLKMUL)/CFG_CLKDIV),
509         clk2 => 20000, clk3 => 15385, burstlen => 6)
510        port map(rstn, clkm, video_clk, apbi, apbo(6), vgao, ahbmi, 
511                 ahbmo(CFG_NCPU+CFG_AHB_UART+CFG_AHB_JTAG), clk_sel);
512     vgaclk0 : entity work.vga_clkgen
513        port map (rstn, clk_sel, ethclk, clkm, clk50, video_clk);
514     dac_clk <= not video_clk;
515     video_clock_pad : outpad generic map ( tech => padtech)
516         port map (vid_clock, dac_clk);
517   end generate;
518
519   novga : if (CFG_VGA_ENABLE = 0 and CFG_SVGA_ENABLE = 0) generate
520     apbo(6) <= apb_none; vgao <= vgao_none;
521     video_clk <= not clkm;
522     video_clock_pad : outpad generic map ( tech => padtech)
523         port map (vid_clock, video_clk);
524   end generate;
525   
526   blank_pad : outpad generic map (tech => padtech)
527         port map (vid_blankn, vgao.blank);
528   comp_sync_pad : outpad generic map (tech => padtech)
529         port map (vid_syncn, vgao.comp_sync);
530   vert_sync_pad : outpad generic map (tech => padtech)
531         port map (vid_vsync, vgao.vsync);
532   horiz_sync_pad : outpad generic map (tech => padtech)
533         port map (vid_hsync, vgao.hsync);
534   video_out_r_pad : outpadv generic map (width => 8, tech => padtech)
535         port map (vid_r, vgao.video_out_r);
536   video_out_g_pad : outpadv generic map (width => 8, tech => padtech)
537         port map (vid_g, vgao.video_out_g);
538   video_out_b_pad : outpadv generic map (width => 8, tech => padtech)
539         port map (vid_b, vgao.video_out_b); 
540
541   gpio0 : if CFG_GRGPIO_ENABLE /= 0 generate     -- GPIO unit
542     grgpio0: grgpio
543     generic map(pindex => 8, paddr => 8, imask => CFG_GRGPIO_IMASK, nbits => 18)
544     port map(rst => rstn, clk => clkm, apbi => apbi, apbo => apbo(8),
545     gpioi => gpioi, gpioo => gpioo);
546     p0 : if (CFG_CAN = 0) or (CFG_CAN_NUM = 1) generate
547       pio_pads : for i in 1 to 2 generate
548         pio_pad : iopad generic map (tech => padtech)
549             port map (pio(i), gpioo.dout(i), gpioo.oen(i), gpioi.din(i));
550       end generate;
551     end generate;
552     p1 : if (CFG_CAN = 0) generate
553       pio_pads : for i in 4 to 5 generate
554         pio_pad : iopad generic map (tech => padtech)
555             port map (pio(i), gpioo.dout(i), gpioo.oen(i), gpioi.din(i));
556       end generate;
557     end generate;
558     pio_pad0 : iopad generic map (tech => padtech)
559             port map (pio(0), gpioo.dout(0), gpioo.oen(0), gpioi.din(0));
560     pio_pad1 : iopad generic map (tech => padtech)
561             port map (pio(3), gpioo.dout(3), gpioo.oen(3), gpioi.din(3));
562     pio_pads : for i in 6 to 17 generate
563         pio_pad : iopad generic map (tech => padtech)
564             port map (pio(i), gpioo.dout(i), gpioo.oen(i), gpioi.din(i));
565     end generate;
566
567   end generate;
568
569   ahbs : if CFG_AHBSTAT = 1 generate    -- AHB status register
570     ahbstat0 : ahbstat generic map (pindex => 15, paddr => 15, pirq => 7,
571         nftslv => CFG_AHBSTATN)
572       port map (rstn, clkm, ahbmi, ahbsi, stati, apbi, apbo(15));
573   end generate;
574
575 -----------------------------------------------------------------------
576 ---  ETHERNET ---------------------------------------------------------
577 -----------------------------------------------------------------------
578
579     eth0 : if CFG_GRETH = 1 generate -- Gaisler ethernet MAC
580       e1 : grethm generic map(
581         hindex => CFG_NCPU+CFG_AHB_UART+CFG_AHB_JTAG+CFG_SVGA_ENABLE, 
582         pindex => 13, paddr => 13, pirq => 13, memtech => memtech,
583         mdcscaler => CPU_FREQ/1000, enable_mdio => 1, fifosize => CFG_ETH_FIFO,
584         nsync => 1, edcl => CFG_DSU_ETH, edclbufsz => CFG_ETH_BUF,
585         macaddrh => CFG_ETH_ENM, macaddrl => CFG_ETH_ENL, enable_mdint => 1,
586         ipaddrh => CFG_ETH_IPM, ipaddrl => CFG_ETH_IPL, giga => CFG_GRETH1G)
587       port map( rst => rstn, clk => clkm, ahbmi => ahbmi,
588         ahbmo => ahbmo(CFG_NCPU+CFG_AHB_UART+CFG_AHB_JTAG+CFG_SVGA_ENABLE), 
589         apbi => apbi, apbo => apbo(13), ethi => ethi, etho => etho); 
590     end generate;
591
592     ethpads : if (CFG_GRETH = 1) generate -- eth pads
593       emdio_pad : iopad generic map (tech => padtech) 
594       port map (emdio, etho.mdio_o, etho.mdio_oe, ethi.mdio_i);
595       etxc_pad : clkpad generic map (tech => padtech, arch => 2) 
596         port map (etx_clk, ethi.tx_clk);
597       erxc_pad : clkpad generic map (tech => padtech, arch => 2) 
598         port map (erx_clk, ethi.rx_clk);
599       erxd_pad : inpadv generic map (tech => padtech, width => 4) 
600         port map (erxd, ethi.rxd(3 downto 0));
601       erxdv_pad : inpad generic map (tech => padtech) 
602         port map (erx_dv, ethi.rx_dv);
603       erxer_pad : inpad generic map (tech => padtech) 
604         port map (erx_er, ethi.rx_er);
605       erxco_pad : inpad generic map (tech => padtech) 
606         port map (erx_col, ethi.rx_col);
607       erxcr_pad : inpad generic map (tech => padtech) 
608         port map (erx_crs, ethi.rx_crs);
609       emdint_pad : inpad generic map (tech => padtech) 
610         port map (emdint, ethi.mdint);
611
612       etxd_pad : outpadv generic map (tech => padtech, width => 4) 
613         port map (etxd, etho.txd(3 downto 0));
614       etxen_pad : outpad generic map (tech => padtech) 
615         port map ( etx_en, etho.tx_en);
616       etxer_pad : outpad generic map (tech => padtech) 
617         port map (etx_er, etho.tx_er);
618       emdc_pad : outpad generic map (tech => padtech) 
619         port map (emdc, etho.mdc);
620     end generate;
621
622 -----------------------------------------------------------------------
623 ---  AHB RAM ----------------------------------------------------------
624 -----------------------------------------------------------------------
625
626   ocram : if CFG_AHBRAMEN = 1 generate 
627     ahbram0 : ahbram generic map (hindex => 7, haddr => CFG_AHBRADDR, 
628         tech => CFG_MEMTECH, kbytes => CFG_AHBRSZ)
629     port map ( rstn, clkm, ahbsi, ahbso(7));
630   end generate;
631
632 -----------------------------------------------------------------------
633 ---  Multi-core CAN ---------------------------------------------------
634 -----------------------------------------------------------------------
635
636    can0 : if CFG_CAN = 1 generate 
637      can0 : can_mc generic map (slvndx => 4, ioaddr => CFG_CANIO,
638         iomask => 16#FF0#, irq => CFG_CANIRQ, memtech => memtech,
639         ncores => CFG_CAN_NUM, sepirq => CFG_CANSEPIRQ)
640       port map (rstn, clkm, ahbsi, ahbso(4), can_lrx, can_ltx );
641       can_tx_pad1 : iopad generic map (tech => padtech)
642             port map (pio(5), can_ltx(0), gnd(0), gpioi.din(5));
643       can_rx_pad1 : iopad generic map (tech => padtech)
644             port map (pio(4), gnd(0), vcc(0), can_lrx(0));
645       canpas : if CFG_CAN_NUM = 2 generate 
646         can_tx_pad2 : iopad generic map (tech => padtech)
647             port map (pio(2), can_ltx(1), gnd(0), gpioi.din(2));
648         can_rx_pad2 : iopad generic map (tech => padtech)
649             port map (pio(1), gnd(0), vcc(0), can_lrx(1));
650       end generate;
651    end generate;
652
653    -- standby controlled by pio(3) and pio(0)
654
655 -----------------------------------------------------------------------
656 ---  SPACEWIRE  -------------------------------------------------------
657 -----------------------------------------------------------------------
658
659   spw : if CFG_SPW_EN > 0 generate
660     core0: if CFG_SPW_GRSPW = 1 generate
661       spw_clkl <= clkm;
662     end generate;
663     
664     core1 : if CFG_SPW_GRSPW = 2 generate
665       cgi2.pllctrl <= "00"; cgi2.pllrst <= rstraw;
666       clkgen_spw_rx : clkgen            -- clock generator
667       generic map (clktech, 12, 2, 0,
668         1, 0, 0, 0, 25000)
669       port map (clk3, clk3, spw_clkl, spw_clkln, open, open, open, cgi2, cgo2, open, open);
670     end generate;
671         
672     swloop : for i in 0 to CFG_SPW_NUM-1 generate
673       core1 : if CFG_SPW_GRSPW = 2 generate
674         spw_phy0 : grspw2_phy 
675           generic map(
676             scantest   => 0,
677             tech       => memtech,
678             input_type => CFG_SPW_INPUT)
679           port map(
680             rstn       => rstn,
681             rxclki     => spw_clkl,
682             rxclkin    => spw_clkln,
683             nrxclki    => spw_clkl,
684             di         => dtmp(i),
685             si         => stmp(i),
686             do         => spwi(i).d(1 downto 0),
687             dov        => spwi(i).dv(1 downto 0),
688             dconnect   => spwi(i).dconnect(1 downto 0),
689             rxclko     => rxclko(i));
690       end generate;
691
692       sw0 : grspwm generic map(tech => memtech,
693         hindex => CFG_NCPU+CFG_AHB_UART+CFG_GRETH+CFG_AHB_JTAG+CFG_SVGA_ENABLE+i,
694         sysfreq => CPU_FREQ, usegen => 1,
695         pindex => 10+i, paddr => 10+i, pirq => 10+i, 
696         nsync => 1, rmap => CFG_SPW_RMAP, rxunaligned => CFG_SPW_RXUNAL,
697         rmapcrc => CFG_SPW_RMAPCRC, fifosize1 => CFG_SPW_AHBFIFO, 
698         fifosize2 => CFG_SPW_RXFIFO, rxclkbuftype => 2, dmachan => CFG_SPW_DMACHAN,
699         rmapbufs => CFG_SPW_RMAPBUF, ft => CFG_SPW_FT, ports => CFG_SPW_PORTS,
700         spwcore => CFG_SPW_GRSPW, netlist => CFG_SPW_NETLIST,
701         rxtx_sameclk => CFG_SPW_RTSAME, input_type => CFG_SPW_INPUT,
702         output_type => CFG_SPW_OUTPUT)
703       port map(rstn, clkm, rxclko(i), rxclko(i), spw_clkl, spw_clkl, ahbmi,
704         ahbmo(CFG_NCPU+CFG_AHB_UART+CFG_GRETH+CFG_AHB_JTAG+CFG_SVGA_ENABLE+i), 
705         apbi, apbo(10+i), spwi(i), spwo(i));
706      spwi(i).tickin <= '0'; spwi(i).rmapen <= '1';
707      spwi(i).clkdiv10 <= conv_std_logic_vector(CPU_FREQ/10000-1, 8) when CFG_SPW_GRSPW = 1
708         else conv_std_logic_vector((25*12/20)-1, 8);
709
710      spwlb0 : if SPW_LOOP_BACK = 1 generate
711        core0 : if CFG_SPW_GRSPW = 1 generate
712          spwi(i).d(0) <= spwo(i).d(0); spwi(i).s(0) <= spwo(i).s(0);
713        end generate;
714        core1 : if CFG_SPW_GRSPW = 2 generate
715          dtmp(i) <= spwo(i).d(0); stmp(i) <= spwo(i).s(0);
716        end generate;
717      end generate;
718       
719      nospwlb0 : if SPW_LOOP_BACK = 0 generate
720        core0 : if CFG_SPW_GRSPW = 1 generate
721          spwi(i).d(0) <= dtmp(i); spwi(i).s(0) <= stmp(i);
722        end generate;
723        spw_rxd_pad : inpad_ds generic map (padtech, lvds, x25v)
724          port map (spw_rxdp(i), spw_rxdn(i), dtmp(i));
725        spw_rxs_pad : inpad_ds generic map (padtech, lvds, x25v)
726          port map (spw_rxsp(i), spw_rxsn(i), stmp(i));
727        spw_txd_pad : outpad_ds generic map (padtech, lvds, x25v)
728          port map (spw_txdp(i), spw_txdn(i), spwo(i).d(0), gnd(0));
729        spw_txs_pad : outpad_ds generic map (padtech, lvds, x25v)
730          port map (spw_txsp(i), spw_txsn(i), spwo(i).s(0), gnd(0));
731      end generate;
732    end generate;
733   end generate;
734
735 -------------------------------------------------------------------------------
736 --- USB -----------------------------------------------------------------------
737 -------------------------------------------------------------------------------
738   -- Note that the GRUSBDC and GRUSB_DCL can not be instantiated at the same
739   -- time (board has only one USB transceiver), therefore they share AHB
740   -- master/slave indexes
741   -----------------------------------------------------------------------------
742   -- Shared pads
743   -----------------------------------------------------------------------------
744   usbpads: if (CFG_GRUSBDC + CFG_GRUSB_DCL) /= 0 generate
745     usb_clk_pad : clkpad generic map (tech => padtech, arch => 2)
746       port map (usb_clkout, uclk);
747     
748     usb_d_pad: iopadv generic map(tech => padtech, width => 16, slew => 1)
749       port map (usb_d, usbo.dataout, usbo.oen, usbi.datain);
750   
751     usb_txready_pad : inpad generic map (tech => padtech)
752       port map (usb_txready,usbi.txready);
753     usb_rxvalid_pad : inpad generic map (tech => padtech)
754       port map (usb_rxvalid,usbi.rxvalid);
755     usb_rxerror_pad : inpad generic map (tech => padtech)
756       port map (usb_rxerror,usbi.rxerror);
757     usb_rxactive_pad : inpad generic map (tech => padtech)
758       port map (usb_rxactive,usbi.rxactive);
759     usb_linestate_pad : inpadv generic map (tech => padtech, width => 2)
760       port map (usb_linestate,usbi.linestate);
761     usb_vbus_pad : inpad generic map (tech => padtech)
762       port map (usb_vbus, usbi.vbusvalid);
763     
764     usb_reset_pad : outpad generic map (tech => padtech, slew => 1)
765       port map (usb_reset,usbo.reset);
766     usb_suspend_pad : outpad generic map (tech => padtech, slew => 1)
767       port map (usb_suspend,usbo.suspendm);
768     usb_termsel_pad : outpad generic map (tech => padtech, slew => 1)
769       port map (usb_termsel,usbo.termselect);
770     usb_xcvrsel_pad : outpad generic map (tech => padtech, slew => 1)
771       port map (usb_xcvrsel,usbo.xcvrselect(0));
772     usb_txvalid_pad : outpad generic map (tech => padtech, slew => 1)
773       port map (usb_txvalid,usbo.txvalid);
774     usb_opmode_pad : outpadv generic map (tech =>padtech ,width =>2, slew =>1)
775       port map (usb_opmode,usbo.opmode);
776
777     usb_validh_pad:iopad generic map(tech => padtech, slew => 1)
778       port map (usb_validh, usbo.txvalidh, usbo.oen, usbi.rxvalidh);
779
780   end generate;
781   
782   -----------------------------------------------------------------------------
783   -- USB 2.0 Device Controller
784   -----------------------------------------------------------------------------
785   usbdc0: if CFG_GRUSBDC = 1 generate
786     usbdc0: grusbdc
787       generic map(
788         hsindex => 5, hirq => 9, haddr => 16#004#, hmask => 16#FFC#,        
789         hmindex => CFG_NCPU+CFG_AHB_UART+CFG_GRETH+CFG_AHB_JTAG+
790         CFG_SVGA_ENABLE+CFG_SPW_NUM*CFG_SPW_EN,
791         aiface => CFG_GRUSBDC_AIFACE, uiface => 0, dwidth => CFG_GRUSBDC_DW,
792         nepi => CFG_GRUSBDC_NEPI, nepo => CFG_GRUSBDC_NEPO,
793         i0 => CFG_GRUSBDC_I0, i1 => CFG_GRUSBDC_I1,
794         i2 => CFG_GRUSBDC_I2, i3 => CFG_GRUSBDC_I3,
795         i4 => CFG_GRUSBDC_I4, i5 => CFG_GRUSBDC_I5,
796         i6 => CFG_GRUSBDC_I6, i7 => CFG_GRUSBDC_I7,
797         i8 => CFG_GRUSBDC_I8, i9 => CFG_GRUSBDC_I9,
798         i10 => CFG_GRUSBDC_I10, i11 => CFG_GRUSBDC_I11,
799         i12 => CFG_GRUSBDC_I12, i13 => CFG_GRUSBDC_I13,
800         i14 => CFG_GRUSBDC_I14, i15 => CFG_GRUSBDC_I15,
801         o0 => CFG_GRUSBDC_O0, o1 => CFG_GRUSBDC_O1,
802         o2 => CFG_GRUSBDC_O2, o3 => CFG_GRUSBDC_O3,
803         o4 => CFG_GRUSBDC_O4, o5 => CFG_GRUSBDC_O5,
804         o6 => CFG_GRUSBDC_O6, o7 => CFG_GRUSBDC_O7,
805         o8 => CFG_GRUSBDC_O8, o9 => CFG_GRUSBDC_O9,
806         o10 => CFG_GRUSBDC_O10, o11 => CFG_GRUSBDC_O11,
807         o12 => CFG_GRUSBDC_O12, o13 => CFG_GRUSBDC_O13,
808         o14 => CFG_GRUSBDC_O14, o15 => CFG_GRUSBDC_O15,
809         memtech => memtech)
810       port map(
811         uclk  => uclk,
812         usbi  => usbi,
813         usbo  => usbo,
814         hclk  => clkm,
815         hrst  => rstn,
816         ahbmi => ahbmi,
817         ahbmo => ahbmo(CFG_NCPU+CFG_AHB_UART+CFG_GRETH+CFG_AHB_JTAG+
818                        CFG_SVGA_ENABLE+CFG_SPW_NUM*CFG_SPW_EN),
819         ahbsi => ahbsi,
820         ahbso => ahbso(5)
821         );
822   end generate usbdc0;
823
824   -----------------------------------------------------------------------------
825   -- USB DCL
826   -----------------------------------------------------------------------------
827   usb_dcl0: if CFG_GRUSB_DCL = 1 generate
828     usb_dcl0: grusb_dcl
829       generic map (
830         hindex => CFG_NCPU+CFG_AHB_UART+CFG_GRETH+CFG_AHB_JTAG+
831         CFG_SVGA_ENABLE+CFG_SPW_NUM*CFG_SPW_EN,
832         memtech => memtech, uiface => 0, dwidth => CFG_GRUSB_DCL_DW)
833       port map (
834         uclk, usbi, usbo, clkm, rstn, ahbmi,
835         ahbmo(CFG_NCPU+CFG_AHB_UART+CFG_GRETH+CFG_AHB_JTAG+CFG_SVGA_ENABLE+
836               CFG_SPW_NUM*CFG_SPW_EN));
837   end generate usb_dcl0;
838   
839 -----------------------------------------------------------------------
840 ---  AHB ATA ----------------------------------------------------------
841 -----------------------------------------------------------------------
842
843   ata0 : if CFG_ATA = 1 generate
844     atac0 : atactrl
845       generic map(
846         tech => 0, fdepth => CFG_ATAFIFO,
847         mhindex => CFG_NCPU+CFG_AHB_UART+CFG_GRETH+CFG_AHB_JTAG+
848         CFG_SVGA_ENABLE+CFG_SPW_NUM*CFG_SPW_EN+CFG_GRUSB_DCL+
849         CFG_GRUSBDC,
850         shindex => 3, haddr => 16#A00#, hmask => 16#fff#, pirq  => CFG_ATAIRQ,
851         mwdma => CFG_ATADMA, TWIDTH   => 8,
852         -- PIO mode 0 settings (@100MHz clock)
853         PIO_mode0_T1   => 6,   -- 70ns
854         PIO_mode0_T2   => 28,  -- 290ns
855         PIO_mode0_T4   => 2,   -- 30ns
856         PIO_mode0_Teoc => 23   -- 240ns ==> T0 - T1 - T2 = 600 - 70 - 290 = 240
857         )
858       port map(
859         rst => rstn, arst => vcc(0), clk => clkm, ahbmi => ahbmi,
860         ahbmo => ahbmo(CFG_NCPU+CFG_AHB_UART+CFG_GRETH+CFG_AHB_JTAG+
861                        CFG_SVGA_ENABLE+CFG_SPW_NUM*CFG_SPW_EN+
862                        CFG_GRUSB_DCL+CFG_GRUSBDC),
863         ahbsi => ahbsi, ahbso => ahbso(3), atai => idei, atao => ideo);
864     
865     ata_rstn_pad : outpad generic map (tech => padtech)
866       port map (ata_rstn, ideo.rstn);
867     ata_data_pad : iopadv generic map (tech => padtech, width => 16, oepol => 1)
868       port map (ata_data, ideo.ddo, ideo.oen, idei.ddi);
869     ata_da_pad : outpadv generic map (tech => padtech, width => 3)
870       port map (ata_da, ideo.da);
871     ata_cs0_pad : outpad generic map (tech => padtech)
872       port map (ata_cs0, ideo.cs0);
873     ata_cs1_pad : outpad generic map (tech => padtech)
874       port map (ata_cs1, ideo.cs1);
875     ata_dior_pad : outpad generic map (tech => padtech)
876       port map (ata_dior, ideo.dior);
877     ata_diow_pad : outpad generic map (tech => padtech)
878       port map (ata_diow, ideo.diow);
879     iordy_pad : inpad generic map (tech => padtech)
880       port map (ata_iordy, idei.iordy);
881     intrq_pad : inpad generic map (tech => padtech)
882       port map (ata_intrq, idei.intrq);
883     dmarq_pad : inpad generic map (tech => padtech)
884       port map (ata_dmarq, idei.dmarq);
885     dmack_pad : outpad generic map (tech => padtech)
886       port map (ata_dmack, ideo.dmack);
887     ata_csel <= '0';
888   end generate;
889
890
891 -------------------------------------------------------------------------------
892 --  Upsample YCC-RGB translation module ---------------------------------------
893 -------------------------------------------------------------------------------
894     jpgycc : huffdctycc
895     generic map( shindex => 4, haddr => 16#A00#,
896                 hirq => 10, pindex => 12,
897     paddr => 12, mhindex => CFG_NCPU+CFG_AHB_UART+CFG_GRETH+CFG_AHB_JTAG+
898                  CFG_SVGA_ENABLE+CFG_SPW_NUM*CFG_SPW_EN+CFG_GRUSB_DCL+
899                  CFG_GRUSBDC+CFG_ATA )
900     port map(rst => rstn, clk => clkm, ahbmi => ahbmi,
901              ahbmo => ahbmo(CFG_NCPU+CFG_AHB_UART+CFG_GRETH+CFG_AHB_JTAG+
902                      CFG_SVGA_ENABLE+CFG_SPW_NUM*CFG_SPW_EN+CFG_GRUSB_DCL+
903                      CFG_GRUSBDC+CFG_ATA), ahbsi => ahbsi, ahbso => ahbso(4),
904              apbi => apbi, apbo => apbo(12)
905         );
906
907
908   
909 -----------------------------------------------------------------------
910 ---  Drive unused bus elements  ---------------------------------------
911 -----------------------------------------------------------------------
912
913 --  nam1 : for i in (CFG_NCPU+CFG_AHB_UART+CFG_GRETH+CFG_AHB_JTAG) to NAHBMST-1 generate
914 --    ahbmo(i) <= ahbm_none;
915 --  end generate;
916 --  nap0 : for i in 11 to NAPBSLV-1 generate apbo(i) <= apb_none; end generate;
917 --  nah0 : for i in 8 to NAHBSLV-1 generate ahbso(i) <= ahbs_none; end generate;
918
919 -----------------------------------------------------------------------
920 ---  Boot message  ----------------------------------------------------
921 -----------------------------------------------------------------------
922
923 -- pragma translate_off
924   x : report_version 
925   generic map (
926    msg1 => "LEON3 GR-XC3S-1500 Demonstration design",
927       msg2 => "GRLIB Version " & tost(LIBVHDL_VERSION/1000) & "." & tost((LIBVHDL_VERSION mod 1000)/100)
928         & "." & tost(LIBVHDL_VERSION mod 100) & ", build " & tost(LIBVHDL_BUILD),
929    msg3 => "Target technology: " & tech_table(fabtech) & ",  memory library: " & tech_table(memtech),
930    mdel => 1
931   );
932 -- pragma translate_on
933 end;