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

Subversion Repositories pcie_sg_dma

[/] [pcie_sg_dma/] [branches/] [Virtex6/] [ML605_ISE13.3/] [ipcore_dir_ISE13.3/] [v6_pcie_v1_7_x1/] [example_design/] [PIO_EP.vhd] - Blame information for rev 13

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 13 barabba
-------------------------------------------------------------------------------
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       : PIO_EP.vhd
52
-- Version    : 1.7
53
----
54
---- Description: Endpoint Programmed I/O module. 
55
----
56
----------------------------------------------------------------------------------
57
 
58
library ieee;
59
use ieee.std_logic_1164.all;
60
use ieee.std_logic_arith.all;
61
use ieee.numeric_std.all;
62
 
63
entity PIO_EP is
64
 
65
port (
66
 
67
  clk                    : in std_logic;
68
  rst_n                  : in std_logic;
69
 
70
  -- LocalLink Tx
71
  trn_td                 : out std_logic_vector(63 downto 0);
72
  trn_trem_n             : out std_logic_vector(7 downto 0);
73
 
74
  trn_tsof_n             : out std_logic;
75
  trn_teof_n             : out std_logic;
76
  trn_tsrc_dsc_n         : out std_logic;
77
  trn_tsrc_rdy_n         : out std_logic;
78
  trn_tdst_dsc_n         : in std_logic;
79
  trn_tdst_rdy_n         : in std_logic;
80
 
81
  -- LocalLink Rx
82
 
83
  trn_rd                 : in std_logic_vector(63 downto 0);
84
  trn_rrem_n             : in std_logic_vector(7 downto 0);
85
 
86
  trn_rsof_n             : in std_logic;
87
  trn_reof_n             : in std_logic;
88
  trn_rsrc_rdy_n         : in std_logic;
89
  trn_rsrc_dsc_n         : in std_logic;
90
  trn_rbar_hit_n         : in std_logic_vector(6 downto 0);
91
  trn_rdst_rdy_n         : out std_logic;
92
 
93
  req_compl_o            : out std_logic;
94
  compl_done_o           : out std_logic;
95
 
96
  cfg_completer_id       : in std_logic_vector(15 downto 0);
97
  cfg_bus_mstr_enable    : in std_logic
98
 
99
);
100
end PIO_EP;
101
 
102
architecture rtl of PIO_EP is
103
 
104
-- Local signals
105
 
106
  signal rd_addr       : std_logic_vector(10 downto 0);
107
  signal rd_be         : std_logic_vector(3 downto 0);
108
  signal rd_data       : std_logic_vector(31 downto 0);
109
 
110
  signal wr_addr       : std_logic_vector(10 downto 0);
111
  signal wr_be         : std_logic_vector(7 downto 0);
112
  signal wr_data       : std_logic_vector(31 downto 0);
113
  signal wr_en         : std_logic;
114
  signal wr_busy       : std_logic;
115
 
116
  signal req_compl     : std_logic;
117
  signal compl_done    : std_logic;
118
 
119
  signal req_tc        : std_logic_vector(2 downto 0);
120
  signal req_td        : std_logic;
121
  signal req_ep        : std_logic;
122
  signal req_attr      : std_logic_vector(1 downto 0);
123
  signal req_len       : std_logic_vector(9 downto 0);
124
  signal req_rid       : std_logic_vector(15 downto 0);
125
  signal req_tag       : std_logic_vector(7 downto 0);
126
  signal req_be        : std_logic_vector(7 downto 0);
127
  signal req_addr      : std_logic_vector(12 downto 0);
128
 
129
component PIO_RX_ENGINE is
130
port (
131
 
132
  clk               : in std_logic;
133
  rst_n             : in std_logic;
134
 
135
  trn_rd            : in std_logic_vector(63 downto 0);
136
  trn_rrem_n        : in std_logic_vector(7 downto 0);
137
  trn_rsof_n        : in std_logic;
138
  trn_reof_n        : in std_logic;
139
  trn_rsrc_rdy_n    : in std_logic;
140
  trn_rsrc_dsc_n    : in std_logic;
141
  trn_rbar_hit_n    : in std_logic_vector(6 downto 0);
142
  trn_rdst_rdy_n    : out std_logic;
143
 
144
  req_compl_o       : out std_logic;
145
  compl_done_i      : in std_logic;
146
 
147
  req_tc_o          : out std_logic_vector(2 downto 0); -- Memory Read TC
148
  req_td_o          : out std_logic; -- Memory Read TD
149
  req_ep_o          : out std_logic; -- Memory Read EP
150
  req_attr_o        : out std_logic_vector(1 downto 0); -- Memory Read Attribute
151
  req_len_o         : out std_logic_vector(9 downto 0); -- Memory Read Length (1DW)
152
  req_rid_o         : out std_logic_vector(15 downto 0); -- Memory Read Requestor ID
153
  req_tag_o         : out std_logic_vector(7 downto 0); -- Memory Read Tag
154
  req_be_o          : out std_logic_vector(7 downto 0); -- Memory Read Byte Enables
155
  req_addr_o        : out std_logic_vector(12 downto 0); -- Memory Read Address
156
 
157
  wr_addr_o         : out std_logic_vector(10 downto 0); -- Memory Write Address
158
  wr_be_o           : out std_logic_vector(7 downto 0); -- Memory Write Byte Enable
159
  wr_data_o         : out std_logic_vector(31 downto 0); -- Memory Write Data
160
  wr_en_o           : out std_logic; -- Memory Write Enable
161
  wr_busy_i         : in std_logic -- Memory Write Busy
162
 
163
);
164
end component;
165
 
166
component PIO_TX_ENGINE is
167
 
168
port   (
169
 
170
  clk                      : in std_logic;
171
  rst_n                    : in std_logic;
172
 
173
  trn_td                   : out std_logic_vector( 63 downto 0);
174
  trn_trem_n               : out std_logic_vector(7 downto 0);
175
  trn_tsof_n               : out std_logic;
176
  trn_teof_n               : out std_logic;
177
  trn_tsrc_rdy_n           : out std_logic;
178
  trn_tsrc_dsc_n           : out std_logic;
179
  trn_tdst_rdy_n           : in std_logic;
180
  trn_tdst_dsc_n           : in std_logic;
181
 
182
  req_compl_i              : in std_logic;
183
  compl_done_o             : out std_logic;
184
 
185
  req_tc_i                 : in std_logic_vector(2 downto 0);
186
  req_td_i                 : in std_logic;
187
  req_ep_i                 : in std_logic;
188
  req_attr_i               : in std_logic_vector(1 downto 0);
189
  req_len_i                : in std_logic_vector(9 downto 0);
190
  req_rid_i                : in std_logic_vector(15 downto 0);
191
  req_tag_i                : in std_logic_vector(7 downto 0);
192
  req_be_i                 : in std_logic_vector(7 downto 0);
193
  req_addr_i               : in std_logic_vector(12 downto 0);
194
 
195
  rd_addr_o                : out std_logic_vector(10 downto 0);
196
  rd_be_o                  : out std_logic_vector( 3 downto 0);
197
  rd_data_i                : in std_logic_vector(31 downto 0);
198
 
199
  completer_id_i           : in std_logic_vector(15 downto 0);
200
  cfg_bus_mstr_enable_i    : in std_logic
201
 
202
);
203
end component;
204
 
205
component PIO_EP_MEM_ACCESS is
206
 
207
port (
208
 
209
  clk          : in std_logic;
210
  rst_n        : in std_logic;
211
 
212
  --  Read Port
213
 
214
  rd_addr_i    : in std_logic_vector(10 downto 0);
215
  rd_be_i      : in std_logic_vector(3 downto 0);
216
  rd_data_o    : out std_logic_vector(31 downto 0);
217
 
218
  --  Write Port
219
 
220
  wr_addr_i    : in std_logic_vector(10 downto 0);
221
  wr_be_i      : in std_logic_vector(7 downto 0);
222
  wr_data_i    : in std_logic_vector(31 downto 0);
223
  wr_en_i      : in std_logic;
224
  wr_busy_o    : out std_logic
225
 
226
);
227
 
228
end component;
229
 
230
 
231
begin
232
 
233
-- ENDPOINT MEMORY : 8KB memory aperture implemented in FPGA BlockRAM(*)  
234
 
235
EP_MEM : PIO_EP_MEM_ACCESS port map (
236
 
237
  clk => clk,                           -- I
238
  rst_n => rst_n,                       -- I
239
 
240
  -- Read Port
241
 
242
  rd_addr_i => rd_addr,                 -- I [10:0]
243
  rd_be_i => rd_be,                     -- I [3:0]
244
  rd_data_o => rd_data,                 -- O [31:0]
245
 
246
  -- Write Port
247
 
248
  wr_addr_i => wr_addr,                 -- I [10:0]
249
  wr_be_i => wr_be,                     -- I [7:0]
250
  wr_data_i => wr_data,                 -- I [31:0]
251
  wr_en_i => wr_en,                     -- I
252
  wr_busy_o => wr_busy                  -- O
253
 
254
);
255
 
256
EP_RX : PIO_RX_ENGINE port map (
257
 
258
  clk => clk,                           -- I
259
  rst_n => rst_n,                       -- I
260
 
261
  -- LocalLink Rx
262
  trn_rd => trn_rd,                     -- I [63:0]
263
  trn_rrem_n => trn_rrem_n,             -- I [7:0]
264
  trn_rsof_n => trn_rsof_n,             -- I
265
  trn_reof_n => trn_reof_n,             -- I
266
  trn_rsrc_rdy_n => trn_rsrc_rdy_n,     -- I
267
  trn_rsrc_dsc_n => trn_rsrc_dsc_n,     -- I
268
  trn_rbar_hit_n => trn_rbar_hit_n,     -- I [6:0]
269
  trn_rdst_rdy_n => trn_rdst_rdy_n,     -- O
270
 
271
  -- Handshake with Tx engine 
272
 
273
  req_compl_o => req_compl,             -- O
274
  compl_done_i => compl_done,           -- I
275
 
276
  req_tc_o => req_tc,                   -- O [2:0]
277
  req_td_o => req_td,                   -- O
278
  req_ep_o => req_ep,                   -- O
279
  req_attr_o => req_attr,               -- O [1:0]
280
  req_len_o => req_len,                 -- O [9:0]
281
  req_rid_o => req_rid,                 -- O [15:0]
282
  req_tag_o => req_tag,                 -- O [7:0]
283
  req_be_o => req_be,                   -- O [7:0]
284
  req_addr_o => req_addr,               -- O [12:0]
285
 
286
  -- Memory Write Port
287
 
288
  wr_addr_o => wr_addr,                 -- O [10:0]
289
  wr_be_o => wr_be,                     -- O [7:0]
290
  wr_data_o => wr_data,                 -- O [31:0]
291
  wr_en_o => wr_en,                     -- O
292
  wr_busy_i => wr_busy                  -- I
293
 
294
);
295
 
296
-- Local-Link Transmit Controller
297
 
298
EP_TX : PIO_TX_ENGINE  port map (
299
 
300
  clk => clk,                         -- I
301
  rst_n => rst_n,                     -- I
302
 
303
  -- LocalLink Tx
304
  trn_td => trn_td,                   -- O [63:0]
305
  trn_trem_n => trn_trem_n    ,       -- O [7:0]
306
  trn_tsof_n => trn_tsof_n,           -- O
307
  trn_teof_n => trn_teof_n,           -- O
308
  trn_tsrc_dsc_n => trn_tsrc_dsc_n,   -- O
309
  trn_tsrc_rdy_n => trn_tsrc_rdy_n,   -- O
310
  trn_tdst_dsc_n => trn_tdst_dsc_n,   -- I
311
  trn_tdst_rdy_n => trn_tdst_rdy_n,   -- I
312
 
313
  -- Handshake with Rx engine 
314
  req_compl_i => req_compl,           -- I
315
  compl_done_o => compl_done,         -- 0
316
 
317
  req_tc_i => req_tc,                 -- I [2:0]
318
  req_td_i => req_td,                 -- I
319
  req_ep_i => req_ep,                 -- I
320
  req_attr_i => req_attr,             -- I [1:0]
321
  req_len_i => req_len,               -- I [9:0]
322
  req_rid_i => req_rid,               -- I [15:0]
323
  req_tag_i => req_tag,               -- I [7:0]
324
  req_be_i => req_be,                 -- I [7:0]
325
  req_addr_i => req_addr,             -- I [12:0]
326
 
327
  -- Read Port
328
 
329
  rd_addr_o => rd_addr,              -- O [10:0]
330
  rd_be_o => rd_be,                  -- O [3:0]
331
  rd_data_i => rd_data,              -- I [31:0]
332
 
333
  completer_id_i => cfg_completer_id,          -- I [15:0]
334
  cfg_bus_mstr_enable_i => cfg_bus_mstr_enable -- I
335
 
336
);
337
 
338
  req_compl_o     <= req_compl;
339
  compl_done_o    <= compl_done;
340
 
341
end rtl; -- PIO_EP
342
 

powered by: WebSVN 2.1.0

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