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;
|