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_axi_basic_tx.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_axi_basic_tx.vhd
52 48 dsmv
-- Version    : 1.10
53 46 dsmv
--
54
-- Description:
55
-- AXI to TRN TX module. Instantiates pipeline and throttle control TX
56
--  submodules.
57
--
58
--  Notes:
59
--  Optional notes section.
60
--
61
--  Hierarchical:
62
--    axi_basic_top
63
--      axi_basic_tx
64
--
65
--------------------------------------------------------------------------------
66
-- Library Declarations
67
--------------------------------------------------------------------------------
68
 
69
LIBRARY ieee;
70
   USE ieee.std_logic_1164.all;
71
   USE ieee.std_logic_unsigned.all;
72
 
73
 
74
ENTITY   cl_a7pcie_x4_axi_basic_tx IS
75
   GENERIC (
76
      C_DATA_WIDTH            : INTEGER := 128;          -- RX/TX interface data width
77
      C_FAMILY                : STRING  := "X7";         -- Targeted FPGA family
78
      C_ROOT_PORT             : BOOLEAN := FALSE;        -- PCIe block is in root port mode
79
      C_PM_PRIORITY           : BOOLEAN := FALSE;        -- Disable TX packet boundary thrtl
80
      TCQ                     : INTEGER := 1;            -- Clock to Q time
81
 
82
      C_REM_WIDTH             : INTEGER :=  1            -- trem/rrem width
83
   );
84
   PORT (
85
 
86
     -----------------------------------------------
87
     -- User Design I/O
88
     -----------------------------------------------
89
 
90
     -- AXI TX
91
     -------------
92
      S_AXIS_TX_TDATA         : IN STD_LOGIC_VECTOR(C_DATA_WIDTH - 1 DOWNTO 0);
93
      S_AXIS_TX_TVALID        : IN STD_LOGIC;
94
      S_AXIS_TX_TREADY        : OUT STD_LOGIC;
95
      s_axis_tx_tkeep         : IN STD_LOGIC_VECTOR((C_DATA_WIDTH/8)-1 DOWNTO 0);
96
      S_AXIS_TX_TLAST         : IN STD_LOGIC;
97
      S_AXIS_TX_TUSER         : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
98
 
99
     -- User Misc.
100
     -------------
101
      USER_TURNOFF_OK         : IN STD_LOGIC;
102
      USER_TCFG_GNT           : IN STD_LOGIC;
103
 
104
      -----------------------------------------------
105
      -- PCIe Block I/O
106
      -----------------------------------------------
107
 
108
      -- TRN TX
109
      -------------
110
      TRN_TD                  : OUT STD_LOGIC_VECTOR(C_DATA_WIDTH - 1 DOWNTO 0);
111
      TRN_TSOF                : OUT STD_LOGIC;
112
      TRN_TEOF                : OUT STD_LOGIC;
113
      TRN_TSRC_RDY            : OUT STD_LOGIC;
114
      TRN_TDST_RDY            : IN STD_LOGIC;
115
      TRN_TSRC_DSC            : OUT STD_LOGIC;
116
      TRN_TREM                : OUT STD_LOGIC_VECTOR(C_REM_WIDTH - 1 DOWNTO 0);
117
      TRN_TERRFWD             : OUT STD_LOGIC;
118
      TRN_TSTR                : OUT STD_LOGIC;
119
      TRN_TBUF_AV             : IN STD_LOGIC_VECTOR(5 DOWNTO 0);
120
      TRN_TECRC_GEN           : OUT STD_LOGIC;
121
 
122
     -- TRN Misc.
123
     -----------
124
       TRN_TCFG_REQ            : IN STD_LOGIC;
125
       TRN_TCFG_GNT            : OUT STD_LOGIC;
126
       TRN_LNK_UP              : IN STD_LOGIC;
127
 
128
     -- 7 Series/Virtex6 PM
129
     -----------
130
       CFG_PCIE_LINK_STATE     : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
131
 
132
     -- Virtex6 PM
133
     -----------
134
       CFG_PM_SEND_PME_TO      : IN STD_LOGIC;
135
       CFG_PMCSR_POWERSTATE    : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
136
       TRN_RDLLP_DATA          : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
137
       TRN_RDLLP_SRC_RDY       : IN STD_LOGIC;
138
 
139
     -- Virtex6/Spartan6 PM
140
     -----------
141
       CFG_TO_TURNOFF          : IN STD_LOGIC;
142
       CFG_TURNOFF_OK          : OUT STD_LOGIC;
143
 
144
     -- System
145
     -----------
146
      USER_CLK                : IN STD_LOGIC;
147
      USER_RST                : IN STD_LOGIC
148
   );
149
END cl_a7pcie_x4_axi_basic_tx;
150
 
151
ARCHITECTURE trans OF cl_a7pcie_x4_axi_basic_tx IS
152
 
153
   SIGNAL tready_thrtl           : STD_LOGIC;
154
 
155
   -- Declare intermediate signals for referenced outputs
156
   SIGNAL s_axis_tx_tready_xhdl1 : STD_LOGIC;
157
   SIGNAL trn_td_xhdl3           : STD_LOGIC_VECTOR(C_DATA_WIDTH - 1 DOWNTO 0);
158
   SIGNAL trn_tsof_xhdl8         : STD_LOGIC;
159
   SIGNAL trn_teof_xhdl5         : STD_LOGIC;
160
   SIGNAL trn_tsrc_rdy_xhdl10    : STD_LOGIC;
161
   SIGNAL trn_tsrc_dsc_xhdl9     : STD_LOGIC;
162
   SIGNAL trn_trem_xhdl7         : STD_LOGIC_VECTOR(C_REM_WIDTH - 1 DOWNTO 0);
163
   SIGNAL trn_terrfwd_xhdl6      : STD_LOGIC;
164
   SIGNAL trn_tstr_xhdl11        : STD_LOGIC;
165
   SIGNAL trn_tecrc_gen_xhdl4    : STD_LOGIC;
166
   SIGNAL trn_tcfg_gnt_xhdl2     : STD_LOGIC;
167
   SIGNAL cfg_turnoff_ok_xhdl0   : STD_LOGIC;
168
 
169
   COMPONENT   cl_a7pcie_x4_axi_basic_tx_thrtl_ctl IS
170
   GENERIC (
171
      C_DATA_WIDTH              : INTEGER := 128;
172
      C_FAMILY                  : STRING  := "X7";
173
      C_ROOT_PORT               : BOOLEAN := FALSE;
174
      TCQ                       : INTEGER := 1
175
   );
176
   PORT (
177
      S_AXIS_TX_TDATA         : IN STD_LOGIC_VECTOR(C_DATA_WIDTH - 1 DOWNTO 0);
178
      S_AXIS_TX_TVALID          : IN STD_LOGIC;
179
      S_AXIS_TX_TUSER           : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
180
      S_AXIS_TX_TLAST           : IN STD_LOGIC;
181
      USER_TURNOFF_OK           : IN STD_LOGIC;
182
      USER_TCFG_GNT             : IN STD_LOGIC;
183
      TRN_TBUF_AV               : IN STD_LOGIC_VECTOR(5 DOWNTO 0);
184
      TRN_TDST_RDY              : IN STD_LOGIC;
185
      TRN_TCFG_REQ              : IN STD_LOGIC;
186
      TRN_TCFG_GNT              : OUT STD_LOGIC;
187
      TRN_LNK_UP                : IN STD_LOGIC;
188
      CFG_PCIE_LINK_STATE       : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
189
      CFG_PM_SEND_PME_TO        : IN STD_LOGIC;
190
      CFG_PMCSR_POWERSTATE      : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
191
      TRN_RDLLP_DATA            : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
192
      TRN_RDLLP_SRC_RDY         : IN STD_LOGIC;
193
      CFG_TO_TURNOFF            : IN STD_LOGIC;
194
      CFG_TURNOFF_OK            : OUT STD_LOGIC;
195
      TREADY_THRTL              : OUT STD_LOGIC;
196
      USER_CLK                  : IN STD_LOGIC;
197
      USER_RST                  : IN STD_LOGIC
198
   );
199
   END COMPONENT cl_a7pcie_x4_axi_basic_tx_thrtl_ctl;
200
 
201
  -----------------------------------------------
202
  -- TX Data Pipeline
203
  -----------------------------------------------
204
   COMPONENT   cl_a7pcie_x4_axi_basic_tx_pipeline IS
205
   GENERIC (
206
      C_DATA_WIDTH              : INTEGER := 128;
207
      C_PM_PRIORITY             : BOOLEAN := FALSE;
208
      TCQ                       : INTEGER := 1;
209
 
210
      C_REM_WIDTH               : INTEGER :=  1
211
   );
212
   PORT (
213
 
214
    -- Incoming AXI RX
215
    -------------
216
      S_AXIS_TX_TDATA         : IN STD_LOGIC_VECTOR(C_DATA_WIDTH - 1 DOWNTO 0);
217
      S_AXIS_TX_TVALID        : IN STD_LOGIC;
218
      S_AXIS_TX_TREADY        : OUT STD_LOGIC;
219
      s_axis_tx_tkeep         : IN STD_LOGIC_VECTOR((C_DATA_WIDTH/8)-1 DOWNTO 0);
220
      S_AXIS_TX_TLAST         : IN STD_LOGIC;
221
      S_AXIS_TX_TUSER         : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
222
 
223
    -- Outgoing TRN TX
224
    -------------
225
      TRN_TD                  : OUT STD_LOGIC_VECTOR(C_DATA_WIDTH - 1 DOWNTO 0);
226
      TRN_TSOF                : OUT STD_LOGIC;
227
      TRN_TEOF                : OUT STD_LOGIC;
228
      TRN_TSRC_RDY            : OUT STD_LOGIC;
229
      TRN_TDST_RDY            : IN STD_LOGIC;
230
      TRN_TSRC_DSC            : OUT STD_LOGIC;
231
      TRN_TREM                : OUT STD_LOGIC_VECTOR(C_REM_WIDTH - 1 DOWNTO 0);
232
      TRN_TERRFWD             : OUT STD_LOGIC;
233
      TRN_TSTR                : OUT STD_LOGIC;
234
      TRN_TECRC_GEN           : OUT STD_LOGIC;
235
      TRN_LNK_UP              : IN  STD_LOGIC;
236
 
237
    -- System
238
    -------------
239
      TREADY_THRTL            : IN STD_LOGIC;
240
      USER_CLK                : IN STD_LOGIC;
241
      USER_RST                : IN STD_LOGIC
242
   );
243
END COMPONENT cl_a7pcie_x4_axi_basic_tx_pipeline;
244
 
245
BEGIN
246
   -- Drive referenced outputs
247
   S_AXIS_TX_TREADY      <= s_axis_tx_tready_xhdl1;
248
   TRN_TD                <= trn_td_xhdl3;
249
   TRN_TSOF              <= trn_tsof_xhdl8;
250
   TRN_TEOF              <= trn_teof_xhdl5;
251
   TRN_TSRC_RDY          <= trn_tsrc_rdy_xhdl10;
252
   TRN_TSRC_DSC          <= trn_tsrc_dsc_xhdl9;
253
   TRN_TREM              <= trn_trem_xhdl7;
254
   TRN_TERRFWD           <= trn_terrfwd_xhdl6;
255
   TRN_TSTR              <= trn_tstr_xhdl11;
256
   TRN_TECRC_GEN         <= trn_tecrc_gen_xhdl4;
257
   TRN_TCFG_GNT          <= trn_tcfg_gnt_xhdl2;
258
   CFG_TURNOFF_OK        <= cfg_turnoff_ok_xhdl0;
259
 
260
 
261
 
262
   tx_pipeline_inst :   cl_a7pcie_x4_axi_basic_tx_pipeline
263
      GENERIC MAP (
264
         C_DATA_WIDTH     => C_DATA_WIDTH,
265
         C_PM_PRIORITY    => C_PM_PRIORITY,
266
         TCQ              => TCQ,
267
         C_REM_WIDTH      => C_REM_WIDTH
268
      )
269
      PORT MAP (
270
 
271
         S_AXIS_TX_TDATA   => S_AXIS_TX_TDATA,
272
         S_AXIS_TX_TREADY  => s_axis_tx_tready_xhdl1,
273
         S_AXIS_TX_TVALID  => S_AXIS_TX_TVALID,
274
         s_axis_tx_tkeep   => s_axis_tx_tkeep,
275
         S_AXIS_TX_TLAST   => S_AXIS_TX_TLAST,
276
         S_AXIS_TX_TUSER   => S_AXIS_TX_TUSER,
277
 
278
         TRN_TD            => trn_td_xhdl3,
279
         TRN_TSOF          => trn_tsof_xhdl8,
280
         TRN_TEOF          => trn_teof_xhdl5,
281
         TRN_TSRC_RDY      => trn_tsrc_rdy_xhdl10,
282
         TRN_TDST_RDY      => TRN_TDST_RDY,
283
         TRN_TSRC_DSC      => trn_tsrc_dsc_xhdl9,
284
         TRN_TREM          => trn_trem_xhdl7,
285
         TRN_TERRFWD       => trn_terrfwd_xhdl6,
286
         TRN_TSTR          => trn_tstr_xhdl11,
287
         TRN_TECRC_GEN     => trn_tecrc_gen_xhdl4,
288
         TRN_LNK_UP        => trn_lnk_up,
289
 
290
         TREADY_THRTL      => TREADY_THRTL,
291
         USER_CLK          => USER_CLK,
292
         USER_RST          => USER_RST
293
      );
294
 
295
  -------------------------------------------------
296
  -- TX Throttle Controller
297
  -------------------------------------------------
298
   xhdl12 : IF (NOT(C_PM_PRIORITY)) GENERATE
299
           tx_thrl_ctl_inst :   cl_a7pcie_x4_axi_basic_tx_thrtl_ctl
300
           GENERIC MAP (
301
                               C_DATA_WIDTH    => C_DATA_WIDTH,
302
                               C_FAMILY        => C_FAMILY,
303
                               C_ROOT_PORT     => C_ROOT_PORT,
304
                               TCQ             => TCQ
305
                       )
306
           PORT MAP (
307
                            -- Outgoing AXI TX
308
                            -------------
309
                            S_AXIS_TX_TDATA       => S_AXIS_TX_TDATA,
310
                            S_AXIS_TX_TVALID      => S_AXIS_TX_TVALID,
311
                            S_AXIS_TX_TUSER       => S_AXIS_TX_TUSER,
312
                            S_AXIS_TX_TLAST       => S_AXIS_TX_TLAST,
313
 
314
                            -- User Misc.
315
                            -------------
316
                            USER_TURNOFF_OK       => USER_TURNOFF_OK,
317
                            USER_TCFG_GNT         => USER_TCFG_GNT,
318
 
319
                            -- Incoming TRN RX
320
                            -------------
321
                            TRN_TBUF_AV           => TRN_TBUF_AV,
322
                            TRN_TDST_RDY          => TRN_TDST_RDY,
323
 
324
                            -- TRN Misc.
325
                            -------------
326
                            TRN_TCFG_REQ          => TRN_TCFG_REQ,
327
                            TRN_TCFG_GNT          => trn_tcfg_gnt_xhdl2,
328
                            TRN_LNK_UP            => trn_lnk_up,
329
 
330
                            -- 7 Seriesq/Virtex6 PM
331
                            -------------
332
                            CFG_PCIE_LINK_STATE   => CFG_PCIE_LINK_STATE,
333
 
334
                            -- Virtex6 PM
335
                            -------------
336
                            CFG_PM_SEND_PME_TO    => CFG_PM_SEND_PME_TO,
337
                            CFG_PMCSR_POWERSTATE  => CFG_PMCSR_POWERSTATE,
338
                            TRN_RDLLP_DATA        => TRN_RDLLP_DATA,
339
                            TRN_RDLLP_SRC_RDY     => TRN_RDLLP_SRC_RDY,
340
 
341
                            -- Spartan6 PM
342
                            -------------
343
                            CFG_TO_TURNOFF        => CFG_TO_TURNOFF,
344
                            CFG_TURNOFF_OK        => cfg_turnoff_ok_xhdl0,
345
 
346
                            -- System
347
                            -------------
348
                            TREADY_THRTL          => TREADY_THRTL,
349
                            USER_CLK              => USER_CLK,
350
                            USER_RST              => USER_RST
351
     );
352
     END GENERATE;
353
   xhdl13 : IF (C_PM_PRIORITY) GENERATE
354
      TREADY_THRTL         <= '0';
355
      cfg_turnoff_ok_xhdl0 <= USER_TURNOFF_OK;
356
      trn_tcfg_gnt_xhdl2   <= USER_TCFG_GNT;
357
   END GENERATE;
358
END trans;

powered by: WebSVN 2.1.0

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