wiki:Tools/Xilinx_SDK

Version 3 (modified by murphpo, 12 years ago) (diff)

--

Work in progress

Some scattered notes on using the Xilinx SDK.

SDK Bugs

Some bugs and workarounds we've figured out for Xilinx SDK 13.4 on the WARP FPGA Board v2.2 (Virex-4 FX100 FPGA).


XMD: Unable to decode ELF start address

When using the SDK "Run" launch process targeting a PPC design on the Virtex-4, we get an XMD error "Unable to decode ELF start address (), assuming 0x0."

Other users have reported the same issue (see Xilinx forums), and Xilinx's own documentation references the problem (ug757.pdf pg. 7). It seems Xilinx isn't planning a fix (see post 5 in the forums link).

The consequence of this error is that XMD will always begin executing code from address 0x0 and not he usual PPC boot address of 0xFFFFFFC. If the linker script places .text at some other address, the application won't boot and the XMD .elf download will appear to fail. You can see this behavior in the XMD log. Enable XMD verbose mode (type verbose at the XMD prompt), then watch the output during a "Run" launch. The final command xcontinue 34 0x0 -status_on_stop indicates XMD is attempting to boot from address 0x0, no matter what the linker script says.

The workarounds we've found:

  • Use the "Run" launch process, then press the FPGA Board PPC reset button (typically mapped to the down push button, near the power jack). This will force the PPC to start executing code from the PPC reset vector (0xFFFFFFFC), which, if the .elf is valid, will boot the PPC then jump to the address for .text specified in your linker script. We've seen this work, but are not entirely convinced it's robust.
  • Update the address map in XPS to place the memory you want to boot from at 0x0. For example we put the IOCM at 0x0 in the OFDM ref design. Then in your linker script assign .text to that memory. This will allow the "Run" launch process to succeed.
  • Use the "Debug" launch process. This processes uses GDB to read the start address, which succeeds where XMD fails.
  • If you can't update your address map (likely if you're using the 2GB DRAM, which should be at 0x0), you can still use the "Run" launch process. Let it execute normally. Then, when it fails to boot, at the XMD prompt run stop then con 34 0xFFFFFFFC. This will force the PPC to start executing code from the PPC reset vector (0xFFFFFFFC), which (if the .elf is valid) will boot the PPC, then jump to the address for .text specified in your linker script.

ISOCM access via XMD