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

powered by: WebSVN 2.1.0

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