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-ge-hpe-mini/] [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
--  modified by Thomas Ameseder, Gleichmann Electronics 2004, 2005 to
16
--  support the use of an external AHB slave and different HPE board versions
17
------------------------------------------------------------------------------
18
--  further adapted from Hpe_compact to Hpe_mini (Feb. 2005)
19
------------------------------------------------------------------------------
20
 
21
 
22
library ieee;
23
use ieee.std_logic_1164.all;
24
library gaisler;
25
use gaisler.libdcom.all;
26
use gaisler.sim.all;
27
library techmap;
28
use techmap.gencomp.all;
29
library micron;
30
use micron.components.all;
31
library gleichmann;
32
use gleichmann.hpi.all;
33
 
34
use work.config.all;                    -- configuration
35
use work.debug.all;
36
 
37
entity testbench is
38
  generic (
39
    fabtech : integer := CFG_FABTECH;
40
    memtech : integer := CFG_MEMTECH;
41
    padtech : integer := CFG_PADTECH;
42
    clktech : integer := CFG_CLKTECH;
43
    disas   : integer := CFG_DISAS;     -- Enable disassembly to console
44
    dbguart : integer := CFG_DUART;     -- Print UART on console
45
    pclow   : integer := CFG_PCLOW;
46
 
47
    clkperiod : integer := 40;          -- system clock period
48
    romwidth  : integer := 32;          -- rom data width (8/32)
49
    romdepth  : integer := 16;          -- rom address depth
50
    sramwidth : integer := 32;          -- ram data width (8/16/32)
51
    sramdepth : integer := 18;          -- ram address depth
52
    srambanks : integer := 2            -- number of ram banks
53
    );
54
  port (
55
    pci_rst    : in    std_ulogic;      -- PCI bus
56
    pci_clk    : in    std_ulogic;
57
    pci_gnt    : in    std_ulogic;
58
    pci_idsel  : in    std_ulogic;
59
    pci_lock   : inout std_ulogic;
60
    pci_ad     : inout std_logic_vector(31 downto 0);
61
    pci_cbe    : inout std_logic_vector(3 downto 0);
62
    pci_frame  : inout std_ulogic;
63
    pci_irdy   : inout std_ulogic;
64
    pci_trdy   : inout std_ulogic;
65
    pci_devsel : inout std_ulogic;
66
    pci_stop   : inout std_ulogic;
67
    pci_perr   : inout std_ulogic;
68
    pci_par    : inout std_ulogic;
69
    pci_req    : inout std_ulogic;
70
    pci_serr   : inout std_ulogic;
71
    pci_host   : in    std_ulogic;
72
    pci_66     : in    std_ulogic
73
    );
74
end;
75
 
76
architecture behav of testbench is
77
 
78
  constant promfile  : string := "prom.srec";   -- rom contents
79
  constant sramfile  : string := "sram.srec";   -- ram contents
80
  constant sdramfile : string := "sdram.srec";  -- sdram contents
81
 
82
 
83
  signal   clk : std_logic := '0';
84
  signal   Rst : std_logic := '0';      -- Reset
85
  constant ct  : integer   := clkperiod/2;
86
 
87
  signal address : std_logic_vector(27 downto 0);
88
  signal data    : std_logic_vector(31 downto 0);
89
 
90
  signal ramsn  : std_logic_vector(4 downto 0);
91
  signal ramoen : std_logic_vector(4 downto 0);
92
  signal romsn  : std_logic_vector(1 downto 0);
93
  signal iosn   : std_ulogic;
94
  signal oen    : std_ulogic;
95
  signal read   : std_ulogic;
96
  signal writen : std_ulogic;
97
  signal rben   : std_logic_vector(3 downto 0);
98
  signal rwen   : std_logic_vector(3 downto 0);
99
 
100
 
101
  signal brdyn                               : std_ulogic;
102
  signal bexcn                               : std_ulogic;
103
  signal wdog                                : std_ulogic;
104
  signal dsuen, dsutx, dsurx, dsubre, dsuact : std_ulogic;
105
  signal dsurst                              : std_ulogic;
106
  signal test                                : std_ulogic;
107
 
108
  signal error : std_logic;
109
 
110
  signal pio  : std_logic_vector(15 downto 0);
111
  signal GND  : std_ulogic := '0';
112
  signal VCC  : std_ulogic := '1';
113
  signal NC   : std_ulogic := 'Z';
114
  signal clk2 : std_ulogic := '1';
115
 
116
  signal sdcke  : std_logic_vector (1 downto 0);  -- clk en
117
  signal sdcsn  : std_logic_vector (1 downto 0);  -- chip sel
118
  signal sdwen  : std_ulogic;                     -- write en
119
  signal sdrasn : std_ulogic;                     -- row addr stb
120
  signal sdcasn : std_ulogic;                     -- col addr stb
121
  signal sddqm  : std_logic_vector (3 downto 0);  -- data i/o mask
122
  signal sd_clk : std_logic_vector(1 downto 0);
123
 
124
  signal sdclk   : std_ulogic;
125
--  alias sdclk   : std_logic is sd_clk(0);
126
  signal plllock : std_ulogic;
127
 
128
-- pulled up high, therefore std_logic
129
  signal txd1, rxd1 : std_logic;
130
 
131
  signal etx_clk, erx_clk, erx_dv, erx_er, erx_col, erx_crs, etx_en, etx_er : std_logic                    := '0';
132
  signal erxd, etxd                                                         : std_logic_vector(3 downto 0) := (others => '0');
133
  signal emdc, emdio                                                        : std_logic;  --dummy signal for the mdc,mdio in the phy which is not used
134
 
135
  signal emddis  : std_logic;
136
  signal epwrdwn : std_logic;
137
  signal ereset  : std_logic;
138
  signal esleep  : std_logic;
139
  signal epause  : std_logic;
140
  signal tp_out  : std_logic_vector(7 downto 0);
141
  signal led_cfg : std_logic_vector(2 downto 0);
142
 
143
  constant lresp : boolean := false;
144
 
145
  signal sa : std_logic_vector(14 downto 0);
146
  signal sd : std_logic_vector(63 downto 0);
147
 
148
  -- ATA signals
149
  signal ata_rst   : std_logic;
150
  signal ata_data  : std_logic_vector(15 downto 0);
151
  signal ata_da    : std_logic_vector(2 downto 0);
152
  signal ata_cs0   : std_logic;
153
  signal ata_cs1   : std_logic;
154
  signal ata_dior  : std_logic;
155
  signal ata_diow  : std_logic;
156
  signal ata_iordy : std_logic;
157
  signal ata_intrq : std_logic;
158
  signal ata_dmack : std_logic;
159
 
160
-- Added for Hpe
161
 
162
  signal resoutn : std_logic;
163
  signal disrams : std_logic;
164
  signal sdclk0  : std_ulogic;
165
  signal sdclk1  : std_ulogic;
166
  signal sdba0   : std_logic;           -- bank address zero
167
  signal sdba1   : std_logic;           -- bank address one
168
  signal dsubren : std_ulogic;
169
  signal dsuactn : std_ulogic;
170
  signal bufdir  : std_logic;
171
  signal bufoen  : std_logic;
172
  signal s_sddqm : std_logic_vector (3 downto 0);
173
 
174
  signal HRESETn   : std_ulogic;
175
  signal HSEL      : std_ulogic;
176
  signal HREADY_ba : std_ulogic;        -- hready input signal
177
  signal HADDR     : std_logic_vector(31 downto 0);
178
  signal HWRITE    : std_ulogic;
179
  signal HTRANS    : std_logic_vector(1 downto 0);
180
  signal HSIZE     : std_logic_vector(2 downto 0);
181
  signal HBURST    : std_logic_vector(2 downto 0);
182
  signal HWDATA    : std_logic_vector(31 downto 0);
183
  signal HMASTER   : std_logic_vector(3 downto 0);
184
  signal HMASTLOCK : std_ulogic;
185
  signal HREADY    : std_ulogic;
186
  signal HRESP     : std_logic_vector(1 downto 0);
187
  signal HRDATA    : std_logic_vector(31 downto 0);
188
  signal HSPLIT    : std_logic_vector(15 downto 0);
189
 
190
  signal clk_ctrl        : std_logic_vector(1 downto 0);  -- cpld      
191
  signal CAN_RXD         : std_logic;
192
  signal CAN_TXD         : std_logic;
193
  signal CAN_STB         : std_logic;
194
  signal CAN_TXD_delayed : std_logic := '1';
195
  signal gpio            : std_logic_vector(7 downto 0);
196
 
197
  signal dac : std_ulogic;              -- ouput of sigma delta DAC
198
 
199
  subtype sd_address_range is natural range 14 downto 2;
200
  subtype sd_ba_range is natural range 16 downto 15;
201
 
202
  signal vga_vsync : std_ulogic;
203
  signal vga_hsync : std_ulogic;
204
  signal vga_rd    : std_logic_vector(1 downto 0);
205
  signal vga_gr    : std_logic_vector(1 downto 0);
206
  signal vga_bl    : std_logic_vector(1 downto 0);
207
 
208
  ---------------------------------------------------------------------------------------
209
  -- HPI SIGNALS
210
  ---------------------------------------------------------------------------------------
211
  signal hpiaddr           : std_logic_vector(1 downto 0);
212
  signal hpidata, hpirdata : std_logic_vector(15 downto 0);
213
  signal hpicsn            : std_ulogic;
214
  signal hpiwrn            : std_ulogic;
215
  signal hpirdn            : std_ulogic;
216
  signal hpiint            : std_ulogic;
217
  signal dbg_equal         : std_ulogic;
218
  signal drive_bus         : std_ulogic;
219
  ---------------------------------------------------------------------------------------
220
 
221
 
222
begin
223
 
224
  dsubren               <= not dsubre;
225
  disrams               <= '0';
226
  address(27 downto 16) <= (others => '0');
227
  address(1 downto 0)   <= (others => '0');
228
-- clock and reset
229
 
230
  clk     <= not clk after ct * 1 ns;
231
  rst     <= '1'     after 10 ns;
232
  dsuen   <= '0'; dsubre <= '0'; rxd1 <= 'H';
233
  led_cfg <= "000";                     --put the phy in base10h mode
234
 
235
  d3 : entity work.leon3mini
236
    generic map (
237
      fabtech => fabtech, memtech => memtech, padtech => padtech,
238
      clktech => clktech, disas => disas, dbguart => dbguart,
239
      pclow   => pclow)
240
    port map (
241
      resetn  => rst,
242
      resoutn => resoutn,
243
      clk     => clk,
244
      errorn  => error,
245
      address => address(15 downto 2),
246
      data    => data,
247
      sdclk   => sdclk,
248
      sdcke   => sdcke,
249
      sdcsn   => sdcsn,
250
      sdwen   => sdwen,
251
      sdrasn  => sdrasn,
252
      sdcasn  => sdcasn,
253
      sddqm   => sddqm(3 downto 0),     -- topmost bits are undriven
254
      sdba    => sa(14 downto 13),
255
 
256
      sertx     => dsutx,
257
      serrx     => dsurx,
258
      sersrcsel => gnd,                 -- select serial DCL
259
 
260
      dsuen   => dsuen,
261
      dsubre  => dsubre,
262
      dsuactn => dsuactn,
263
 
264
--      txd1    => txd1,
265
--      rxd1    => rxd1,
266
 
267
--      gpio => gpio,
268
 
269
      ramsn  => ramsn,
270
      ramoen => ramoen,
271
      oen    => oen,
272
      rben   => rben,
273
      rwen   => rwen,
274
      writen => writen,
275
      read   => read,
276
      iosn   => iosn,
277
      romsn  => romsn,
278
 
279
      emdio   => emdio,
280
      etx_clk => etx_clk,
281
      erx_clk => erx_clk,
282
      erxd    => erxd,
283
      erx_dv  => erx_dv,
284
      erx_er  => erx_er,
285
      erx_col => erx_col,
286
      erx_crs => erx_crs,
287
      etxd    => etxd,
288
      etx_en  => etx_en,
289
      etx_er  => etx_er,
290
      emdc    => emdc,
291
 
292
      ata_rst   => ata_rst,
293
      ata_data  => ata_data,
294
      ata_da    => ata_da,
295
      ata_cs0   => ata_cs0,
296
      ata_cs1   => ata_cs1,
297
      ata_dior  => ata_dior,
298
      ata_diow  => ata_diow,
299
      ata_iordy => ata_iordy,
300
      ata_intrq => ata_intrq,
301
      ata_dmack => ata_dmack,
302
 
303
      hpiaddr   => hpiaddr,
304
      hpidata   => hpidata,
305
      hpicsn    => hpicsn,
306
      hpiwrn    => hpiwrn,
307
      hpirdn    => hpirdn,
308
      hpiint    => hpiint,
309
      dbg_equal => dbg_equal,
310
--      drive_bus => drive_bus,
311
 
312
 
313
      dac       => dac,
314
      vga_vsync => vga_vsync,
315
      vga_hsync => vga_hsync,
316
      vga_rd    => vga_rd,
317
      vga_gr    => vga_gr,
318
      vga_bl    => vga_bl
319
      );
320
 
321
  hpidata <= hpirdata when hpirdn = '0' else (others => 'Z');
322
 
323
  hpiint <= '0';
324
 
325
  hpi_ram_1 : hpi_ram
326
    generic map (
327
      abits => 10,
328
      dbits => 16)
329
    port map (
330
      clk     => clk,
331
      address => hpiaddr,
332
      datain  => hpidata,
333
      dataout => hpirdata,
334
      writen  => hpiwrn,
335
      readn   => hpirdn,
336
      csn     => hpicsn
337
      );
338
 
339
-- optional sdram
340
 
341
  sd0 : if (CFG_MCTRL_SDEN = 1) generate
342
    u0 : mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
343
      port map(
344
        Dq   => data(31 downto 16), Addr => address(sd_address_range),
345
        Ba   => address(sd_ba_range), Clk => sdclk, Cke => sdcke(0),
346
        Cs_n => sdcsn(0), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
347
        Dqm  => sddqm(3 downto 2));
348
    u1 : mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
349
      port map(
350
        Dq   => data(15 downto 0), Addr => address(sd_address_range),
351
        Ba   => address(sd_ba_range), Clk => sdclk, Cke => sdcke(0),
352
        Cs_n => sdcsn(0), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
353
        Dqm  => sddqm(1 downto 0));
354
    u2 : mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
355
      port map(
356
        Dq   => data(31 downto 16), Addr => address(sd_address_range),
357
        Ba   => address(sd_ba_range), Clk => sdclk, Cke => sdcke(0),
358
        Cs_n => sdcsn(1), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
359
        Dqm  => sddqm(3 downto 2));
360
    u3 : mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
361
      port map(
362
        Dq   => data(15 downto 0), Addr => address(sd_address_range),
363
        Ba   => address(sd_ba_range), Clk => sdclk, Cke => sdcke(0),
364
        Cs_n => sdcsn(1), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
365
        Dqm  => sddqm(1 downto 0));
366
  end generate;
367
 
368
  extbprom : if CFG_BOOTOPT = 0 generate
369
    prom0 : for i in 0 to (romwidth/8)-1 generate
370
      sr0 : sram generic map (index => i, abits => romdepth, fname => promfile)
371
        port map (address(romdepth+1 downto 2), data(31-i*8 downto 24-i*8), romsn(0),
372
                  rwen(i), oen);
373
    end generate;
374
  end generate extbprom;
375
 
376
 
377
  sram0 : for i in 0 to (sramwidth/8)-1 generate
378
    sr0 : sram generic map (index => i, abits => sramdepth, fname => sramfile)
379
      port map (address(sramdepth+1 downto 2), data(31-i*8 downto 24-i*8), ramsn(0),
380
                rben(0), ramoen(0));    -- **** tame: changed rwen to rben
381
  end generate;
382
 
383
  phy0 : if CFG_GRETH > 0 generate
384
    p0 : phy
385
      port map(rst, led_cfg, open, etx_clk, erx_clk, erxd, erx_dv,
386
               erx_er, erx_col, erx_crs, etxd, etx_en, etx_er, emdc);
387
  end generate;
388
  error <= 'H';                         -- ERROR pull-up
389
 
390
  ata_dev0 : ata_device
391
    port map(
392
      ata_rst_n  => ata_rst,
393
      ata_data   => ata_data,
394
      ata_da     => ata_da,
395
      ata_cs0    => ata_cs0,
396
      ata_cs1    => ata_cs1,
397
      ata_dior_n => ata_dior,
398
      ata_diow_n => ata_diow,
399
      ata_iordy  => ata_iordy,
400
      ata_intrq  => ata_intrq
401
      );
402
 
403
  iuerr : process(error)
404
  begin
405
    assert (error /= '0')
406
      report "*** IU in error mode, simulation halted ***"
407
      severity failure;
408
  end process;
409
 
410
  data <= buskeep(data), (others => 'H') after 250 ns;
411
  sd   <= buskeep(sd), (others   => 'H') after 250 ns;
412
 
413
  test0 : grtestmod
414
    port map (rst, clk, error, address(21 downto 2), data,
415
               iosn, oen, writen, brdyn);
416
 
417
  dcomstart : if CFG_BOOTOPT = 0 generate
418
 
419
    dsucom : process
420
      procedure dsucfg(signal dsurx : in std_ulogic; signal dsutx : out std_ulogic) is
421
        variable w32 : std_logic_vector(31 downto 0);
422
        variable c8  : std_logic_vector(7 downto 0);
423
        constant txp : time := 160 * 1 ns;
424
      begin
425
        dsutx  <= '1';
426
        dsurst <= '1';
427
        wait;
428
        wait for 5000 ns;
429
        txc(dsutx, 16#55#, txp);        -- sync uart
430
 
431
        txc(dsutx, 16#c0#, txp);
432
        txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
433
        txa(dsutx, 16#00#, 16#00#, 16#00#, 16#ef#, txp);
434
 
435
        txc(dsutx, 16#c0#, txp);
436
        txa(dsutx, 16#90#, 16#00#, 16#00#, 16#20#, txp);
437
        txa(dsutx, 16#00#, 16#00#, 16#ff#, 16#ff#, txp);
438
 
439
        txc(dsutx, 16#c0#, txp);
440
        txa(dsutx, 16#90#, 16#40#, 16#00#, 16#48#, txp);
441
        txa(dsutx, 16#00#, 16#00#, 16#00#, 16#12#, txp);
442
 
443
        txc(dsutx, 16#c0#, txp);
444
        txa(dsutx, 16#90#, 16#40#, 16#00#, 16#60#, txp);
445
        txa(dsutx, 16#00#, 16#00#, 16#12#, 16#10#, txp);
446
 
447
        txc(dsutx, 16#80#, txp);
448
        txa(dsutx, 16#90#, 16#00#, 16#00#, 16#00#, txp);
449
        rxi(dsurx, w32, txp, lresp);
450
 
451
        txc(dsutx, 16#a0#, txp);
452
        txa(dsutx, 16#40#, 16#00#, 16#00#, 16#00#, txp);
453
        rxi(dsurx, w32, txp, lresp);
454
 
455
      end;
456
 
457
    begin
458
 
459
      dsucfg(dsutx, dsurx);
460
 
461
      wait;
462
    end process;
463
 
464
  end generate dcomstart;
465
 
466
 
467
  altstimuli : if CFG_BOOTOPT = 1 generate
468
    stimuli : process
469
    begin
470
      dsurx <= '1';
471
      -- rxd1 <= 'H'; --already defined above
472
      txd1  <= 'H';
473
 
474
 
475
      wait;
476
    end process STIMULI;
477
  end generate altstimuli;
478
 
479
end;
480
 
481
 

powered by: WebSVN 2.1.0

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