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-ep3sl150/] [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 Stratix-III LEON3 Demonstration design test bench
20
--  Copyright (C) 2007 Jiri Gaisler, Gaisler Research
21
------------------------------------------------------------------------------
22
 
23
library ieee;
24
use ieee.std_logic_1164.all;
25
library gaisler;
26
use gaisler.libdcom.all;
27
use gaisler.sim.all;
28
library techmap;
29
use techmap.gencomp.all;
30
library micron;
31
use micron.components.all;
32
library cypress;
33
use cypress.components.all;
34
 
35
use work.debug.all;
36
 
37
use work.config.all;    -- configuration
38
 
39
entity testbench is
40
  generic (
41
    fabtech   : integer := CFG_FABTECH;
42
    memtech   : integer := CFG_MEMTECH;
43
    padtech   : integer := CFG_PADTECH;
44
    clktech   : integer := CFG_CLKTECH;
45
    ncpu      : integer := CFG_NCPU;
46
    disas     : integer := CFG_DISAS;   -- Enable disassembly to console
47
    dbguart   : integer := CFG_DUART;   -- Print UART on console
48
    pclow     : integer := CFG_PCLOW;
49
 
50
    clkperiod : integer := 20;          -- system clock period
51
    romwidth  : integer := 32;          -- rom data width (8/32)
52
    romdepth  : integer := 23;          -- rom address depth
53
    sramwidth  : integer := 32;         -- ram data width (8/16/32)
54
    sramdepth  : integer := 20;         -- ram address depth
55
    srambanks  : integer := 1;          -- number of ram banks
56
    dbits      : integer := CFG_DDR2SP_DATAWIDTH
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
constant ct : integer := clkperiod/2;
66
constant lresp : boolean := false;
67
 
68
signal GND      : std_ulogic := '0';
69
signal VCC      : std_ulogic := '1';
70
signal NC       : std_ulogic := 'Z';
71
signal Rst    : std_logic := '0';                        -- Reset
72
signal clk : std_logic := '0';
73
signal clk125 : std_logic := '0';
74
 
75
signal address  : std_logic_vector(25 downto 0);
76
signal data     : std_logic_vector(31 downto 0);
77
signal romsn    : std_ulogic;
78
signal iosn     : std_ulogic;
79
signal oen      : std_ulogic;
80
signal writen   : std_ulogic;
81
signal dsuen, dsutx, dsurx, dsubren, dsuact : std_ulogic;
82
signal dsurst   : std_ulogic;
83
signal error    : std_logic;
84
signal gpio     : std_logic_vector(CFG_GRGPIO_WIDTH-1 downto 0);
85
signal txd1, rxd1 : std_ulogic;
86
 
87
-- PSRAM and FLASH control
88
signal sram_advn   : std_logic;
89
signal sram_csn    : std_logic;
90
signal sram_wen    : std_logic;
91
signal sram_ben    : std_logic_vector (0 to 3);
92
signal sram_oen    : std_ulogic;
93
signal sram_clk    : std_ulogic;
94
signal sram_adscn  : std_ulogic;
95
signal sram_psn    : std_ulogic;
96
signal sram_adv_n  : std_ulogic;
97
signal sram_wait   : std_logic_vector(1 downto 0);
98
signal flash_clk, flash_cen, max_csn : std_logic;
99
signal flash_advn, flash_oen, flash_resetn, flash_wen : std_logic;
100
 
101
-- DDR2 memory  
102
signal ddr_clk          : std_logic_vector(2 downto 0);
103
signal ddr_clkb         : std_logic_vector(2 downto 0);
104
signal ddr_cke          : std_logic_vector(1 downto 0);
105
signal ddr_csb          : std_logic_vector(1 downto 0);
106
signal ddr_odt          : std_logic_vector(1 downto 0);
107
signal ddr_web          : std_ulogic;                       -- ddr write enable
108
signal ddr_rasb         : std_ulogic;                       -- ddr ras
109
signal ddr_casb         : std_ulogic;                       -- ddr cas
110
signal ddr_dm           : std_logic_vector (8 downto 0);    -- ddr dm
111
signal ddr_dqsp         : std_logic_vector (8 downto 0);    -- ddr dqs
112
signal ddr_dqsn         : std_logic_vector (8 downto 0);    -- ddr dqs
113
signal ddr_rdqs         : std_logic_vector (8 downto 0);    -- ddr dqs
114
signal ddr_ad      : std_logic_vector (15 downto 0);   -- ddr address
115
signal ddr_ba      : std_logic_vector (2 downto 0);    -- ddr bank address
116
signal ddr_dq   : std_logic_vector (71 downto 0); -- ddr data
117
signal ddr_dq2          : std_logic_vector (71 downto 0); -- ddr data
118
 
119
--signal ddra_cke       : std_logic;
120
--signal ddra_csb       : std_logic;
121
--signal ddra_web   : std_ulogic;                       -- ddr write enable
122
--signal ddra_rasb  : std_ulogic;                       -- ddr ras
123
--signal ddra_casb  : std_ulogic;                       -- ddr cas
124
--signal ddra_ad    : std_logic_vector (15 downto 0);   -- ddr address
125
--signal ddra_ba    : std_logic_vector (2 downto 0);    -- ddr bank address
126
--signal ddrb_cke       : std_logic;
127
--signal ddrb_csb       : std_logic;
128
--signal ddrb_web   : std_ulogic;                       -- ddr write enable
129
--signal ddrb_rasb  : std_ulogic;                       -- ddr ras
130
--signal ddrb_casb  : std_ulogic;                       -- ddr cas
131
--signal ddrb_ad    : std_logic_vector (15 downto 0);   -- ddr address
132
--signal ddrb_ba    : std_logic_vector (2 downto 0);    -- ddr bank address
133
--signal ddrab_clk  : std_logic_vector(1 downto 0);
134
--signal ddrab_clkb : std_logic_vector(1 downto 0);
135
--signal ddrab_odt  : std_logic_vector(1 downto 0);
136
--signal ddrab_dqsp : std_logic_vector(1 downto 0);   -- ddr dqs
137
--signal ddrab_dqsn : std_logic_vector(1 downto 0);   -- ddr dqs
138
--signal ddrab_dm   : std_logic_vector(1 downto 0);     -- ddr dm
139
--signal ddrab_dq   : std_logic_vector (15 downto 0);-- ddr data
140
 
141
-- Ethernet
142
signal phy_mii_data: std_logic;         -- ethernet PHY interface
143
signal phy_tx_clk       : std_ulogic;
144
signal phy_rx_clk       : std_ulogic;
145
signal phy_rx_data      : std_logic_vector(7 downto 0);
146
signal phy_dv   : std_ulogic;
147
signal phy_rx_er        : std_ulogic;
148
signal phy_col  : std_ulogic;
149
signal phy_crs  : std_ulogic;
150
signal phy_tx_data : std_logic_vector(7 downto 0);
151
signal phy_tx_en        : std_ulogic;
152
signal phy_tx_er        : std_ulogic;
153
signal phy_mii_clk      : std_ulogic;
154
signal phy_rst_n        : std_ulogic;
155
signal phy_gtx_clk      : std_ulogic;
156
 
157
begin
158
 
159
-- clock and reset
160
  clk <= not clk after ct * 1 ns;
161
  clk125 <= not clk125 after 4 * 1 ns;
162
  rst <= dsurst;
163
  dsubren <= '1'; rxd1 <= '1';
164
  address(0) <= '0';
165
  ddr_dq(71 downto dbits) <= (others => 'H');
166
  ddr_dq2(71 downto dbits) <= (others => 'H');
167
  ddr_dqsp(8 downto dbits/8) <= (others => 'H');
168
  ddr_dqsn(8 downto dbits/8) <= (others => 'H');
169
  ddr_rdqs(8 downto dbits/8) <= (others => 'H');
170
  ddr_dm(8 downto dbits/8) <= (others => 'H');
171
 
172
  d3 : entity work.leon3mp
173
    generic map (fabtech, memtech, padtech, clktech,
174
                 ncpu, disas, dbguart, pclow, 50000, dbits)
175
    port map (rst, clk, clk125, error, dsubren, dsuact,
176
--      rxd1, txd1, 
177
      gpio, address(25 downto 1), data, open,
178
      sram_advn, sram_csn, sram_wen, sram_ben, sram_oen, sram_clk, sram_psn, sram_wait,
179
      flash_clk, flash_advn, flash_cen, flash_oen, flash_resetn, flash_wen,
180
      max_csn, iosn,
181
            ddr_clk, ddr_clkb, ddr_cke, ddr_csb, ddr_odt, ddr_web,
182
      ddr_rasb, ddr_casb, ddr_dm, ddr_dqsp, ddr_dqsn, ddr_ad, ddr_ba, ddr_dq,
183
      open, open,
184
--      ddra_cke, ddra_csb, ddra_web, ddra_rasb, ddra_casb, ddra_ad(14 downto 0), ddra_ba, ddrb_cke,
185
--      ddrb_csb, ddrb_web, ddrb_rasb, ddrb_casb, ddrb_ad(14 downto 0), ddrb_ba, ddrab_clk, ddrab_clkb,
186
--      ddrab_odt, ddrab_dqsp, ddrab_dqsn, ddrab_dm, ddrab_dq,
187
      phy_gtx_clk, phy_mii_data, phy_tx_clk, phy_rx_clk,
188
      phy_rx_data, phy_dv, phy_rx_er,   phy_col, phy_crs,
189
      phy_tx_data, phy_tx_en, phy_tx_er, phy_mii_clk,   phy_rst_n
190
    );
191
 
192
  ddr2delay : entity work.delay_wire
193
    generic map(data_width => dbits, delay_atob => 0.0, delay_btoa => 5.5)
194
    port map(a => ddr_dq(dbits-1 downto 0), b => ddr_dq2(dbits-1 downto 0));
195
 
196
  ddr2mem : for i in 0 to dbits/16-1 generate
197
    u1 : ddr2 generic map(DEBUG => 0)
198
    PORT MAP(
199
      ck => ddr_clk(0), ck_n => ddr_clkb(0), cke => ddr_cke(0), cs_n => ddr_csb(0),
200
      ras_n => ddr_rasb, cas_n => ddr_casb, we_n => ddr_web,
201
      dm_rdqs => ddr_dm(i*2+1 downto i*2), ba => ddr_ba(1 downto 0),
202
      addr => ddr_ad(12 downto 0), dq => ddr_dq2(i*16+15 downto i*16),
203
      dqs => ddr_dqsp(i*2+1 downto i*2), dqs_n => ddr_dqsn(i*2+1 downto i*2),
204
      rdqs_n => ddr_rdqs(i*2+1 downto i*2), odt => ddr_odt(0));
205
  end generate;
206
 
207
  -- 16 bit prom
208
  prom0 : sram16 generic map (index => 4, abits => romdepth, fname => promfile)
209
        port map (address(romdepth downto 1), data(31 downto 16),
210
                  gnd, gnd, flash_cen, flash_wen, flash_oen);
211
 
212
--  -- 32 bit prom
213
--  prom0 : for i in 0 to 3 generate
214
--    sr0 : sram generic map (index => i, abits => romdepth, fname => promfile)
215
--       port map (address(romdepth+1 downto 2), data(31-i*8 downto 24-i*8), flash_cen,
216
--                 flash_wen, flash_oen);
217
--  end generate;
218
 
219
  sram0 : for i in 0 to (sramwidth/8)-1 generate
220
      sr0 : sram generic map (index => i, abits => sramdepth, fname => sramfile)
221
        port map (address(sramdepth+1 downto 2), data(31-i*8 downto 24-i*8), sram_csn,
222
                  sram_wen, sram_oen);
223
  end generate;
224
 
225
  error <= 'H';                   -- ERROR pull-up
226
 
227
   iuerr : process
228
   begin
229
     wait for 2500 ns;
230
     if to_x01(error) = '1' then wait on error; end if;
231
     assert (to_x01(error) = '1')
232
       report "*** IU in error mode, simulation halted ***"
233
         severity failure ;
234
   end process;
235
 
236
  data <= buskeep(data), (others => 'H') after 250 ns;
237
 
238
  test0 :  grtestmod
239
    port map ( rst, clk, error, address(21 downto 2), data,
240
               iosn, sram_oen, sram_wen, open);
241
 
242
 
243
  dsucom : process
244
    procedure dsucfg(signal dsurx : in std_ulogic; signal dsutx : out std_ulogic) is
245
    variable w32 : std_logic_vector(31 downto 0);
246
    variable c8  : std_logic_vector(7 downto 0);
247
    constant txp : time := 160 * 1 ns;
248
    begin
249
    dsutx <= '1';
250
    dsurst <= '0';
251
    wait for 500 ns;
252
    dsurst <= '1';
253
    wait;
254
    wait for 5000 ns;
255
    txc(dsutx, 16#55#, txp);            -- sync uart
256
 
257
--    txc(dsutx, 16#c0#, txp);
258
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
259
--    txa(dsutx, 16#00#, 16#00#, 16#02#, 16#ae#, txp);
260
--    txc(dsutx, 16#c0#, txp);
261
--    txa(dsutx, 16#91#, 16#00#, 16#00#, 16#00#, txp);
262
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#ae#, txp);
263
--    txc(dsutx, 16#c0#, txp);
264
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#24#, txp);
265
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#03#, txp);
266
--    txc(dsutx, 16#c0#, txp);
267
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
268
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#fc#, txp);
269
 
270
    txc(dsutx, 16#c0#, txp);
271
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
272
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#2f#, txp);
273
    txc(dsutx, 16#c0#, txp);
274
    txa(dsutx, 16#91#, 16#00#, 16#00#, 16#00#, txp);
275
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#6f#, txp);
276
    txc(dsutx, 16#c0#, txp);
277
    txa(dsutx, 16#90#, 16#11#, 16#00#, 16#00#, txp);
278
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#00#, txp);
279
    txc(dsutx, 16#c0#, txp);
280
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#04#, txp);
281
    txa(dsutx, 16#00#, 16#02#, 16#20#, 16#01#, txp);
282
    txc(dsutx, 16#c0#, txp);
283
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
284
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#02#, txp);
285
 
286
    txc(dsutx, 16#c0#, txp);
287
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
288
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#0f#, txp);
289
 
290
    txc(dsutx, 16#c0#, txp);
291
    txa(dsutx, 16#40#, 16#00#, 16#43#, 16#10#, txp);
292
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#0f#, txp);
293
 
294
    txc(dsutx, 16#c0#, txp);
295
    txa(dsutx, 16#91#, 16#40#, 16#00#, 16#24#, txp);
296
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#24#, txp);
297
    txc(dsutx, 16#c0#, txp);
298
    txa(dsutx, 16#91#, 16#70#, 16#00#, 16#00#, txp);
299
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#03#, txp);
300
 
301
 
302
 
303
 
304
 
305
    txc(dsutx, 16#c0#, txp);
306
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
307
    txa(dsutx, 16#00#, 16#00#, 16#ff#, 16#ff#, txp);
308
 
309
    txc(dsutx, 16#c0#, txp);
310
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#48#, txp);
311
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#12#, txp);
312
 
313
    txc(dsutx, 16#c0#, txp);
314
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#60#, txp);
315
    txa(dsutx, 16#00#, 16#00#, 16#12#, 16#10#, txp);
316
 
317
    txc(dsutx, 16#80#, txp);
318
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
319
    rxi(dsurx, w32, txp, lresp);
320
 
321
    txc(dsutx, 16#a0#, txp);
322
    txa(dsutx, 16#40#, 16#00#, 16#00#, 16#00#, txp);
323
    rxi(dsurx, w32, txp, lresp);
324
 
325
    end;
326
 
327
  begin
328
 
329
    dsucfg(dsutx, dsurx);
330
 
331
    wait;
332
  end process;
333
end ;
334
 

powered by: WebSVN 2.1.0

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