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-ep2s60-ddr/] [testbench.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dimamali
------------------------------------------------------------------------------
2
--  LEON3 Demonstration design test bench
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
 
16
library ieee;
17
use ieee.std_logic_1164.all;
18
library gaisler;
19
use gaisler.libdcom.all;
20
use gaisler.sim.all;
21
library techmap;
22
use techmap.gencomp.all;
23
library micron;
24
use micron.components.all;
25
library cypress;
26
use cypress.components.all;
27
 
28
use work.debug.all;
29
 
30
use work.config.all;    -- configuration
31
 
32
entity testbench is
33
  generic (
34
    fabtech   : integer := CFG_FABTECH;
35
    memtech   : integer := CFG_MEMTECH;
36
    padtech   : integer := CFG_PADTECH;
37
    clktech   : integer := CFG_CLKTECH;
38
    ncpu      : integer := CFG_NCPU;
39
    disas     : integer := CFG_DISAS;   -- Enable disassembly to console
40
    dbguart   : integer := CFG_DUART;   -- Print UART on console
41
    pclow     : integer := CFG_PCLOW;
42
 
43
    clkperiod : integer := 20;          -- system clock period
44
    romwidth  : integer := 8;           -- rom data width (8/32)
45
    romdepth  : integer := 23;          -- rom address depth
46
    sramwidth  : integer := 32;         -- ram data width (8/16/32)
47
    sramdepth  : integer := 20;         -- ram address depth
48
    srambanks  : integer := 1           -- number of ram banks
49
  );
50
end;
51
 
52
architecture behav of testbench is
53
 
54
constant promfile  : string := "prom.srec";  -- rom contents
55
constant sramfile  : string := "sram.srec";  -- ram contents
56
constant sdramfile : string := "sdram.srec"; -- sdram contents
57
 
58
signal clk : std_logic := '0';
59
signal clkout, pllref : std_ulogic;
60
signal Rst    : std_logic := '0';                        -- Reset
61
constant ct : integer := clkperiod/2;
62
 
63
signal address  : std_logic_vector(23 downto 0);
64
signal data     : std_logic_vector(31 downto 0);
65
signal romsn    : std_ulogic;
66
signal iosn     : std_ulogic;
67
signal oen      : std_ulogic;
68
signal writen   : std_ulogic;
69
signal dsuen, dsutx, dsurx, dsubren, dsuact : std_ulogic;
70
signal dsurst   : std_ulogic;
71
signal test     : std_ulogic;
72
signal error    : std_logic;
73
signal gpio     : std_logic_vector(CFG_GRGPIO_WIDTH-1 downto 0);
74
signal GND      : std_ulogic := '0';
75
signal VCC      : std_ulogic := '1';
76
signal NC       : std_ulogic := 'Z';
77
signal clk2     : std_ulogic := '1';
78
 
79
  signal ssram_ce1n   : std_logic;
80
  signal ssram_ce2    : std_logic;
81
  signal ssram_ce3n   : std_logic;
82
  signal ssram_wen    : std_logic;
83
  signal ssram_bw     : std_logic_vector (0 to 3);
84
  signal ssram_oen    : std_ulogic;
85
  signal ssaddr       : std_logic_vector(20 downto 2);
86
  signal ssdata       : std_logic_vector(31 downto 0);
87
  signal ssram_clk    : std_ulogic;
88
  signal ssram_adscn  : std_ulogic;
89
  signal ssram_adsp_n : std_ulogic;
90
  signal ssram_adv_n  : std_ulogic;
91
  signal datazz       : std_logic_vector(3 downto 0);
92
 
93
  -- ddr memory  
94
  signal ddr_clk        : std_logic;
95
  signal ddr_clkb       : std_logic;
96
  signal ddr_clkin      : std_logic;
97
  signal ddr_cke        : std_logic;
98
  signal ddr_csb        : std_logic;
99
  signal ddr_web        : std_ulogic;                       -- ddr write enable
100
  signal ddr_rasb       : std_ulogic;                       -- ddr ras
101
  signal ddr_casb       : std_ulogic;                       -- ddr cas
102
  signal ddr_dm         : std_logic_vector (1 downto 0);    -- ddr dm
103
  signal ddr_dqs        : std_logic_vector (1 downto 0);    -- ddr dqs
104
  signal ddr_ad      : std_logic_vector (12 downto 0);   -- ddr address
105
  signal ddr_ba      : std_logic_vector (1 downto 0);    -- ddr bank address
106
  signal ddr_dq                 : std_logic_vector (15 downto 0); -- ddr data
107
 
108
signal plllock    : std_ulogic;
109
signal txd1, rxd1 : std_ulogic;
110
--signal txd2, rxd2 : std_ulogic;       
111
 
112
-- for smc lan chip
113
signal eth_aen    : std_ulogic; -- for smsc eth
114
signal eth_readn  : std_ulogic; -- for smsc eth
115
signal eth_writen : std_ulogic; -- for smsc eth
116
signal eth_nbe    : std_logic_vector(3 downto 0); -- for smsc eth
117
signal eth_datacsn : std_ulogic;
118
 
119
constant lresp : boolean := false;
120
 
121
signal sa       : std_logic_vector(14 downto 0);
122
signal sd       : std_logic_vector(31 downto 0);
123
 
124
-- ATA signals
125
signal ata_rst   : std_logic;
126
signal ata_data  : std_logic_vector(15 downto 0);
127
signal ata_da    : std_logic_vector(2 downto 0);
128
signal ata_cs0   : std_logic;
129
signal ata_cs1   : std_logic;
130
signal ata_dior  : std_logic;
131
signal ata_diow  : std_logic;
132
signal ata_iordy : std_logic;
133
signal ata_intrq : std_logic;
134
signal ata_dmarq : std_logic;
135
signal ata_dmack : std_logic;
136
signal cf_gnd_da : std_logic_vector(10 downto 3);
137
signal cf_atasel : std_logic;
138
signal cf_we     : std_logic;
139
signal cf_power  : std_logic;
140
signal cf_csel   : std_logic;
141
 
142
signal from_ata : ata_out_type := ATAO_RESET_VECTOR;
143
signal to_ata : ata_in_type := ATAI_RESET_VECTOR;
144
 
145
begin
146
 
147
-- clock and reset
148
 
149
  clk <= not clk after ct * 1 ns;
150
  ddr_clkin <= not clk after ct * 1 ns;
151
  rst <= dsurst;
152
  dsubren <= '1'; rxd1 <= '1';
153
 
154
--  ddr_dqs <= (others => 'L');
155
  d3 : entity work.leon3mp generic map (fabtech, memtech, padtech, clktech,
156
        ncpu, disas, dbguart, pclow )
157
    port map (rst, clk, error,
158
        address, data, romsn, oen, writen, open, open,
159
        ssram_ce1n, ssram_ce2, ssram_ce3n, ssram_wen, ssram_bw, ssram_oen, ssaddr, ssdata,
160
        ssram_clk, ssram_adscn, ssram_adsp_n, ssram_adv_n,  iosn,
161
        ddr_clkin, ddr_clk, ddr_clkb, ddr_cke, ddr_csb, ddr_web, ddr_rasb,
162
        ddr_casb, ddr_dm, ddr_dqs, ddr_ad, ddr_ba, ddr_dq,
163
        dsubren, dsuact, rxd1, txd1,
164
        ata_data, ata_da, ata_cs0, ata_cs1,
165
        ata_dior, ata_diow, ata_iordy, ata_intrq, ata_dmarq, ata_dmack, cf_power,
166
        cf_gnd_da, cf_atasel, cf_we, eth_aen, eth_readn,
167
        eth_writen, eth_nbe);
168
 
169
  ddr0 : mt46v16m16
170
    generic map (index => -1, fname => sdramfile)
171
    port map(
172
      Dq => ddr_dq(15 downto 0), Dqs => ddr_dqs(1 downto 0), Addr => ddr_ad,
173
      Ba => ddr_ba, Clk => ddr_clk,  Clk_n => ddr_clkb, Cke => ddr_cke,
174
      Cs_n => ddr_csb, Ras_n => ddr_rasb, Cas_n => ddr_casb, We_n => ddr_web,
175
      Dm => ddr_dm(1 downto 0));
176
 
177
  datazz <= "HHHH";
178
 
179
  ssram0 : cy7c1380d generic map (fname => sramfile)
180
   port map(
181
      ioDq(35 downto 32) => datazz, ioDq(31 downto 0) => ssdata,
182
      iAddr => ssaddr(20 downto 2), iMode =>  gnd,
183
      inGW => vcc, inBWE => ssram_wen, inADV => ssram_adv_n,
184
      inADSP => ssram_adsp_n, inADSC => ssram_adscn,
185
      iClk => ssram_clk,
186
      inBwa => ssram_bw(3), inBwb => ssram_bw(2),
187
      inBwc => ssram_bw(1), inBwd => ssram_bw(0),
188
      inOE => ssram_oen, inCE1 => ssram_ce1n,
189
      iCE2 => ssram_ce2, inCE3 => ssram_ce3n, iZz => gnd);
190
 
191
  -- 8 bit prom
192
  prom0 : sram generic map (index => 6, abits => romdepth, fname => promfile)
193
        port map (address(romdepth-1 downto 0), data(31 downto 24),
194
                  romsn, writen, oen);
195
 
196
--  to_ata.csel<=ata_csel;
197
  to_ata.cs(0)<=ata_cs0;
198
  to_ata.cs(1)<=ata_cs1;
199
  --??to_ata.dasp<=
200
  to_ata.da<=ata_da;
201
  to_ata.dmack<=ata_dmack;
202
  to_ata.dior<=ata_dior;
203
  to_ata.diow<=ata_diow;
204
  to_ata.reset<=rst;
205
 
206
  ata_dmarq<=from_ata.dmarq;
207
  ata_intrq<=from_ata.intrq;
208
  ata_iordy<=from_ata.iordy;
209
 
210
  disk: ata_device
211
    generic map(sector_length=>512,log2_size=>14)
212
    port map(
213
      clk => clk,
214
      rst => rst,
215
      d => ata_data,
216
      atai => to_ata,
217
      atao => from_ata
218
    );
219
 
220
  error <= 'H';                   -- ERROR pull-up
221
 
222
   iuerr : process
223
   begin
224
     wait for 2500 ns;
225
     if to_x01(error) = '1' then wait on error; end if;
226
     assert (to_x01(error) = '1')
227
       report "*** IU in error mode, simulation halted ***"
228
         severity failure ;
229
   end process;
230
 
231
  data <= buskeep(data), (others => 'H') after 250 ns;
232
  sd <= buskeep(sd), (others => 'H') after 250 ns;
233
 
234
  test0 :  grtestmod
235
    port map ( rst, clk, error, address(21 downto 2), data,
236
               iosn, oen, writen, open);
237
 
238
 
239
  dsucom : process
240
    procedure dsucfg(signal dsurx : in std_ulogic; signal dsutx : out std_ulogic) is
241
    variable w32 : std_logic_vector(31 downto 0);
242
    variable c8  : std_logic_vector(7 downto 0);
243
    constant txp : time := 160 * 1 ns;
244
    begin
245
    dsutx <= '1';
246
    dsurst <= '0';
247
    wait for 500 ns;
248
    dsurst <= '1';
249
    wait;
250
    wait for 5000 ns;
251
    txc(dsutx, 16#55#, txp);            -- sync uart
252
 
253
--    txc(dsutx, 16#c0#, txp);
254
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
255
--    txa(dsutx, 16#00#, 16#00#, 16#02#, 16#ae#, txp);
256
--    txc(dsutx, 16#c0#, txp);
257
--    txa(dsutx, 16#91#, 16#00#, 16#00#, 16#00#, txp);
258
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#ae#, txp);
259
--    txc(dsutx, 16#c0#, txp);
260
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#24#, txp);
261
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#03#, txp);
262
--    txc(dsutx, 16#c0#, txp);
263
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
264
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#fc#, txp);
265
 
266
    txc(dsutx, 16#c0#, txp);
267
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
268
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#2f#, txp);
269
    txc(dsutx, 16#c0#, txp);
270
    txa(dsutx, 16#91#, 16#00#, 16#00#, 16#00#, txp);
271
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#6f#, txp);
272
    txc(dsutx, 16#c0#, txp);
273
    txa(dsutx, 16#90#, 16#11#, 16#00#, 16#00#, txp);
274
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#00#, txp);
275
    txc(dsutx, 16#c0#, txp);
276
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#04#, txp);
277
    txa(dsutx, 16#00#, 16#02#, 16#20#, 16#01#, txp);
278
    txc(dsutx, 16#c0#, txp);
279
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
280
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#02#, txp);
281
 
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#0f#, txp);
285
 
286
    txc(dsutx, 16#c0#, txp);
287
    txa(dsutx, 16#40#, 16#00#, 16#43#, 16#10#, txp);
288
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#0f#, txp);
289
 
290
    txc(dsutx, 16#c0#, txp);
291
    txa(dsutx, 16#91#, 16#40#, 16#00#, 16#24#, txp);
292
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#24#, txp);
293
    txc(dsutx, 16#c0#, txp);
294
    txa(dsutx, 16#91#, 16#70#, 16#00#, 16#00#, txp);
295
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#03#, txp);
296
 
297
 
298
 
299
 
300
 
301
    txc(dsutx, 16#c0#, txp);
302
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
303
    txa(dsutx, 16#00#, 16#00#, 16#ff#, 16#ff#, txp);
304
 
305
    txc(dsutx, 16#c0#, txp);
306
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#48#, txp);
307
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#12#, txp);
308
 
309
    txc(dsutx, 16#c0#, txp);
310
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#60#, txp);
311
    txa(dsutx, 16#00#, 16#00#, 16#12#, 16#10#, txp);
312
 
313
    txc(dsutx, 16#80#, txp);
314
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
315
    rxi(dsurx, w32, txp, lresp);
316
 
317
    txc(dsutx, 16#a0#, txp);
318
    txa(dsutx, 16#40#, 16#00#, 16#00#, 16#00#, txp);
319
    rxi(dsurx, w32, txp, lresp);
320
 
321
    end;
322
 
323
  begin
324
 
325
    dsucfg(dsutx, dsurx);
326
 
327
    wait;
328
  end process;
329
end ;
330
 

powered by: WebSVN 2.1.0

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