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

Subversion Repositories core1990_interlaken

[/] [core1990_interlaken/] [trunk/] [gateware/] [sources/] [interlaken/] [test/] [Core1990_Test.vhd] - Blame information for rev 11

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 11 N.Boukadid
library ieee;
2
use ieee.std_logic_1164.all;
3
library unisim;
4
use unisim.vcomponents.all;
5
 
6
entity Interface_Test is
7
    port(
8
                System_Clock_In_P : in std_logic;
9
                System_Clock_In_N : in std_logic;
10
 
11
                GTREFCLK_IN_P : in std_logic;
12
                GTREFCLK_IN_N : in std_logic;
13
 
14
                USER_CLK_IN_P : in std_logic;
15
                USER_CLK_IN_N : in std_logic;
16
 
17
                USER_SMA_CLK_OUT_P : out std_logic;
18
                USER_SMA_CLK_OUT_N : out std_logic;
19
 
20
                TX_Out_P     : out std_logic;
21
                TX_Out_N     : out std_logic;
22
                RX_In_P      : in std_logic;
23
                RX_In_N      : in std_logic;
24
 
25
                Lock_Out  : out std_logic;
26
                Valid_out : out std_logic
27
    );
28
end entity Interface_test;
29
 
30
architecture Test of Interface_Test is
31
 
32
    signal TX_Data      : std_logic_vector(63 downto 0);            -- Data transmitted
33
    signal RX_Data  : std_logic_vector(63 downto 0);            -- Data received
34
 
35
    signal TX_SOP          : std_logic;
36
    signal TX_EOP          : std_logic;
37
    signal TX_EOP_Valid    : std_logic_vector(2 downto 0);
38
    signal TX_FlowControl  : std_logic_vector(15 downto 0);
39
    signal TX_Channel      : std_logic_vector(7 downto 0);
40
 
41
    signal RX_SOP               : std_logic;                         -- Start of Packet
42
    signal RX_EOP               : std_logic;                         -- End of Packet
43
    signal RX_EOP_Valid         : std_logic_vector(2 downto 0);      -- Valid bytes packet contains
44
    signal RX_FlowControl       : std_logic_vector(15 downto 0);     -- Flow control data (yet unutilized)
45
    signal RX_Channel           : std_logic_vector(7 downto 0);      -- Select transmit channel (yet unutilized)
46
 
47
    signal RX_Valid_Out     : std_logic;
48
 
49
    signal TX_FIFO_Full      : std_logic;
50
    signal TX_FIFO_progfull  : std_logic;
51
    signal TX_FIFO_Write     : std_logic;
52
    signal RX_FIFO_Read      : std_logic;
53
    signal RX_FIFO_Full      : std_logic;
54
 
55
    signal Decoder_lock      : std_logic;
56
    signal Descrambler_lock  : std_logic;
57
    signal CRC24_Error       : std_logic;
58
    signal CRC32_Error       : std_logic;
59
 
60
    signal pipeline_length : std_logic_vector(6 downto 0);
61
    signal TX_Info_Pipelined : std_logic_vector(4 downto 0);
62
    signal TX_Data_Pipelined : std_logic_vector(63 downto 0);
63
    signal RX_Info : std_logic_vector(4 downto 0);
64
    signal System_Clock : std_logic;
65
 
66
        signal valid_probe, RX_Valid : std_logic_vector(0 downto 0);
67
        signal packet_length : std_logic_vector(6 downto 0);
68
        signal RX_in: std_logic_vector(63 downto 0); --Debug
69
    signal TX_out: std_logic_vector(63 downto 0); --Debug
70
    signal Data_Descrambler : std_logic_vector(63 downto 0);
71
    signal Data_Decoder : std_logic_vector(63 downto 0);
72
 
73
        COMPONENT ILA_Data
74
        PORT (
75
                clk : IN STD_LOGIC;
76
                probe0 : IN STD_LOGIC_VECTOR(63 DOWNTO 0);
77
                probe1 : IN STD_LOGIC_VECTOR(4 DOWNTO 0);
78
                probe2 : IN STD_LOGIC_VECTOR(63 DOWNTO 0);
79
                probe3 : IN STD_LOGIC_VECTOR(4 DOWNTO 0);
80
        probe4 : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
81
        probe5 : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
82
        probe6 : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
83
        probe7 : IN STD_LOGIC_VECTOR(63 DOWNTO 0);
84
        probe8 : IN STD_LOGIC_VECTOR(63 DOWNTO 0);
85
        probe9 : IN STD_LOGIC_VECTOR(63 DOWNTO 0);
86
        probe10 : IN STD_LOGIC_VECTOR(63 DOWNTO 0)
87
        );
88
        END COMPONENT;
89
 
90
    COMPONENT vio_0
91
    PORT (
92
        clk : IN STD_LOGIC;
93
        probe_out0 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
94
        probe_out1 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0)
95
    );
96
    END COMPONENT;
97
 
98
    signal USER_CLK, USER_SMA_CLK: std_logic;
99
begin
100
 
101
    -------Reference clock routing
102
    user_clk_ibuf : IBUFDS port map(
103
        I => USER_CLK_IN_P,
104
        IB => USER_CLK_IN_N,
105
        O => USER_CLK
106
    );
107
 
108
    USER_SMA_CLK <= USER_CLK;
109
 
110
    user_sma_clk_obuf: OBUFDS port map(
111
        I => USER_SMA_CLK,
112
        O => USER_SMA_CLK_OUT_P,
113
        OB => USER_SMA_CLK_OUT_N
114
    );
115
 
116
        ------- The Interlaken Interface -------
117
    interface : entity work.interlaken_interface
118
    generic map(
119
         BurstMax     => 256, --(Bytes)
120
         BurstShort   => 64, --(Bytes)
121
         PacketLength => 2028 --(Packets)
122
    )
123
    port map (
124
        System_Clock_In_P => System_Clock_In_P,
125
        System_Clock_In_N => System_Clock_In_N,
126
        GTREFCLK_IN_P => GTREFCLK_IN_P,
127
        GTREFCLK_IN_N => GTREFCLK_IN_N,
128
 
129
        System_Clock_Gen => System_Clock,
130
 
131
        TX_Data => TX_Data,
132
        RX_Data => RX_Data,
133
 
134
        RX_In_N => RX_In_N,
135
        RX_In_P => RX_In_P,
136
        TX_Out_N => TX_Out_N,
137
        TX_Out_P => TX_Out_P,
138
 
139
        TX_FIFO_Write => TX_FIFO_Write,
140
        TX_SOP => TX_SOP,
141
        TX_EOP => TX_EOP,
142
        TX_EOP_Valid => TX_EOP_Valid,
143
        TX_FlowControl => TX_FlowControl,
144
        TX_Channel => TX_Channel,
145
 
146
        RX_FIFO_Read => RX_FIFO_Read,
147
        RX_SOP => RX_SOP,
148
        RX_EOP => RX_EOP,
149
        RX_EOP_Valid => RX_EOP_Valid,
150
        RX_FlowControl => RX_FlowControl,
151
        RX_Channel => RX_Channel,
152
 
153
        TX_FIFO_progfull => TX_FIFO_progfull,
154
 
155
        RX_Valid_Out => RX_Valid_Out,
156
        TX_FIFO_Full => TX_FIFO_Full,
157
        RX_FIFO_Full => RX_FIFO_Full,
158
 
159
        RX_in => RX_in,
160
        TX_out => TX_out,
161
        Data_Descrambler => Data_Descrambler,
162
        Data_Decoder => Data_Decoder,
163
 
164
        Decoder_lock => Decoder_lock,
165
        Descrambler_lock => Descrambler_lock,
166
        CRC24_Error => CRC24_Error,
167
        CRC32_Error => CRC32_Error
168
    );
169
 
170
    ---- Generates input data and interface signals ----
171
    generate_data : entity work.data_generator
172
    port map (
173
                clk => System_Clock,
174
            Packet_length => packet_length,
175
            --link_up => Link_up,
176
            TX_FIFO_Full => TX_FIFO_progfull,
177
 
178
            write_enable => TX_FIFO_Write,
179
            data_out => TX_Data,
180
        sop      => TX_SOP,
181
        eop              => TX_EOP,
182
        eop_valid=> TX_EOP_Valid,
183
        channel  => TX_Channel
184
    );
185
 
186
    ---- Pipelines input data for alignment with output data ----
187
    pipeline_data : entity work.pipe
188
    generic map (
189
                Nmax => 128
190
        )
191
        port map (
192
            N => pipeline_length,
193
        clk => System_Clock,
194
        pipe_in(68 downto 66) => TX_EOP_Valid,
195
        pipe_in(65) => TX_EOP,
196
        pipe_in(64) => TX_SOP,
197
            pipe_in(63 downto 0) => TX_Data,
198
 
199
            pipe_out(68 downto 64) => TX_Info_Pipelined,
200
            pipe_out(63 downto 0) => TX_Data_Pipelined
201
        );
202
        RX_Info <= RX_EOP_valid & RX_EOP & RX_SOP;
203
 
204
        -------- Integrated Logic Analyzer --------
205
        probe_data : ILA_Data
206
        PORT MAP (
207
                clk => System_Clock,
208
                probe0 => TX_Data_Pipelined,
209
                probe1 => TX_Info_Pipelined,
210
                probe2 => RX_Data,
211
                probe3 => RX_Info,
212
                probe4 => valid_probe,
213
                probe5 => TX_FIFO_progfull & Decoder_Lock & Descrambler_Lock,
214
                probe6 => RX_Valid,
215
                probe7 => RX_in,
216
                probe8 => TX_out,
217
                probe9 => Data_Descrambler,
218
                probe10  => Data_Decoder
219
        );
220
        RX_Valid(0) <= RX_Valid_Out;
221
 
222
        -------- Validates the data integrity ---------
223
        valid : process (TX_data_pipelined, RX_data, TX_info_pipelined, RX_info)
224
        begin
225
           if(TX_Data_Pipelined = RX_Data and TX_info_pipelined = RX_info) then
226
               valid_out <= '1';
227
               valid_probe <= "1";
228
       else
229
           valid_out <= '0';
230
           valid_probe <= "0";
231
       end if;
232
    end process;
233
 
234
    RX_FIFO_Read <= not TX_FIFO_progfull;
235
    --packet_length <= "111111";
236
    --pipeline_length <= "0111110";
237
    ------------- Virtual input/output -------------
238
    VIO : vio_0
239
    PORT MAP (
240
        clk => System_Clock,
241
        probe_out0 => packet_length,
242
        probe_out1 => pipeline_length
243
    );
244
 
245
    --------------- Lock detection ---------------
246
    lock : process (Descrambler_Lock)
247
    begin
248
        if (Descrambler_Lock = '1') then
249
            Lock_Out <= '1';
250
        else
251
            Lock_Out <= '0';
252
        end if;
253
    end process;
254
 
255
end architecture Test;

powered by: WebSVN 2.1.0

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