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-asic/] [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
use work.debug.all;
22
library techmap;
23
use techmap.gencomp.all;
24
library micron;
25
use micron.components.all;
26
use gaisler.jtagtst.all;
27
 
28
use work.config.all;    -- configuration
29
 
30
entity testbench is
31
  generic (
32
    fabtech   : integer := CFG_FABTECH;
33
    memtech   : integer := CFG_MEMTECH;
34
    padtech   : integer := CFG_PADTECH;
35
    clktech   : integer := CFG_CLKTECH;
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 := 32;          -- rom data width (8/32)
42
    romdepth  : integer := 16;          -- rom address depth
43
    sramwidth  : integer := 32;         -- ram data width (8/16/32)
44
    sramdepth  : integer := 18;         -- ram address depth
45
    srambanks  : integer := 2;          -- number of ram banks
46
    testen  : integer := 0;
47
    scanen  : integer := 0;
48
    testrst : integer := 0;
49
    testoen : integer := 0
50
  );
51
end;
52
 
53
architecture behav of testbench is
54
 
55
constant promfile  : string := "prom.srec";  -- rom contents
56
constant sramfile  : string := "sram.srec";  -- ram contents
57
constant sdramfile : string := "sdram.srec"; -- sdram contents
58
signal clk : std_logic := '0';
59
signal Rst    : std_logic := '0';                        -- Reset
60
constant ct : integer := clkperiod/2;
61
 
62
signal address  : std_logic_vector(27 downto 0);
63
signal data     : std_logic_vector(31 downto 0);
64
signal cb  : std_logic_vector(15 downto 0);
65
 
66
signal ramsn    : std_logic_vector(4 downto 0);
67
signal ramoen   : std_logic_vector(4 downto 0);
68
signal rwen     : std_logic_vector(3 downto 0);
69
signal rwenx    : std_logic_vector(3 downto 0);
70
signal romsn    : std_logic_vector(1 downto 0);
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 wdogn    : std_logic;
78
signal dsuen, dsutx, dsurx, dsubre, 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 VCC      : std_ulogic := '1';
84
signal NC       : std_ulogic := 'Z';
85
signal clk2     : std_ulogic := '1';
86
 
87
signal sdcke    : std_logic_vector ( 1 downto 0);  -- clk en
88
signal sdcsn    : std_logic_vector ( 1 downto 0);  -- chip sel
89
signal sdwen    : std_ulogic;                       -- write en
90
signal sdrasn   : std_ulogic;                       -- row addr stb
91
signal sdcasn   : std_ulogic;                       -- col addr stb
92
signal sddqm    : std_logic_vector ( 3 downto 0);  -- data i/o mask
93
signal sdclk    : std_ulogic := '0';
94
signal lock    : std_ulogic;
95
signal txd1, rxd1 : std_ulogic;
96
signal txd2, rxd2 : std_ulogic;
97
signal roen, roout, nandout, promedac : std_ulogic;
98
 
99
constant lresp : boolean := false;
100
 
101
signal gnd      : std_logic_vector(3 downto 0);
102
signal clksel   : std_logic_vector(1 downto 0);
103
signal prom32   : std_ulogic;
104
signal spw_clksel : std_logic_vector(1 downto 0);
105
 
106
signal spw_clk  : std_ulogic := '0';
107
signal spw_rxdp : std_logic_vector(0 to CFG_SPW_NUM-1);
108
signal spw_rxsp : std_logic_vector(0 to CFG_SPW_NUM-1);
109
signal spw_txdp : std_logic_vector(0 to CFG_SPW_NUM-1);
110
signal spw_txsp : std_logic_vector(0 to CFG_SPW_NUM-1);
111
signal spw_rxdn : std_logic_vector(0 to CFG_SPW_NUM-1);
112
signal spw_rxsn : std_logic_vector(0 to CFG_SPW_NUM-1);
113
signal spw_txdn : std_logic_vector(0 to CFG_SPW_NUM-1);
114
signal spw_txsn : std_logic_vector(0 to CFG_SPW_NUM-1);
115
 
116
begin
117
 
118
-- clock and reset
119
 
120
  test <= '0' when testen  = 0 else '1';
121
  rxd1 <= '1' when (testen = 1) and (testoen = 1) else
122
          '0' when (testen = 1) and (testoen = 0) else txd1;
123
  dsuen <= '1' when (testen = 1) and (testrst = 1) else
124
          '0' when (testen = 1) and (testrst = 0) else '1', '0' after 1500 ns;
125
  dsubre <= '1' when (testen = 1) and (scanen = 1) else
126
--          '0' when (testen = 1) and (scanen = 0) else '1';
127
          '0' when (testen = 1) and (scanen = 0) else '0';
128
 
129
  clksel <= "00";
130
  spw_clksel <= "00";
131
  error <= 'H';
132
  gnd <= "0000";
133
  clk <= not clk after ct * 1 ns;
134
  spw_clk <= not spw_clk after ct * 1 ns;
135
  rst <= dsurst;
136
  bexcn <= '1'; wdogn <= 'H';
137
  gpio(2 downto 0) <= "HHL";
138
--  gpio(CFG_GRGPIO_WIDTH-1 downto 3) <= (others => 'H');
139
  gpio(15 downto 11) <= "HLLHH"; --19
140
  gpio(10 downto 8) <= "HLL"; --4
141
  gpio(7 downto 0) <= (others => 'L');
142
  cb(15 downto 8) <= "HHHHHHHH";
143
  spw_rxdp <= spw_txdp; spw_rxsp <= spw_txsp;
144
  spw_rxdn <= spw_txdn; spw_rxsn <= spw_txsn;
145
  roen <= '0';
146
  promedac <= '0';
147
  prom32 <= '1';
148
  rxd2 <= txd2;
149
 
150
  d3 : entity work.leon3mp
151
        generic map ( fabtech, memtech, padtech, clktech, disas, dbguart, pclow )
152
        port map (rst, clksel, clk, lock, error, wdogn, address, data,
153
        cb(7 downto 0), sdclk, sdcsn, sdwen,
154
        sdrasn, sdcasn, sddqm, dsutx, dsurx, dsuen, dsubre, dsuact,
155
        txd1, rxd1, txd2, rxd2,
156
        ramsn, ramoen, rwen, oen, writen, read, iosn, romsn, brdyn, bexcn, gpio,
157
        prom32, promedac,
158
        spw_clksel, spw_clk, spw_rxdp, spw_rxdn, spw_rxsp, spw_rxsn, spw_txdp, spw_txdn,
159
        spw_txsp, spw_txsn, gnd(0), roen, roout, nandout, test);
160
 
161
-- optional sdram
162
 
163
 
164
  sdcke <= "11";
165
  sd0 : if (CFG_MCTRL_SDEN = 1) and (CFG_MCTRL_SEPBUS = 0) generate
166
    u0: mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
167
        PORT MAP(
168
            Dq => data(31 downto 16), Addr => address(14 downto 2),
169
            Ba => address(16 downto 15), Clk => sdclk, Cke => sdcke(0),
170
            Cs_n => sdcsn(0), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
171
            Dqm => sddqm(3 downto 2));
172
    u1: mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
173
        PORT MAP(
174
            Dq => data(15 downto 0), Addr => address(14 downto 2),
175
            Ba => address(16 downto 15), Clk => sdclk, Cke => sdcke(0),
176
            Cs_n => sdcsn(0), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
177
            Dqm => sddqm(1 downto 0));
178
    u2: mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
179
        PORT MAP(
180
            Dq => data(31 downto 16), Addr => address(14 downto 2),
181
            Ba => address(16 downto 15), Clk => sdclk, Cke => sdcke(0),
182
            Cs_n => sdcsn(1), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
183
            Dqm => sddqm(3 downto 2));
184
    u3: mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
185
        PORT MAP(
186
            Dq => data(15 downto 0), Addr => address(14 downto 2),
187
            Ba => address(16 downto 15), Clk => sdclk, Cke => sdcke(0),
188
            Cs_n => sdcsn(1), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
189
            Dqm => sddqm(1 downto 0));
190
  end generate;
191
 
192
  prom0 : for i in 0 to (romwidth/8)-1 generate
193
      sr0 : sram generic map (index => i, abits => romdepth, fname => promfile)
194
        port map (address(romdepth+1 downto 2), data(31-i*8 downto 24-i*8), romsn(0),
195
                  rwen(i), oen);
196
  end generate;
197
 
198
  sram0 : for i in 0 to (sramwidth/8)-1 generate
199
      sr0 : sram generic map (index => i, abits => sramdepth, fname => sramfile)
200
        port map (address(sramdepth+1 downto 2), data(31-i*8 downto 24-i*8), ramsn(0),
201
                  rwen(0), ramoen(0));
202
  end generate;
203
 
204
   iuerr : process
205
   begin
206
     wait for 2500 ns;
207
     if to_x01(error) = '1' then wait on error; end if;
208
     assert (to_x01(error) = '1')
209
       report "*** IU in error mode, simulation halted ***"
210
         severity failure ;
211
   end process;
212
 
213
  test0 :  grtestmod
214
    port map ( rst, clk, error, address(21 downto 2), data,
215
               iosn, oen, writen, brdyn);
216
 
217
  data <= buskeep(data) after 5 ns;
218
  cb <= buskeep(cb) after 5 ns;
219
 
220
  dsucom : process
221
    procedure dsucfg(signal dsurx : in std_ulogic; signal dsutx : out std_ulogic) is
222
    variable w32 : std_logic_vector(31 downto 0);
223
    variable c8  : std_logic_vector(7 downto 0);
224
    constant txp : time := clkperiod*16 * 1 ns;
225
    begin
226
    dsutx <= '1';
227
    dsurst <= '0';
228
    wait for 500 ns;
229
    dsurst <= '1';
230
    wait;       -- remove to run the DSU UART
231
    wait for 5010 ns;
232
    txc(dsutx, 16#55#, txp);            -- sync uart
233
    txc(dsutx, 16#55#, txp);            -- sync uart
234
 
235
--    txc(dsutx, 16#c0#, txp);
236
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
237
--    txa(dsutx, 16#00#, 16#00#, 16#02#, 16#ae#, txp);
238
--    txc(dsutx, 16#c0#, txp);
239
--    txa(dsutx, 16#91#, 16#00#, 16#00#, 16#00#, txp);
240
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#ae#, txp);
241
--    txc(dsutx, 16#c0#, txp);
242
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#24#, txp);
243
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#03#, txp);
244
--    txc(dsutx, 16#c0#, txp);
245
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
246
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#fc#, txp);
247
 
248
    txc(dsutx, 16#80#, txp);
249
    txa(dsutx, 16#40#, 16#00#, 16#00#, 16#00#, txp);
250
    rxi(dsurx, w32, txp, lresp);
251
 
252
    wait;
253
 
254
    txc(dsutx, 16#c0#, txp);
255
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
256
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#2f#, txp);
257
 
258
    txc(dsutx, 16#c0#, txp);
259
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
260
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#01#, txp);
261
 
262
    txc(dsutx, 16#c0#, txp);
263
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#40#, txp);
264
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#0e#, txp);
265
    txc(dsutx, 16#c0#, txp);
266
    txa(dsutx, 16#90#, 16#30#, 16#00#, 16#00#, txp);
267
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#00#, txp);
268
    txc(dsutx, 16#c0#, txp);
269
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#40#, txp);
270
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#06#, txp);
271
    txc(dsutx, 16#c0#, txp);
272
    txa(dsutx, 16#90#, 16#30#, 16#00#, 16#00#, txp);
273
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#00#, txp);
274
    txc(dsutx, 16#c0#, txp);
275
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#40#, txp);
276
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#02#, txp);
277
    txc(dsutx, 16#c0#, txp);
278
    txa(dsutx, 16#90#, 16#30#, 16#00#, 16#00#, txp);
279
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#00#, txp);
280
 
281
    txc(dsutx, 16#c0#, txp);
282
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
283
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#0f#, txp);
284
 
285
    txc(dsutx, 16#c0#, txp);
286
    txa(dsutx, 16#40#, 16#00#, 16#43#, 16#10#, txp);
287
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#0f#, txp);
288
 
289
    txc(dsutx, 16#c0#, txp);
290
    txa(dsutx, 16#91#, 16#40#, 16#00#, 16#24#, txp);
291
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#24#, txp);
292
    txc(dsutx, 16#c0#, txp);
293
    txa(dsutx, 16#91#, 16#70#, 16#00#, 16#00#, txp);
294
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#03#, txp);
295
 
296
 
297
 
298
 
299
 
300
    txc(dsutx, 16#c0#, txp);
301
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
302
    txa(dsutx, 16#00#, 16#00#, 16#ff#, 16#ff#, txp);
303
 
304
    txc(dsutx, 16#c0#, txp);
305
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#48#, txp);
306
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#12#, txp);
307
 
308
    txc(dsutx, 16#c0#, txp);
309
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#60#, txp);
310
    txa(dsutx, 16#00#, 16#00#, 16#12#, 16#10#, txp);
311
 
312
    txc(dsutx, 16#80#, txp);
313
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
314
    rxi(dsurx, w32, txp, lresp);
315
 
316
    txc(dsutx, 16#a0#, txp);
317
    txa(dsutx, 16#40#, 16#00#, 16#00#, 16#00#, txp);
318
    rxi(dsurx, w32, txp, lresp);
319
 
320
    end;
321
 
322
  begin
323
 
324
    dsucfg(dsutx, dsurx);
325
 
326
    wait;
327
  end process;
328
 
329
end ;
330
 

powered by: WebSVN 2.1.0

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