OpenCores
URL https://opencores.org/ocsvn/mips_enhanced/mips_enhanced/trunk

Subversion Repositories mips_enhanced

[/] [mips_enhanced/] [trunk/] [grlib-gpl-1.0.19-b3188/] [designs/] [leon3-altera-ep3c25-eek/] [testbench.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dimamali
------------------------------------------------------------------------------
2
--  This file is a part of the GRLIB VHDL IP LIBRARY
3
--  Copyright (C) 2003, 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
--  Altera Cyclone-III Embedded Evaluation Kit LEON3 Demonstration design test
20
--  Copyright (C) 2007 Jiri Gaisler, Gaisler Research
21
--  Adapted for EEK by Jan Andersson, Gaisler Research
22
------------------------------------------------------------------------------
23
 
24
library ieee;
25
use ieee.std_logic_1164.all;
26
library gaisler;
27
use gaisler.libdcom.all;
28
use gaisler.sim.all;
29
library techmap;
30
use techmap.gencomp.all;
31
library micron;
32
use micron.components.all;
33
library cypress;
34
use cypress.components.all;
35
 
36
use work.debug.all;
37
 
38
use work.config.all;    -- configuration
39
 
40
entity testbench is
41
  generic (
42
    fabtech   : integer := CFG_FABTECH;
43
    memtech   : integer := CFG_MEMTECH;
44
    padtech   : integer := CFG_PADTECH;
45
    clktech   : integer := CFG_CLKTECH;
46
    ncpu      : integer := CFG_NCPU;
47
    disas     : integer := CFG_DISAS;   -- Enable disassembly to console
48
    dbguart   : integer := CFG_DUART;   -- Print UART on console
49
    pclow     : integer := CFG_PCLOW;
50
 
51
    clkperiod : integer := 20;          -- system clock period
52
    romwidth  : integer := 8;           -- rom data width (8/32)
53
    romdepth  : integer := 23;          -- rom address depth
54
    sramwidth  : integer := 32;         -- ram data width (8/16/32)
55
    sramdepth  : integer := 20;         -- ram address depth
56
    srambanks  : integer := 1           -- number of ram banks
57
  );
58
end;
59
 
60
architecture behav of testbench is
61
 
62
  constant promfile  : string := "prom.srec";  -- rom contents
63
  constant sramfile  : string := "sram.srec";  -- ram contents
64
  constant sdramfile : string := "sdram.srec"; -- sdram contents
65
 
66
  signal clk : std_logic := '0';
67
  signal clkout, pllref : std_ulogic;
68
  signal rst : std_logic := '0';                 -- Reset
69
  constant ct : integer := clkperiod/2;
70
 
71
  signal address  : std_logic_vector(25 downto 0);
72
  signal data     : std_logic_vector(31 downto 0);
73
  signal romsn    : std_ulogic;
74
  signal iosn     : std_ulogic;
75
  signal oen      : std_ulogic;
76
  signal writen   : std_ulogic;
77
  signal dsuen, dsutx, dsurx, dsubren, dsuact : std_ulogic;
78
  signal dsurst   : std_ulogic;
79
  signal test     : std_ulogic;
80
  signal error    : std_logic;
81
  signal gpio     : std_logic_vector(CFG_GRGPIO_WIDTH-3 downto 0);
82
  signal GND      : std_ulogic := '0';
83
  signal VCC      : std_ulogic := '1';
84
  signal NC       : std_ulogic := 'Z';
85
  signal clk2     : std_ulogic := '1';
86
 
87
  signal ssram_cen    : std_logic;
88
  signal ssram_wen    : std_logic;
89
  signal ssram_bw     : std_logic_vector (0 to 3);
90
  signal ssram_oen    : std_ulogic;
91
  signal ssram_clk    : std_ulogic;
92
  signal ssram_adscn  : std_ulogic;
93
  signal ssram_adsp_n : std_ulogic;
94
  signal ssram_adv_n  : std_ulogic;
95
  signal datazz       : std_logic_vector(3 downto 0);
96
 
97
  -- ddr memory  
98
  signal ddr_clk      : std_logic;
99
  signal ddr_clkb     : std_logic;
100
  signal ddr_clkin    : std_logic;
101
  signal ddr_cke      : std_logic;
102
  signal ddr_csb      : std_logic;
103
  signal ddr_web      : std_ulogic;                       -- ddr write enable
104
  signal ddr_rasb     : std_ulogic;                       -- ddr ras
105
  signal ddr_casb     : std_ulogic;                       -- ddr cas
106
  signal ddr_dm       : std_logic_vector (1 downto 0);    -- ddr dm
107
  signal ddr_dqs      : std_logic_vector (1 downto 0);    -- ddr dqs
108
  signal ddr_ad       : std_logic_vector (12 downto 0);   -- ddr address
109
  signal ddr_ba       : std_logic_vector (1 downto 0);    -- ddr bank address
110
  signal ddr_dq       :  std_logic_vector (15 downto 0); -- ddr data
111
 
112
  -- Connections over HSMC connector
113
  -- LCD touch panel display
114
  signal hc_vd           : std_logic;
115
  signal hc_hd           : std_logic;
116
  signal hc_den          : std_logic;
117
  signal hc_nclk         : std_logic;
118
  signal hc_lcd_data     : std_logic_vector(7 downto 0);
119
  signal hc_grest        : std_logic;
120
  signal hc_scen         : std_logic;
121
  signal hc_sda          : std_logic;
122
  signal hc_adc_penirq_n : std_logic;
123
  signal hc_adc_dout     : std_logic;
124
  signal hc_adc_busy     : std_logic;
125
  signal hc_adc_din      : std_logic;
126
  signal hc_adc_dclk     : std_logic;
127
  signal hc_adc_cs_n     : std_logic;
128
 
129
  -- Shared by video decoder and audio codec
130
  signal hc_i2c_sclk     : std_logic;
131
  signal hc_i2c_sdat     : std_logic;
132
 
133
  -- Video decoder
134
  signal hc_td_d         : std_logic_vector(7 downto 0);
135
  signal hc_td_hs        : std_logic;
136
  signal hc_td_vs        : std_logic;
137
  signal hc_td_27mhz     : std_logic;
138
  signal hc_td_reset     : std_logic;
139
 
140
  -- Audio codec
141
  signal hc_aud_adclrck  : std_logic;
142
  signal hc_aud_adcdat   : std_logic;
143
  signal hc_aud_daclrck  : std_logic;
144
  signal hc_aud_dacdat   : std_logic;
145
  signal hc_aud_bclk     : std_logic;
146
  signal hc_aud_xck      : std_logic;
147
 
148
  -- SD card
149
  signal hc_sd_dat       : std_logic;
150
  signal hc_sd_dat3      : std_logic;
151
  signal hc_sd_cmd       : std_logic;
152
  signal hc_sd_clk       : std_logic;
153
 
154
  -- Ethernet PHY
155
  signal hc_tx_d         : std_logic_vector(3 downto 0);
156
  signal hc_rx_d         : std_logic_vector(3 downto 0);
157
  signal hc_tx_clk       : std_logic;
158
  signal hc_rx_clk       : std_logic;
159
  signal hc_tx_en        : std_logic;
160
  signal hc_rx_dv        : std_logic;
161
  signal hc_rx_crs       : std_logic;
162
  signal hc_rx_err       : std_logic;
163
  signal hc_rx_col       : std_logic;
164
  signal hc_mdio         : std_logic;
165
  signal hc_mdc          : std_logic;
166
  signal hc_eth_reset_n  : std_logic;
167
 
168
  -- RX232 (console/debug UART)
169
  signal hc_uart_rxd     : std_logic;
170
  signal hc_uart_txd     : std_logic;
171
 
172
  -- PS/2
173
  signal hc_ps2_dat      : std_logic;
174
  signal hc_ps2_clk      : std_logic;
175
 
176
  -- VGA/DAC
177
  signal hc_vga_data     : std_logic_vector(9 downto 0);
178
  signal hc_vga_clock    : std_ulogic;
179
  signal hc_vga_hs       : std_ulogic;
180
  signal hc_vga_vs       : std_ulogic;
181
  signal hc_vga_blank    : std_ulogic;
182
  signal hc_vga_sync     : std_ulogic;
183
 
184
  -- I2C EEPROM
185
  signal hc_id_i2cscl    : std_logic;
186
  signal hc_id_i2cdat    : std_logic;
187
 
188
  -- Ethernet PHY sim model
189
  signal phy_tx_er    : std_ulogic;
190
  signal phy_gtx_clk  : std_ulogic;
191
  signal hc_tx_dt     : std_logic_vector(7 downto 0) := (others => '0');
192
  signal hc_rx_dt     : std_logic_vector(7 downto 0) := (others => '0');
193
 
194
  constant lresp : boolean := false;
195
 
196
begin
197
 
198
-- clock and reset
199
 
200
  clk <= not clk after ct * 1 ns;
201
  ddr_clkin <= not clk after ct * 1 ns;
202
  rst <= dsurst;
203
  dsubren <= '1'; hc_uart_rxd <= '1';
204
  address(0) <= '0';
205
 
206
--  ddr_dqs <= (others => 'L');
207
  d3 : entity work.leon3mp generic map (fabtech, memtech, padtech, clktech,
208
        ncpu, disas, dbguart, pclow )
209
    port map (rst, clk, error,
210
        address(25 downto 1), data, romsn, oen, writen, open,
211
        ssram_cen, ssram_wen, ssram_bw, ssram_oen,
212
        ssram_clk, ssram_adscn,  iosn,
213
        -- DDR
214
        ddr_clk, ddr_clkb, ddr_cke, ddr_csb, ddr_web, ddr_rasb,
215
        ddr_casb, ddr_dm, ddr_dqs, ddr_ad, ddr_ba, ddr_dq,
216
        -- DSU
217
        dsubren, dsuact,
218
        -- I/O port
219
        gpio,
220
        -- LCD
221
        hc_vd, hc_hd, hc_den, hc_nclk, hc_lcd_data, hc_grest, hc_scen,
222
        hc_sda, hc_adc_penirq_n, hc_adc_dout, hc_adc_busy, hc_adc_din,
223
        hc_adc_dclk,  hc_adc_cs_n,
224
        -- Shared by video decoder and audio codec
225
        hc_i2c_sclk, hc_i2c_sdat,
226
        -- Video decoder
227
        hc_td_d, hc_td_hs, hc_td_vs, hc_td_27mhz, hc_td_reset,
228
        -- Audio codec
229
        hc_aud_adclrck, hc_aud_adcdat, hc_aud_daclrck, hc_aud_dacdat,
230
        hc_aud_bclk, hc_aud_xck,
231
        -- SD card
232
        hc_sd_dat, hc_sd_dat3, hc_sd_cmd, hc_sd_clk,
233
        -- Ethernet PHY
234
        hc_tx_d, hc_rx_d, hc_tx_clk, hc_rx_clk, hc_tx_en, hc_rx_dv, hc_rx_crs,
235
        hc_rx_err, hc_rx_col, hc_mdio, hc_mdc, hc_eth_reset_n,
236
        -- RX232 (console/debug UART)
237
        hc_uart_rxd, hc_uart_txd,
238
        -- PS/2
239
        hc_ps2_dat, hc_ps2_clk,
240
        -- VGA/DAC
241
        hc_vga_data, hc_vga_clock, hc_vga_hs, hc_vga_vs, hc_vga_blank, hc_vga_sync,
242
        -- I2C EEPROM
243
        hc_id_i2cscl, hc_id_i2cdat
244
    );
245
 
246
  -- I2C bus pull-ups
247
  hc_i2c_sclk <= 'H';  hc_i2c_sdat <= 'H';
248
  hc_id_i2cscl <= 'H'; hc_id_i2cdat <= 'H';
249
 
250
  -- SD card signals
251
  hc_sd_dat  <= 'L'; hc_sd_cmd  <= 'Z';
252
 
253
  ddr0 : mt46v16m16
254
    generic map (index => -1, fname => sdramfile)
255
    port map(
256
      Dq => ddr_dq(15 downto 0), Dqs => ddr_dqs(1 downto 0), Addr => ddr_ad,
257
      Ba => ddr_ba, Clk => ddr_clk,  Clk_n => ddr_clkb, Cke => ddr_cke,
258
      Cs_n => ddr_csb, Ras_n => ddr_rasb, Cas_n => ddr_casb, We_n => ddr_web,
259
      Dm => ddr_dm(1 downto 0));
260
 
261
  datazz <= "HHHH";
262
 
263
  ssram_adsp_n <= '1'; ssram_adv_n <= '1';
264
  ssram0 : cy7c1380d generic map (fname => sramfile)
265
   port map(
266
      ioDq(35 downto 32) => datazz, ioDq(31 downto 0) => data,
267
      iAddr => address(20 downto 2), iMode =>  gnd,
268
      inGW => vcc, inBWE => ssram_wen, inADV => ssram_adv_n,
269
      inADSP => ssram_adsp_n, inADSC => ssram_adscn,
270
      iClk => ssram_clk,
271
      inBwa => ssram_bw(3), inBwb => ssram_bw(2),
272
      inBwc => ssram_bw(1), inBwd => ssram_bw(0),
273
      inOE => ssram_oen, inCE1 => ssram_cen,
274
      iCE2 => vcc, inCE3 => gnd, iZz => gnd);
275
 
276
  -- 16 bit prom
277
  prom0 : sram16 generic map (index => 4, abits => romdepth, fname => promfile)
278
        port map (address(romdepth downto 1), data(31 downto 16),
279
                  gnd, gnd, romsn, writen, oen);
280
 
281
  -- Ethernet PHY
282
  hc_mdio <= 'H';
283
  phy_tx_er <= '0';
284
  phy_gtx_clk <= '0';
285
  hc_tx_dt(3 downto 0) <= hc_tx_d;
286
  hc_rx_d <= hc_rx_dt(3 downto 0);
287
  p0: phy
288
    generic map(base1000_t_fd => 0, base1000_t_hd => 0)
289
    port map(hc_eth_reset_n, hc_mdio, hc_tx_clk, hc_rx_clk, hc_rx_dt, hc_rx_dv,
290
             hc_rx_err, hc_rx_col, hc_rx_crs, hc_tx_dt, hc_tx_en, phy_tx_er, hc_mdc, phy_gtx_clk);
291
 
292
  -- I2C memory
293
  i0: i2c_slave_model
294
    port map (hc_id_i2cscl, hc_id_i2cdat);
295
 
296
  error <= 'H';                   -- ERROR pull-up
297
 
298
  iuerr : process
299
  begin
300
    wait for 2500 ns;
301
    if to_x01(error) = '1' then wait on error; end if;
302
    assert (to_x01(error) = '1')
303
      report "*** IU in error mode, simulation halted ***"
304
      severity failure ;
305
  end process;
306
 
307
  data <= buskeep(data), (others => 'H') after 250 ns;
308
 
309
  test0 :  grtestmod
310
    port map ( rst, clk, error, address(21 downto 2), data,
311
               iosn, oen, writen, open);
312
 
313
  dsucom : process
314
    procedure dsucfg(signal dsurx : in std_ulogic; signal dsutx : out std_ulogic) is
315
    variable w32 : std_logic_vector(31 downto 0);
316
    variable c8  : std_logic_vector(7 downto 0);
317
    constant txp : time := 160 * 1 ns;
318
    begin
319
    dsutx <= '1';
320
    dsurst <= '0';
321
    wait for 500 ns;
322
    dsurst <= '1';
323
    wait;
324
    wait for 5000 ns;
325
    txc(dsutx, 16#55#, txp);            -- sync uart
326
 
327
--    txc(dsutx, 16#c0#, txp);
328
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
329
--    txa(dsutx, 16#00#, 16#00#, 16#02#, 16#ae#, txp);
330
--    txc(dsutx, 16#c0#, txp);
331
--    txa(dsutx, 16#91#, 16#00#, 16#00#, 16#00#, txp);
332
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#ae#, txp);
333
--    txc(dsutx, 16#c0#, txp);
334
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#24#, txp);
335
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#03#, txp);
336
--    txc(dsutx, 16#c0#, txp);
337
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
338
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#fc#, txp);
339
 
340
    txc(dsutx, 16#c0#, txp);
341
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
342
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#2f#, txp);
343
    txc(dsutx, 16#c0#, txp);
344
    txa(dsutx, 16#91#, 16#00#, 16#00#, 16#00#, txp);
345
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#6f#, txp);
346
    txc(dsutx, 16#c0#, txp);
347
    txa(dsutx, 16#90#, 16#11#, 16#00#, 16#00#, txp);
348
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#00#, txp);
349
    txc(dsutx, 16#c0#, txp);
350
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#04#, txp);
351
    txa(dsutx, 16#00#, 16#02#, 16#20#, 16#01#, txp);
352
    txc(dsutx, 16#c0#, txp);
353
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
354
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#02#, txp);
355
 
356
    txc(dsutx, 16#c0#, txp);
357
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
358
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#0f#, txp);
359
 
360
    txc(dsutx, 16#c0#, txp);
361
    txa(dsutx, 16#40#, 16#00#, 16#43#, 16#10#, txp);
362
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#0f#, txp);
363
 
364
    txc(dsutx, 16#c0#, txp);
365
    txa(dsutx, 16#91#, 16#40#, 16#00#, 16#24#, txp);
366
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#24#, txp);
367
    txc(dsutx, 16#c0#, txp);
368
    txa(dsutx, 16#91#, 16#70#, 16#00#, 16#00#, txp);
369
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#03#, txp);
370
 
371
 
372
    txc(dsutx, 16#c0#, txp);
373
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
374
    txa(dsutx, 16#00#, 16#00#, 16#ff#, 16#ff#, txp);
375
 
376
    txc(dsutx, 16#c0#, txp);
377
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#48#, txp);
378
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#12#, txp);
379
 
380
    txc(dsutx, 16#c0#, txp);
381
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#60#, txp);
382
    txa(dsutx, 16#00#, 16#00#, 16#12#, 16#10#, txp);
383
 
384
    txc(dsutx, 16#80#, txp);
385
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
386
    rxi(dsurx, w32, txp, lresp);
387
 
388
    txc(dsutx, 16#a0#, txp);
389
    txa(dsutx, 16#40#, 16#00#, 16#00#, 16#00#, txp);
390
    rxi(dsurx, w32, txp, lresp);
391
 
392
    end;
393
 
394
  begin
395
 
396
    dsucfg(dsutx, dsurx);
397
 
398
    wait;
399
  end process;
400
end ;
401
 

powered by: WebSVN 2.1.0

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