Overview #
Xilinx’s Application Note XAPP947 provides a comprehensive walkthrough for running Wind River VxWorks 6.x on the ML403 Embedded Development Platform. This blog summarizes the key steps in setting up the VxWorks environment, configuring a board support package (BSP), building a kernel image, and programming a bootloader into flash memory. While based on VxWorks 6.x and Xilinx’s legacy tools, the insights remain useful for modern BSP developers working with PowerPC targets and FPGA-based systems.
Hardware and Software Requirements #
To follow the original setup, the following tools and components are used:
- Xilinx ML403 Evaluation Board (Virtex-4 FX with PPC405)
- Xilinx Platform Studio (XPS) 10.1i and ISE 10.1i
- Wind River Workbench 2.5
- Wind River ICE/Probe (with JTAG adapter)
- RS232 cable, Ethernet cable, and terminal software (e.g., HyperTerminal)
- Flash memory programming utilities
- A license for Wind River multi-core debugging
Step 1: Build the Base System in XPS #
The ML403 system is built using Xilinx’s Base System Builder. Key peripherals included:
- PowerPC 405 processor
- DDR SDRAM (via MPMC)
- GPIO (LEDs, push buttons)
- UART 16550
- TriMode Ethernet MAC (TEMAC)
- Flash interface (XPS MCH EMC)
- On-chip BRAM for boot
An address map is defined for all peripherals, and the bitstream is generated using XPS.
Step 2: Create and Modify the VxWorks BSP #
Using XPS:
-
Set OS to
vxworks6_3
in the Software Platform Settings. -
Configure STDIN/STDOUT to use RS232 UART.
-
Include UART and Ethernet MAC in the “connected peripherals” list.
-
Generate the BSP and copy it to a new directory (
modified_vxworks_bsp
). -
Edit
config.h
andMakefile
to match the platform’s memory map:ROM_BASE_ADRS = 0xFF000000
ROM_TEXT_ADRS = ROM_BASE_ADRS + 0x100
RAM_LOW_ADRS = 0x00010000
RAM_HIGH_ADRS = 0x00C00000
-
Update the MAC address in
sysNet.c
and optionally customize the model string insysLib.c
.
Step 3: Build the VxWorks Kernel Image #
In Wind River Workbench:
- Create a new “VxWorks Image Project” using the modified BSP.
- Set toolchain to
sfgnu
orsfdiab
. - Configure kernel components (e.g., WDB agent, kernel shell).
- Build the project to produce the
vxWorks
kernel image. - Download the bitstream to the ML403 using XPS.
- Use the Wind River Probe to connect via JTAG and download the image.
Step 4: Create and Program the Bootloader #
- In Workbench, create a new “VxWorks Boot Loader Project” using the same BSP.
- Use uncompressed image format and output as BIN file.
- Build the bootloader (
bootrom_uncmp.bin
). - Use the On-Chip Debug (OCD) Flash Programmer in Workbench:
- Flash base address:
0xFF000000
- File address offset:
0xFF000100
- Flash device: Intel 28F320Jx (2 devices)
- Flash base address:
Program the bootloader into flash and verify success.
Step 5: Configure and Test Standalone Boot #
A small application (VxWorks_Start
) runs from BRAM and branches to the bootloader in flash:
- Set the flash address in code to
0xFF000100
. - Update the bitstream to include this BRAM-based application.
- Program the FPGA with this bitstream using iMPACT.
- Switch board to boot from flash.
- Power up and watch for the VxWorks boot prompt.
Step 6: Boot and Load the VxWorks Kernel #
- Set up an FTP server on the host PC (e.g., IP:
192.168.0.1
). - Target board uses IP
192.168.0.2
. - Place the
vxWorks
image in the FTP directory. - From the bootloader prompt:
- Press
p
to print settings. - Press
c
to configure (user/pass:my_ftp_user
/pass
). - Press
@
to boot and load kernel via FTP.
- Press
You can verify kernel status using i
(task list) and version
commands in the shell.
Conclusion #
XAPP947 provides a hands-on foundation for VxWorks developers working on FPGA platforms, particularly those targeting PowerPC processors and flash-bootable systems. While VxWorks 6.x and the ML403 board are dated, the workflow for customizing BSPs, building kernel images, and deploying bootloaders remains highly relevant — especially for developers working with Wind River tools on embedded targets today.