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-ml40x/] [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
library cypress;
26
use cypress.components.all;
27
use work.debug.all;
28
 
29
use work.config.all;    -- configuration
30
 
31
entity testbench is
32
  generic (
33
    fabtech   : integer := CFG_FABTECH;
34
    memtech   : integer := CFG_MEMTECH;
35
    padtech   : integer := CFG_PADTECH;
36
    clktech   : integer := CFG_CLKTECH;
37
    ncpu      : integer := CFG_NCPU;
38
    disas     : integer := CFG_DISAS;   -- Enable disassembly to console
39
    dbguart   : integer := CFG_DUART;   -- Print UART on console
40
    pclow     : integer := CFG_PCLOW;
41
 
42
    clkperiod : integer := 10;          -- system clock period
43
    romwidth  : integer := 32;          -- rom data width (8/32)
44
    romdepth  : integer := 16;          -- rom address depth
45
    sramwidth  : integer := 32;         -- ram data width (8/16/32)
46
    sramdepth  : integer := 18;         -- ram address depth
47
    srambanks  : integer := 2           -- number of ram banks
48
  );
49
end;
50
 
51
architecture behav of testbench is
52
 
53
constant promfile  : string := "prom.srec";  -- rom contents
54
constant sramfile  : string := "sram.srec";  -- ram contents
55
constant sdramfile : string := "sdram.srec"; -- sdram contents
56
 
57
signal sys_clk : std_logic := '0';
58
signal sys_rst_in : std_logic := '0';                    -- Reset
59
constant ct : integer := clkperiod/2;
60
 
61
signal plb_error        : std_logic;
62
signal opb_error        : std_logic;
63
signal flash_a23        : std_ulogic;
64
signal sram_flash_addr : std_logic_vector(22 downto 0);
65
signal sram_flash_data : std_logic_vector(31 downto 0);
66
signal sram_cen         : std_logic;
67
signal sram_bw          : std_logic_vector (3 downto 0);
68
signal sram_flash_oe_n : std_ulogic;
69
signal sram_flash_we_n  : std_ulogic;
70
signal flash_ce         : std_logic;
71
signal sram_clk         : std_ulogic;
72
signal sram_clk_fb      : std_ulogic;
73
signal sram_mode        : std_ulogic;
74
signal sram_adv_ld_n : std_ulogic;
75
signal sram_zz : std_ulogic;
76
signal iosn : std_ulogic;
77
signal ddr_clk          : std_logic;
78
signal ddr_clkb         : std_logic;
79
signal ddr_clk_fb  : std_logic;
80
signal ddr_cke          : std_logic;
81
signal ddr_csb          : std_logic;
82
signal ddr_web          : std_ulogic;                       -- ddr write enable
83
signal ddr_rasb         : std_ulogic;                       -- ddr ras
84
signal ddr_casb         : std_ulogic;                       -- ddr cas
85
signal ddr_dm           : std_logic_vector (3 downto 0);    -- ddr dm
86
signal ddr_dqs          : std_logic_vector (3 downto 0);    -- ddr dqs
87
signal ddr_ad      : std_logic_vector (12 downto 0);   -- ddr address
88
signal ddr_ba      : std_logic_vector (1 downto 0);    -- ddr bank address
89
signal ddr_dq  : std_logic_vector (31 downto 0);   -- ddr data
90
signal txd1     : std_ulogic;                   -- UART1 tx data
91
signal rxd1     : std_ulogic;                   -- UART1 rx data
92
signal gpio         : std_logic_vector(26 downto 0);     -- I/O port
93
signal phy_mii_data: std_logic;         -- ethernet PHY interface
94
signal phy_tx_clk       : std_ulogic;
95
signal phy_rx_clk       : std_ulogic;
96
signal phy_rx_data      : std_logic_vector(7 downto 0);
97
signal phy_dv   : std_ulogic;
98
signal phy_rx_er        : std_ulogic;
99
signal phy_col  : std_ulogic;
100
signal phy_crs  : std_ulogic;
101
signal phy_tx_data : std_logic_vector(7 downto 0);
102
signal phy_tx_en        : std_ulogic;
103
signal phy_tx_er        : std_ulogic;
104
signal phy_mii_clk      : std_ulogic;
105
signal phy_rst_n        : std_ulogic;
106
signal phy_gtx_clk      : std_ulogic;
107
signal ps2_keyb_clk: std_logic;
108
signal ps2_keyb_data: std_logic;
109
signal ps2_mouse_clk: std_logic;
110
signal ps2_mouse_data: std_logic;
111
signal tft_lcd_clk : std_ulogic;
112
signal vid_blankn  : std_ulogic;
113
signal vid_syncn   : std_ulogic;
114
signal vid_hsync   : std_ulogic;
115
signal vid_vsync   : std_ulogic;
116
signal vid_r       : std_logic_vector(7 downto 0);
117
signal vid_g       : std_logic_vector(7 downto 0);
118
signal vid_b       : std_logic_vector(7 downto 0);
119
signal usb_csn : std_logic;
120
signal flash_cex : std_logic;
121
signal iic_scl : std_logic;
122
signal iic_sda : std_logic;
123
 
124
signal GND      : std_ulogic := '0';
125
signal VCC      : std_ulogic := '1';
126
signal NC       : std_ulogic := 'Z';
127
signal spw_clk  : std_ulogic := '0';
128
signal spw_rxdp : std_logic_vector(0 to 2) := "000";
129
signal spw_rxdn : std_logic_vector(0 to 2) := "000";
130
signal spw_rxsp : std_logic_vector(0 to 2) := "000";
131
signal spw_rxsn : std_logic_vector(0 to 2) := "000";
132
signal spw_txdp : std_logic_vector(0 to 2);
133
signal spw_txdn : std_logic_vector(0 to 2);
134
signal spw_txsp : std_logic_vector(0 to 2);
135
signal spw_txsn : std_logic_vector(0 to 2);
136
 
137
signal datazz : std_logic_vector(0 to 3);
138
constant lresp : boolean := false;
139
 
140
begin
141
 
142
-- clock and reset
143
 
144
  sys_clk <= not sys_clk after ct * 1 ns;
145
  sys_rst_in <= '0', '1' after 200 ns;
146
  rxd1 <= 'H';
147
  sram_clk_fb <= sram_clk; ddr_clk_fb <= ddr_clk;
148
  ps2_keyb_data <= 'H'; ps2_keyb_clk <= 'H';
149
  ps2_mouse_clk <= 'H'; ps2_mouse_data <= 'H';
150
  iic_scl <= 'H'; iic_sda <= 'H';
151
  flash_cex <= not flash_ce;
152
 
153
  cpu : entity work.leon3mp
154
      generic map ( fabtech, memtech, padtech, ncpu, disas, dbguart, pclow )
155
      port map ( sys_rst_in, sys_clk, plb_error, opb_error, flash_a23, sram_flash_addr,
156
        sram_flash_data, sram_cen, sram_bw, sram_flash_oe_n, sram_flash_we_n,
157
        flash_ce, sram_clk, sram_clk_fb, sram_mode, sram_adv_ld_n, iosn,
158
        ddr_clk, ddr_clkb, ddr_clk_fb, ddr_cke, ddr_csb, ddr_web, ddr_rasb,
159
        ddr_casb, ddr_dm, ddr_dqs, ddr_ad, ddr_ba, ddr_dq,
160
        txd1, rxd1, gpio, phy_gtx_clk, phy_mii_data, phy_tx_clk, phy_rx_clk,
161
        phy_rx_data, phy_dv, phy_rx_er, phy_col, phy_crs,
162
        phy_tx_data, phy_tx_en, phy_tx_er, phy_mii_clk, phy_rst_n, ps2_keyb_clk,
163
        ps2_keyb_data, ps2_mouse_clk, ps2_mouse_data, tft_lcd_clk, vid_blankn, vid_syncn,
164
        vid_hsync, vid_vsync, vid_r, vid_g, vid_b,
165
        usb_csn,
166
        iic_scl, iic_sda
167
        );
168
 
169
  datazz <= "HHHH";
170
 
171
  u0 : cy7c1354 generic map (fname => sramfile)
172
   port map(
173
      Dq(35 downto 32) => datazz, Dq(31 downto 0) => sram_flash_data,
174
      Addr => sram_flash_addr(17 downto 0), Mode => sram_mode,
175
      Clk => sram_clk, CEN_n => gnd, AdvLd_n => sram_adv_ld_n,
176
      Bwa_n => sram_bw(3), Bwb_n => sram_bw(2),
177
      Bwc_n => sram_bw(1), Bwd_n => sram_bw(0),
178
      Rw_n => sram_flash_we_n, Oe_n => sram_flash_oe_n,
179
      Ce1_n => sram_cen,
180
      Ce2 => vcc,
181
      Ce3_n => gnd,
182
      Zz => sram_zz);
183
 
184
      sram_zz <= '0';
185
 
186
  u1 : mt46v16m16
187
    generic map (index => 1, fname => sdramfile, bbits => 32)
188
    PORT MAP(
189
      Dq => ddr_dq(15 downto 0), Dqs => ddr_dqs(1 downto 0), Addr => ddr_ad(12 downto 0),
190
      Ba => ddr_ba, Clk => ddr_clk,  Clk_n => ddr_clkb, Cke => ddr_cke,
191
      Cs_n => ddr_csb, Ras_n => ddr_rasb, Cas_n => ddr_casb, We_n => ddr_web,
192
      Dm => ddr_dm(1 downto 0));
193
 
194
  u2 : mt46v16m16
195
    generic map (index => 0, fname => sdramfile, bbits => 32)
196
    PORT MAP(
197
      Dq => ddr_dq(31 downto 16), Dqs => ddr_dqs(3 downto 2), Addr => ddr_ad(12 downto 0),
198
      Ba => ddr_ba, Clk => ddr_clk,  Clk_n => ddr_clkb, Cke => ddr_cke,
199
      Cs_n => ddr_csb, Ras_n => ddr_rasb, Cas_n => ddr_casb, We_n => ddr_web,
200
      Dm => ddr_dm(3 downto 2));
201
 
202
  prom0 : for i in 0 to (romwidth/8)-1 generate
203
      sr0 : sram generic map (index => i, abits => romdepth, fname => promfile)
204
        port map (sram_flash_addr(romdepth-1 downto 0), sram_flash_data(31-i*8 downto 24-i*8),
205
        flash_cex, sram_bw(i), sram_flash_oe_n);
206
  end generate;
207
 
208
  phy_mii_data <= 'H';
209
 
210
  p0: phy
211
    port map(sys_rst_in, phy_mii_data, phy_tx_clk, phy_rx_clk, phy_rx_data, phy_dv,
212
             phy_rx_er, phy_col, phy_crs, phy_tx_data, phy_tx_en, phy_tx_er, phy_mii_clk, phy_gtx_clk);
213
 
214
  i0: i2c_slave_model
215
    port map (iic_scl, iic_sda);
216
 
217
  plb_error <= 'H';                       -- ERROR pull-up
218
 
219
   iuerr : process
220
   begin
221
     wait for 5000 ns;
222
     if to_x01(plb_error) = '1' then wait on plb_error; end if;
223
     assert (to_x01(plb_error) = '1')
224
       report "*** IU in error mode, simulation halted ***"
225
         severity failure ;
226
   end process;
227
 
228
  test0 :  grtestmod
229
    port map ( sys_rst_in, sys_clk, plb_error, sram_flash_addr(19 downto 0), sram_flash_data,
230
               iosn, sram_flash_oe_n, sram_bw(0), open);
231
 
232
 
233
  sram_flash_data <= buskeep(sram_flash_data), (others => 'H') after 250 ns;
234
  ddr_dq <= buskeep(ddr_dq), (others => 'H') after 250 ns;
235
 
236
end ;
237
 

powered by: WebSVN 2.1.0

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