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_virtex6/] [axi_basic_tx.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dsmv
-------------------------------------------------------------------------------
2
--
3
-- (c) Copyright 2009-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    : Virtex-6 Integrated Block for PCI Express
51
-- File       : axi_basic_tx.vhd
52
-- Version    : 2.3
53
--
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 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
      C_STRB_WIDTH            : INTEGER :=  4            -- TSTRB width
84
   );
85
   PORT (
86
 
87
     -----------------------------------------------
88
     -- User Design I/O
89
     -----------------------------------------------
90
 
91
     -- AXI TX
92
     -------------
93
      S_AXIS_TX_TDATA         : IN STD_LOGIC_VECTOR(C_DATA_WIDTH - 1 DOWNTO 0);
94
      S_AXIS_TX_TVALID        : IN STD_LOGIC;
95
      S_AXIS_TX_TREADY        : OUT STD_LOGIC;
96
      S_AXIS_TX_TSTRB         : IN STD_LOGIC_VECTOR(C_STRB_WIDTH - 1 DOWNTO 0);
97
      S_AXIS_TX_TLAST         : IN STD_LOGIC;
98
      S_AXIS_TX_TUSER         : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
99
 
100
     -- User Misc.
101
     -------------
102
      USER_TURNOFF_OK         : IN STD_LOGIC;
103
      USER_TCFG_GNT           : IN STD_LOGIC;
104
 
105
      -----------------------------------------------
106
      -- PCIe Block I/O
107
      -----------------------------------------------
108
 
109
      -- TRN TX
110
      -------------
111
      TRN_TD                  : OUT STD_LOGIC_VECTOR(C_DATA_WIDTH - 1 DOWNTO 0);
112
      TRN_TSOF                : OUT STD_LOGIC;
113
      TRN_TEOF                : OUT STD_LOGIC;
114
      TRN_TSRC_RDY            : OUT STD_LOGIC;
115
      TRN_TDST_RDY            : IN STD_LOGIC;
116
      TRN_TSRC_DSC            : OUT STD_LOGIC;
117
      TRN_TREM                : OUT STD_LOGIC_VECTOR(C_REM_WIDTH - 1 DOWNTO 0);
118
      TRN_TERRFWD             : OUT STD_LOGIC;
119
      TRN_TSTR                : OUT STD_LOGIC;
120
      TRN_TBUF_AV             : IN STD_LOGIC_VECTOR(5 DOWNTO 0);
121
      TRN_TECRC_GEN           : OUT STD_LOGIC;
122
 
123
     -- TRN Misc.
124
     -----------
125
       TRN_TCFG_REQ            : IN STD_LOGIC;
126
       TRN_TCFG_GNT            : OUT STD_LOGIC;
127
       TRN_LNK_UP              : IN STD_LOGIC;
128
 
129
     -- 7 Series/Virtex6 PM
130
     -----------
131
       CFG_PCIE_LINK_STATE     : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
132
 
133
     -- Virtex6 PM
134
     -----------
135
       CFG_PM_SEND_PME_TO      : IN STD_LOGIC;
136
       CFG_PMCSR_POWERSTATE    : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
137
       TRN_RDLLP_DATA          : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
138
       TRN_RDLLP_SRC_RDY       : IN STD_LOGIC;
139
 
140
     -- Virtex6/Spartan6 PM
141
     -----------
142
       CFG_TO_TURNOFF          : IN STD_LOGIC;
143
       CFG_TURNOFF_OK          : OUT STD_LOGIC;
144
 
145
     -- System
146
     -----------
147
      USER_CLK                : IN STD_LOGIC;
148
      USER_RST                : IN STD_LOGIC
149
   );
150
END axi_basic_tx;
151
 
152
ARCHITECTURE trans OF axi_basic_tx IS
153
 
154
   SIGNAL tready_thrtl           : STD_LOGIC;
155
 
156
   -- Declare intermediate signals for referenced outputs
157
   SIGNAL s_axis_tx_tready_xhdl1 : STD_LOGIC;
158
   SIGNAL trn_td_xhdl3           : STD_LOGIC_VECTOR(C_DATA_WIDTH - 1 DOWNTO 0);
159
   SIGNAL trn_tsof_xhdl8         : STD_LOGIC;
160
   SIGNAL trn_teof_xhdl5         : STD_LOGIC;
161
   SIGNAL trn_tsrc_rdy_xhdl10    : STD_LOGIC;
162
   SIGNAL trn_tsrc_dsc_xhdl9     : STD_LOGIC;
163
   SIGNAL trn_trem_xhdl7         : STD_LOGIC_VECTOR(C_REM_WIDTH - 1 DOWNTO 0);
164
   SIGNAL trn_terrfwd_xhdl6      : STD_LOGIC;
165
   SIGNAL trn_tstr_xhdl11        : STD_LOGIC;
166
   SIGNAL trn_tecrc_gen_xhdl4    : STD_LOGIC;
167
   SIGNAL trn_tcfg_gnt_xhdl2     : STD_LOGIC;
168
   SIGNAL cfg_turnoff_ok_xhdl0   : STD_LOGIC;
169
 
170
   COMPONENT axi_basic_tx_thrtl_ctl IS
171
   GENERIC (
172
      C_DATA_WIDTH              : INTEGER := 128;
173
      C_FAMILY                  : STRING  := "X7";
174
      C_ROOT_PORT               : BOOLEAN := FALSE;
175
      TCQ                       : INTEGER := 1
176
   );
177
   PORT (
178
      S_AXIS_TX_TDATA         : IN STD_LOGIC_VECTOR(C_DATA_WIDTH - 1 DOWNTO 0);
179
      S_AXIS_TX_TVALID          : IN STD_LOGIC;
180
      S_AXIS_TX_TUSER           : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
181
      S_AXIS_TX_TLAST           : IN STD_LOGIC;
182
      USER_TURNOFF_OK           : IN STD_LOGIC;
183
      USER_TCFG_GNT             : IN STD_LOGIC;
184
      TRN_TBUF_AV               : IN STD_LOGIC_VECTOR(5 DOWNTO 0);
185
      TRN_TDST_RDY              : IN STD_LOGIC;
186
      TRN_TCFG_REQ              : IN STD_LOGIC;
187
      TRN_TCFG_GNT              : OUT STD_LOGIC;
188
      TRN_LNK_UP                : IN STD_LOGIC;
189
      CFG_PCIE_LINK_STATE       : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
190
      CFG_PM_SEND_PME_TO        : IN STD_LOGIC;
191
      CFG_PMCSR_POWERSTATE      : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
192
      TRN_RDLLP_DATA            : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
193
      TRN_RDLLP_SRC_RDY         : IN STD_LOGIC;
194
      CFG_TO_TURNOFF            : IN STD_LOGIC;
195
      CFG_TURNOFF_OK            : OUT STD_LOGIC;
196
      TREADY_THRTL              : OUT STD_LOGIC;
197
      USER_CLK                  : IN STD_LOGIC;
198
      USER_RST                  : IN STD_LOGIC
199
   );
200
   END COMPONENT axi_basic_tx_thrtl_ctl;
201
 
202
  -----------------------------------------------
203
  -- TX Data Pipeline
204
  -----------------------------------------------
205
   COMPONENT axi_basic_tx_pipeline IS
206
   GENERIC (
207
      C_DATA_WIDTH              : INTEGER := 128;
208
      C_PM_PRIORITY             : BOOLEAN := FALSE;
209
      TCQ                       : INTEGER := 1;
210
 
211
      C_REM_WIDTH               : INTEGER :=  1;
212
      C_STRB_WIDTH              : INTEGER := 8
213
   );
214
   PORT (
215
 
216
    -- Incoming AXI RX
217
    -------------
218
      S_AXIS_TX_TDATA         : IN STD_LOGIC_VECTOR(C_DATA_WIDTH - 1 DOWNTO 0);
219
      S_AXIS_TX_TVALID        : IN STD_LOGIC;
220
      S_AXIS_TX_TREADY        : OUT STD_LOGIC;
221
      S_AXIS_TX_TSTRB         : IN STD_LOGIC_VECTOR(C_STRB_WIDTH - 1 DOWNTO 0);
222
      S_AXIS_TX_TLAST         : IN STD_LOGIC;
223
      S_AXIS_TX_TUSER         : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
224
 
225
    -- Outgoing TRN TX
226
    -------------
227
      TRN_TD                  : OUT STD_LOGIC_VECTOR(C_DATA_WIDTH - 1 DOWNTO 0);
228
      TRN_TSOF                : OUT STD_LOGIC;
229
      TRN_TEOF                : OUT STD_LOGIC;
230
      TRN_TSRC_RDY            : OUT STD_LOGIC;
231
      TRN_TDST_RDY            : IN STD_LOGIC;
232
      TRN_TSRC_DSC            : OUT STD_LOGIC;
233
      TRN_TREM                : OUT STD_LOGIC_VECTOR(C_REM_WIDTH - 1 DOWNTO 0);
234
      TRN_TERRFWD             : OUT STD_LOGIC;
235
      TRN_TSTR                : OUT STD_LOGIC;
236
      TRN_TECRC_GEN           : OUT STD_LOGIC;
237
      TRN_LNK_UP              : IN  STD_LOGIC;
238
 
239
    -- System
240
    -------------
241
      TREADY_THRTL            : IN STD_LOGIC;
242
      USER_CLK                : IN STD_LOGIC;
243
      USER_RST                : IN STD_LOGIC
244
   );
245
END COMPONENT axi_basic_tx_pipeline;
246
 
247
BEGIN
248
   -- Drive referenced outputs
249
   S_AXIS_TX_TREADY      <= s_axis_tx_tready_xhdl1;
250
   TRN_TD                <= trn_td_xhdl3;
251
   TRN_TSOF              <= trn_tsof_xhdl8;
252
   TRN_TEOF              <= trn_teof_xhdl5;
253
   TRN_TSRC_RDY          <= trn_tsrc_rdy_xhdl10;
254
   TRN_TSRC_DSC          <= trn_tsrc_dsc_xhdl9;
255
   TRN_TREM              <= trn_trem_xhdl7;
256
   TRN_TERRFWD           <= trn_terrfwd_xhdl6;
257
   TRN_TSTR              <= trn_tstr_xhdl11;
258
   TRN_TECRC_GEN         <= trn_tecrc_gen_xhdl4;
259
   TRN_TCFG_GNT          <= trn_tcfg_gnt_xhdl2;
260
   CFG_TURNOFF_OK        <= cfg_turnoff_ok_xhdl0;
261
 
262
 
263
 
264
   tx_pipeline_inst : axi_basic_tx_pipeline
265
      GENERIC MAP (
266
         C_DATA_WIDTH     => C_DATA_WIDTH,
267
         C_PM_PRIORITY    => C_PM_PRIORITY,
268
         TCQ              => TCQ,
269
         C_REM_WIDTH      => C_REM_WIDTH,
270
         C_STRB_WIDTH     => C_STRB_WIDTH
271
      )
272
      PORT MAP (
273
 
274
         S_AXIS_TX_TDATA   => S_AXIS_TX_TDATA,
275
         S_AXIS_TX_TREADY  => s_axis_tx_tready_xhdl1,
276
         S_AXIS_TX_TVALID  => S_AXIS_TX_TVALID,
277
         S_AXIS_TX_TSTRB   => S_AXIS_TX_TSTRB,
278
         S_AXIS_TX_TLAST   => S_AXIS_TX_TLAST,
279
         S_AXIS_TX_TUSER   => S_AXIS_TX_TUSER,
280
 
281
         TRN_TD            => trn_td_xhdl3,
282
         TRN_TSOF          => trn_tsof_xhdl8,
283
         TRN_TEOF          => trn_teof_xhdl5,
284
         TRN_TSRC_RDY      => trn_tsrc_rdy_xhdl10,
285
         TRN_TDST_RDY      => TRN_TDST_RDY,
286
         TRN_TSRC_DSC      => trn_tsrc_dsc_xhdl9,
287
         TRN_TREM          => trn_trem_xhdl7,
288
         TRN_TERRFWD       => trn_terrfwd_xhdl6,
289
         TRN_TSTR          => trn_tstr_xhdl11,
290
         TRN_TECRC_GEN     => trn_tecrc_gen_xhdl4,
291
         TRN_LNK_UP        => trn_lnk_up,
292
 
293
         TREADY_THRTL      => TREADY_THRTL,
294
         USER_CLK          => USER_CLK,
295
         USER_RST          => USER_RST
296
      );
297
 
298
  -------------------------------------------------
299
  -- TX Throttle Controller
300
  -------------------------------------------------
301
   xhdl12 : IF (NOT(C_PM_PRIORITY)) GENERATE
302
           tx_thrl_ctl_inst : axi_basic_tx_thrtl_ctl
303
           GENERIC MAP (
304
                               C_DATA_WIDTH    => C_DATA_WIDTH,
305
                               C_FAMILY        => C_FAMILY,
306
                               C_ROOT_PORT     => C_ROOT_PORT,
307
                               TCQ             => TCQ
308
                       )
309
           PORT MAP (
310
                            -- Outgoing AXI TX
311
                            -------------
312
                            S_AXIS_TX_TDATA       => S_AXIS_TX_TDATA,
313
                            S_AXIS_TX_TVALID      => S_AXIS_TX_TVALID,
314
                            S_AXIS_TX_TUSER       => S_AXIS_TX_TUSER,
315
                            S_AXIS_TX_TLAST       => S_AXIS_TX_TLAST,
316
 
317
                            -- User Misc.
318
                            -------------
319
                            USER_TURNOFF_OK       => USER_TURNOFF_OK,
320
                            USER_TCFG_GNT         => USER_TCFG_GNT,
321
 
322
                            -- Incoming TRN RX
323
                            -------------
324
                            TRN_TBUF_AV           => TRN_TBUF_AV,
325
                            TRN_TDST_RDY          => TRN_TDST_RDY,
326
 
327
                            -- TRN Misc.
328
                            -------------
329
                            TRN_TCFG_REQ          => TRN_TCFG_REQ,
330
                            TRN_TCFG_GNT          => trn_tcfg_gnt_xhdl2,
331
                            TRN_LNK_UP            => trn_lnk_up,
332
 
333
                            -- 7 Seriesq/Virtex6 PM
334
                            -------------
335
                            CFG_PCIE_LINK_STATE   => CFG_PCIE_LINK_STATE,
336
 
337
                            -- Virtex6 PM
338
                            -------------
339
                            CFG_PM_SEND_PME_TO    => CFG_PM_SEND_PME_TO,
340
                            CFG_PMCSR_POWERSTATE  => CFG_PMCSR_POWERSTATE,
341
                            TRN_RDLLP_DATA        => TRN_RDLLP_DATA,
342
                            TRN_RDLLP_SRC_RDY     => TRN_RDLLP_SRC_RDY,
343
 
344
                            -- Spartan6 PM
345
                            -------------
346
                            CFG_TO_TURNOFF        => CFG_TO_TURNOFF,
347
                            CFG_TURNOFF_OK        => cfg_turnoff_ok_xhdl0,
348
 
349
                            -- System
350
                            -------------
351
                            TREADY_THRTL          => TREADY_THRTL,
352
                            USER_CLK              => USER_CLK,
353
                            USER_RST              => USER_RST
354
     );
355
     END GENERATE;
356
   xhdl13 : IF (C_PM_PRIORITY) GENERATE
357
      TREADY_THRTL         <= '0';
358
      cfg_turnoff_ok_xhdl0 <= USER_TURNOFF_OK;
359
      trn_tcfg_gnt_xhdl2   <= USER_TCFG_GNT;
360
   END GENERATE;
361
END trans;

powered by: WebSVN 2.1.0

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