Altera PCIe Hard IP for Avalon-MM Interface

For high-performance FPGA-based systems, Direct Memory Access (DMA) is essential.

Avalon-MM is a standard interface for memory-mapped transactions in Intel's Platform Designer (formerly Qsys) system integration tool. When paired with a robust software framework like Jungo WinDriver, developers can streamline PCIe-connected FPGA DMA operations on Windows and Linux hosts.


Avalon-MM Interface


Intel FPGAs, spanning the Stratix, Agilex, and Arria families, enable high-performance data movement through Direct Memory Access (DMA) when paired with the Avalon Memory-Mapped (Avalon-MM) interface. Avalon-MM is a well-established standard for internal memory-mapped communication in Intel-based designs and plays a central role in connecting custom logic to external memory and high-speed interfaces such as PCIe.

When DMA is implemented over Avalon-MM, it allows for efficient, sustained data throughput between the host and FPGA logic, suitable for workloads such as sensor ingest, packet processing, video frame buffering, and machine learning acceleration. However, the software driver stack traditionally needed to control such designs can be both time-consuming and platform-specific.

Jungo WinDriver offers an ideal solution for developers looking to bypass the complexity of writing kernel-mode drivers and get direct access to DMA operations in user mode. By supporting Windows, Linux, and ARM platforms, WinDriver brings cross-platform consistency and accelerates development across a range of host environments.

 

Streamlined Integration


Using the Avalon-MM DMA interface within Intel FPGAs involves configuring your hardware to handle Host-to-Card (H2C) and Card-to-Host (C2H) communication. This typically involves setting up descriptor-based memory transfers between host RAM and the FPGA’s memory-mapped logic.

With Jungo’s Avalon-MM DMA samples, developers benefit from:

  • Pre-defined code structures for buffer setup, descriptor management, and register interaction
  • Built-in support for memory locking, DMA mapping, and user-mode interrupt handling
  • Simplified access to PCIe Base Address Registers (BARs) and control/status regions

This high level of abstraction significantly reduces onboarding time and removes the need for deep familiarity with operating system kernel development.

 

A Flexible, Multi-Platform Development Model


One of WinDriver’s standout strengths is its platform agnosticism. Developers can begin working on a Windows workstation, then migrate their application to a Linux server or an embedded ARM-based system with minimal code changes. The same user-mode API, DMA buffer handling, and BAR access routines apply across all supported OS targets.

This flexibility is especially valuable for teams building production solutions where development may occur on one OS, but deployment occurs on another. With WinDriver, you maintain consistency and efficiency throughout.


Implementation Steps

Design Your Avalon-MM DMA Hardware Subsystem


Use Platform Designer (Qsys): Create a new system in Intel’s Platform Designer and instantiate the following IP components:

  • PCIe Hard IP for Intel FPGA (or Soft IP for earlier devices)
  • Avalon-MM DMA Controller
  • Avalon-MM Bridge Interfaces (clock crossing or width adapters as needed)
  • On-chip Memory or External Memory Controller (EMIF)
  • Interrupt Sender (optional)

Assign Base Addresses: Define base addresses for the DMA controller, descriptor buffer, and status registers in the Address Map window.

Generate HDL: Export the Qsys-generated HDL and integrate it into your top-level Quartus project. Synthesize and compile the design.

​​

Generate PCIe BAR and Register Map


Define BARs: Assign memory regions for the DMA controller and descriptors to PCIe Base Address Registers (BARs). For example:

  • BAR0: Control/status registers
  • BAR2: DMA descriptor memory region

Export Register Map: Note register offsets for:

  • Descriptor base address
  • Transfer length
  • Start/Stop flags
  • IRQ enable/status flags

This information is critical for the software layer to control the DMA engine.

​​

Write a WinDriver-Based Software Application


With your FPGA bitstream ready and PCIe enumeration configured, use Jungo WinDriver to control the DMA from the host side.

Detect the FPGA Device

Use WDC_PciScanDevices() or DriverWizard to find the FPGA based on vendor/device ID. Open a handle to the device.

hDev = WDC_DeviceOpen(...);

Map BARs and Set Pointers

Use WDC_MemMap() to map BARs for register access. Define pointers to control registers, descriptor regions, and status flags.

WDC_MemMap(hDev, 0, &pBar0); // Control
WDC_MemMap(hDev, 2, &pDescBuf); // Descriptors

​​

Allocate and Lock DMA Buffers


Allocate a buffer in user space using malloc(), then lock it for DMA using:

WDC_DMASGBufLock(hDev, &pBuf, &dmaAddr, size, DMA_TO_DEVICE);

This provides:

  • Virtual address for CPU access
  • Physical address for FPGA use

You must also prepare the descriptor ring that points to these addresses.

 

Configure DMA Descriptors


Each descriptor typically includes:

  • Source address (H2C) or destination (C2H)
  • Transfer length
  • Control flags (start, EOP)

Write descriptors to the mapped descriptor memory using memcpy() or WDC_WriteAddr32() depending on access type.

​​

 Start the DMA Transfer


Use WinDriver to write control values to the DMA start register. For example:

WDC_WriteAddr32(hDev, TRANSFER_BAR, DMA_CONTROL_OFFSET, DMA_START_BIT);

Optional: Enable interrupts for completion notification.

​​

Monitor Transfer Status


You can choose between:

  • Polling: Read the DMA status register until a done flag is set
  • Interrupts: Register an ISR using WDC_IntEnable()

In the interrupt handler, check the IRQ source and acknowledge the interrupt by clearing the status bit.

​​

Post-Transfer Actions


After DMA completes:

  • Use the dmaAddr mapping to verify transfer integrity
  • Unlock the buffer with WDC_DMABufUnlock()
  • Optionally reset DMA engine registers

You can now repeat the process or close the connection cleanly.

 

Debugging Tips


  • Use SignalTap II logic analyzer for real-time probing of DMA signals
  • Check PCIe link status in Quartus Programmer or Linux lspci
  • Confirm BAR sizes and memory maps match between Qsys and software

​​

Benefits


Rapid Development

Accelerates the development cycle by providing ready-to-use driver frameworks.

Stability and Safety

Operating in user mode reduces the risk of system crashes due to driver errors.

Comprehensive Support

Backed by detailed documentation and a responsive support team to assist with development challenges.

Flexibility

Supports a wide range of devices and can be adapted to various FPGA configurations.

Altera Innovation


In a world of endless opportunities and challenges, Altera is here to provide the flexibility to pioneer and accelerate innovation.

Intel® Stratix® 10 GX

A flagship platform for high-performance designs, including data center acceleration, AI/ML workloads, and real-time signal processing. Fully supports Avalon-MM DMA IP via Qsys.
FPGA Device: 1SG280LU2F50E2VG
2.8 million logic elements (LEs), 229 Mb of M20K memory
PCIe Interface: PCIe Gen3 x16 (hard IP)
Supports DMA to/from host system memory at high throughput
Memory:
2 × 8 GB DDR4 DIMMs, 72-bit (ECC) with ~25.6 GB/s bandwidth
Transceivers & Expansion:
Up to 96 transceivers @ 17.4 Gbps

Intel® Cyclone® 10 GX

A lower-cost solution that still supports Avalon-MM DMA flows via PCIe. Suitable for industrial, medical, and IoT applications where power and cost matter.
FPGA Device: 10CX220YF780E5G
220K LEs, 13 Mb embedded RAM, 154 DSP blocks
PCIe Interface: PCIe Gen2 x4
Supported via Avalon-MM Qsys integration
Memory:
2 × 2 GB DDR3 SDRAM (32-bit interface)
Expansion:
HSMC connector, GPIO headers, transceiver SMA connectors

Intel® Arria® 10 GX

Arria 10 devices balance high performance and power efficiency, ideal for mid-range applications like broadcast, wireless, and test equipment.
Process Technology:
20nm
Logic Density:
Up to 1.5 million logic elements
DSP Capabilities:
Integrated hardened floating-point DSP blocks
Interface Support:
PCIe Gen3, 10/40/100G Ethernet, DDR4
Faster Development with Pre-Integrated Qsys + PCIe + DMA Examples
WinDriver IP samples include pre-built driver code aligned with Intel’s Platform Designer (Qsys) and Avalon-MM DMA IP. This allows developers to bypass low-level PCIe register configuration and start transferring data within hours, not weeks.
Seamless User-Mode Driver Development for Avalon-MM Designs
The IP samples enable full user-mode driver implementation, eliminating the need to write or debug fragile kernel code. This improves safety and accelerates debugging, as crashes in user-mode do not affect the entire system.
Cross-Platform Support for Intel-FPGA-Based Systems
Jungo WinDriver supports development on Windows, Linux x86, and Linux ARM, making the same IP samples usable across desktop, industrial, and embedded environments without rewriting OS-specific code.
Built-in PCIe BAR Access, Avalon-MM DMA, and Interrupt Support
The samples include tested implementations of BAR memory mapping, Avalon-MM DMA setup, and MSI/MSI-X interrupt handling. This allows immediate evaluation of FPGA-to-host and host-to-FPGA data transfers using Intel’s PCIe endpoint.
Integrated with DriverWizard for Intel PCIe Devices
All samples are compatible with Jungo’s DriverWizard, enabling automatic code generation for Intel FPGA devices. Developers can quickly scan the PCIe configuration space, map BARs, and insert DMA logic with minimal manual intervention.
Proven Foundation for Production and Certification
The WinDriver samples provide a stable reference for passing formal driver testing (e.g., HLK for Windows or Linux LTP). They also reduce debugging time by serving as a known-good baseline when integrating Avalon-MM or custom IPs.
Full Benefits
Guidance
Features
Technical Data

Download WinDriver Free 30 Days Trial

Please fill the form below to download a fully featured WinDriver evaluation

Software License Agreement of WinDriver (TM) Version v16.4.0
© Jungo Connectivity Ltd. 2024 All Rights Reserved

IMPORTANT – READ CAREFULLY: THIS SOFTWARE LICENSE AGREEMENT (“AGREEMENT”) IS A LEGAL AGREEMENT BETWEEN YOU AND JUNGO CONNECTIVITY LTD. (“JUNGO”), FOR THE WINDRIVER SOFTWARE PRODUCT ACCOMPANYING THIS LICENSE (THE “SOFTWARE”). BY INSTALLING, COPYING OR OTHERWISE USING THE SOFTWARE, YOU AGREE TO BE LEGALLY BOUND BY THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT, DO NOT INSTALL, COPY, OR OTHERWISE USE THE SOFTWARE.

 

  1. OWNERSHIP OF THE SOFTWARE. All right, title, and interest in and to the Software, including associated intellectual property rights, of any sort and/or kind, are and shall remain solely with Jungo and its licensors, and may be protected by copyright, trademark, patent and trade secret law and international treaties. This Agreement does not convey to you an interest in or to the Software, but only a limited, non-transferable, non-sublicensable, non-exclusive, and revocable right of use, in accordance with the terms of this Agreement. You may not remove any proprietary notices and/or any legends from the Software, in whole or in part.

 

  1. GRANT OF LICENSE. Jungo hereby grants you a personal, non-exclusive, nontransferable, non-sublicensable node-locked and time limited license to use the Software.

 

    – Individuals: Jungo grants you, as an individual, a personal, non-exclusive, “single-user” license to use the Software on a single computer, in the manner provided below, at the site for which the license was given.

 

    – Entities: If you are an entity, Jungo grants you the right to designate one individual within your organization (and only one) to have the right to use the Software on a single computer, in the manner provided below, at the site for which the license was given.

 

    – License Scope: A single user license allows usage of WinDriver and redistribution of certain components (as defined below) within a single end product SKU, for a single device (identified by its VID/PID (USB) or VID/DID (PCI)), and without SDK/API capabilities.  If you need extended license or distribution rights, please contact Jungo.

 

  1. EVALUATION LICENSE. If you have not yet paid license fees for the use of the Software, then Jungo hereby grants you a personal, non-exclusive, non-transferable and non-sublicensable license to internally use the Software for evaluation purposes only, for a period of 30 days (the “Evaluation License”). If, after the expiration of the Evaluation License, you wish to continue using the Software and accompanying written materials, you may do so by remitting the required payment to Jungo, and you will then receive a registration code and a license string that will permit you to use the Software on a single computer under one of the license schemes specified in Section 2 above.

 

  1. SERVICE OPTIMIZATION AND ENHANCEMENT. To continuously improve and optimize Jungo’s services, Jungo reserves the right to anonymously monitor, collect, and analyze usage data, including but not limited to API interactions, performance metrics, and system activity. Such data collection and analysis shall be conducted in compliance with all applicable laws and regulations and shall be used solely for the purpose of enhancing service performance, security, and reliability.
  2. SUBSCRIPTION, SERVICE CONTINUITY, RENEWAL, AND LATE PAYMENT PENALTIES. Access to the WinDriver and its associated features is provided on a subscription basis, subject to annual renewal. Failure to renew the subscription before the expiration date may result in the automatic termination of access to the platform and all related services, and additional fees (including but not limited to late payment penalties, administrative charges, or reinstatement costs). Upon termination, the user shall forfeit any rights to continued use, and we reserve the right to suspend or delete any associated accounts, data, or functionalities without further notice.

 

  1. OPEN SOURCE. The Software includes certain files that are subject to open source licenses. These files are identified in their header files (“Open Source Files”). You must use the Open Source Files in accordance with the terms of their respective licenses.  In the event of any contradiction between the terms of this Agreement, and the terms of the open source license accompanying a certain Open Source File, the terms of the latter shall prevail, with regard to the said Open Source File.

 

RESTRICTIONS ON USE AND TRANSFER

 

  1. DISTRIBUTION OF FILES.

 

    (a) You may not distribute, or otherwise transfer or assign, any portion of the Software, including any of the headers or source files that are included in the Software, unless otherwise expressly permitted in this Agreement, subject to the provisions of Section 4 above.

 

    (b) Subject to your full and continued compliance with the terms of this Agreement, including the ongoing payment of annual license fees, you may distribute the following files:

 

Windows:
-windrvr1640.sys
-windrvr1640_legacy.sys
-windrvr1640.inf
-windrvr1640.cat
-wdapi1640.dll
-wdapi1640_32.dll
-wdapi1640_arm64.dll
-wdapi_dotnet1640.dll
-wdapi_dotnet1640_32.dll
-wdapi_netcore1640.dll
-wdapi_java1640.dll
-wdapi_java1640.jar
-wdreg.exe
-difxapi.dll
-devcon.exe
-windrvr1630.sys
-windrvr1630.inf
-wd1630.cat
-wdapi1630.dll
-wdapi_dotnet1630.dll
-wdapi_java1630.dll wdapi_java1600.jar
-windrvr1220.dll
-wdapi1220.dll

Linux:
-windrvr_gcc_v3.o_shipped
-windrvr_gcc_v3_regparm.o_shipped
-kp_linux_gcc_v3.o
-kp_linux_gcc_v3_regparm.o
-libwdapi1640.so libwdapi1640_32.so
-libwdapi_java1640.so
-libwdapi_java1640_32.so
-wdapi_java1640.jar
-wdapi_netcore1640.dll
-kp_wdapi1640_gcc_v3.o_shipped
-kp_wdapi1640_gcc_v3_regparm.o_shipped
-linux_wrappers.c
-linux_wrappers.h
-wdusb_linux.c
-wdusb_interface.h
-wd_ver.h
-linux_common.h
-windrvr.h
-windrvr_usb.h
-wdsriov_interface.h
-wdsriov_linux.c
-wdreg
-configure makefile.in
-configure.wd makefile.wd.in
-makefile.wd.kbuild.in
-configure.usb
-makefile.usb.in
-makefile.usb.kbuild.in
-setup_inst_dir
-windrvr_gcc_v2.a windrvr_gcc_v3.a windrvr_gcc_v3_regparm.a
-kp_linux_gcc_v2.o kp_linux_gcc_v3.o kp_linux_gcc_v3_regparm.o
-libwdapi1630.so
-libwdapi_java1630.so wdapi_java1600.java
-kp_wdapi1630_gcc_v2.a kp_wdapi1600_gcc_v3.a kp_wdapi1600_gcc_v3_regparm.a
-linux_wrappers.c linux_wrappers.h wdusb_linux.c
-wdusb_interface.h wd_ver.h linux_common.h windrvr.h windrvr_usb.h
-configure.wd makefile.wd.in makefile.wd.kbuild.in
-configure.usb makefile.usb.in makefile.usb.kbuild.in

macOS:
-libwdapi1640.dyld
-libwdapi_java1640.jar
-libwdapi_java1640.dyld
-wdapi_netcore1640.dll
-WinDriver1640.kext
-WinDriver1640.dext
-wd_mac_install.sh
-wd_mac_uninstall.sh

 

    (c) The files listed in Section 5.b above may be distributed only as part of a complete application that you distribute under your organization name, and only if they significantly contribute to the functionality of your application. For avoidance of doubt, each organization distributing these files as part of the organization products is required to have valid license(s) under the organization name/VID, irrespective of the party who actually performed the product development. Licenses granted to subcontractors do not grant distribution or other rights to the organizations for which they are developing.

 

    (d) The distribution of the windrvr.h header file is permitted only on Linux.

 

    (e) You may not modify the distributed files specified in Section 5.b of this Agreement.

 

    (f) You may not distribute any header file that describes the WinDriver functions, or functions that call the WinDriver functions and have the same basic functionality as that of the WinDriver functions.

 

  1. The Software may not be used to develop a development product, an API, or any products, which will eventually be part of a development product or environment, without the written consent of Jungo and subject to additional fees and licensing terms.

 

  1. You may make printed copies of the written materials accompanying the Software, provided that only users bound by this license use them.

 

  1. You may not allow any third party to use the Software, grant access to the Software (or any portion thereof) to any third party, or otherwise make any commercial use of the Software, including without limitation, assign, distribute, sublicense, transfer, pledge, lease, rent, or share your rights in the Software or any of your rights under this Agreement, all whether or not for any consideration.

 

  1. You may not translate, reverse engineer, decompile, disassemble, reproduce, duplicate, copy, or otherwise disseminate all or any part of the Software, or extract source code from the object code of the Software.

 

  1. Jungo reserves the right to revise, update, change, modify, add to, supplement, or delete any and all terms of this License Agreement; provided, however, that changes to this License Agreement will not be applied retroactively. Such changes will be effective with or without prior notice to you. You can review the most current version of this License Agreement under the WinDriver download form page.

 

  1. You may not incorporate or link any open source software with any open source software part of the Software, or otherwise take any action which may cause the Software or any portion thereof to be subjected to the terms of the Free Software Foundation’s General Public License (GPL) or Lesser General Public License (LGPL), or of any other open source code license.

 

  1. DISCLAIMER OF WARRANTY. THIS SOFTWARE AND ITS ACCOMPANYING WRITTEN MATERIALS ARE PROVIDED BY JUNGO “AS IS” WITHOUT ANY WARRANTY. ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT, ARE HEREBY DISCLAIMED TO THE FULLEST EXTENT PERMITTED UNDER APPLICABLE LAW.

 

  1. NO LIABILITY. TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL JUNGO OR ITS LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, SAVINGS, IP INFRINGEMENT OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

 

  1. Governing Law. This Agreement and use of the Software are governed by the laws of the State of Israel, regardless of its conflict of laws rules, and the competent courts of the State of Israel shall have sole and exclusive jurisdiction over any dispute under this Agreement or otherwise related to the Software.

 

  1. Confidentiality. The Software, including any additional information related thereto, contains confidential and proprietary information of Jungo.  Accordingly, you agree that you will not, nor allow any third party to, disseminate, transfer, grant access to, or otherwise disclose to any third party the Software or any part thereof or any other confidential or proprietary information of Jungo provided in connection therewith. You will maintain all copies of the Software and all related documentation in confidence.

 

  1. Termination and Effects of Termination. Jungo may terminate this Agreement and the licenses granted to you hereunder at any time if you breach any of your obligations hereunder, by issuance of written notice to such effect, addressed to you at the address you provided in your registration form. Upon expiration or other termination of this Agreement, the Licenses granted to you hereunder shall immediately and automatically be canceled, and you will immediately remove all copies of the Software from your computer(s) and cease any use thereof.

 

  1. Contact Details. If you have any questions concerning this Agreement or wish to contact Jungo for any reason —

 

          Web site: https://www.jungo.com

          Email:    [email protected]

 

  1. US GOVERNMENT RESTRICTED RIGHTS. The Software and documentation are provided with RESTRICTED RIGHTS.

  Use, duplication, or disclosure by the Government is subject to restrictions set forth in subparagraph (c)(1) of The Rights in Technical Data and Computer Software clause at DFARS 252.227-7013 or subparagraphs (c)(1)(ii) and (2) of Commercial Computer Software – Restricted Rights at 48 CFR 52.227-19, as applicable.

 

  1. Automatic Renewal. The subscription shall be automatically renewed, unless Licensee notifies Licensor 30 days or more prior to the expiration date of the subscription, of its intent not to renew the subscription.

Accessibility Toolbar