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-xilinx-xc3sd-1800/] [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;
27
use work.debug.all;
28
use std.textio.all;
29
library grlib;
30
use grlib.stdlib.all;
31
use grlib.stdio.all;
32
use grlib.devices.all;
33
 
34
entity testbench is
35
  generic (
36
    fabtech   : integer := CFG_FABTECH;
37
    memtech   : integer := CFG_MEMTECH;
38
    padtech   : integer := CFG_PADTECH;
39
    clktech   : integer := CFG_CLKTECH;
40
    disas     : integer := CFG_DISAS;   -- Enable disassembly to console
41
    dbguart   : integer := CFG_DUART;   -- Print UART on console
42
    pclow     : integer := CFG_PCLOW;
43
    clkperiod : integer := 8            -- system clock period
44
    );
45
end;
46
 
47
architecture behav of testbench is
48
  constant promfile : string  := "prom.srec";        -- rom contents
49
  constant sramfile : string  := "sram.srec";        -- sram contents
50
  constant lresp    : boolean := false;
51
  constant ct       : integer := clkperiod/2;
52
 
53
  signal clk        : std_logic := '0';
54
  signal clk_vga    : std_logic := '0';
55
  signal rst        : std_logic := '0';
56
  signal rstn1      : std_logic;
57
  signal rstn2      : std_logic;
58
  signal error      : std_logic;
59
 
60
  -- PROM flash
61
  signal address    : std_logic_vector(23 downto 0);
62
  signal data       : std_logic_vector(31 downto 0);
63
  signal romsn      : std_logic;
64
  signal oen        : std_ulogic;
65
  signal writen     : std_ulogic;
66
  signal iosn       : std_ulogic;
67
 
68
  -- SRAM only for simulation
69
  signal ramoen     : std_ulogic;
70
  signal ramwrn     : std_ulogic;
71
  signal ramsn      : std_ulogic;
72
 
73
  -- DDR2 memory
74
  signal ddr_clk    : std_logic_vector(1 downto 0);
75
  signal ddr_clkb   : std_logic_vector(1 downto 0);
76
  signal ddr_clk_fb : std_logic;
77
  signal ddr_cke    : std_logic;
78
  signal ddr_csb    : std_logic;
79
  signal ddr_we     : std_ulogic;                       -- write enable
80
  signal ddr_ras    : std_ulogic;                       -- ras
81
  signal ddr_cas    : std_ulogic;                       -- cas
82
  signal ddr_dm     : std_logic_vector(3 downto 0);     -- dm
83
  signal ddr_dqs    : std_logic_vector(3 downto 0);     -- dqs
84
  signal ddr_dqsn   : std_logic_vector(3 downto 0);     -- dqsn
85
  signal ddr_ad     : std_logic_vector(12 downto 0);    -- address
86
  signal ddr_ba     : std_logic_vector(1 downto 0);     -- bank address
87
  signal ddr_dq     : std_logic_vector(31 downto 0);    -- data
88
  signal ddr_odt    : std_logic;
89
 
90
  signal ddr_rdqs   : std_logic_vector (3 downto 0);    -- floating signal
91
 
92
  -- Debug support unit
93
  signal dsubre     : std_ulogic;
94
 
95
  -- AHB Uart
96
  signal dsurx      : std_ulogic;
97
  signal dsutx      : std_ulogic;
98
 
99
  -- APB Uart
100
  signal urxd       : std_ulogic;
101
  signal utxd       : std_ulogic;
102
 
103
  -- Ethernet signals
104
  signal etx_clk    : std_ulogic;
105
  signal erx_clk    : std_ulogic;
106
  signal erxdt      : std_logic_vector(7 downto 0);
107
  signal erx_dv     : std_ulogic;
108
  signal erx_er     : std_ulogic;
109
  signal erx_col    :  std_ulogic;
110
  signal erx_crs    : std_ulogic;
111
  signal etxdt      : std_logic_vector(7 downto 0);
112
  signal etx_en     : std_ulogic;
113
  signal etx_er     : std_ulogic;
114
  signal emdc       : std_ulogic;
115
  signal emdio      : std_logic;
116
  signal gtx_clk    : std_logic := '0';
117
 
118
  -- SVGA signals
119
  signal vid_hsync  : std_ulogic;
120
  signal vid_vsync  : std_ulogic;
121
  signal vid_r      : std_logic_vector(3 downto 0);
122
  signal vid_g      : std_logic_vector(3 downto 0);
123
  signal vid_b      : std_logic_vector(3 downto 0);
124
 
125
  -- Select signal for SPI flash
126
  signal spi       : std_ulogic;
127
 
128
  -- Output signals for LEDs
129
  signal led       : std_logic_vector(2 downto 0);
130
 
131
  signal brdyn     : std_ulogic;
132
begin
133
  -- clock and reset
134
  clk        <= not clk after ct * 1 ns;
135
  clk_vga    <= not clk_vga after 20 ns;
136
  rst        <= '1', '0' after 100 ns;
137
  dsubre     <= '0';
138
  ddr_dqs    <= (others => 'L');
139
 
140
  d3 : entity work.leon3mp
141
    generic map (
142
      memmask  => 16#F80#,
143
      ddraddr  => 16#600#,
144
      ddrdelay => 0,
145
      ddrskew  => 128)
146
    port map (
147
      reset     => rst,
148
      reset_o1  => rstn1,
149
      reset_o2  => rstn2,
150
      clk_in    => clk,
151
      clk_vga   => clk_vga,
152
      errorn    => error,
153
 
154
      -- PROM
155
      address   => address(23 downto 0),
156
      data      => data(31 downto 24),
157
      romsn     => romsn,
158
      oen       => oen,
159
      writen    => writen,
160
      iosn      => iosn,
161
      ramsn     => ramsn,
162
      ramoen    => ramoen,
163
      ramwrn    => ramwrn,
164
      testdata  => data(23 downto 0),
165
 
166
      -- DDR2
167
      ddr_clk        => ddr_clk,
168
      ddr_clkb       => ddr_clkb,
169
      ddr_clk_fb_out => ddr_clk_fb,
170
      ddr_clk_fb     => ddr_clk_fb,
171
      ddr_cke        => ddr_cke,
172
      ddr_csb        => ddr_csb,
173
      ddr_we         => ddr_we,
174
      ddr_ras        => ddr_ras,
175
      ddr_cas        => ddr_cas,
176
      ddr_dm         => ddr_dm,
177
      ddr_dqs        => ddr_dqs,
178
      ddr_dqsn       => ddr_dqsn,
179
      ddr_ad         => ddr_ad,
180
      ddr_ba         => ddr_ba,
181
      ddr_dq         => ddr_dq,
182
      ddr_odt        => ddr_odt,
183
 
184
      -- Debug Unit
185
      dsubre    => dsubre,
186
 
187
      -- AHB Uart
188
      dsutx     => dsutx,
189
      dsurx     => dsurx,
190
 
191
      -- PHY
192
      etx_clk   => etx_clk,
193
      erx_clk   => erx_clk,
194
      erxd      => erxdt(3 downto 0),
195
      erx_dv    => erx_dv,
196
      erx_er    => erx_er,
197
      erx_col   => erx_col,
198
      erx_crs   => erx_crs,
199
      etxd      => etxdt(3 downto 0),
200
      etx_en    => etx_en,
201
      etx_er    => etx_er,
202
      emdc      => emdc,
203
      emdio     => emdio,
204
 
205
      -- SVGA
206
      vid_hsync => vid_hsync,
207
      vid_vsync => vid_vsync,
208
      vid_r     => vid_r,
209
      vid_g     => vid_g,
210
      vid_b     => vid_b,
211
 
212
      -- SPI flash select
213
      spi       => spi,
214
      -- Output signals for LEDs
215
      led       => led
216
      );
217
 
218
  ddr2mem : if (CFG_DDR2SP /= 0) generate
219
    ddr2mem0 : for i in 0 to 1 generate
220
      u1 : ddr2
221
        port map(
222
          ck      => ddr_clk(i),
223
          ck_n    => ddr_clkb(i),
224
          cke     => ddr_cke,
225
          cs_n    => ddr_csb,
226
          ras_n   => ddr_ras,
227
          cas_n   => ddr_cas,
228
          we_n    => ddr_we,
229
          dm_rdqs => ddr_dm(i*2+1 downto i*2),
230
          ba      => ddr_ba,
231
          addr    => ddr_ad(12 downto 0),
232
          dq      => ddr_dq(i*16+15 downto i*16),
233
          dqs     => ddr_dqs(i*2+1 downto i*2),
234
          dqs_n   => ddr_dqsn(i*2+1 downto i*2),
235
          rdqs_n  => ddr_rdqs(i*2+1 downto i*2),
236
          odt     => ddr_odt
237
          );
238
    end generate;
239
  end generate;
240
 
241
  prom0 : sram
242
    generic map (index => 6, abits => 24, fname => promfile)
243
    port map (address(23 downto 0), data(31 downto 24), romsn, writen, oen);
244
 
245
  -- This is only for simulation
246
  sram0 : for i in 0 to 1 generate
247
      sr0 : sram generic map (index => i+4, abits => 23, fname => sramfile)
248
        port map (address(23 downto 1), data(31-i*8 downto 24-i*8), ramsn, ramwrn, ramoen);
249
  end generate;
250
 
251
  phy0 : if (CFG_GRETH = 1) generate
252
    emdio <= 'H';
253
    etxdt(7 downto 4) <= "0000";
254
    p0: phy
255
      generic map(base1000_t_fd => 0, base1000_t_hd => 0)
256
      port map(rst, emdio, etx_clk, erx_clk, erxdt, erx_dv, erx_er,
257
               erx_col, erx_crs, etxdt, etx_en, etx_er, emdc, gtx_clk);
258
  end generate;
259
 
260
  error <= 'H';                         -- ERROR pull-up
261
 
262
  iuerr : process
263
  begin
264
    wait for 5 us;
265
    assert (to_X01(error) = '1')
266
      report "*** IU in error mode, simulation halted ***"
267
      severity failure;
268
  end process;
269
 
270
  test0 : grtestmod
271
    port map ( rst, clk, error, address(21 downto 2), data, iosn, oen, writen, brdyn);
272
 
273
  data <= buskeep(data) after 5 ns;
274
 
275
  dsucom : process
276
    procedure dsucfg(signal dsurx : in std_ulogic; signal dsutx : out std_ulogic) is
277
      variable w32 : std_logic_vector(31 downto 0);
278
      variable c8  : std_logic_vector(7 downto 0);
279
      constant txp : time := 160 * 1 ns;
280
    begin
281
      dsutx  <= '1';
282
      wait;
283
      wait for 5000 ns;
284
      txc(dsutx, 16#55#, txp);          -- sync uart
285
      txc(dsutx, 16#a0#, txp);
286
      txa(dsutx, 16#40#, 16#00#, 16#00#, 16#00#, txp);
287
      rxi(dsurx, w32, txp, lresp);
288
 
289
-- txc(dsutx, 16#c0#, txp);
290
-- txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
291
-- txa(dsutx, 16#00#, 16#00#, 16#00#, 16#ef#, txp);
292
--
293
-- txc(dsutx, 16#c0#, txp);
294
-- txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
295
-- txa(dsutx, 16#00#, 16#00#, 16#ff#, 16#ff#, txp);
296
--
297
-- txc(dsutx, 16#c0#, txp);
298
-- txa(dsutx, 16#90#, 16#40#, 16#00#, 16#48#, txp);
299
-- txa(dsutx, 16#00#, 16#00#, 16#00#, 16#12#, txp);
300
--
301
-- txc(dsutx, 16#c0#, txp);
302
-- txa(dsutx, 16#90#, 16#40#, 16#00#, 16#60#, txp);
303
-- txa(dsutx, 16#00#, 16#00#, 16#12#, 16#10#, txp);
304
--
305
-- txc(dsutx, 16#80#, txp);
306
-- txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
307
-- rxi(dsurx, w32, txp, lresp);
308
    end;
309
  begin
310
    dsucfg(dsutx, dsurx);
311
    wait;
312
  end process;
313
end;
314
 
315
 

powered by: WebSVN 2.1.0

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