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-ep1c20/] [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
use work.debug.all;
26
 
27
use work.config.all;    -- configuration
28
 
29
entity testbench is
30
  generic (
31
    fabtech   : integer := CFG_FABTECH;
32
    memtech   : integer := CFG_MEMTECH;
33
    padtech   : integer := CFG_PADTECH;
34
    clktech   : integer := CFG_CLKTECH;
35
    ncpu      : integer := CFG_NCPU;
36
    disas     : integer := CFG_DISAS;   -- Enable disassembly to console
37
    dbguart   : integer := CFG_DUART;   -- Print UART on console
38
    pclow     : integer := CFG_PCLOW;
39
 
40
    clkperiod : integer := 20;          -- system clock period
41
    romwidth  : integer := 8;           -- rom data width (8/32)
42
    romdepth  : integer := 23;          -- rom address depth
43
    sramwidth  : integer := 32;         -- ram data width (8/16/32)
44
    sramdepth  : integer := 20;         -- ram address depth
45
    srambanks  : integer := 1           -- number of ram banks
46
  );
47
end;
48
 
49
architecture behav of testbench is
50
 
51
constant promfile  : string := "prom.srec";  -- rom contents
52
constant sramfile  : string := "sram.srec";  -- ram contents
53
constant sdramfile : string := "sdram.srec"; -- sdram contents
54
 
55
component leon3mp
56
  generic (
57
    fabtech  : integer := CFG_FABTECH;
58
    memtech  : integer := CFG_MEMTECH;
59
    padtech  : integer := CFG_PADTECH;
60
    clktech  : integer := CFG_CLKTECH;
61
    ncpu     : integer := CFG_NCPU;
62
    disas    : integer := CFG_DISAS;    -- Enable disassembly to console
63
    dbguart  : integer := CFG_DUART;    -- Print UART on console
64
    pclow    : integer := CFG_PCLOW
65
  );
66
  port (
67
    resetn      : in  std_ulogic;
68
    clk         : in  std_ulogic;
69
    clkout      : out std_ulogic;
70
    pllref      : in  std_ulogic;
71
    errorn      : out std_ulogic;
72
    address     : out std_logic_vector(27 downto 0);
73
    data        : inout std_logic_vector(31 downto 0);
74
 
75
    ramsn       : out std_ulogic;
76
    ramoen      : out std_ulogic;
77
    rwen        : out std_ulogic;
78
    mben        : out std_logic_vector (3 downto 0);
79
    iosn        : out std_ulogic;
80
    romsn       : out std_ulogic;
81
    oen         : out std_ulogic;
82
    writen      : out std_ulogic;
83
 
84
    sa          : out std_logic_vector(11 downto 0);
85
    sd          : inout std_logic_vector(31 downto 0);
86
    sdclk       : out std_ulogic;
87
    sdcke       : out std_ulogic;    -- sdram clock enable
88
    sdcsn       : out std_ulogic;    -- sdram chip select
89
    sdwen       : out std_ulogic;                       -- sdram write enable
90
    sdrasn      : out std_ulogic;                       -- sdram ras
91
    sdcasn      : out std_ulogic;                       -- sdram cas
92
    sddqm       : out std_logic_vector (3 downto 0);    -- sdram dqm
93
    sdba        : out std_logic_vector (1 downto 0);
94
 
95
    dsutx       : out std_ulogic;                       -- DSU tx data
96
    dsurx       : in  std_ulogic;                       -- DSU rx data
97
    dsubren     : in std_ulogic;
98
    dsuact      : out std_ulogic;
99
 
100
    rxd1        : in  std_ulogic;                       -- UART1 rx data
101
    txd1        : out std_ulogic;                       -- UART1 tx data    
102
 
103
    ata_rst   : out std_logic;
104
    ata_data  : inout std_logic_vector(15 downto 0);
105
    ata_da    : out std_logic_vector(2 downto 0);
106
    ata_cs0   : out std_logic;
107
    ata_cs1   : out std_logic;
108
    ata_dior  : out std_logic;
109
    ata_diow  : out std_logic;
110
    ata_iordy : in std_logic;
111
    ata_intrq : in std_logic;
112
    ata_dmack : out std_logic;
113
    cf_power  : out std_logic;
114
    cf_gnd_da : out std_logic_vector(10 downto 3); -- grounded address lines
115
    cf_atasel : out std_logic; -- grounded to select true IDE mode
116
    cf_we     : out std_logic; -- should be connected to VCC in true IDE mode
117
    cf_csel   : out std_logic;
118
 
119
    -- for smc lan chip
120
    eth_aen    : out std_ulogic;
121
    eth_readn  : out std_ulogic;
122
    eth_writen : out std_ulogic;
123
    eth_nbe    : out std_logic_vector (3 downto 0);
124
 
125
    eth_lclk     : out std_ulogic;
126
    eth_nads     : out std_logic;
127
    eth_ncycle   : out std_logic;
128
    eth_wnr      : out std_logic;
129
    eth_nvlbus   : out std_logic;
130
    eth_nrdyrtn  : out std_logic;
131
    eth_ndatacs  : out std_logic
132
        );
133
end component;
134
 
135
signal clk : std_logic := '0';
136
signal clkout, pllref : std_ulogic;
137
signal Rst    : std_logic := '0';                        -- Reset
138
constant ct : integer := clkperiod/2;
139
 
140
signal address  : std_logic_vector(27 downto 0);
141
signal data     : std_logic_vector(31 downto 0);
142
 
143
signal ramsn    : std_ulogic;
144
signal ramoen   : std_ulogic;
145
signal rwen     : std_ulogic;
146
signal mben     : std_logic_vector(3 downto 0);
147
--signal rwenx    : std_logic_vector(3 downto 0);
148
signal romsn    : std_ulogic;
149
signal iosn     : std_ulogic;
150
signal oen      : std_ulogic;
151
--signal read     : std_ulogic;
152
signal writen   : std_ulogic;
153
signal brdyn    : std_ulogic;
154
signal bexcn    : std_ulogic;
155
signal wdog     : std_ulogic;
156
signal dsuen, dsutx, dsurx, dsubren, dsuact : std_ulogic;
157
signal dsurst   : std_ulogic;
158
signal test     : std_ulogic;
159
signal error    : std_logic;
160
signal gpio     : std_logic_vector(7 downto 0);
161
signal GND      : std_ulogic := '0';
162
signal VCC      : std_ulogic := '1';
163
signal NC       : std_ulogic := 'Z';
164
signal clk2     : std_ulogic := '1';
165
 
166
signal sdcke    : std_ulogic;  -- clk en
167
signal sdcsn    : std_ulogic;  -- chip sel
168
signal sdwen    : std_ulogic;                       -- write en
169
signal sdrasn   : std_ulogic;                       -- row addr stb
170
signal sdcasn   : std_ulogic;                       -- col addr stb
171
signal sddqm    : std_logic_vector (3 downto 0);  -- data i/o mask
172
signal sdclk    : std_ulogic;
173
signal sdba     : std_logic_vector(1 downto 0);
174
 
175
signal plllock    : std_ulogic;
176
signal txd1, rxd1 : std_ulogic;
177
--signal txd2, rxd2 : std_ulogic;       
178
 
179
-- for smc lan chip
180
signal eth_aen    : std_ulogic; -- for smsc eth
181
signal eth_readn  : std_ulogic; -- for smsc eth
182
signal eth_writen : std_ulogic; -- for smsc eth
183
signal eth_nbe    : std_logic_vector(3 downto 0); -- for smsc eth
184
signal eth_datacsn : std_ulogic;
185
 
186
constant lresp : boolean := false;
187
 
188
signal sa       : std_logic_vector(14 downto 0);
189
signal sd       : std_logic_vector(31 downto 0);
190
 
191
-- ATA signals
192
signal ata_rst   : std_logic;
193
signal ata_data  : std_logic_vector(15 downto 0);
194
signal ata_da    : std_logic_vector(2 downto 0);
195
signal ata_cs0   : std_logic;
196
signal ata_cs1   : std_logic;
197
signal ata_dior  : std_logic;
198
signal ata_diow  : std_logic;
199
signal ata_iordy : std_logic;
200
signal ata_intrq : std_logic;
201
signal ata_dmack : std_logic;
202
signal cf_gnd_da : std_logic_vector(10 downto 3);
203
signal cf_atasel : std_logic;
204
signal cf_we     : std_logic;
205
signal cf_power  : std_logic;
206
signal cf_csel   : std_logic;
207
 
208
signal from_ata : ata_out_type := ATAO_RESET_VECTOR;
209
signal to_ata : ata_in_type := ATAI_RESET_VECTOR;
210
 
211
begin
212
 
213
-- clock and reset
214
 
215
  clk <= not clk after ct * 1 ns;
216
  rst <= dsurst;
217
  dsubren <= '1'; rxd1 <= '1';
218
  pllref <= clkout;
219
  d3 : leon3mp
220
        generic map ( fabtech, memtech, padtech, clktech, ncpu,
221
        disas, dbguart, pclow )
222
        port map (rst, clk, clkout, pllref, error, address, data,
223
                  ramsn, ramoen, rwen, mben, iosn,
224
                  romsn, oen, writen,
225
                  sa(11 downto 0), sd, sdclk, sdcke, sdcsn, sdwen, sdrasn, sdcasn, sddqm, sdba,
226
                  dsutx, dsurx, dsubren, dsuact,
227
                  rxd1, txd1,
228
                  ata_rst, ata_data, ata_da, ata_cs0, ata_cs1, ata_dior, ata_diow,
229
                  ata_iordy, ata_intrq, ata_dmack,
230
                  cf_power, cf_gnd_da, cf_atasel, cf_we, cf_csel,
231
                  eth_aen, eth_readn, eth_writen, eth_nbe);
232
 
233
-- optional sdram
234
 
235
  sd1 : if (CFG_MCTRL_SDEN = 1) and (CFG_MCTRL_SEPBUS = 1) generate
236
    u0: mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
237
        PORT MAP(
238
            Dq => sd(31 downto 16), Addr => sa(12 downto 0),
239
            Ba => sdba, Clk => sdclk, Cke => sdcke,
240
            Cs_n => sdcsn, Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
241
            Dqm => sddqm(3 downto 2));
242
    u1: mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
243
        PORT MAP(
244
            Dq => sd(15 downto 0), Addr => sa(12 downto 0),
245
            Ba => sdba, Clk => sdclk, Cke => sdcke,
246
            Cs_n => sdcsn, Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
247
            Dqm => sddqm(1 downto 0));
248
    u2: mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
249
        PORT MAP(
250
            Dq => sd(31 downto 16), Addr => sa(12 downto 0),
251
            Ba => sdba, Clk => sdclk, Cke => sdcke,
252
            Cs_n => sdcsn, Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
253
            Dqm => sddqm(3 downto 2));
254
    u3: mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
255
        PORT MAP(
256
            Dq => sd(15 downto 0), Addr => sa(12 downto 0),
257
            Ba => sdba, Clk => sdclk, Cke => sdcke,
258
            Cs_n => sdcsn, Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
259
            Dqm => sddqm(1 downto 0));
260
 
261
  end generate;
262
 
263
  -- 8 bit prom
264
  prom0 : sram generic map (index => 6, abits => romdepth, fname => promfile)
265
        port map (address(romdepth-1 downto 0), data(31 downto 24),
266
                  romsn, rwen, oen);
267
 
268
  sram0 : for i in 0 to (sramwidth/8)-1 generate
269
    sr0 : sram generic map (index => i, abits => sramdepth, fname => sramfile)
270
      port map (address(sramdepth+1 downto 2), data(31-i*8 downto 24-i*8), ramsn,
271
                  rwen, ramoen);
272
  end generate;
273
 
274
  disk: ata_device
275
    generic map( sector_length => 512, log2_size => 14)
276
    port map( clk => clk, rst => rst, d => ata_data, atai => to_ata,
277
      atao => from_ata
278
    );
279
  to_ata.cs(0)<=ata_cs0; to_ata.cs(1)<=ata_cs1;
280
  to_ata.da<=ata_da; to_ata.dmack<=ata_dmack;
281
  to_ata.dior<=ata_dior; to_ata.diow<=ata_diow; to_ata.reset<=ata_rst;
282
  ata_intrq<=from_ata.intrq; ata_iordy<=from_ata.iordy;
283
 
284
  error <= 'H';                   -- ERROR pull-up
285
 
286
   iuerr : process
287
   begin
288
     wait for 2500 ns;
289
     if to_x01(error) = '1' then wait on error; end if;
290
     assert (to_x01(error) = '1')
291
       report "*** IU in error mode, simulation halted ***"
292
         severity failure ;
293
   end process;
294
 
295
  data <= buskeep(data), (others => 'H') after 250 ns;
296
  sd <= buskeep(sd), (others => 'H') after 250 ns;
297
 
298
  test0 :  grtestmod
299
    port map ( rst, clk, error, address(21 downto 2), data,
300
               iosn, oen, writen, brdyn);
301
 
302
 
303
  dsucom : process
304
    procedure dsucfg(signal dsurx : in std_ulogic; signal dsutx : out std_ulogic) is
305
    variable w32 : std_logic_vector(31 downto 0);
306
    variable c8  : std_logic_vector(7 downto 0);
307
    constant txp : time := 160 * 1 ns;
308
    begin
309
    dsutx <= '1';
310
    dsurst <= '0';
311
    wait for 500 ns;
312
    dsurst <= '1';
313
    wait;
314
    wait for 5000 ns;
315
    txc(dsutx, 16#55#, txp);            -- sync uart
316
 
317
--    txc(dsutx, 16#c0#, txp);
318
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
319
--    txa(dsutx, 16#00#, 16#00#, 16#02#, 16#ae#, txp);
320
--    txc(dsutx, 16#c0#, txp);
321
--    txa(dsutx, 16#91#, 16#00#, 16#00#, 16#00#, txp);
322
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#ae#, txp);
323
--    txc(dsutx, 16#c0#, txp);
324
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#24#, txp);
325
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#03#, txp);
326
--    txc(dsutx, 16#c0#, txp);
327
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
328
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#fc#, txp);
329
 
330
    txc(dsutx, 16#c0#, txp);
331
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
332
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#2f#, txp);
333
    txc(dsutx, 16#c0#, txp);
334
    txa(dsutx, 16#91#, 16#00#, 16#00#, 16#00#, txp);
335
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#6f#, txp);
336
    txc(dsutx, 16#c0#, txp);
337
    txa(dsutx, 16#90#, 16#11#, 16#00#, 16#00#, txp);
338
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#00#, txp);
339
    txc(dsutx, 16#c0#, txp);
340
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#04#, txp);
341
    txa(dsutx, 16#00#, 16#02#, 16#20#, 16#01#, txp);
342
    txc(dsutx, 16#c0#, txp);
343
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
344
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#02#, txp);
345
 
346
    txc(dsutx, 16#c0#, txp);
347
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
348
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#0f#, txp);
349
 
350
    txc(dsutx, 16#c0#, txp);
351
    txa(dsutx, 16#40#, 16#00#, 16#43#, 16#10#, txp);
352
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#0f#, txp);
353
 
354
    txc(dsutx, 16#c0#, txp);
355
    txa(dsutx, 16#91#, 16#40#, 16#00#, 16#24#, txp);
356
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#24#, txp);
357
    txc(dsutx, 16#c0#, txp);
358
    txa(dsutx, 16#91#, 16#70#, 16#00#, 16#00#, txp);
359
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#03#, txp);
360
 
361
 
362
 
363
 
364
 
365
    txc(dsutx, 16#c0#, txp);
366
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
367
    txa(dsutx, 16#00#, 16#00#, 16#ff#, 16#ff#, txp);
368
 
369
    txc(dsutx, 16#c0#, txp);
370
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#48#, txp);
371
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#12#, txp);
372
 
373
    txc(dsutx, 16#c0#, txp);
374
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#60#, txp);
375
    txa(dsutx, 16#00#, 16#00#, 16#12#, 16#10#, txp);
376
 
377
    txc(dsutx, 16#80#, txp);
378
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
379
    rxi(dsurx, w32, txp, lresp);
380
 
381
    txc(dsutx, 16#a0#, txp);
382
    txa(dsutx, 16#40#, 16#00#, 16#00#, 16#00#, txp);
383
    rxi(dsurx, w32, txp, lresp);
384
 
385
    end;
386
 
387
  begin
388
 
389
    dsucfg(dsutx, dsurx);
390
 
391
    wait;
392
  end process;
393
end ;
394
 

powered by: WebSVN 2.1.0

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