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-sdr/] [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 opencores;
26
use opencores.occomp.all;
27
use work.debug.all;
28
 
29
use work.config.all;    -- configuration
30
 
31
entity testbench is
32
  generic (
33
    fabtech   : integer := CFG_FABTECH;
34
    memtech   : integer := CFG_MEMTECH;
35
    padtech   : integer := CFG_PADTECH;
36
    clktech   : integer := CFG_CLKTECH;
37
    ncpu      : integer := CFG_NCPU;
38
    disas     : integer := CFG_DISAS;   -- Enable disassembly to console
39
    dbguart   : integer := CFG_DUART;   -- Print UART on console
40
    pclow     : integer := CFG_PCLOW;
41
 
42
    clkperiod : integer := 20;          -- system clock period
43
    romwidth  : integer := 8;           -- rom data width (8/32)
44
    romdepth  : integer := 23;          -- rom address depth
45
    sramwidth  : integer := 32;         -- ram data width (8/16/32)
46
    sramdepth  : integer := 20;         -- ram address depth
47
    srambanks  : integer := 1           -- number of ram banks
48
  );
49
end;
50
 
51
architecture behav of testbench is
52
 
53
constant promfile  : string := "prom.srec";  -- rom contents
54
constant sramfile  : string := "sram.srec";  -- ram contents
55
constant sdramfile : string := "sdram.srec"; -- sdram contents
56
 
57
signal clk : std_logic := '0';
58
signal clkout, pllref : std_ulogic;
59
signal Rst    : std_logic := '0';                        -- Reset
60
constant ct : integer := clkperiod/2;
61
 
62
signal address  : std_logic_vector(23 downto 0);
63
signal data     : std_logic_vector(31 downto 0);
64
 
65
signal ramsn    : std_ulogic;
66
signal ramoen   : std_ulogic;
67
signal rwen     : std_ulogic;
68
signal mben     : std_logic_vector(3 downto 0);
69
--signal rwenx    : std_logic_vector(3 downto 0);
70
signal romsn    : std_ulogic;
71
signal iosn     : std_ulogic;
72
signal oen      : std_ulogic;
73
--signal read     : std_ulogic;
74
signal writen   : std_ulogic;
75
signal brdyn    : std_ulogic;
76
signal bexcn    : std_ulogic;
77
signal wdog     : std_ulogic;
78
signal dsuen, dsutx, dsurx, dsubren, dsuact : std_ulogic;
79
signal dsurst   : std_ulogic;
80
signal test     : std_ulogic;
81
signal error    : std_logic;
82
signal gpio     : std_logic_vector(CFG_GRGPIO_WIDTH-1 downto 0);
83
signal GND      : std_ulogic := '0';
84
signal VCC      : std_ulogic := '1';
85
signal NC       : std_ulogic := 'Z';
86
signal clk2     : std_ulogic := '1';
87
 
88
signal sdcke    : std_ulogic;  -- clk en
89
signal sdcsn    : std_ulogic;  -- chip sel
90
signal sdwen    : std_ulogic;                       -- write en
91
signal sdrasn   : std_ulogic;                       -- row addr stb
92
signal sdcasn   : std_ulogic;                       -- col addr stb
93
signal sddqm    : std_logic_vector (3 downto 0);  -- data i/o mask
94
signal sdclk    : std_ulogic;
95
signal sdba     : std_logic_vector(1 downto 0);
96
 
97
signal plllock    : std_ulogic;
98
signal txd1, rxd1 : std_ulogic;
99
--signal txd2, rxd2 : std_ulogic;       
100
 
101
-- for smc lan chip
102
signal eth_aen    : std_ulogic; -- for smsc eth
103
signal eth_readn  : std_ulogic; -- for smsc eth
104
signal eth_writen : std_ulogic; -- for smsc eth
105
signal eth_nbe    : std_logic_vector(3 downto 0); -- for smsc eth
106
signal eth_datacsn : std_ulogic;
107
 
108
constant lresp : boolean := false;
109
 
110
signal sa       : std_logic_vector(14 downto 0);
111
signal sd       : std_logic_vector(31 downto 0);
112
 
113
-- ATA signals
114
signal ata_rst   : std_logic;
115
signal ata_data  : std_logic_vector(15 downto 0);
116
signal ata_da    : std_logic_vector(2 downto 0);
117
signal ata_cs0   : std_logic;
118
signal ata_cs1   : std_logic;
119
signal ata_dior  : std_logic;
120
signal ata_diow  : std_logic;
121
signal ata_iordy : std_logic;
122
signal ata_intrq : std_logic;
123
signal ata_dmack : std_logic;
124
signal cf_gnd_da : std_logic_vector(10 downto 3);
125
signal cf_atasel : std_logic;
126
signal cf_we     : std_logic;
127
signal cf_power  : std_logic;
128
signal cf_csel   : std_logic;
129
 
130
begin
131
 
132
-- clock and reset
133
 
134
  clk <= not clk after ct * 1 ns;
135
  rst <= dsurst;
136
  dsubren <= '1'; rxd1 <= '1';
137
  d3 : entity work.leon3mp generic map (fabtech, memtech, padtech, clktech,
138
        ncpu, disas, dbguart, pclow )
139
    port map (rst, clk, error, address, data, ramsn, ramoen, rwen, mben, iosn,
140
        romsn, oen, writen, open, open, sa(11 downto 0), sd, sdclk, sdcke,
141
        sdcsn, sdwen, sdrasn, sdcasn, sddqm, sdba, dsutx, dsurx, dsubren,
142
        dsuact, rxd1, txd1, ata_rst, ata_data, ata_da, ata_cs0, ata_cs1,
143
        ata_dior, ata_diow, ata_iordy, ata_intrq, ata_dmack, cf_power,
144
        cf_gnd_da, cf_atasel, cf_we, cf_csel, eth_aen, eth_readn,
145
        eth_writen, eth_nbe);
146
 
147
  sd1 : if (CFG_MCTRL_SDEN = 1) and (CFG_MCTRL_SEPBUS = 1) generate
148
    u0: mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
149
        PORT MAP(
150
            Dq => sd(31 downto 16), Addr => sa(12 downto 0),
151
            Ba => sdba, Clk => sdclk, Cke => sdcke,
152
            Cs_n => sdcsn, Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
153
            Dqm => sddqm(3 downto 2));
154
    u1: mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
155
        PORT MAP(
156
            Dq => sd(15 downto 0), Addr => sa(12 downto 0),
157
            Ba => sdba, Clk => sdclk, Cke => sdcke,
158
            Cs_n => sdcsn, Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
159
            Dqm => sddqm(1 downto 0));
160
    u2: mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
161
        PORT MAP(
162
            Dq => sd(31 downto 16), Addr => sa(12 downto 0),
163
            Ba => sdba, Clk => sdclk, Cke => sdcke,
164
            Cs_n => sdcsn, Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
165
            Dqm => sddqm(3 downto 2));
166
    u3: mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
167
        PORT MAP(
168
            Dq => sd(15 downto 0), Addr => sa(12 downto 0),
169
            Ba => sdba, Clk => sdclk, Cke => sdcke,
170
            Cs_n => sdcsn, Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
171
            Dqm => sddqm(1 downto 0));
172
   end generate;
173
 
174
  -- 8 bit prom
175
  prom0 : sram generic map (index => 6, abits => romdepth, fname => promfile)
176
        port map (address(romdepth-1 downto 0), data(31 downto 24),
177
                  romsn, rwen, oen);
178
 
179
  sram0 : for i in 0 to (sramwidth/8)-1 generate
180
    sr0 : sram generic map (index => i, abits => sramdepth, fname => sramfile)
181
      port map (address(sramdepth+1 downto 2), data(31-i*8 downto 24-i*8), ramsn,
182
                  rwen, ramoen);
183
  end generate;
184
 
185
  ata_dev0 : ata_device_oc
186
  port map(
187
    ata_rst_n  => ata_rst,
188
    ata_data   => ata_data,
189
    ata_da     => ata_da,
190
    ata_cs0    => ata_cs0,
191
    ata_cs1    => ata_cs1,
192
    ata_dior_n => ata_dior,
193
    ata_diow_n => ata_diow,
194
    ata_iordy  => ata_iordy,
195
    ata_intrq  => ata_intrq
196
  );
197
 
198
  error <= 'H';                   -- ERROR pull-up
199
 
200
   iuerr : process
201
   begin
202
     wait for 2500 ns;
203
     if to_x01(error) = '1' then wait on error; end if;
204
     assert (to_x01(error) = '1')
205
       report "*** IU in error mode, simulation halted ***"
206
         severity failure ;
207
   end process;
208
 
209
  data <= buskeep(data), (others => 'H') after 250 ns;
210
  sd <= buskeep(sd), (others => 'H') after 250 ns;
211
 
212
  test0 :  grtestmod
213
    port map ( rst, clk, error, address(21 downto 2), data,
214
               iosn, oen, writen, brdyn);
215
 
216
 
217
  dsucom : process
218
    procedure dsucfg(signal dsurx : in std_ulogic; signal dsutx : out std_ulogic) is
219
    variable w32 : std_logic_vector(31 downto 0);
220
    variable c8  : std_logic_vector(7 downto 0);
221
    constant txp : time := 160 * 1 ns;
222
    begin
223
    dsutx <= '1';
224
    dsurst <= '0';
225
    wait for 500 ns;
226
    dsurst <= '1';
227
    wait;
228
    wait for 5000 ns;
229
    txc(dsutx, 16#55#, txp);            -- sync uart
230
 
231
--    txc(dsutx, 16#c0#, txp);
232
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
233
--    txa(dsutx, 16#00#, 16#00#, 16#02#, 16#ae#, txp);
234
--    txc(dsutx, 16#c0#, txp);
235
--    txa(dsutx, 16#91#, 16#00#, 16#00#, 16#00#, txp);
236
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#ae#, txp);
237
--    txc(dsutx, 16#c0#, txp);
238
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#24#, txp);
239
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#03#, txp);
240
--    txc(dsutx, 16#c0#, txp);
241
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
242
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#fc#, txp);
243
 
244
    txc(dsutx, 16#c0#, txp);
245
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
246
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#2f#, txp);
247
    txc(dsutx, 16#c0#, txp);
248
    txa(dsutx, 16#91#, 16#00#, 16#00#, 16#00#, txp);
249
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#6f#, txp);
250
    txc(dsutx, 16#c0#, txp);
251
    txa(dsutx, 16#90#, 16#11#, 16#00#, 16#00#, txp);
252
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#00#, txp);
253
    txc(dsutx, 16#c0#, txp);
254
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#04#, txp);
255
    txa(dsutx, 16#00#, 16#02#, 16#20#, 16#01#, txp);
256
    txc(dsutx, 16#c0#, txp);
257
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
258
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#02#, txp);
259
 
260
    txc(dsutx, 16#c0#, txp);
261
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
262
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#0f#, txp);
263
 
264
    txc(dsutx, 16#c0#, txp);
265
    txa(dsutx, 16#40#, 16#00#, 16#43#, 16#10#, txp);
266
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#0f#, txp);
267
 
268
    txc(dsutx, 16#c0#, txp);
269
    txa(dsutx, 16#91#, 16#40#, 16#00#, 16#24#, txp);
270
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#24#, txp);
271
    txc(dsutx, 16#c0#, txp);
272
    txa(dsutx, 16#91#, 16#70#, 16#00#, 16#00#, txp);
273
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#03#, txp);
274
 
275
 
276
 
277
 
278
 
279
    txc(dsutx, 16#c0#, txp);
280
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
281
    txa(dsutx, 16#00#, 16#00#, 16#ff#, 16#ff#, txp);
282
 
283
    txc(dsutx, 16#c0#, txp);
284
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#48#, txp);
285
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#12#, txp);
286
 
287
    txc(dsutx, 16#c0#, txp);
288
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#60#, txp);
289
    txa(dsutx, 16#00#, 16#00#, 16#12#, 16#10#, txp);
290
 
291
    txc(dsutx, 16#80#, txp);
292
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
293
    rxi(dsurx, w32, txp, lresp);
294
 
295
    txc(dsutx, 16#a0#, txp);
296
    txa(dsutx, 16#40#, 16#00#, 16#00#, 16#00#, txp);
297
    rxi(dsurx, w32, txp, lresp);
298
 
299
    end;
300
 
301
  begin
302
 
303
    dsucfg(dsutx, dsurx);
304
 
305
    wait;
306
  end process;
307
end ;
308
 

powered by: WebSVN 2.1.0

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