-
Notifications
You must be signed in to change notification settings - Fork 126
Register System
This page describes the register system that is introduced with the NetFPGA-10G 4.5.0 release.
The register system collates and generates addresses for all the registers and memories in an NF10 project. The system (as may perceived from its name) is not limited to generating base address information only but can be used to provide logic (core) specific software api's and libraries. The system utilises Xilinx EDK suite - library generation utility [1][2] to collect and create software level api's and register information for a project.
Each project in NetFPGA-10G is composed of multiple peripheral cores (pcores) connected together using interfaces based on AXI4, AXI-LITE (for memory mapped IO) or AXIS (for data streaming) protocols. For the register system, we are only concern with the memory mapped IOs over AXI4 and AXI-LITE interfaces. For more information on project organisation and directory structure visit here.
A project built in EDK is provided with a contiguous map of memory, normally 4GB in range, with all instantiated cores mapped to a unique range inside this map. Individual registers and memories, inside the core, are allocated offsets from within this range.
In order to access a register/memory from host, two sets of information are required:
-
Base address of the range assigned to a core (BA)
These values are assigned at time of instantiating a core and are local to the project. The Xilinx EDK suite will automatically assign a unique address value for the core, if not already assigned by the user.
-
Offset of the register inside the core (RO)
These values are assigned and hard coded within the verilog/vhdl code by the developer of a core. The offset values for registers and memories inside a core always remain the same for all the projects but base address of the core itself may vary from project to project, as mentioned earlier. (Note: It's the responsibility of the developer to provide this information in the form of driver/library for the given core - see section on Building driver/library for a Peripheral Core below.)
The register address is calculated as: Register address (RA) = BA + RO
So, the purpose of the register system is to collect this base address and register offset information and provide them as software accessible C/C++ code files. The next section provides instructions for users and developers on using the register system and providing relevant register (offset) information in the form of a driver/library respectively.
For Users': Using the Register System
For Developers': Building driver/library for a Peripheral Core
-
Embedded System Tools Reference Manual: http://www.xilinx.com/support/documentation/sw_manuals/xilinx14_1/est_rm.pdf
-
Platform Specification Format Reference Manual: http://www.xilinx.com/support/documentation/sw_manuals/xilinx14_1/psf_rm.pdf