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-nuhorizons-3s1500/] [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
 
26
use work.config.all;    -- configuration
27
use work.debug.all;
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
    disas     : integer := CFG_DISAS;   -- Enable disassembly to console
36
    dbguart   : integer := CFG_DUART;   -- Print UART on console
37
    pclow     : integer := CFG_PCLOW;
38
 
39
    clkperiod : integer := 20;          -- system clock period
40
    romwidth  : integer := 32;          -- rom data width (8/32)
41
    romdepth  : integer := 16;          -- rom address depth
42
    sramwidth  : integer := 32;         -- ram data width (8/16/32)
43
    sramdepth  : integer := 18;         -- ram address depth
44
    srambanks  : integer := 2           -- number of ram banks
45
  );
46
end;
47
 
48
architecture behav of testbench is
49
 
50
constant promfile  : string := "prom.srec";  -- rom contents
51
constant sramfile  : string := "sram.srec";  -- ram contents
52
constant sdramfile : string := "sdram.srec"; -- sdram contents
53
 
54
component leon3mp
55
  generic (
56
    fabtech   : integer := CFG_FABTECH;
57
    memtech   : integer := CFG_MEMTECH;
58
    padtech   : integer := CFG_PADTECH;
59
    clktech   : integer := CFG_CLKTECH;
60
    disas     : integer := CFG_DISAS;   -- Enable disassembly to console
61
    dbguart   : integer := CFG_DUART;   -- Print UART on console
62
    pclow     : integer := CFG_PCLOW
63
  );
64
  port (
65
    pb_sw       : in  std_logic_vector (4 downto 1);    -- push buttons
66
    pll_clk     : in  std_ulogic;                       -- PLL clock
67
    led         : out std_logic_vector(8 downto 1);
68
    flash_a     : out std_logic_vector(20 downto 0);
69
    flash_d     : inout std_logic_vector(15 downto 0);
70
    sdram_a     : out std_logic_vector(11 downto 0);
71
    sdram_d     : inout std_logic_vector(31 downto 0);
72
    sdram_ba    : out std_logic_vector(3 downto 0);
73
    sdram_dqm   : out std_logic_vector(3 downto 0);
74
    sdram_clk   : inout std_ulogic;
75
    sdram_cke   : out std_ulogic;                       -- sdram clock enable
76
    sdram_csn   : out std_ulogic;                       -- sdram chip select
77
    sdram_wen   : out std_ulogic;                       -- sdram write enable
78
    sdram_rasn  : out std_ulogic;                       -- sdram ras
79
    sdram_casn  : out std_ulogic;                       -- sdram cas
80
 
81
    uart1_txd   : out std_ulogic;
82
    uart1_rxd   : in  std_ulogic;
83
    uart1_rts   : out std_ulogic;
84
    uart1_cts   : in  std_ulogic;
85
 
86
    uart2_txd   : out std_ulogic;
87
    uart2_rxd   : in  std_ulogic;
88
    uart2_rts   : out std_ulogic;
89
    uart2_cts   : in  std_ulogic;
90
 
91
    flash_oen   : out std_ulogic;
92
    flash_wen   : out std_ulogic;
93
    flash_cen   : out std_ulogic;
94
    flash_byte  : out std_ulogic;
95
    flash_ready : in  std_ulogic;
96
    flash_rpn   : out std_ulogic;
97
    flash_wpn   : out std_ulogic;
98
 
99
    phy_mii_data: inout std_logic;              -- ethernet PHY interface
100
    phy_tx_clk  : in std_ulogic;
101
    phy_rx_clk  : in std_ulogic;
102
    phy_rx_data : in std_logic_vector(3 downto 0);
103
    phy_dv      : in std_ulogic;
104
    phy_rx_er   : in std_ulogic;
105
    phy_col     : in std_ulogic;
106
    phy_crs     : in std_ulogic;
107
    phy_tx_data : out std_logic_vector(3 downto 0);
108
    phy_tx_en   : out std_ulogic;
109
    phy_mii_clk : out std_ulogic;
110
    phy_100     : in std_ulogic;                -- 100 Mbit indicator
111
    phy_rst_n   : out std_ulogic;
112
 
113
    gpio        : inout std_logic_vector(CFG_GRGPIO_WIDTH-1 downto 0);
114
 
115
--    lcd_data  : inout std_logic_vector(7 downto 0);
116
--    lcd_rs    : out std_ulogic;
117
--    lcd_rw    : out std_ulogic;
118
--    lcd_en    : out std_ulogic;
119
--    lcd_backl : out std_ulogic;
120
 
121
    can_txd     : out std_ulogic;
122
    can_rxd     : in  std_ulogic;
123
 
124
    smsc_addr   : out std_logic_vector(14 downto 0);
125
    smsc_data   : inout std_logic_vector(31 downto 0);
126
    smsc_nbe    : out std_logic_vector(3 downto 0);
127
    smsc_resetn : out std_ulogic;
128
    smsc_ardy   : in  std_ulogic;
129
--    smsc_intr         : in  std_ulogic;
130
    smsc_nldev  : in  std_ulogic;
131
    smsc_nrd    : out std_ulogic;
132
    smsc_nwr    : out std_ulogic;
133
    smsc_ncs    : out std_ulogic;
134
    smsc_aen    : out std_ulogic;
135
    smsc_lclk   : out std_ulogic;
136
    smsc_wnr    : out std_ulogic;
137
    smsc_rdyrtn : out std_ulogic;
138
    smsc_cycle  : out std_ulogic;
139
    smsc_nads   : out std_ulogic
140
  );
141
 
142
end component;
143
 
144
signal clk : std_logic := '0';
145
signal Rst : std_logic := '0';                   -- Reset
146
constant ct : integer := clkperiod/2;
147
 
148
signal address  : std_logic_vector(21 downto 0);
149
signal flash_d  : std_logic_vector(15 downto 0);
150
 
151
signal romsn    : std_ulogic;
152
signal oen      : std_ulogic;
153
signal writen   : std_ulogic;
154
signal dsuen, dsutx, dsurx, dsubre, dsuact : std_ulogic;
155
signal dsurst   : std_ulogic;
156
signal test     : std_ulogic;
157
signal error    : std_logic;
158
signal GND      : std_ulogic := '0';
159
signal VCC      : std_ulogic := '1';
160
signal NC       : std_ulogic := 'Z';
161
signal clk2     : std_ulogic := '1';
162
 
163
signal sdcke    : std_ulogic;                       -- clk en
164
signal sdcsn    : std_ulogic;                       -- chip sel
165
signal sdwen    : std_ulogic;                       -- write en
166
signal sdrasn   : std_ulogic;                       -- row addr stb
167
signal sdcasn   : std_ulogic;                       -- col addr stb
168
signal sddqm    : std_logic_vector ( 3 downto 0);   -- data i/o mask
169
signal sdclk    : std_ulogic;
170
signal txd1, rxd1 : std_ulogic;
171
signal txd2, rxd2 : std_ulogic;
172
 
173
signal etx_clk, erx_clk, erx_dv, erx_er, erx_col, erx_crs, etx_en, etx_er : std_logic:='0';
174
signal erxd, etxd: std_logic_vector(3 downto 0):=(others=>'0');
175
signal erxdt, etxdt: std_logic_vector(7 downto 0):=(others=>'0');
176
signal emdc, emdio: std_logic;
177
signal gtx_clk : std_ulogic;
178
 
179
signal ereset   : std_logic;
180
 
181
signal led     : std_logic_vector(8 downto 1);
182
 
183
constant lresp : boolean := false;
184
 
185
signal sa       : std_logic_vector(14 downto 0);
186
signal ba       : std_logic_vector(3 downto 0);
187
signal sd       : std_logic_vector(31 downto 0);
188
 
189
signal pb_sw    : std_logic_vector(4 downto 1);
190
signal lcd_data : std_logic_vector(7 downto 0);
191
signal lcd_rs   : std_ulogic;
192
signal lcd_rw   : std_ulogic;
193
signal lcd_en   : std_ulogic;
194
signal lcd_backl: std_ulogic;
195
signal can_txd  : std_ulogic;
196
signal can_rxd  : std_ulogic;
197
 
198
signal gpio     : std_logic_vector(CFG_GRGPIO_WIDTH-1 downto 0);
199
 
200
signal smsc_addr        : std_logic_vector(21 downto 0);
201
signal smsc_data        : std_logic_vector(31 downto 0);
202
signal smsc_nbe         : std_logic_vector(3 downto 0);
203
signal smsc_resetn      : std_ulogic;
204
signal smsc_ardy        : std_ulogic;
205
signal smsc_intr        : std_ulogic;
206
signal smsc_nldev       : std_ulogic;
207
signal smsc_nrd         : std_ulogic;
208
signal smsc_nwr         : std_ulogic;
209
signal smsc_ncs         : std_ulogic;
210
signal smsc_aen         : std_ulogic;
211
signal smsc_lclk        : std_ulogic;
212
signal smsc_wnr         : std_ulogic;
213
signal smsc_rdyrtn      : std_ulogic;
214
signal smsc_cycle       : std_ulogic;
215
signal smsc_nads        : std_ulogic;
216
 
217
begin
218
 
219
-- clock and reset
220
 
221
  clk <= not clk after ct * 1 ns;
222
  rst <= dsurst;
223
  dsuen <= '1'; dsubre <= '0'; rxd1 <= '1';
224
  can_rxd <= '1'; error <= led(8); sa(14 downto 12) <= "000";
225
  pb_sw <= rst & "00" & dsubre;
226
  cpu : leon3mp
227
      generic map ( fabtech, memtech, padtech, clktech,
228
        disas, dbguart, pclow )
229
      port map (pb_sw, clk, led, address(21 downto 1), flash_d,
230
        sa(11 downto 0), sd, ba, sddqm, sdclk, sdcke, sdcsn, sdwen, sdrasn,
231
        sdcasn, txd1, rxd1, open, gnd, dsutx, dsurx, open, gnd,
232
        oen, writen, romsn, open, vcc, open, open,
233
        emdio, etx_clk, erx_clk, erxd, erx_dv, erx_er, erx_col, erx_crs,
234
        etxd, etx_en, emdc, gnd, ereset, gpio,
235
--      lcd_data, lcd_rs, lcd_rw, lcd_en, lcd_backl, 
236
        can_txd, can_rxd,
237
        smsc_addr(14 downto 0), smsc_data, smsc_nbe, smsc_resetn, smsc_ardy,-- smsc_intr,
238
        smsc_nldev, smsc_nrd, smsc_nwr, smsc_ncs, smsc_aen, smsc_lclk,
239
        smsc_wnr, smsc_rdyrtn, smsc_cycle, smsc_nads);
240
 
241
  u0: mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
242
        PORT MAP(
243
            Dq => sd(31 downto 16), Addr => sa(12 downto 0),
244
            Ba => ba(1 downto 0), Clk => sdclk, Cke => sdcke,
245
            Cs_n => sdcsn, Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
246
            Dqm => sddqm(3 downto 2));
247
  u1: mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
248
        PORT MAP(
249
            Dq => sd(15 downto 0), Addr => sa(12 downto 0),
250
            Ba => ba(3 downto 2), Clk => sdclk, Cke => sdcke,
251
            Cs_n => sdcsn, Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
252
            Dqm => sddqm(1 downto 0));
253
  prom0 : sram generic map (index => 6, abits => romdepth, fname => promfile)
254
        port map (address(romdepth-1 downto 0), flash_d(7 downto 0), romsn,
255
                  writen, oen);
256
 
257
  emdio <= 'H';
258
  erxd <= erxdt(3 downto 0);
259
  etxdt <= "0000" & etxd;
260
 
261
  p0: phy
262
    generic map(base1000_t_fd => 0, base1000_t_hd => 0)
263
    port map(rst, emdio, etx_clk, erx_clk, erxdt, erx_dv,
264
      erx_er, erx_col, erx_crs, etxdt, etx_en, etx_er, emdc, gtx_clk);
265
  error <= 'H';                   -- ERROR pull-up
266
  address(0) <= flash_d(15);
267
 
268
   iuerr : process
269
   begin
270
     wait for 2000 ns;
271
     if to_x01(error) = '1' then wait on error; end if;
272
     assert (to_x01(error) = '1')
273
       report "*** IU in error mode, simulation halted ***"
274
         severity failure ;
275
   end process;
276
 
277
  flash_d <= buskeep(flash_d) after 5 ns;
278
  sd <= buskeep(sd) after 5 ns;
279
  smsc_data <= buskeep(smsc_data) after 5 ns;
280
  smsc_addr(21 downto 15) <= (others => '0');
281
  test0 :  grtestmod
282
    port map ( rst, clk, error, address(21 downto 2), smsc_data,
283
               smsc_ncs, oen, writen, open);
284
 
285
  dsucom : process
286
    procedure dsucfg(signal dsurx : in std_ulogic; signal dsutx : out std_ulogic) is
287
    variable w32 : std_logic_vector(31 downto 0);
288
    variable c8  : std_logic_vector(7 downto 0);
289
    constant txp : time := 160 * 1 ns;
290
    begin
291
    dsutx <= '1';
292
    dsurst <= '0';
293
    wait for 500 ns;
294
    dsurst <= '1';
295
    wait;
296
    wait for 5000 ns;
297
    txc(dsutx, 16#55#, txp);            -- sync uart
298
 
299
    txc(dsutx, 16#c0#, txp);
300
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#44#, txp);
301
    txa(dsutx, 16#00#, 16#00#, 16#20#, 16#00#, txp);
302
 
303
    txc(dsutx, 16#80#, txp);
304
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#44#, txp);
305
 
306
    wait;
307
    txc(dsutx, 16#c0#, txp);
308
    txa(dsutx, 16#00#, 16#00#, 16#0a#, 16#aa#, txp);
309
    txa(dsutx, 16#00#, 16#55#, 16#00#, 16#55#, txp);
310
    txc(dsutx, 16#c0#, txp);
311
    txa(dsutx, 16#00#, 16#00#, 16#0a#, 16#a0#, txp);
312
    txa(dsutx, 16#01#, 16#02#, 16#09#, 16#33#, txp);
313
 
314
    txc(dsutx, 16#c0#, txp);
315
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
316
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#2e#, txp);
317
    txc(dsutx, 16#c0#, txp);
318
    txa(dsutx, 16#91#, 16#00#, 16#00#, 16#00#, txp);
319
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#2e#, txp);
320
    txc(dsutx, 16#c0#, txp);
321
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
322
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#0f#, txp);
323
    txc(dsutx, 16#c0#, txp);
324
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
325
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#00#, txp);
326
    txc(dsutx, 16#c0#, txp);
327
    txa(dsutx, 16#80#, 16#00#, 16#02#, 16#10#, txp);
328
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#0f#, txp);
329
 
330
    txc(dsutx, 16#c0#, txp);
331
    txa(dsutx, 16#91#, 16#40#, 16#00#, 16#24#, txp);
332
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#24#, txp);
333
    txc(dsutx, 16#c0#, txp);
334
    txa(dsutx, 16#91#, 16#70#, 16#00#, 16#00#, txp);
335
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#03#, txp);
336
 
337
 
338
 
339
 
340
 
341
    txc(dsutx, 16#c0#, txp);
342
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
343
    txa(dsutx, 16#00#, 16#00#, 16#ff#, 16#ff#, txp);
344
 
345
    txc(dsutx, 16#c0#, txp);
346
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#48#, txp);
347
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#12#, txp);
348
 
349
    txc(dsutx, 16#c0#, txp);
350
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#60#, txp);
351
    txa(dsutx, 16#00#, 16#00#, 16#12#, 16#10#, txp);
352
 
353
    txc(dsutx, 16#80#, txp);
354
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
355
    rxi(dsurx, w32, txp, lresp);
356
 
357
    txc(dsutx, 16#a0#, txp);
358
    txa(dsutx, 16#40#, 16#00#, 16#00#, 16#00#, txp);
359
    rxi(dsurx, w32, txp, lresp);
360
 
361
    end;
362
 
363
  begin
364
 
365
    dsucfg(dsutx, dsurx);
366
 
367
    wait;
368
  end process;
369
end ;
370
 

powered by: WebSVN 2.1.0

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