1 |
43 |
aborga |
## Block Diagram
|
2 |
|
|
|
3 |
|
|
![Wupper_structure](/usercontent/img/1436869667)
|
4 |
|
|
|
5 |
|
|
## Description
|
6 |
|
|
|
7 |
|
|
Wupper is designed by [Nikhef](http://www.nikhef.nl) (Amsterdam, The Netherlands) for the CERN [ATLAS](http://atlas.cern) / [FELIX](https://atlas-project-felix.web.cern.ch/atlas-project-felix) project.
|
8 |
|
|
Its main purpose is to provide a simple Direct Memory Access (DMA) interface to the Xilinx Virtex-7 PCIe Gen3 hard block.
|
9 |
|
|
Wupper is specifically designed for the 256 bit wide AXI4-Stream interface of the [Xilinx Virtex-7 FPGA Gen3 Integrated Block for PCI Express (PCIe)](https://www.xilinx.com/products/intellectual-property/7_series_gen_3_pci_express.html).
|
10 |
|
|
Wupper has been also successfully ported to Xilinx Kintex UltraScale FPGAs.
|
11 |
|
|
|
12 |
|
|
#### DMA read and write
|
13 |
|
|
|
14 |
|
|
The main purpose of Wupper is therefore to provide an interface to standard FIFOs.
|
15 |
|
|
This is the done by the _DMA\_read\_write_ block in the diagram above.
|
16 |
|
|
The read/write FIFOs have the same width as the Xilinx AXI4-Stream interface (256 bits) and run at 250 MHz.
|
17 |
|
|
The application side of the FPGA design can simply read or write the FIFOs.
|
18 |
|
|
Wupper will handle the transfer to Host PC memory, according to the addresses specified in the _DMA descriptors_.
|
19 |
|
|
|
20 |
|
|
#### DMA control
|
21 |
|
|
|
22 |
|
|
Another functionality of Wupper is thus to manage a set of DMA descriptors.
|
23 |
|
|
Descriptors consist of an address, a read/write flag, the transfer size (number of 32 bit words) and an enable line.
|
24 |
|
|
Descriptors are handled by the _DMA\_control_ block.
|
25 |
|
|
These descriptors are mapped as normal PCIe memory or IO registers.
|
26 |
|
|
Besides the descriptors and the enable line (one per descriptor), a status register for every descriptor is provided in the register map.
|
27 |
|
|
|
28 |
|
|
#### Generic register map
|
29 |
|
|
|
30 |
|
|
Besides DMA specific functions, the DMA control block can also handle generic _control_ and _monitor_ registers for user application.
|
31 |
|
|
|
32 |
|
|
#### Interrupt handler
|
33 |
|
|
|
34 |
|
|
Wupper is provided with a generic MSI-X compatible interrupt controller.
|
35 |
|
|
|
36 |
|
|
#### Implementation info
|
37 |
|
|
|
38 |
|
|
For synthesis and implementation of the cores, it is recommend to use Xilinx Vivado 2014.2.
|
39 |
|
|
Other IP cores (FIFO, clock wizard and PCIe) are provided in the Xilinx .xci format, as well as the constraints file (.xdc) is in the Vivado 2014.2 Format.
|
40 |
|
|
Wupper is also known to work well with Vivado 2014.4, constraints will be updated.
|
41 |
|
|
|
42 |
|
|
For portability reasons, no Xilinx project files will be supplied with Wupper.
|
43 |
|
|
Instead, a bundle of _TCL scripts_ has been supplied to create a project and import all necessary files, as well as to do the synthesis and implementation.
|
44 |
|
|
These scripts are be described in details in the [/documentation/wupper.pdf](http://opencores.org/websvn,filedetails?repname=virtex7_pcie_dma&path=%2Fvirtex7_pcie_dma%2Ftrunk%2Fdocumentation%2Fwupper.pdf) distributed with Wupper.
|
45 |
|
|
|
46 |
|
|
## Feedback
|
47 |
|
|
|
48 |
|
|
|
49 |
|
|
\>> Give comments and feedback using the official core thread on the OpenCores forum:
|
50 |
|
|
[forum\_thread](http://opencores.org/forum,Cores,0,5580)
|