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-actel-proasic3/] [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 gaisler.jtagtst.all;
22
library techmap;
23
use techmap.gencomp.all;
24
use work.debug.all;
25
library gsi;
26
use gsi.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
  );
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
signal clk : std_logic := '0';
56
signal Rst    : std_logic := '0';                        -- Reset
57
constant ct : integer := clkperiod/2;
58
 
59
signal address  : std_logic_vector(27 downto 0) := (others => '0');
60
signal data     : std_logic_vector(31 downto 0);
61
 
62
signal ramsn    : std_logic;
63
signal ramoen   : std_logic;
64
signal rwen     : std_logic;
65
signal ramben   : std_logic_vector(3 downto 0);
66
signal romsn    : std_logic;
67
signal iosn     : std_ulogic;
68
signal oen      : std_ulogic;
69
signal writen   : std_ulogic;
70
signal brdyn    : std_ulogic;
71
signal bexcn    : std_ulogic;
72
signal wdog     : std_ulogic;
73
signal dsutx, dsurx, dsubre, dsuact : std_ulogic;
74
signal dsurst   : std_ulogic;
75
signal test     : std_ulogic;
76
signal error    : std_logic;
77
signal gpio     : std_logic_vector(6 downto 0);
78
signal GND      : std_ulogic := '0';
79
signal VCC      : std_ulogic := '1';
80
signal NC       : std_ulogic := 'Z';
81
signal clk2     : std_ulogic := '1';
82
 
83
signal txd1, rxd1 : std_ulogic;
84
signal txd2, rxd2 : std_ulogic;
85
 
86
signal etx_clk, erx_clk, erx_dv, erx_er, erx_col, erx_crs, etx_en, etx_er : std_logic:='0';
87
signal erxd, etxd: std_logic_vector(3 downto 0):=(others=>'0');
88
signal erxdt, etxdt: std_logic_vector(7 downto 0):=(others=>'0');
89
signal emdc, emdio: std_logic; --dummy signal for the mdc,mdio in the phy which is not used
90
signal gtx_clk : std_ulogic := '0';
91
 
92
constant lresp : boolean := false;
93
 
94
signal flash_byten : std_logic;
95
signal flash_rpn   : std_logic;
96
signal sram_pwrdwn : std_logic;
97
signal sram_gwen   : std_logic;
98
signal sram_adsc   : std_logic;
99
signal sram_adsp   : std_logic;
100
signal sram_adv    : std_logic;
101
signal can_txd  : std_logic;
102
signal can_rxd  : std_logic;
103
signal ramclk   : std_logic;
104
signal datazz   : std_logic;
105
signal tck, trst, tdi, tms, tdo : std_ulogic;
106
 
107
 
108
begin
109
 
110
-- clock and reset
111
 
112
  clk <= not clk after ct * 1 ns;
113
  rst <= dsurst;
114
  dsubre <= '0';
115
  rxd1 <= txd1;
116
 
117
  d3 : entity work.leon3mp
118
        generic map ( fabtech, memtech, padtech, clktech, disas, dbguart, pclow )
119
        port map (rst, clk, error, address(20 downto 2), data,
120
        dsutx, dsurx, dsubre, dsuact, txd1, rxd1,
121
        ramsn, ramoen, ramben, rwen, oen, writen, romsn, iosn, ramclk, gpio,
122
        flash_byten, flash_rpn, sram_pwrdwn, sram_gwen,
123
        sram_adsc, sram_adsp, sram_adv, can_txd, can_rxd,
124
        emdio, etx_clk, erx_clk, erxd, erx_dv, erx_er, erx_col, erx_crs,
125
        etxd, etx_en, etx_er, emdc, open, tck, tms, tdi, trst, tdo);
126
 
127
    prom0 : for i in 0 to (romwidth/8)-1 generate
128
      sr0 : sram generic map (index => i, abits => romdepth, fname => promfile)
129
        port map (address(romdepth+1 downto 2), data(31-i*8 downto 24-i*8), romsn,
130
                  rwen, oen);
131
    end generate;
132
 
133
 
134
    sssram0 : for i in 0 to 1 generate
135
      u0 : entity gsi.g880e18bt --generic map (fname => sramfile)
136
      port map(
137
        A88 => address(18 downto 0),
138
        DQa(9) => datazz, DQa(8 downto 1) => data(i*16+7 downto i*16),
139
        DQb(9) => datazz, DQb(8 downto 1) => data(i*16+15 downto i*16+8),
140
        nBa => ramben(i*2), nBb => ramben(i*2+1),
141
        CK => ramclk, nBW => rwen, nGW => sram_gwen,
142
        nE1 => ramsn, E2 => '1', nE3 => ramsn,
143
        nG => ramoen, nADV => sram_adv, nADSC => sram_adsc,
144
        nADSP => sram_adsp, Zz => sram_pwrdwn, nFT => '1',
145
        nLBO => '0');
146
 
147
    end generate;
148
 
149
  phy0 : if (CFG_GRETH = 1) generate
150
    emdio <= 'H';
151
    erxd <= erxdt(3 downto 0);
152
    etxdt <= "0000" & etxd;
153
 
154
    p0: phy
155
      generic map(base1000_t_fd => 0, base1000_t_hd => 0)
156
      port map(rst, emdio, etx_clk, erx_clk, erxdt, erx_dv,
157
      erx_er, erx_col, erx_crs, etxdt, etx_en, etx_er, emdc, gtx_clk);
158
  end generate;
159
  error <= 'H';                   -- ERROR pull-up
160
 
161
   iuerr : process
162
   begin
163
     wait for 2500 ns;
164
     if to_x01(error) = '1' then wait on error; end if;
165
     assert (to_x01(error) = '1')
166
       report "*** IU in error mode, simulation halted ***"
167
         severity failure ;
168
   end process;
169
 
170
  data <= buskeep(data), (others => 'H') after 250 ns;
171
--  data <= (others => 'Z');
172
 
173
  test0 :  grtestmod
174
    port map ( rst, clk, error, address(21 downto 2), data,
175
               iosn, oen, writen, brdyn);
176
 
177
 
178
  dsucom : process
179
    procedure dsucfg(signal dsurx : in std_ulogic; signal dsutx : out std_ulogic) is
180
    variable w32 : std_logic_vector(31 downto 0);
181
    variable c8  : std_logic_vector(7 downto 0);
182
    constant txp : time := 160 * 1 ns;
183
    begin
184
    dsutx <= '1';
185
    dsurst <= '0';
186
    wait for 500 ns;
187
    dsurst <= '1';
188
    wait;
189
    wait for 5000 ns;
190
    txc(dsutx, 16#55#, txp);            -- sync uart
191
 
192
--    txc(dsutx, 16#c0#, txp);
193
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
194
--    txa(dsutx, 16#00#, 16#00#, 16#02#, 16#ae#, txp);
195
--    txc(dsutx, 16#c0#, txp);
196
--    txa(dsutx, 16#91#, 16#00#, 16#00#, 16#00#, txp);
197
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#ae#, txp);
198
--    txc(dsutx, 16#c0#, txp);
199
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#24#, txp);
200
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#03#, txp);
201
--    txc(dsutx, 16#c0#, txp);
202
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
203
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#fc#, txp);
204
 
205
    txc(dsutx, 16#c0#, txp);
206
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
207
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#2f#, txp);
208
    txc(dsutx, 16#c0#, txp);
209
    txa(dsutx, 16#91#, 16#00#, 16#00#, 16#00#, txp);
210
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#6f#, txp);
211
    txc(dsutx, 16#c0#, txp);
212
    txa(dsutx, 16#90#, 16#11#, 16#00#, 16#00#, txp);
213
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#00#, txp);
214
    txc(dsutx, 16#c0#, txp);
215
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#04#, txp);
216
    txa(dsutx, 16#00#, 16#02#, 16#20#, 16#01#, txp);
217
    txc(dsutx, 16#c0#, txp);
218
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
219
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#02#, txp);
220
 
221
    txc(dsutx, 16#c0#, txp);
222
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
223
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#0f#, txp);
224
 
225
    txc(dsutx, 16#c0#, txp);
226
    txa(dsutx, 16#40#, 16#00#, 16#43#, 16#10#, txp);
227
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#0f#, txp);
228
 
229
    txc(dsutx, 16#c0#, txp);
230
    txa(dsutx, 16#91#, 16#40#, 16#00#, 16#24#, txp);
231
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#24#, txp);
232
    txc(dsutx, 16#c0#, txp);
233
    txa(dsutx, 16#91#, 16#70#, 16#00#, 16#00#, txp);
234
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#03#, txp);
235
 
236
 
237
 
238
 
239
 
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#ff#, 16#ff#, txp);
243
 
244
    txc(dsutx, 16#c0#, txp);
245
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#48#, txp);
246
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#12#, txp);
247
 
248
    txc(dsutx, 16#c0#, txp);
249
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#60#, txp);
250
    txa(dsutx, 16#00#, 16#00#, 16#12#, 16#10#, txp);
251
 
252
    txc(dsutx, 16#80#, txp);
253
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
254
    rxi(dsurx, w32, txp, lresp);
255
 
256
    txc(dsutx, 16#a0#, txp);
257
    txa(dsutx, 16#40#, 16#00#, 16#00#, 16#00#, txp);
258
    rxi(dsurx, w32, txp, lresp);
259
 
260
    end;
261
 
262
  begin
263
 
264
    dsucfg(dsutx, dsurx);
265
 
266
    wait;
267
  end process;
268
 
269
  jtagproc : process
270
  begin
271
    wait;
272
    trst <= '1';
273
    jtagcom(tdo, tck, tms, tdi, 40, 20, 16#40000000#, true);
274
    wait;
275
   end process;
276
 
277
end ;
278
 

powered by: WebSVN 2.1.0

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