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-gr-pci-xc5v/] [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
use work.debug.all;
22
library techmap;
23
use techmap.gencomp.all;
24
library micron;
25
use micron.components.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
    disas     : integer := CFG_DISAS;   -- Enable disassembly to console
36
    dbguart   : integer := CFG_DUART;   -- Print UART on console
37
    pclow     : integer := CFG_PCLOW;
38
 
39
    clkperiod : integer := 20;          -- system clock period
40
    romwidth  : integer := 32;          -- rom data width (8/32)
41
    romdepth  : integer := 16;          -- rom address depth
42
    sramwidth  : integer := 32;         -- ram data width (8/16/32)
43
    sramdepth  : integer := 16;         -- ram address depth
44
    srambanks  : integer := 2           -- number of ram banks
45
  );
46
  port (
47
    pci_rst     : inout std_logic;      -- PCI bus
48
    pci_clk     : in std_logic;
49
    pci_gnt     : in std_logic;
50
    pci_idsel   : in std_logic;
51
    pci_lock    : inout std_logic;
52
    pci_ad      : inout std_logic_vector(31 downto 0);
53
    pci_cbe     : inout std_logic_vector(3 downto 0);
54
    pci_frame   : inout std_logic;
55
    pci_irdy    : inout std_logic;
56
    pci_trdy    : inout std_logic;
57
    pci_devsel  : inout std_logic;
58
    pci_stop    : inout std_logic;
59
    pci_perr    : inout std_logic;
60
    pci_par     : inout std_logic;
61
    pci_req     : inout std_logic;
62
    pci_serr    : inout std_logic;
63
    pci_host    : in std_logic := '1';
64
    pci_66      : in std_logic := '0'
65
  );
66
end;
67
 
68
architecture behav of testbench is
69
 
70
constant promfile  : string := "prom.srec";  -- rom contents
71
constant sramfile  : string := "sram.srec";  -- ram contents
72
constant sdramfile : string := "sdram.srec"; -- sdram contents
73
 
74
signal clk : std_logic := '0';
75
signal Rst    : std_logic := '0';                        -- Reset
76
constant ct : integer := clkperiod/2;
77
 
78
signal address  : std_logic_vector(27 downto 0);
79
signal data     : std_logic_vector(31 downto 0);
80
 
81
signal ramsn    : std_logic_vector(4 downto 0);
82
signal ramoen   : std_logic_vector(4 downto 0);
83
signal rwen     : std_logic_vector(3 downto 0);
84
signal rwenx    : std_logic_vector(3 downto 0);
85
signal romsn    : std_logic_vector(1 downto 0);
86
signal iosn     : std_logic;
87
signal oen      : std_logic;
88
signal read     : std_logic;
89
signal writen   : std_logic;
90
signal brdyn    : std_logic;
91
signal bexcn    : std_logic;
92
signal wdogn    : std_logic;
93
signal dsuen, dsutx, dsurx, dsubre, dsuact : std_logic;
94
signal dsurst   : std_logic;
95
signal test     : std_logic;
96
signal error    : std_logic;
97
signal gpio     : std_logic_vector(CFG_GRGPIO_WIDTH-1 downto 0);
98
signal GND      : std_logic := '0';
99
signal VCC      : std_logic := '1';
100
signal NC       : std_logic := 'Z';
101
signal clk2     : std_logic := '1';
102
 
103
signal sdcke    : std_logic_vector ( 1 downto 0);  -- clk en
104
signal sdcsn    : std_logic_vector ( 1 downto 0);  -- chip sel
105
signal sdwen    : std_logic;                       -- write en
106
signal sdrasn   : std_logic;                       -- row addr stb
107
signal sdcasn   : std_logic;                       -- col addr stb
108
signal sddqm    : std_logic_vector ( 7 downto 0);  -- data i/o mask
109
signal sdclk    : std_logic;
110
signal plllock    : std_logic;
111
signal txd1, rxd1 : std_logic;
112
signal txd2, rxd2 : std_logic;
113
 
114
signal etx_clk, erx_clk, erx_dv, erx_er, erx_col : std_logic := '0';
115
signal eth_gtxclk, erx_crs, etx_en, etx_er : std_logic :='0';
116
signal eth_macclk  : std_logic := '0';
117
signal erxd, etxd  : std_logic_vector(7 downto 0) := (others => '0');
118
signal emdc, emdio : std_logic; --dummy signal for the mdc,mdio in the phy which is not used
119
 
120
signal emddis   : std_logic;
121
signal epwrdwn  : std_logic;
122
signal ereset   : std_logic;
123
signal esleep   : std_logic;
124
signal epause   : std_logic;
125
 
126
 
127
 
128
constant lresp : boolean := false;
129
 
130
signal sa       : std_logic_vector(14 downto 0);
131
signal sd       : std_logic_vector(63 downto 0);
132
 
133
signal pci_arb_req, pci_arb_gnt : std_logic_vector(0 to 3);
134
 
135
signal can_txd  : std_logic_vector(0 to CFG_CAN_NUM-1);
136
signal can_rxd  : std_logic_vector(0 to CFG_CAN_NUM-1);
137
 
138
signal can_stb  : std_logic;
139
 
140
signal spw_clk  : std_logic := '0';
141
signal spw_rxdp : std_logic_vector(0 to CFG_SPW_NUM-1) := (others => '0');
142
signal spw_rxdn : std_logic_vector(0 to CFG_SPW_NUM-1) := (others => '0');
143
signal spw_rxsp : std_logic_vector(0 to CFG_SPW_NUM-1) := (others => '0');
144
signal spw_rxsn : std_logic_vector(0 to CFG_SPW_NUM-1) := (others => '0');
145
signal spw_txdp : std_logic_vector(0 to CFG_SPW_NUM-1);
146
signal spw_txdn : std_logic_vector(0 to CFG_SPW_NUM-1);
147
signal spw_txsp : std_logic_vector(0 to CFG_SPW_NUM-1);
148
signal spw_txsn : std_logic_vector(0 to CFG_SPW_NUM-1);
149
 
150
signal usb_clkout  : std_logic := '0';
151
signal usb_d       : std_logic_vector(7 downto 0);
152
signal usb_resetn  : std_ulogic;
153
signal usb_nxt     : std_ulogic;
154
signal usb_stp     : std_ulogic;
155
signal usb_dir     : std_ulogic;
156
 
157
begin
158
 
159
-- clock and reset
160
 
161
  clk <= not clk after ct * 1 ns;
162
  spw_clk <= not spw_clk after 10 ns;
163
  rst <= dsurst;
164
  dsuen <= '1'; dsubre <= '0'; rxd1 <= '1';
165
  can_rxd <= (others => 'H'); bexcn <= '1'; wdogn <= 'H';
166
  gpio(2 downto 0) <= "LHL";
167
  gpio(CFG_GRGPIO_WIDTH-1 downto 3) <= (others => 'H');
168
  pci_arb_req <= "HHHH";
169
  eth_macclk <= not eth_macclk after 4 ns;
170
 
171
 
172
  -- spacewire loop-back
173
  spw_rxdp <= spw_txdp; spw_rxdn <= spw_txdn;
174
  spw_rxsp <= spw_txsp; spw_rxsn <= spw_txsn;
175
 
176
  d3 : entity work.leon3mp
177
        generic map ( fabtech, memtech, padtech, clktech, disas, dbguart, pclow )
178
        port map (rst, clk, sdclk, error, wdogn, address(27 downto 0), data,
179
        sa, sd, sdclk, sdcke, sdcsn, sdwen,
180
        sdrasn, sdcasn, sddqm, dsutx, dsurx, dsuen, dsubre, dsuact, txd1, rxd1,
181
        txd2, rxd2,
182
        ramsn, ramoen, rwen, oen, writen, read, iosn, romsn, brdyn, bexcn, gpio,
183
        emdio, eth_macclk, etx_clk, erx_clk, erxd, erx_dv, erx_er,
184
        erx_col, erx_crs, etxd, etx_en, etx_er, emdc,
185
        pci_rst, pci_clk, pci_gnt, pci_idsel, pci_lock, pci_ad, pci_cbe,
186
        pci_frame, pci_irdy, pci_trdy, pci_devsel, pci_stop, pci_perr, pci_par,
187
        pci_req, pci_serr, pci_host, pci_66, pci_arb_req, pci_arb_gnt,
188
        can_txd, can_rxd,
189
        spw_clk, spw_rxdp, spw_rxdn, spw_rxsp, spw_rxsn, spw_txdp,
190
        spw_txdn, spw_txsp, spw_txsn,
191
        usb_clkout, usb_d, usb_nxt, usb_stp, usb_dir, usb_resetn
192
        );
193
 
194
-- optional sdram
195
 
196
  sd0 : if (CFG_MCTRL_SDEN = 1) and (CFG_MCTRL_SEPBUS = 0) generate
197
    u0: mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
198
        PORT MAP(
199
            Dq => data(31 downto 16), Addr => address(14 downto 2),
200
            Ba => address(16 downto 15), Clk => sdclk, Cke => sdcke(0),
201
            Cs_n => sdcsn(0), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
202
            Dqm => sddqm(3 downto 2));
203
    u1: mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
204
        PORT MAP(
205
            Dq => data(15 downto 0), Addr => address(14 downto 2),
206
            Ba => address(16 downto 15), Clk => sdclk, Cke => sdcke(0),
207
            Cs_n => sdcsn(0), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
208
            Dqm => sddqm(1 downto 0));
209
    u2: mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
210
        PORT MAP(
211
            Dq => data(31 downto 16), Addr => address(14 downto 2),
212
            Ba => address(16 downto 15), Clk => sdclk, Cke => sdcke(0),
213
            Cs_n => sdcsn(1), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
214
            Dqm => sddqm(3 downto 2));
215
    u3: mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
216
        PORT MAP(
217
            Dq => data(15 downto 0), Addr => address(14 downto 2),
218
            Ba => address(16 downto 15), Clk => sdclk, Cke => sdcke(0),
219
            Cs_n => sdcsn(1), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
220
            Dqm => sddqm(1 downto 0));
221
  end generate;
222
 
223
  sd1 : if ((CFG_MCTRL_SDEN = 1) and (CFG_MCTRL_SEPBUS = 1)) generate
224
    u0: mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
225
        PORT MAP(
226
            Dq => sd(31 downto 16), Addr => sa(12 downto 0),
227
            Ba => sa(14 downto 13), Clk => sdclk, Cke => sdcke(0),
228
            Cs_n => sdcsn(0), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
229
            Dqm => sddqm(3 downto 2));
230
    u1: mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
231
        PORT MAP(
232
            Dq => sd(15 downto 0), Addr => sa(12 downto 0),
233
            Ba => sa(14 downto 13), Clk => sdclk, Cke => sdcke(0),
234
            Cs_n => sdcsn(0), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
235
            Dqm => sddqm(1 downto 0));
236
    u2: mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
237
        PORT MAP(
238
            Dq => sd(31 downto 16), Addr => sa(12 downto 0),
239
            Ba => sa(14 downto 13), Clk => sdclk, Cke => sdcke(1),
240
            Cs_n => sdcsn(1), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
241
            Dqm => sddqm(3 downto 2));
242
    u3: mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
243
        PORT MAP(
244
            Dq => sd(15 downto 0), Addr => sa(12 downto 0),
245
            Ba => sa(14 downto 13), Clk => sdclk, Cke => sdcke(1),
246
            Cs_n => sdcsn(1), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
247
            Dqm => sddqm(1 downto 0));
248
   sd64 : if (CFG_MCTRL_SD64 = 1) generate
249
      u4: mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
250
        PORT MAP(
251
            Dq => sd(63 downto 48), Addr => sa(12 downto 0),
252
            Ba => sa(14 downto 13), Clk => sdclk, Cke => sdcke(0),
253
            Cs_n => sdcsn(0), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
254
            Dqm => sddqm(7 downto 6));
255
      u5: mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
256
        PORT MAP(
257
            Dq => sd(47 downto 32), Addr => sa(12 downto 0),
258
            Ba => sa(14 downto 13), Clk => sdclk, Cke => sdcke(0),
259
            Cs_n => sdcsn(0), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
260
            Dqm => sddqm(5 downto 4));
261
      u6: mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
262
        PORT MAP(
263
            Dq => sd(63 downto 48), Addr => sa(12 downto 0),
264
            Ba => sa(14 downto 13), Clk => sdclk, Cke => sdcke(0),
265
            Cs_n => sdcsn(1), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
266
            Dqm => sddqm(7 downto 6));
267
      u7: mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
268
        PORT MAP(
269
            Dq => sd(47 downto 32), Addr => sa(12 downto 0),
270
            Ba => sa(14 downto 13), Clk => sdclk, Cke => sdcke(0),
271
            Cs_n => sdcsn(1), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
272
            Dqm => sddqm(5 downto 4));
273
    end generate;
274
  end generate;
275
 
276
  prom0 : for i in 0 to (romwidth/8)-1 generate
277
      sr0 : sram generic map (index => i, abits => romdepth, fname => promfile)
278
        port map (address(romdepth+1 downto 2), data(31-i*8 downto 24-i*8), romsn(0),
279
                  rwen(i), oen);
280
  end generate;
281
 
282
  sram0 : for i in 0 to (sramwidth/8)-1 generate
283
      sr0 : sram generic map (index => i, abits => sramdepth, fname => sramfile)
284
        port map (address(sramdepth+1 downto 2), data(31-i*8 downto 24-i*8), ramsn(0),
285
                  rwen(0), ramoen(0));
286
  end generate;
287
 
288
 
289
  phy0 : if (CFG_GRETH = 1) generate
290
    emdio <= 'H';
291
    p0: phy
292
      generic map(address => 1)
293
      port map(rst, emdio, etx_clk, erx_clk, erxd, erx_dv,
294
        erx_er, erx_col, erx_crs, etxd, etx_en, etx_er, emdc, eth_macclk);
295
  end generate;
296
 
297
  usbtr: if (CFG_GRUSBHC = 1) generate
298
    u0: ulpi
299
      port map (usb_clkout, usb_d, usb_nxt, usb_stp, usb_dir, usb_resetn);
300
  end generate usbtr;
301
 
302
  error <= 'H';                   -- ERROR pull-up
303
 
304
   iuerr : process
305
   begin
306
     wait for 2500 ns;
307
     if to_x01(error) = '1' then wait on error; end if;
308
     assert (to_x01(error) = '1')
309
       report "*** IU in error mode, simulation halted ***"
310
         severity failure ;
311
   end process;
312
 
313
  test0 :  grtestmod
314
    port map ( rst, clk, error, address(21 downto 2), data,
315
               iosn, oen, writen, brdyn);
316
 
317
--  data <= buskeep(data), (others => 'H') after 250 ns;
318
  data <= buskeep(data) after 5 ns;
319
--  sd <= buskeep(sd), (others => 'H') after 250 ns;
320
  sd <= buskeep(sd) after 5 ns;
321
 
322
  dsucom : process
323
    procedure dsucfg(signal dsurx : in std_logic; signal dsutx : out std_logic) is
324
    variable w32 : std_logic_vector(31 downto 0);
325
    variable c8  : std_logic_vector(7 downto 0);
326
    constant txp : time := 160 * 1 ns;
327
    begin
328
    dsutx <= '1';
329
    dsurst <= '0';
330
    wait for 500 ns;
331
    dsurst <= '1';
332
    wait;
333
    wait for 5000 ns;
334
    txc(dsutx, 16#55#, txp);            -- sync uart
335
 
336
--    txc(dsutx, 16#c0#, txp);
337
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
338
--    txa(dsutx, 16#00#, 16#00#, 16#02#, 16#ae#, txp);
339
--    txc(dsutx, 16#c0#, txp);
340
--    txa(dsutx, 16#91#, 16#00#, 16#00#, 16#00#, txp);
341
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#ae#, txp);
342
--    txc(dsutx, 16#c0#, txp);
343
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#24#, txp);
344
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#03#, txp);
345
--    txc(dsutx, 16#c0#, txp);
346
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
347
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#fc#, txp);
348
 
349
    txc(dsutx, 16#c0#, txp);
350
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
351
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#2f#, txp);
352
    txc(dsutx, 16#c0#, txp);
353
    txa(dsutx, 16#91#, 16#00#, 16#00#, 16#00#, txp);
354
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#6f#, txp);
355
    txc(dsutx, 16#c0#, txp);
356
    txa(dsutx, 16#90#, 16#11#, 16#00#, 16#00#, txp);
357
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#00#, txp);
358
    txc(dsutx, 16#c0#, txp);
359
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#04#, txp);
360
    txa(dsutx, 16#00#, 16#02#, 16#20#, 16#01#, txp);
361
    txc(dsutx, 16#c0#, txp);
362
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
363
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#02#, txp);
364
 
365
    txc(dsutx, 16#c0#, txp);
366
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
367
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#0f#, txp);
368
 
369
    txc(dsutx, 16#c0#, txp);
370
    txa(dsutx, 16#40#, 16#00#, 16#43#, 16#10#, txp);
371
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#0f#, txp);
372
 
373
    txc(dsutx, 16#c0#, txp);
374
    txa(dsutx, 16#91#, 16#40#, 16#00#, 16#24#, txp);
375
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#24#, txp);
376
    txc(dsutx, 16#c0#, txp);
377
    txa(dsutx, 16#91#, 16#70#, 16#00#, 16#00#, txp);
378
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#03#, txp);
379
 
380
 
381
 
382
 
383
 
384
    txc(dsutx, 16#c0#, txp);
385
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
386
    txa(dsutx, 16#00#, 16#00#, 16#ff#, 16#ff#, txp);
387
 
388
    txc(dsutx, 16#c0#, txp);
389
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#48#, txp);
390
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#12#, txp);
391
 
392
    txc(dsutx, 16#c0#, txp);
393
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#60#, txp);
394
    txa(dsutx, 16#00#, 16#00#, 16#12#, 16#10#, txp);
395
 
396
    txc(dsutx, 16#80#, txp);
397
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
398
    rxi(dsurx, w32, txp, lresp);
399
 
400
    txc(dsutx, 16#a0#, txp);
401
    txa(dsutx, 16#40#, 16#00#, 16#00#, 16#00#, txp);
402
    rxi(dsurx, w32, txp, lresp);
403
 
404
    end;
405
 
406
  begin
407
 
408
    dsucfg(dsutx, dsurx);
409
 
410
    wait;
411
  end process;
412
end ;
413
 

powered by: WebSVN 2.1.0

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