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-cpci-xc4v/] [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 := 20;         -- 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, erx_crs, etx_en, etx_er : std_logic:='0';
115
signal erxd, etxd: std_logic_vector(3 downto 0):=(others=>'0');
116
signal erxdt, etxdt: std_logic_vector(7 downto 0):=(others=>'0');
117
signal emdc, emdio: std_logic;
118
signal gtx_clk : std_logic := '0';
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
signal led_cfg: std_logic_vector(2 downto 0);
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
begin
151
 
152
-- clock and reset
153
 
154
  clk <= not clk after ct * 1 ns;
155
  spw_clk <= not spw_clk after 10 ns;
156
  rst <= dsurst;
157
  dsuen <= '1'; dsubre <= '0'; rxd1 <= '1';
158
  led_cfg<="000"; --put the phy in base10h mode
159
  can_rxd <= (others => 'H'); bexcn <= '1'; wdogn <= 'H';
160
  gpio(2 downto 0) <= "LHL";
161
  gpio(CFG_GRGPIO_WIDTH-1 downto 3) <= (others => 'H');
162
  pci_arb_req <= "HHHH";
163
 
164
  -- spacewire loop-back
165
  spw_rxdp <= spw_txdp; spw_rxdn <= spw_txdn;
166
  spw_rxsp <= spw_txsp; spw_rxsn <= spw_txsn;
167
 
168
  d3 : entity work.leon3mp
169
        generic map ( fabtech, memtech, padtech, clktech, disas, dbguart, pclow )
170
        port map (rst, clk, sdclk, error, wdogn, address(27 downto 0), data,
171
        sa, sd, sdclk, sdcke, sdcsn, sdwen,
172
        sdrasn, sdcasn, sddqm, dsutx, dsurx, dsuen, dsubre, dsuact, txd1, rxd1,
173
        txd2, rxd2,
174
        ramsn, ramoen, rwen, oen, writen, read, iosn, romsn, brdyn, bexcn, gpio,
175
        emdio, etx_clk, erx_clk, erxd, erx_dv, erx_er, erx_col, erx_crs,
176
        etxd, etx_en, etx_er, emdc,
177
        pci_rst, pci_clk, pci_gnt, pci_idsel, pci_lock, pci_ad, pci_cbe,
178
        pci_frame, pci_irdy, pci_trdy, pci_devsel, pci_stop, pci_perr, pci_par,
179
        pci_req, pci_serr, pci_host, pci_66, pci_arb_req, pci_arb_gnt,
180
        can_txd, can_rxd,
181
        spw_clk, spw_rxdp, spw_rxdn, spw_rxsp, spw_rxsn, spw_txdp,
182
        spw_txdn, spw_txsp, spw_txsn
183
        );
184
 
185
-- optional sdram
186
 
187
  sd0 : if (CFG_MCTRL_SDEN = 1) and (CFG_MCTRL_SEPBUS = 0) generate
188
    u0: mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
189
        PORT MAP(
190
            Dq => data(31 downto 16), Addr => address(14 downto 2),
191
            Ba => address(16 downto 15), Clk => sdclk, Cke => sdcke(0),
192
            Cs_n => sdcsn(0), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
193
            Dqm => sddqm(3 downto 2));
194
    u1: mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
195
        PORT MAP(
196
            Dq => data(15 downto 0), Addr => address(14 downto 2),
197
            Ba => address(16 downto 15), Clk => sdclk, Cke => sdcke(0),
198
            Cs_n => sdcsn(0), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
199
            Dqm => sddqm(1 downto 0));
200
    u2: mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
201
        PORT MAP(
202
            Dq => data(31 downto 16), Addr => address(14 downto 2),
203
            Ba => address(16 downto 15), Clk => sdclk, Cke => sdcke(0),
204
            Cs_n => sdcsn(1), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
205
            Dqm => sddqm(3 downto 2));
206
    u3: mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
207
        PORT MAP(
208
            Dq => data(15 downto 0), Addr => address(14 downto 2),
209
            Ba => address(16 downto 15), Clk => sdclk, Cke => sdcke(0),
210
            Cs_n => sdcsn(1), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
211
            Dqm => sddqm(1 downto 0));
212
  end generate;
213
 
214
  sd1 : if ((CFG_MCTRL_SDEN = 1) and (CFG_MCTRL_SEPBUS = 1)) generate
215
    u0: mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
216
        PORT MAP(
217
            Dq => sd(31 downto 16), Addr => sa(12 downto 0),
218
            Ba => sa(14 downto 13), Clk => sdclk, Cke => sdcke(0),
219
            Cs_n => sdcsn(0), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
220
            Dqm => sddqm(3 downto 2));
221
    u1: mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
222
        PORT MAP(
223
            Dq => sd(15 downto 0), Addr => sa(12 downto 0),
224
            Ba => sa(14 downto 13), Clk => sdclk, Cke => sdcke(0),
225
            Cs_n => sdcsn(0), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
226
            Dqm => sddqm(1 downto 0));
227
    u2: mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
228
        PORT MAP(
229
            Dq => sd(31 downto 16), Addr => sa(12 downto 0),
230
            Ba => sa(14 downto 13), Clk => sdclk, Cke => sdcke(1),
231
            Cs_n => sdcsn(1), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
232
            Dqm => sddqm(3 downto 2));
233
    u3: mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
234
        PORT MAP(
235
            Dq => sd(15 downto 0), Addr => sa(12 downto 0),
236
            Ba => sa(14 downto 13), Clk => sdclk, Cke => sdcke(1),
237
            Cs_n => sdcsn(1), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
238
            Dqm => sddqm(1 downto 0));
239
   sd64 : if (CFG_MCTRL_SD64 = 1) generate
240
      u4: mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
241
        PORT MAP(
242
            Dq => sd(63 downto 48), Addr => sa(12 downto 0),
243
            Ba => sa(14 downto 13), Clk => sdclk, Cke => sdcke(0),
244
            Cs_n => sdcsn(0), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
245
            Dqm => sddqm(7 downto 6));
246
      u5: mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
247
        PORT MAP(
248
            Dq => sd(47 downto 32), Addr => sa(12 downto 0),
249
            Ba => sa(14 downto 13), Clk => sdclk, Cke => sdcke(0),
250
            Cs_n => sdcsn(0), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
251
            Dqm => sddqm(5 downto 4));
252
      u6: mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
253
        PORT MAP(
254
            Dq => sd(63 downto 48), Addr => sa(12 downto 0),
255
            Ba => sa(14 downto 13), Clk => sdclk, Cke => sdcke(0),
256
            Cs_n => sdcsn(1), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
257
            Dqm => sddqm(7 downto 6));
258
      u7: mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
259
        PORT MAP(
260
            Dq => sd(47 downto 32), Addr => sa(12 downto 0),
261
            Ba => sa(14 downto 13), Clk => sdclk, Cke => sdcke(0),
262
            Cs_n => sdcsn(1), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
263
            Dqm => sddqm(5 downto 4));
264
    end generate;
265
  end generate;
266
 
267
  prom0 : for i in 0 to (romwidth/8)-1 generate
268
      sr0 : sram generic map (index => i, abits => romdepth, fname => promfile)
269
        port map (address(romdepth+1 downto 2), data(31-i*8 downto 24-i*8), romsn(0),
270
                  rwen(i), oen);
271
  end generate;
272
 
273
  sram0 : for i in 0 to (sramwidth/8)-1 generate
274
      sr0 : sram generic map (index => i, abits => sramdepth, fname => sramfile)
275
        port map (address(sramdepth+1 downto 2), data(31-i*8 downto 24-i*8), ramsn(0),
276
                  rwen(0), ramoen(0));
277
  end generate;
278
 
279
  phy0 : if (CFG_GRETH = 1) generate
280
    emdio <= 'H';
281
    erxd <= erxdt(3 downto 0);
282
    etxdt <= "0000" & etxd;
283
 
284
    p0: phy
285
      generic map(base1000_t_fd => 0, base1000_t_hd => 0)
286
      port map(rst, emdio, etx_clk, erx_clk, erxdt, erx_dv,
287
      erx_er, erx_col, erx_crs, etxdt, etx_en, etx_er, emdc, gtx_clk);
288
  end generate;
289
  error <= 'H';                   -- ERROR pull-up
290
 
291
   iuerr : process
292
   begin
293
     wait for 2500 ns;
294
     if to_x01(error) = '1' then wait on error; end if;
295
     assert (to_x01(error) = '1')
296
       report "*** IU in error mode, simulation halted ***"
297
         severity failure ;
298
   end process;
299
 
300
  test0 :  grtestmod
301
    port map ( rst, clk, error, address(21 downto 2), data,
302
               iosn, oen, writen, brdyn);
303
 
304
--  data <= buskeep(data), (others => 'H') after 250 ns;
305
  data <= buskeep(data) after 5 ns;
306
--  sd <= buskeep(sd), (others => 'H') after 250 ns;
307
  sd <= buskeep(sd) after 5 ns;
308
 
309
  dsucom : process
310
    procedure dsucfg(signal dsurx : in std_logic; signal dsutx : out std_logic) is
311
    variable w32 : std_logic_vector(31 downto 0);
312
    variable c8  : std_logic_vector(7 downto 0);
313
    constant txp : time := 160 * 1 ns;
314
    begin
315
    dsutx <= '1';
316
    dsurst <= '0';
317
    wait for 500 ns;
318
    dsurst <= '1';
319
    wait;
320
    wait for 5000 ns;
321
    txc(dsutx, 16#55#, txp);            -- sync uart
322
 
323
--    txc(dsutx, 16#c0#, txp);
324
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
325
--    txa(dsutx, 16#00#, 16#00#, 16#02#, 16#ae#, txp);
326
--    txc(dsutx, 16#c0#, txp);
327
--    txa(dsutx, 16#91#, 16#00#, 16#00#, 16#00#, txp);
328
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#ae#, txp);
329
--    txc(dsutx, 16#c0#, txp);
330
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#24#, txp);
331
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#03#, txp);
332
--    txc(dsutx, 16#c0#, txp);
333
--    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
334
--    txa(dsutx, 16#00#, 16#00#, 16#06#, 16#fc#, txp);
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#00#, 16#2f#, 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#00#, 16#6f#, txp);
342
    txc(dsutx, 16#c0#, txp);
343
    txa(dsutx, 16#90#, 16#11#, 16#00#, 16#00#, txp);
344
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#00#, txp);
345
    txc(dsutx, 16#c0#, txp);
346
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#04#, txp);
347
    txa(dsutx, 16#00#, 16#02#, 16#20#, 16#01#, txp);
348
    txc(dsutx, 16#c0#, txp);
349
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
350
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#02#, txp);
351
 
352
    txc(dsutx, 16#c0#, txp);
353
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
354
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#0f#, txp);
355
 
356
    txc(dsutx, 16#c0#, txp);
357
    txa(dsutx, 16#40#, 16#00#, 16#43#, 16#10#, txp);
358
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#0f#, txp);
359
 
360
    txc(dsutx, 16#c0#, txp);
361
    txa(dsutx, 16#91#, 16#40#, 16#00#, 16#24#, txp);
362
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#24#, txp);
363
    txc(dsutx, 16#c0#, txp);
364
    txa(dsutx, 16#91#, 16#70#, 16#00#, 16#00#, txp);
365
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#03#, txp);
366
 
367
 
368
 
369
 
370
 
371
    txc(dsutx, 16#c0#, txp);
372
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
373
    txa(dsutx, 16#00#, 16#00#, 16#ff#, 16#ff#, txp);
374
 
375
    txc(dsutx, 16#c0#, txp);
376
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#48#, txp);
377
    txa(dsutx, 16#00#, 16#00#, 16#00#, 16#12#, txp);
378
 
379
    txc(dsutx, 16#c0#, txp);
380
    txa(dsutx, 16#90#, 16#40#, 16#00#, 16#60#, txp);
381
    txa(dsutx, 16#00#, 16#00#, 16#12#, 16#10#, txp);
382
 
383
    txc(dsutx, 16#80#, txp);
384
    txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
385
    rxi(dsurx, w32, txp, lresp);
386
 
387
    txc(dsutx, 16#a0#, txp);
388
    txa(dsutx, 16#40#, 16#00#, 16#00#, 16#00#, txp);
389
    rxi(dsurx, w32, txp, lresp);
390
 
391
    end;
392
 
393
  begin
394
 
395
    dsucfg(dsutx, dsurx);
396
 
397
    wait;
398
  end process;
399
end ;
400
 

powered by: WebSVN 2.1.0

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