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-avnet-eval-xc4vlx60/] [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
--  modified by Thomas Ameseder, Gleichmann Electronics 2004, 2005 to
16
--  support the use of an external AHB slave and different HPE board versions
17
------------------------------------------------------------------------------
18
--  further adapted from Hpe_compact to Hpe_mini (Feb. 2005)
19
------------------------------------------------------------------------------
20
 
21
 
22
library ieee;
23
use ieee.std_logic_1164.all;
24
library gaisler;
25
use gaisler.libdcom.all;
26
use gaisler.sim.all;
27
library techmap;
28
use techmap.gencomp.all;
29
library micron;
30
use micron.components.all;
31
 
32
use work.config.all;                    -- configuration
33
use work.debug.all;
34
use std.textio.all;
35
library grlib;
36
use grlib.stdlib.all;
37
use grlib.stdio.all;
38
use grlib.devices.all;
39
 
40
 
41
entity testbench is
42
  generic (
43
    fabtech : integer := CFG_FABTECH;
44
    memtech : integer := CFG_MEMTECH;
45
    padtech : integer := CFG_PADTECH;
46
    clktech : integer := CFG_CLKTECH;
47
    disas   : integer := CFG_DISAS;     -- Enable disassembly to console
48
    dbguart : integer := CFG_DUART;     -- Print UART on console
49
    pclow   : integer := CFG_PCLOW;
50
 
51
    clkperiod : integer := 10;          -- system clock period
52
    romwidth  : integer := 16;          -- rom data width (8/32)
53
    romdepth  : integer := 16          -- rom address depth
54
    );
55
end;
56
 
57
architecture behav of testbench is
58
 
59
  constant promfile  : string := "prom.srec";   -- rom contents
60
  constant sdramfile : string := "sdram.srec";  -- sdram contents
61
 
62
 
63
  signal   clk : std_logic := '0';
64
  signal   Rst : std_logic := '0';      -- Reset
65
  constant ct  : integer   := clkperiod/2;
66
 
67
  signal address : std_logic_vector(22 downto 0);
68
  signal data    : std_logic_vector(31 downto 0);
69
 
70
  signal romsn  : std_logic_vector(1 downto 0);
71
  signal oen    : std_ulogic;
72
  signal writen : std_ulogic;
73
  signal iosn : std_ulogic;
74
 
75
  -- ddr memory  
76
  signal ddr_clk        : std_logic;
77
  signal ddr_clkb       : std_logic;
78
  signal ddr_clk_fb  : std_logic;
79
  signal ddr_cke        : std_logic;
80
  signal ddr_csb        : std_logic;
81
  signal ddr_web        : std_ulogic;                       -- ddr write enable
82
  signal ddr_rasb       : std_ulogic;                       -- ddr ras
83
  signal ddr_casb       : std_ulogic;                       -- ddr cas
84
  signal ddr_dm         : std_logic_vector (1 downto 0);    -- ddr dm
85
  signal ddr_dqs        : std_logic_vector (1 downto 0);    -- ddr dqs
86
  signal ddr_ad      : std_logic_vector (12 downto 0);   -- ddr address
87
  signal ddr_ba      : std_logic_vector (1 downto 0);    -- ddr bank address
88
  signal ddr_dq                 : std_logic_vector (15 downto 0); -- ddr data
89
 
90
  signal brdyn                               : std_ulogic;
91
  signal bexcn                               : std_ulogic;
92
  signal wdog                                : std_ulogic;
93
  signal dsuen, dsutx, dsurx, dsubre, dsuact : std_ulogic;
94
  signal dsurst                              : std_ulogic;
95
  signal test                                : std_ulogic;
96
  signal rtsn, ctsn                          : std_ulogic;
97
 
98
  signal error : std_logic;
99
 
100
  signal pio  : std_logic_vector(15 downto 0);
101
  signal GND  : std_ulogic := '0';
102
  signal VCC  : std_ulogic := '1';
103
  signal NC   : std_ulogic := 'Z';
104
  signal clk2 : std_ulogic := '1';
105
  signal clk50 : std_ulogic := '1';
106
 
107
  signal plllock : std_ulogic;
108
 
109
-- pulled up high, therefore std_logic
110
  signal txd1, rxd1 : std_logic;
111
 
112
  signal etx_clk, erx_clk, erx_dv, erx_er, erx_col, erx_crs, etx_en, etx_er : std_logic                    := '0';
113
  signal erxd, etxd                                                         : std_logic_vector(3 downto 0) := (others => '0');
114
  signal emdc, emdio                                                        : std_logic;  --dummy signal for the mdc,mdio in the phy which is not used
115
 
116
  constant lresp : boolean := false;
117
 
118
  signal resoutn : std_logic;
119
  signal dsubren : std_ulogic;
120
  signal dsuactn : std_ulogic;
121
 
122
begin
123
 
124
  dsubren <= not dsubre;
125
 
126
-- clock and reset
127
 
128
  clk     <= not clk after ct * 1 ns;
129
  clk50   <= not clk50 after 10 ns;
130
  rst     <= '1', '0' after 1000 ns;
131
  dsuen   <= '0'; dsubre <= '0'; rxd1 <= 'H';
132
  address(0) <= '0';
133
  ddr_dqs <= (others => 'L');
134
  d3 : entity work.leon3mp
135
    port map (
136
      resetn  => rst,
137
      resoutn => resoutn,
138
      clk_100mhz     => clk,
139
      clk_50mhz     => clk50,
140
      errorn  => error,
141
      address => address(22 downto 1),
142
      data    => data(31 downto 16),
143
      testdata    => data(15 downto 0),
144
 
145
      ddr_clk0          => ddr_clk,
146
      ddr_clk0b         => ddr_clkb,
147
      ddr_clk_fb        => ddr_clk_fb,
148
      ddr_cke0          => ddr_cke,
149
      ddr_cs0b          => ddr_csb,
150
      ddr_web           => ddr_web,
151
      ddr_rasb          => ddr_rasb,
152
      ddr_casb          => ddr_casb,
153
      ddr_dm            => ddr_dm,
154
      ddr_dqs           => ddr_dqs,
155
      ddr_ad            => ddr_ad,
156
      ddr_ba            => ddr_ba,
157
      ddr_dq            => ddr_dq,
158
      sertx   => dsutx,
159
      serrx   => dsurx,
160
      rtsn   => rtsn,
161
      ctsn   => ctsn,
162
 
163
      dsuen   => dsuen,
164
      dsubre => dsubre,
165
      dsuact => dsuactn,
166
 
167
      oen    => oen,
168
      writen => writen,
169
      iosn   => iosn,
170
      romsn  => romsn(0),
171
 
172
      emdio   => emdio,
173
      etx_clk => etx_clk,
174
      erx_clk => erx_clk,
175
      erxd    => erxd,
176
      erx_dv  => erx_dv,
177
      erx_er  => erx_er,
178
      erx_col => erx_col,
179
      erx_crs => erx_crs,
180
      etxd    => etxd,
181
      etx_en  => etx_en,
182
      etx_er => etx_er,
183
      emdc   => emdc
184
 
185
      );
186
 
187
  ddr_clk_fb <= ddr_clk;
188
 
189
  u1 : mt46v16m16
190
    generic map (index => -1, fname => sdramfile)
191
    port map(
192
      Dq => ddr_dq(15 downto 0), Dqs => ddr_dqs(1 downto 0), Addr => ddr_ad,
193
      Ba => ddr_ba, Clk => ddr_clk,  Clk_n => ddr_clkb, Cke => ddr_cke,
194
      Cs_n => ddr_csb, Ras_n => ddr_rasb, Cas_n => ddr_casb, We_n => ddr_web,
195
      Dm => ddr_dm(1 downto 0));
196
 
197
  prom0 : for i in 0 to (romwidth/8)-1 generate
198
      sr0 : sram generic map (index => i+4, abits => romdepth, fname => promfile)
199
        port map (address(romdepth downto 1), data(31-i*8 downto 24-i*8), romsn(0),
200
                  writen, oen);
201
  end generate;
202
 
203
 
204
--  phy0 : if CFG_GRETH > 0 generate
205
--    p0 : phy
206
--      port map(rst, led_cfg, open, etx_clk, erx_clk, erxd, erx_dv,
207
--               erx_er, erx_col, erx_crs, etxd, etx_en, etx_er, emdc);
208
--  end generate;
209
  error <= 'H';                         -- ERROR pull-up
210
 
211
  iuerr : process
212
  begin
213
    wait for 5 us;
214
    assert (to_X01(error) = '1')
215
      report "*** IU in error mode, simulation halted ***"
216
      severity failure;
217
  end process;
218
 
219
  test0 :  grtestmod
220
    port map ( rst, clk, error, address(21 downto 2), data,
221
               iosn, oen, writen, brdyn);
222
 
223
  data <= buskeep(data) after 5 ns;
224
 
225
    dsucom : process
226
      procedure dsucfg(signal dsurx : in std_ulogic; signal dsutx : out std_ulogic) is
227
        variable w32 : std_logic_vector(31 downto 0);
228
        variable c8  : std_logic_vector(7 downto 0);
229
        constant txp : time := 160 * 1 ns;
230
      begin
231
        dsutx  <= '1';
232
        dsurst <= '1';
233
        wait;
234
        wait for 5000 ns;
235
        txc(dsutx, 16#55#, txp);        -- sync uart
236
 
237
--                txc(dsutx, 16#c0#, txp);
238
--        txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
239
--        txa(dsutx, 16#00#, 16#00#, 16#00#, 16#ef#, txp);
240
--
241
--        txc(dsutx, 16#c0#, txp);
242
--        txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
243
--        txa(dsutx, 16#00#, 16#00#, 16#ff#, 16#ff#, txp);
244
--
245
--        txc(dsutx, 16#c0#, txp);
246
--        txa(dsutx, 16#90#, 16#40#, 16#00#, 16#48#, txp);
247
--        txa(dsutx, 16#00#, 16#00#, 16#00#, 16#12#, txp);
248
--
249
--        txc(dsutx, 16#c0#, txp);
250
--        txa(dsutx, 16#90#, 16#40#, 16#00#, 16#60#, txp);
251
--        txa(dsutx, 16#00#, 16#00#, 16#12#, 16#10#, txp);
252
--
253
--        txc(dsutx, 16#80#, txp);
254
--        txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
255
--        rxi(dsurx, w32, txp, lresp);
256
 
257
        txc(dsutx, 16#a0#, txp);
258
        txa(dsutx, 16#40#, 16#00#, 16#00#, 16#00#, txp);
259
        rxi(dsurx, w32, txp, lresp);
260
 
261
      end;
262
 
263
    begin
264
 
265
      dsucfg(dsutx, dsurx);
266
 
267
      wait;
268
    end process;
269
 
270
end;
271
 
272
 

powered by: WebSVN 2.1.0

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