|
FpgaManager
Software API Documentation
|
| Version | Date | Comments |
|---|---|---|
| 1.00 | 18.10.2013 | First Release |
| 1.01 | 23.10.2013 | Fixed USB 2.0 implementation Set don't fragment flag for UDP implementation to prevent fragmented packet from arriving at the FPGA. |
| 1.10 | 16.12.2013 | Added USB 3.0 FX3 implementation (16-bit only, 32-bit mode not yet implemented) |
| 1.11 | 07.01.2014 | Fixed multi-trheading related bugs for Memory Mapped Access |
| 1.12 | 10.01.2014 | Added property to set the number of open Memory Mapped Transfers |
| 1.13 | 13.02.2014 | Fixed semaphore bug occuring after some billions of transfers |
| 1.14 | 10.03.2014 | Fixed FX3 bug caused by FX3 auto firmware download |
| 1.15 | 18.03.2014 | Added packet loss detection for memory mapped access |
| 1.16 | 12.05.2014 | Implemented synchronous mode for streams and use it for MmAccess Property for Upstream PacketRate |
| 1.17 | 17.05.2014 | Bugfix for UpPktRate values > 255 us Implemented Keep-Alive packets MmAccesses are now always aligned to DWORD boundaries Fixed dead-lock for MmAccess Solved MmAccess performance bottleneck Fixed wrong error message "Data Inconsistence" |
| 1.18 | 29.07.2014 | Bugfix for C# interface issue with GetFrameNumber() Added PCIe implementation |
| 1.19 | 03.11.2014 | New C# reference application with measurement capabilities Improved UDP downstream performance for Windows implementation Bugfix for Memory-Mapped operations to non DWORD-aligned addresses Bugfix for missing callbacks when executing many send operations for small transfers very fast |
| 1.20 | 03.02.2015 | Exceptions in user callbacks are now catched and reported Reference application reads IP-Core version numbers Improved USB 2.0 FTDI performance for small transfers Reference application now also supports PCIe Bugfix for FX3 blocking events |
| 1.21 | 30.03.2015 | Added Long-Term Tests to C# Reference Design Fixed PCIe closing behavior (note that Driver version 1.01 is required) Changed default value for open FX3 transfers to 2 (was 128 before) Fixed some error messages which were misleading |
| 1.22 | 11.04.2015 | Added status readout and status callbacks in C# Implemented software slave functionality |
| 1.23 | 21.07.2015 | Added Properties vor UniSCP Vendor and Product ID Reference Application log can now be stored to a file Bugfix for PCIe memory leak Fatal errors of internal threads are now also written to the trace Fixed memory leak for C# API |
| 1.24 | 23.09.2015 | The updated Cypress FX3 driver is now supported Bugfix for wrongly reported exception in user callback |
| 1.25 | 14.01.2016 | Cypress FX3 firmware updated to support Enclustra MCT Changed VID and PID input in FX3 device URL from decimal format to hex |
| 1.26 | 29.03.2016 | Bugfix for access violation that happened on multiple consecutive open/close calls Bugfix for Segfault on Device Creation on Linux |
| 1.27 | 26.05.2016 | Bugfix for memory leak on repeated open/close for streams on Linux Bugfix for handle leak on repeated open/close for streams on Windows Removed dependencies between send and receive (the can now be called at the same time in parallel) |
| 1.28 | 12.01.2017 | Implemented PCIe Linux Support Added possibility to interpret error codes in C# Stability Improvement for UDP on Windows Fixed PCIe bug: System blocked on fast consecutive open()/close() calls |
| 1.29 | 10.08.2017 | Fixed bug in error trace generation Changed PCIe Driver Interface (PCIe Driver > 2.0 required) |
| 1.30 | 05.12.2017 | Reduced resource usage Bugfixes in FX3 implementation |
| 1.31 | 20.08.2018 | .NET Core / Standard 2.0 API for Windows and Linux -> replaces previous C# interface and wrappers Visual Studio 2017 support Visual Studio 2010 no longer supported NuGet packages for easy integration FTDI DLL no longer required MM continuous data transfer stall fixed Shiny new Demonstrator and demo code UniSCP Keep-Alive currently disabled, this feature is very unstable and needs to be fixed. |
| 1.32 | 22.02.2019 | NuGet VS2015 compatibility Demonstrator uses WiX based installer Demonstrator re-styled FX3 FIFO Width programmability FX3 quicker device close and resource leak fixed PCIe open/close resource leak fixed. FTDI device open memory leak fixed. Digital Signature for .NET API IntPtr interface for IStream in .NET API Fix for spurious API timeouts on Linux |
| 1.33 | 02.05.2019 | Visual Studio 2019 support FX3 Device Path. |
| 1.34 | 03.05.2019 | Timer handling in Windows API fixed. |
| 1.35 | 24.06.2019 | FX3 enumeration/indexing and handle creation refactored MM access refactored Demonstrator improved error handling |
| 1.36 | 11.11.2019 | .NET Standard 2.1 Span<T> and Memory<T> support .NET MmAccess async register read/write C++ API device api properties settable C++ API deadlock free callback handling (it is now safe to call into FPGA Manager from a completion callback) Interface to FPGA Manager API classes (easy mockability) UDP buffering and performance improvements FX3 bitstream programming/n NuGet VS2015 compatibility improved |
| 1.37 | 04.06.2020 | .NET async register read/write fixed. FX3 driver uuid configurable. FX3 bitstream programming ensures 16bit mode. C++ & .NET I2C driver. .NET no longer tracks in-flight ApiTransfers, with smarter delegates. .NET register bank forwarding offset fixed. .NET Fast Flash Programmer async interface. |
To run FPGA Manager you have to perform the follwing installation steps.
Supported Windows Versions:
Installation procedure:
Supported Linux Distributions:
Installation procedure on 18.04 LTE:
Installation procedure on 16.04 LTE:
The FPGA manager allows communication with an FPGA over different interfaces including Ethernet, USB and others. The idea of this product is to supply all the functionality for data transfers between a host PC and an FPGA to be used in different applications.
Basically FPGA manager supports memory mapped accesses and streaming transfers. Transfer options include bursting/non-bursing access, access to continuous addresses or accessing the same DWORD address multiple times for memory mapped accesses. Both, streaming transfers and memory mapped accesses, can be exuted blocking or non-blocking. For the latter case a transfer object can be used to observe the progress of the transfer and call callback functions on completion.
| Term | Description |
|---|---|
| Device | An FPGA connected to the host PC via a link. |
| Link | Connectivity between FPGA and host PC (e.g. USB, Ethernet). |
| Slave | The target endpoint of the FPGA Manager, usually the FPGA. |
| Stream | FPGA Manager supports up to 16 independent streams between host PC and FPGA. Each stream can be uni- or bi-directional. |
| Master | The controlling endpoint of the FPGA Manager, this is the FPGA Manager Software Library running on the host PC. |
| Memory Mapped Access | Memory mapped access is realized via a special protocol sent over a normal stream. |
The API concept is the same for .NET and C++, there is a main API object that is instantiated for each link that the application wants to communicate with. The main API then can be used to create the required streams and memory mapping. With single Open() call the connection to all those streams is established. Connection is closed and resources free'd when the main API object is disposed / destructed.
The FpgaManager.dll is required for all application types and contains the base API. This DLL is processor architecture dependent and is available for x86 and x64. The FpgaManagerDotNet.dll is a .NET standard assembly that provides an easy to use interface for .NET projects similar to the C++ abstraction. This assembly runs on Windows and Linux.
| Windows | ANSI-C | C++ | .NET |
|---|---|---|---|
| FpgaManager.dll | Yes | Yes | Yes |
| FpgaManagerDotNet.dll | No | No | Yes |
| Linux | ANSI-C Static | ANSI-C shared | C++ | .NET |
|---|---|---|---|---|
| FpgaManager.so | No | Yes | Yes | Yes |
| FpgaManagerDotNet.dll | No | No | No | Yes |
| FpgaManagerCppApi.so | No | No | Yes | No |