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-digilent-xup/] [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
use work.debug.all;
26
 
27
use work.config.all;    -- configuration
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
    ncpu      : integer := CFG_NCPU;
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 := 10;          -- 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 sys_clk : std_logic := '0';
56
signal sys_rst_in : std_logic := '0';                    -- Reset
57
constant ct : integer := clkperiod/2;
58
 
59
signal errorn   : std_logic;
60
signal address : std_logic_vector(27 downto 0);
61
signal data : std_logic_vector(15 downto 0);
62
signal xdata : std_logic_vector(31 downto 0);
63
signal romsn    : std_logic;
64
signal iosn : std_ulogic;
65
signal writen, read     : std_ulogic;
66
signal oen      : std_ulogic;
67
signal flash_rstn       : std_logic;
68
signal ddr_clk          : std_logic_vector(2 downto 0);
69
signal ddr_clkb         : std_logic_vector(2 downto 0);
70
signal ddr_clk_fb  : std_logic;
71
signal ddr_clk_fb_out  : std_logic;
72
signal ddr_cke          : std_logic_vector(1 downto 0);
73
signal ddr_csb          : std_logic_vector(1 downto 0);
74
signal ddr_web          : std_ulogic;                       -- ddr write enable
75
signal ddr_rasb         : std_ulogic;                       -- ddr ras
76
signal ddr_casb         : std_ulogic;                       -- ddr cas
77
signal ddr_dm           : std_logic_vector (7 downto 0);    -- ddr dm
78
signal ddr_dqs          : std_logic_vector (7 downto 0);    -- ddr dqs
79
signal ddr_ad      : std_logic_vector (13 downto 0);   -- ddr address
80
signal ddr_ba      : std_logic_vector (1 downto 0);    -- ddr bank address
81
signal ddr_dq  : std_logic_vector (63 downto 0);   -- ddr data
82
signal txd1     : std_logic;                    -- UART1 tx data
83
signal rxd1     : std_logic;                    -- UART1 rx data
84
signal gpio         : std_logic_vector(31 downto 0);     -- I/O port
85
signal flash_cex : std_logic;
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 emdc, emdio, eresetn : std_logic;
89
signal etx_slew  : std_logic_vector(1 downto 0);
90
signal leds  : std_logic_vector(1 downto 0);
91
 
92
signal vid_clock     : std_ulogic;
93
signal vid_blankn    : std_ulogic;
94
signal vid_syncn     : std_ulogic;
95
signal vid_hsync     : std_ulogic;
96
signal vid_vsync     : std_ulogic;
97
signal vid_r         : std_logic_vector(7 downto 0);
98
signal vid_g         : std_logic_vector(7 downto 0);
99
signal vid_b         : std_logic_vector(7 downto 0);
100
 
101
signal ps2clk        : std_logic_vector(1 downto 0);
102
signal ps2data       : std_logic_vector(1 downto 0);
103
 
104
signal GND      : std_ulogic := '0';
105
signal VCC      : std_ulogic := '1';
106
signal NC       : std_ulogic := 'Z';
107
constant lresp : boolean := false;
108
 
109
signal dsuen    : std_ulogic;
110
signal dsubre   : std_ulogic;
111
signal dsuact   : std_ulogic;
112
begin
113
 
114
-- clock and reset
115
 
116
  sys_clk <= not sys_clk after ct * 1 ns;
117
  sys_rst_in <= '0', '1' after 200 ns;
118
  rxd1 <= 'H'; errorn <= 'H'; dsuen <= '0';
119
  ddr_clk_fb <= ddr_clk_fb_out; rxd1 <= txd1;
120
 
121
  cpu : entity work.leon3mp
122
      generic map ( fabtech, memtech, padtech, ncpu, disas, dbguart, pclow )
123
      port map ( sys_rst_in, sys_clk, errorn, dsuen, dsubre, dsuact,
124
        ddr_clk, ddr_clkb, ddr_clk_fb, ddr_clk_fb_out, ddr_cke, ddr_csb,
125
        ddr_web, ddr_rasb, ddr_casb, ddr_dm, ddr_dqs, ddr_ad, ddr_ba, ddr_dq,
126
        rxd1, txd1, leds(0), leds(1),
127
--      gpio,
128
        emdio, etx_clk, erx_clk, erxd, erx_dv, erx_er, erx_col, erx_crs,
129
        etxd, etx_en, etx_er, emdc, eresetn, etx_slew, ps2clk, ps2data,
130
        vid_clock, vid_blankn, vid_syncn, vid_hsync, vid_vsync,
131
        vid_r, vid_g, vid_b
132
        );
133
 
134
  ddrmem : for i in 0 to 1 generate
135
    u3 : mt46v16m16
136
    generic map (index => 3, fname => sdramfile, bbits => 64)
137
    PORT MAP(
138
      Dq => ddr_dq(15 downto 0), Dqs => ddr_dqs(1 downto 0), Addr => ddr_ad(12 downto 0),
139
      Ba => ddr_ba, Clk => ddr_clk(i),  Clk_n => ddr_clkb(i), Cke => ddr_cke(i),
140
      Cs_n => ddr_csb(i), Ras_n => ddr_rasb, Cas_n => ddr_casb, We_n => ddr_web,
141
      Dm => ddr_dm(1 downto 0));
142
 
143
    u2 : mt46v16m16
144
    generic map (index => 2, fname => sdramfile, bbits => 64)
145
    PORT MAP(
146
      Dq => ddr_dq(31 downto 16), Dqs => ddr_dqs(3 downto 2), Addr => ddr_ad(12 downto 0),
147
      Ba => ddr_ba, Clk => ddr_clk(i),  Clk_n => ddr_clkb(i), Cke => ddr_cke(i),
148
      Cs_n => ddr_csb(i), Ras_n => ddr_rasb, Cas_n => ddr_casb, We_n => ddr_web,
149
      Dm => ddr_dm(3 downto 2));
150
    u1 : mt46v16m16
151
    generic map (index => 1, fname => sdramfile, bbits => 64)
152
    PORT MAP(
153
      Dq => ddr_dq(47 downto 32), Dqs => ddr_dqs(5 downto 4), Addr => ddr_ad(12 downto 0),
154
      Ba => ddr_ba, Clk => ddr_clk(i),  Clk_n => ddr_clkb(i), Cke => ddr_cke(i),
155
      Cs_n => ddr_csb(i), Ras_n => ddr_rasb, Cas_n => ddr_casb, We_n => ddr_web,
156
      Dm => ddr_dm(5 downto 4));
157
 
158
    u0 : mt46v16m16
159
    generic map (index => 0, fname => sdramfile, bbits => 64)
160
    PORT MAP(
161
      Dq => ddr_dq(63 downto 48), Dqs => ddr_dqs(7 downto 6), Addr => ddr_ad(12 downto 0),
162
      Ba => ddr_ba, Clk => ddr_clk(i),  Clk_n => ddr_clkb(i), Cke => ddr_cke(i),
163
      Cs_n => ddr_csb(i), Ras_n => ddr_rasb, Cas_n => ddr_casb, We_n => ddr_web,
164
      Dm => ddr_dm(7 downto 6));
165
  end generate;
166
 
167
  prom0 : sram16 generic map (index => 4, abits => romdepth, fname => promfile)
168
        port map (address(romdepth-1 downto 0), data,
169
                  gnd, gnd, romsn, writen, oen);
170
 
171
   iuerr : process
172
   begin
173
     wait for 5000 ns;
174
     if to_x01(errorn) = '1' then wait on errorn; end if;
175
     assert (to_x01(errorn) = '1')
176
       report "*** IU in error mode, simulation halted ***"
177
         severity failure ;
178
   end process;
179
 
180
  xdata <= "0000000000000000" & data;
181
  test0 :  grtestmod
182
    port map ( sys_rst_in, sys_clk, errorn, address(20 downto 1), xdata,
183
               iosn, oen, writen, open);
184
 
185
 
186
  data <= buskeep(data), (others => 'H') after 250 ns;
187
  ddr_dq <= buskeep(ddr_dq), (others => 'H') after 250 ns;
188
 
189
end ;
190
 

powered by: WebSVN 2.1.0

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