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

Subversion Repositories pcie_ds_dma

[/] [pcie_ds_dma/] [trunk/] [core/] [ds_dma64/] [pcie_src/] [pcie_core64_m1/] [source_artix7/] [cl_a7pcie_x4_gt_rx_valid_filter_7x.vhd] - Blame information for rev 48

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 46 dsmv
-------------------------------------------------------------------------------
2
--
3
-- (c) Copyright 2010-2011 Xilinx, Inc. All rights reserved.
4
--
5
-- This file contains confidential and proprietary information
6
-- of Xilinx, Inc. and is protected under U.S. and
7
-- international copyright and other intellectual property
8
-- laws.
9
--
10
-- DISCLAIMER
11
-- This disclaimer is not a license and does not grant any
12
-- rights to the materials distributed herewith. Except as
13
-- otherwise provided in a valid license issued to you by
14
-- Xilinx, and to the maximum extent permitted by applicable
15
-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
16
-- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES
17
-- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING
18
-- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON-
19
-- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and
20
-- (2) Xilinx shall not be liable (whether in contract or tort,
21
-- including negligence, or under any other theory of
22
-- liability) for any loss or damage of any kind or nature
23
-- related to, arising under or in connection with these
24
-- materials, including for any direct, or any indirect,
25
-- special, incidental, or consequential loss or damage
26
-- (including loss of data, profits, goodwill, or any type of
27
-- loss or damage suffered as a result of any action brought
28
-- by a third party) even if such damage or loss was
29
-- reasonably foreseeable or Xilinx had been advised of the
30
-- possibility of the same.
31
--
32
-- CRITICAL APPLICATIONS
33
-- Xilinx products are not designed or intended to be fail-
34
-- safe, or for use in any application requiring fail-safe
35
-- performance, such as life-support or safety devices or
36
-- systems, Class III medical devices, nuclear facilities,
37
-- applications related to the deployment of airbags, or any
38
-- other applications that could lead to death, personal
39
-- injury, or severe property or environmental damage
40
-- (individually and collectively, "Critical
41
-- Applications"). Customer assumes the sole risk and
42
-- liability of any use of Xilinx products in Critical
43
-- Applications, subject only to applicable laws and
44
-- regulations governing limitations on product liability.
45
--
46
-- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS
47
-- PART OF THIS FILE AT ALL TIMES.
48
--
49
-------------------------------------------------------------------------------
50
-- Project    : Series-7 Integrated Block for PCI Express
51
-- File       : cl_a7pcie_x4_gt_rx_valid_filter_7x.vhd
52 48 dsmv
-- Version    : 1.10
53 46 dsmv
---- Description: GTX module for 7-series Integrated PCIe Block
54
----
55
----
56
----
57
----------------------------------------------------------------------------------
58
 
59
library ieee;
60
use ieee.std_logic_1164.all;
61
use ieee.std_logic_misc.all;
62
use ieee.std_logic_unsigned.all;
63
 
64
entity cl_a7pcie_x4_gt_rx_valid_filter_7x is
65
  generic (
66
    CLK_COR_MIN_LAT      : integer := 28;
67
    TCQ                  : integer := 1
68
  );
69
  port (
70
    USER_RXCHARISK       : out std_logic_vector( 1 downto 0);
71
    USER_RXDATA          : out std_logic_vector(15 downto 0);
72
    USER_RXVALID         : out std_logic;
73
    USER_RXELECIDLE      : out std_logic;
74
    USER_RX_STATUS       : out std_logic_vector( 2 downto 0);
75
    USER_RX_PHY_STATUS   : out std_logic;
76
    GT_RXCHARISK         : in  std_logic_vector( 1 downto 0);
77
    GT_RXDATA            : in  std_logic_vector(15 downto 0);
78
    GT_RXVALID           : in  std_logic;
79
    GT_RXELECIDLE        : in  std_logic;
80
    GT_RX_STATUS         : in  std_logic_vector( 2 downto 0);
81
    GT_RX_PHY_STATUS     : in  std_logic;
82
 
83
    PLM_IN_L0            : in  std_logic;
84
    PLM_IN_RS            : in  std_logic;
85
 
86
    USER_CLK             : in  std_logic;
87
    RESET                : in  std_logic
88
  );
89
 
90
end cl_a7pcie_x4_gt_rx_valid_filter_7x;
91
 
92
architecture pcie_7x of cl_a7pcie_x4_gt_rx_valid_filter_7x is
93
 
94
 
95
  constant EIOS_DET_IDL          : std_logic_vector(4 downto 0) := "00001";
96
  constant EIOS_DET_NO_STR0      : std_logic_vector(4 downto 0) := "00010";
97
  constant EIOS_DET_STR0         : std_logic_vector(4 downto 0) := "00100";
98
  constant EIOS_DET_STR1         : std_logic_vector(4 downto 0) := "01000";
99
  constant EIOS_DET_DONE         : std_logic_vector(4 downto 0) := "10000";
100
 
101
  constant EIOS_COM              : std_logic_vector(7 downto 0) := X"BC";
102
  constant EIOS_IDL              : std_logic_vector(7 downto 0) := X"7C";
103
  constant FTSOS_COM             : std_logic_vector(7 downto 0) := X"BC";
104
  constant FTSOS_FTS             : std_logic_vector(7 downto 0) := X"3C";
105
 
106
  signal   reg_state_eios_det    : std_logic_vector(4 downto 0);
107
  signal   state_eios_det        : std_logic_vector(4 downto 0);
108
 
109
  signal   reg_eios_detected     : std_logic;
110
  signal   eios_detected         : std_logic;
111
 
112
  signal   reg_symbol_after_eios : std_logic;
113
  signal   symbol_after_eios     : std_logic;
114
 
115
  constant USER_RXVLD_IDL        : std_logic_vector(3 downto 0) := "0001";
116
  constant USER_RXVLD_EI         : std_logic_vector(3 downto 0) := "0010";
117
  constant USER_RXVLD_EI_DB0     : std_logic_vector(3 downto 0) := "0100";
118
  constant USER_RXVLD_EI_DB1     : std_logic_vector(3 downto 0) := "1000";
119
 
120
 
121
  signal   gt_rxcharisk_q        : std_logic_vector( 1 downto 0);
122
  signal   gt_rxdata_q           : std_logic_vector(15 downto 0);
123
  signal   gt_rxvalid_q          : std_logic;
124
  signal   gt_rxelecidle_q       : std_logic;
125
 
126
  signal   gt_rx_status_q        : std_logic_vector( 2 downto 0);
127
  signal   gt_rx_phy_status_q    : std_logic;
128
  signal   gt_rx_is_skp0_q       : std_logic;
129
  signal   gt_rx_is_skp1_q       : std_logic;
130
 
131
  begin
132
 
133
  -- EIOS detector
134
 
135
  process(USER_CLK)
136
  begin
137
 
138
    if rising_edge(USER_CLK) then
139
      if (RESET = '1') then
140
        reg_eios_detected     <= '0' after (TCQ)*1 ps;
141
        reg_state_eios_det    <= EIOS_DET_IDL after (TCQ)*1 ps ;
142
        reg_symbol_after_eios <= '0' after (TCQ)*1 ps ;
143
        gt_rxcharisk_q        <= "00" after (TCQ)*1 ps ;
144
        gt_rxdata_q           <= X"0000" after (TCQ)*1 ps ;
145
        gt_rxvalid_q          <= '0' after (TCQ)*1 ps ;
146
        gt_rxelecidle_q       <= '0' after (TCQ)*1 ps ;
147
        gt_rx_status_q        <= "000" after (TCQ)*1 ps ;
148
        gt_rx_phy_status_q    <= '0' after (TCQ)*1 ps ;
149
        gt_rx_is_skp0_q       <= '0' after (TCQ)*1 ps ;
150
        gt_rx_is_skp1_q       <= '0' after (TCQ)*1 ps ;
151
 
152
      else
153
        reg_eios_detected     <= '0' after (TCQ)*1 ps ;
154
        reg_symbol_after_eios <= '0' after (TCQ)*1 ps ;
155
        gt_rxcharisk_q        <= GT_RXCHARISK after (TCQ)*1 ps ;
156
        gt_rxelecidle_q       <= GT_RXELECIDLE after (TCQ)*1 ps ;
157
        gt_rxdata_q           <= GT_RXDATA after (TCQ)*1 ps ;
158
        gt_rx_phy_status_q    <= GT_RX_PHY_STATUS after (TCQ)*1 ps ;
159
 
160
        --De-assert rx_valid signal when EIOS is detected on RXDATA
161
        if((reg_state_eios_det = "10000") and (PLM_IN_L0 = '1')) then
162
          gt_rxvalid_q <= '0' after (TCQ)*1 ps;
163
        elsif (GT_RXELECIDLE = '1' and gt_rxvalid_q = '0') then
164
          gt_rxvalid_q <= '0' after (TCQ)*1 ps;
165
        else
166
          gt_rxvalid_q <= GT_RXVALID;
167
        end if;
168
 
169
        if (gt_rxvalid_q = '1') then
170
          gt_rx_status_q <= GT_RX_STATUS after (TCQ)*1 ps ;
171
        elsif (gt_rxvalid_q = '0' and PLM_IN_L0 = '1') then
172
          gt_rx_status_q <= "000" after (TCQ)*1 ps;
173
        else
174
         gt_rx_status_q <= GT_RX_STATUS after (TCQ)*1 ps ;
175
        end if;
176
 
177
        if ((GT_RXCHARISK(0) = '1') and (GT_RXDATA(7 downto 0) = FTSOS_FTS)) then
178
          gt_rx_is_skp0_q <= '1' after (TCQ)*1 ps ;
179
        else
180
          gt_rx_is_skp0_q <= '0' after (TCQ)*1 ps ;
181
        end if;
182
 
183
        if ((GT_RXCHARISK(1) = '1') and (GT_RXDATA(15 downto 8) = FTSOS_FTS)) then
184
          gt_rx_is_skp1_q <= '1' after (TCQ)*1 ps ;
185
        else
186
          gt_rx_is_skp1_q <= '0' after (TCQ)*1 ps ;
187
        end if;
188
 
189
        case ( state_eios_det ) is
190
 
191
          when EIOS_DET_IDL =>
192
            if ((gt_rxcharisk_q(0) = '1' ) and (gt_rxdata_q( 7 downto 0) = EIOS_COM) and
193
                (gt_rxcharisk_q(1) = '1' ) and (gt_rxdata_q(15 downto 8) = EIOS_IDL)) then
194
              reg_state_eios_det <= EIOS_DET_NO_STR0 after (TCQ)*1 ps ;
195
              reg_eios_detected  <= '1' after (TCQ)*1 ps;
196
              --gt_rxvalid_q       <= '0' after (TCQ)*1 ps;
197
            elsif ((gt_rxcharisk_q(1) = '1' ) and (gt_rxdata_q(15 downto 8) = EIOS_COM)) then
198
              reg_state_eios_det <= EIOS_DET_STR0 after (TCQ)*1 ps ;
199
            else
200
              reg_state_eios_det <= EIOS_DET_IDL after (TCQ)*1 ps ;
201
            end if;
202
 
203
          when EIOS_DET_NO_STR0 =>
204
            if ((gt_rxcharisk_q(0) = '1' and (gt_rxdata_q( 7 downto 0) = EIOS_IDL)) and
205
                (gt_rxcharisk_q(1) = '1' and (gt_rxdata_q(15 downto 8) = EIOS_IDL))) then
206
              reg_state_eios_det <= EIOS_DET_DONE after (TCQ)*1 ps ;
207
              gt_rxvalid_q       <= '0' after (TCQ)*1 ps ;
208
            elsif (gt_rxcharisk_q(0) = '1' and (gt_rxdata_q(7 downto 0) = EIOS_IDL)) then
209
              reg_state_eios_det <= EIOS_DET_DONE after (TCQ)*1 ps ;
210
              gt_rxvalid_q       <= '0' after (TCQ)*1 ps;
211
            else
212
              reg_state_eios_det <= EIOS_DET_IDL after (TCQ)*1 ps ;
213
            end if;
214
 
215
          when EIOS_DET_STR0 =>
216
 
217
            if ((gt_rxcharisk_q(0) = '1' and (gt_rxdata_q( 7 downto 0) = EIOS_IDL)) and
218
                (gt_rxcharisk_q(1) = '1' and (gt_rxdata_q(15 downto 8) = EIOS_IDL))) then
219
              reg_state_eios_det    <= EIOS_DET_STR1 after (TCQ)*1 ps ;
220
              reg_eios_detected     <= '1' after (TCQ)*1 ps;
221
              gt_rxvalid_q          <= '0' after (TCQ)*1 ps;
222
              reg_symbol_after_eios <= '1' after (TCQ)*1 ps;
223
            else
224
              reg_state_eios_det    <= EIOS_DET_IDL after (TCQ)*1 ps ;
225
            end if;
226
 
227
          when EIOS_DET_STR1 =>
228
            if ((gt_rxcharisk_q(0) = '1' ) and (gt_rxdata_q(7 downto 0) = EIOS_IDL)) then
229
              reg_state_eios_det <= EIOS_DET_DONE after (TCQ)*1 ps ;
230
              gt_rxvalid_q       <= '0' after (TCQ)*1 ps ;
231
            else
232
              reg_state_eios_det <= EIOS_DET_IDL after (TCQ)*1 ps ;
233
            end if;
234
 
235
          when EIOS_DET_DONE =>
236
            reg_state_eios_det <= EIOS_DET_IDL after (TCQ)*1 ps ;
237
 
238
          when others =>
239
            reg_state_eios_det <= EIOS_DET_IDL after (TCQ)*1 ps ;
240
 
241
        end case;
242
 
243
      end if;
244
    end if;
245
 
246
  end process;
247
 
248
 
249
  state_eios_det    <= reg_state_eios_det;
250
  eios_detected     <= reg_eios_detected;
251
  symbol_after_eios <= reg_symbol_after_eios;
252
 
253
--  rx_elec_idle_delay : SRL16E
254
--  generic map (
255
--    INIT  => X"0000"
256
--  )
257
--  port map (
258
--    Q    => USER_RXELECIDLE,
259
--    D    => gt_rxelecidle_q,
260
--    CLK  => USER_CLK,
261
--    CE   => '1',
262
--    A3   => '1',
263
--    A2   => '1',
264
--    A1   => '1',
265
--    A0   => '1'
266
--  );
267
 
268
  USER_RXVALID             <= gt_rxvalid_q;
269
  USER_RXCHARISK(0)        <= gt_rxcharisk_q(0) when (gt_rxvalid_q = '1') else '0';
270
  USER_RXCHARISK(1)        <= gt_rxcharisk_q(1) when (gt_rxvalid_q = '1' and symbol_after_eios = '0') else '0';
271
  USER_RXDATA(7 downto 0)  <= gt_rxdata_q(7 downto 0);
272
  USER_RXDATA(15 downto 8) <= gt_rxdata_q(15 downto 8);
273
  USER_RX_STATUS           <= gt_rx_status_q;
274
  USER_RX_PHY_STATUS       <= gt_rx_phy_status_q;
275
  USER_RXELECIDLE          <= gt_rxelecidle_q;
276
 
277
end pcie_7x;

powered by: WebSVN 2.1.0

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