Cómo correr Zephyr en un SoC LiteX en la Tang Nano 20K

En este post te mostraré cómo ejecutar el sistema operativo Zephyr en un SoC generado con LiteX sobre la FPGA Tang Nano 20K. Este proceso te permitirá experimentar con sistemas embebidos avanzados y aprovechar las capacidades de hardware abierto.

Requisitos

  • Tang Nano 20K
  • Entorno de desarrollo LiteX (Python, dependencias, toolchains)
  • Zephyr OS y su toolchain (west, cmake, ninja, etc.)
  • Cable USB para programación
  • Conocimientos básicos de FPGA y sistemas embebidos

Pasos

1. Preparar Zephyr

Instala Zephyr y su toolchain siguiendo la documentación oficial. Clona el repositorio y configura el entorno:

python3 -m venv ~/zephyrproject/.venv
source ~/zephyrproject/.venv/bin/activate
pip install west
west init ~/zephyrproject
cd ~/zephyrproject
west update
west zephyr-export
west packages pip --install
cd ~/zephyrproject/zephyr
west sdk install

2. Copiar la repo de soporte para VexRiscv

Clona el repositorio con el soporte para VexRiscv y LiteX:

git clone https://github.com/DitsoLabs/zephyr-vexriscv.git

3. Instalar la board en Zephyr Project

Dentro de la carpeta clonada, ejecuta el script para instalar la board en tu proyecto Zephyr:

python3 install_board.py -z /ruta/a/tu/zephyrproject

Nota: si seguiste la documentacion de instalacion esta ruta deberia ser ~/zephyrproject

Esto agregará el soporte necesario para la Tang Nano 20K y VexRiscv en Zephyr.

4. Generar el SoC usando bitstream_generator.py

Para generar el SoC y el bitstream para la Tang Nano 20K, utiliza el script proporcionado en la repo:

python3 bitstream_generator.py --build --load

Esto compilará y cargará el diseño en la FPGA automáticamente.

3. Compilar una aplicación Zephyr

Elige una aplicación de ejemplo, por ejemplo, hello_world:

cd ~/zephyrproject/zephyr
west build -p always -b tang_nano_20k samples/hello_world/

Asegúrate de que el soporte para LiteX y VexRiscv esté habilitado en Zephyr.

4. Cargar el firmware en el SoC

Una vez compilado, obtendrás un archivo .bin o .elf que puedes cargar en la memoria del SoC usando LiteX o herramientas como litex_term:

litex_term /dev/ttyUSB0 --kernel build/zephyr/zephyr.bin

Nota: /dev/ttyUSB0 no necesariamente corresponde a tu sistema operativo o PC.

5. Verificar la ejecución

En la Bios de litex deberias ejecutar el comando serialboot para que se cargue el firmware de zephyr y si se ejecuta correctamente deberias ver algo como lo siguiente: