OpenCores
URL https://opencores.org/ocsvn/spacewire_light/spacewire_light/trunk

Subversion Repositories spacewire_light

[/] [spacewire_light/] [trunk/] [sim/] [spwamba_leon3/] [spwamba_tb.vhd] - Blame information for rev 7

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 5 jorisvr
--
2
-- Test Bench for SpaceWire AMBA interface.
3
--
4
-- Instantiate a minimal LEON3 system with SPWAMBA core.
5
-- At the start of the simulation, a software image is loaded into memory
6
-- from an external file spwamba_test.srec.
7
--
8
 
9
library ieee;
10
use ieee.std_logic_1164.all, ieee.numeric_std.all;
11
use std.textio.all;
12
library techmap;
13
use techmap.gencomp.all;
14
library grlib;
15
use grlib.amba.all;
16
use grlib.stdlib.all;
17
library gaisler;
18
use gaisler.leon3.all;
19
use gaisler.uart.all;
20
use gaisler.misc.all;
21
use work.spwpkg.all;
22
use work.spwambapkg.all;
23
 
24
entity spwamba_tb is
25
 
26
end spwamba_tb;
27
 
28
architecture tb_arch of spwamba_tb is
29
 
30
    -- 40 MHz system clock
31
    constant sys_clock_freq: real := 40.0e6;
32
 
33
    signal clkm:    std_ulogic := '0';
34
    signal rstn:    std_ulogic := '0';
35
 
36
    signal apbi:    apb_slv_in_type;
37
    signal apbo:    apb_slv_out_vector := (others => apb_none);
38
    signal ahbsi:   ahb_slv_in_type;
39
    signal ahbso:   ahb_slv_out_vector := (others => ahbs_none);
40
    signal ahbmi:   ahb_mst_in_type;
41
    signal ahbmo:   ahb_mst_out_vector := (others => ahbm_none);
42
 
43
    signal irqi:    irq_in_vector(0 to 0);
44
    signal irqo:    irq_out_vector(0 to 0);
45
    signal dbgi:    l3_debug_in_type;
46
    signal dbgo:    l3_debug_out_type;
47
 
48
    signal uarti:   uart_in_type;
49
    signal uarto:   uart_out_type;
50
    signal gpti:    gptimer_in_type;
51
    signal gpto:    gptimer_out_type;
52
 
53
    signal spw_tick_in: std_logic;
54
    signal spw_di:      std_logic;
55
    signal spw_si:      std_logic;
56
    signal spw_do:      std_logic;
57
    signal spw_so:      std_logic;
58
 
59
    component ahbram_loadfile is
60
        generic (
61
            hindex: integer;
62
            haddr:  integer;
63
            hmask:  integer := 16#fff#;
64
            abits:  integer range 10 to 24;
65
            fname:  string );
66
        port (
67
            rstn:   in  std_logic;
68
            clk:    in  std_logic;
69
            ahbi:   in  ahb_slv_in_type;
70
            ahbo:   out ahb_slv_out_type );
71
    end component;
72
 
73
begin
74
 
75
    --
76
    -- Reset and clock generation.
77
    --
78
    process is
79
    begin
80
        -- Reset (APBUART needs 2 reset cycles)
81
        rstn    <= '0';
82
        for i in 0 to 1 loop
83
            wait for (0.5 sec) / sys_clock_freq;
84
            clkm    <= '1';
85
            wait for (0.5 sec) / sys_clock_freq;
86
            clkm    <= '0';
87
        end loop;
88
        rstn    <= '1';
89
        report "Start simulation";
90
        -- Main loop
91
        loop
92
            wait for (0.5 sec) / sys_clock_freq;
93
            clkm    <= '1';
94
            wait for (0.5 sec) / sys_clock_freq;
95
            clkm    <= '0';
96
            -- Check LEON3 error signal.
97
            assert dbgo.error = '1' report "LEON3 in error mode";
98
            exit when dbgo.error = '0';
99
            -- End simulation when LEON3 is in power down mode.
100
            exit when dbgo.pwd = '1';
101
        end loop;
102
        -- End simulation.
103
        report "End of simulation";
104
        wait;
105
    end process;
106
 
107
    --
108
    -- AHB controller.
109
    --
110
    ahb0: ahbctrl
111
        generic map (defmast => 0, split => 0, rrobin => 1,
112
                     ioaddr => 16#fff#, ioen => 0, nahbm => 2, nahbs => 4)
113
        port map (rstn, clkm, ahbmi, ahbmo, ahbsi, ahbso);
114
 
115
    --
116
    -- LEON3 processor.
117
    --
118
    cpu: leon3s
119
        generic map (hindex => 0, fabtech => inferred, memtech => inferred,
120
                     nwindows => 8, dsu => 0, fpu => 0, v8 => 0, cp => 0, mac => 0,
121
                     pclow => 2, notag => 0, nwp => 4,
122
                     icen => 1, irepl => 0, isets => 1, ilinesize => 8, isetsize => 4, isetlock => 0,
123
                     dcen => 0, drepl => 0, dsets => 1, dlinesize => 4, dsetsize => 4, dsetlock => 0, dsnoop => 1,
124
                     ilram => 0, ilramsize => 1, ilramstart => 16#8E#,
125
                     dlram => 0, dlramsize => 1, dlramstart => 16#8F#,
126
                     mmuen => 0, itlbnum => 8, dtlbnum => 8, tlb_type => 2, tlb_rep => 0,
127
                     lddel => 1, disas => 0, tbuf => 2, pwd => 2, svt => 1,
128
                     rstaddr => 16#40000#, smp => 0, cached => 0, scantest => 0, mmupgsz => 4, bp => 1)
129
        port map (clkm, rstn, ahbmi, ahbmo(0), ahbsi, ahbso, irqi(0), irqo(0), dbgi, dbgo);
130
    dbgi <= (dsuen => '0', denable => '0', dbreak => '0', step => '0', halt => '0', reset => '0', dwrite => '0', daddr => (others => '0'), ddata => (others => '0'), btrapa => '0', btrape => '0', berror => '0',bwatch => '0', bsoft => '0', tenable => '0', timer => (others => '0'));
131
 
132
    --
133
    -- APB bridge.
134
    --
135
    apb0: apbctrl
136
        generic map (hindex => 1, haddr => 16#800#, nslaves => 8)
137
        port map (rstn, clkm, ahbsi, ahbso(1), apbi, apbo);
138
 
139
    --
140
    -- Console UART.
141
    --
142
    uart1: apbuart
143
        generic map (pindex => 1, paddr => 1, pirq => 2, console => 1, fifosize => 1)
144
        port map (rstn, clkm, apbi, apbo(1), uarti, uarto);
145
    uarti.rxd       <= '0';
146
    uarti.ctsn      <= '0';
147
    uarti.extclk    <= '0';
148
 
149
    --
150
    -- Interrupt controller.
151
    --
152
    irqctrl0 : irqmp
153
        generic map (pindex => 2, paddr => 2, ncpu => 1)
154
        port map (rstn, clkm, apbi, apbo(2), irqo, irqi);
155
 
156
    --
157
    -- Timer.
158
    --
159
    timer0: gptimer
160
        generic map (pindex => 3, paddr => 3, pirq => 8, sepirq => 0,
161
                     sbits => 8, ntimers => 2, nbits => 32, wdog => 0)
162
        port map (rstn, clkm, apbi, apbo(3), gpti, gpto);
163
    gpti.dhalt  <= '0';
164
    gpti.extclk <= '0';
165
 
166
    --
167
    -- AHB RAM (128 kByte)
168
    --
169
    ahbram0: ahbram_loadfile
170
        generic map (hindex => 3, haddr => 16#400#, abits => 17, fname => "spwamba_test.srec")
171
        port map (rstn, clkm, ahbsi, ahbso(3));
172
 
173
    --
174
    -- SpaceWire Light
175
    --
176
    spw0: spwamba
177
        generic map (
178
            tech        => inferred,
179
            hindex      => 1,
180
            pindex      => 4,
181
            paddr       => 4,
182
            pirq        => 4,
183
            sysfreq     => sys_clock_freq,
184
            txclkfreq   => sys_clock_freq,
185
            rximpl      => impl_generic,
186
            rxchunk     => 1,
187
            tximpl      => impl_generic,
188
            timecodegen => true,
189
            rxfifosize  => 7,
190
            txfifosize  => 6,
191
            desctablesize => 5,
192
            maxburst    => 3 )
193
        port map (
194
            clk     => clkm,
195
            rxclk   => clkm,
196
            txclk   => clkm,
197
            rstn    => rstn,
198
            apbi    => apbi,
199
            apbo    => apbo(4),
200
            ahbi    => ahbmi,
201
            ahbo    => ahbmo(1),
202
            tick_in => spw_tick_in,
203 7 jorisvr
            tick_out => open,
204 5 jorisvr
            spw_di  => spw_di,
205
            spw_si  => spw_si,
206
            spw_do  => spw_do,
207
            spw_so  => spw_so );
208
 
209
    -- Loopback SpaceWire signals.
210
    -- Loopback can be controlled from software through the RXEN bit of
211
    -- the APBUART control register.
212
    spw_di  <= spw_do when (uarto.rxen = '1') else '0';
213
    spw_si  <= spw_so when (uarto.rxen = '1') else '0';
214
 
215
    -- Take external timecode tick from second GPTIMER.
216
    spw_tick_in <= gpto.tick(2);
217
 
218
end tb_arch;

powered by: WebSVN 2.1.0

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