wiki:HardwareUsersGuides/WARPv3/Porting_to_v3

WARP v3 User Guide: Notes for WARP v1/v2 Users

This page will be something of a "core dump" for a while, as we post observations, tricks and recommendations for users of WARP v1/v2 hardware looking to adopt WARP v3.

If you have any related questions or recommendations, please let us know (preferably via the forums).

Notes:

  • The V6 doesn't have an embedded processor, so processor-based designs need to port to MicroBlaze. We're working on the OFDM and WARPLab reference designs and are (so far) impressed by how seamless the PPC->MB transition was. All of the Xilinx-supplied pcores/drivers are agnostic to the underlying processor. The only code changes we made were to accomodate driver changes from XPS 10.1 to 13.4.
  • The MicroBlaze processor doesn't allow unaligned memory access by default. For example:
    u32* ptr_int = 0x80000002;
    *ptr_int = 0x01234567;
    xil_printf("The int value is %d\n", *ptr_int);
    

will have unpredictable results. The compiler won't complain, but in hardware the processor seems to ignore the LSB of the address and treat the resulting (wrong) address as the specified data type. But the MB core can be configured to handle unaligned accesses by adding a parameter PARAMETER C_UNALIGNED_EXCEPTIONS = 1 to the MB instance in the MHS file. With this enabled we've observed the MB core successfully read/write 2 and 4-byte values at unaligned addresses. We enable this parameter by default in our reference and template projects, to avoid really-hard-to-debug behavior in user code.

  • The release of new hardware seemed like a good time to redesign some of the WARP-specific pcores/drivers that we'd developed over the years. The radio controller driver, for example, was in desperate need of re-design. The old driver worked, but had a very inconsistent API (the natural result of having been written by multiple people over over the course of many years, as the WARP reference designs became more advanced). The new radio controller and driver provide the same functionality but with a much more compact and consistent API. Same goes for the user IO and EEPROM pcores/drivers.
  • more to come..
Last modified 6 years ago Last modified on Aug 26, 2012, 9:00:02 PM