| .. _zybo: |
| |
| Digilent Zybo |
| ############# |
| |
| Overview |
| ******** |
| |
| The `Digilent Zybo`_ (ZYnq BOard) is a feature-rich, ready-to-use embedded software and digital |
| circuit development board. It is built around the Xilinx Zynq-7000 family, which is based on the |
| Xilinx All Programmable System-on-Chip (AP SoC) architecture. This architecture tightly integrates a |
| dual-core ARM Cortex-A9 processor with Xilinx 7-series Field Programmable Gate Array (FPGA) logic. |
| |
| .. figure:: zybo-0.jpg |
| :align: center |
| :alt: Digilent Zybo |
| |
| Digilent (Credit: Digilent) |
| |
| Hardware |
| ******** |
| |
| Supported Features |
| ================== |
| |
| The zybo board configuration supports the following hardware features: |
| |
| +------------+------------+-------------------------------------+ |
| | Interface | Controller | Driver/Component | |
| +============+============+=====================================+ |
| | GICv1 | on-chip | ARM generic interrupt controller v1 | |
| +------------+------------+-------------------------------------+ |
| | ARCH TIMER | on-chip | ARM architected timer | |
| +------------+------------+-------------------------------------+ |
| | PINCTRL | on-chip | pinctrl | |
| +------------+------------+-------------------------------------+ |
| | GPIO | on-chip | gpio | |
| +------------+------------+-------------------------------------+ |
| | UART | on-chip | serial port-polling; | |
| | | | serial port-interrupt | |
| +------------+------------+-------------------------------------+ |
| |
| The default configuration can be found in the defconfig file: |
| ``boards/arm/zybo/zybo_defconfig``. |
| |
| Other hardware features are not currently supported by the port. |
| |
| Programming and Debugging |
| ************************* |
| |
| The Zynq-7000 series SoC needs to be initialized prior to running a Zephyr application. This can be |
| achieved in a number of ways (e.g. using the Xilinx First Stage Boot Loader (FSBL), the Xilinx |
| Vivado generated ``ps_init.tcl`` JTAG script, Das U-Boot Secondary Program Loader (SPL), ...). |
| |
| The instructions here use the U-Boot SPL. For further details and instructions for using Das U-Boot |
| with Xilinx Zynq-7000 series SoCs, see the following documentation: |
| |
| - `Das U-Boot Website`_ |
| - `Using Distro Boot With Xilinx U-Boot`_ |
| |
| Building Das U-Boot |
| =================== |
| |
| Clone and build Das U-Boot for the Digilent Zybo: |
| |
| .. code-block:: console |
| |
| git clone -b v2022.04 https://source.denx.de/u-boot/u-boot.git |
| cd u-boot |
| make distclean |
| make xilinx_zynq_virt_defconfig |
| export PATH=/path/to/zephyr-sdk/arm-zephyr-eabi/bin/:$PATH |
| export CROSS_COMPILE=arm-zephyr-eabi- |
| export DEVICE_TREE="zynq-zybo" |
| make |
| |
| Flashing |
| ======== |
| |
| Here is an example for running the :ref:`hello_world` application via JTAG. |
| |
| Ensure the board is configured for JTAG boot, open a serial terminal, turn on/reset the board (press |
| the ``PS-SRST`` button), and initialize the Zynq-7000 series SoC by uploading and running the U-Boot |
| SPL via JTAG. |
| |
| Next, upload and run the Zephyr application: |
| |
| .. zephyr-app-commands:: |
| :zephyr-app: samples/hello_world |
| :board: zybo |
| :goals: flash |
| |
| You should see the following message in the terminal: |
| |
| .. code-block:: console |
| |
| *** Booting Zephyr OS vx.xx.x-xxx-gxxxxxxxxxxxx *** |
| Hello World! zybo |
| |
| Another option is to load and run the :ref:`hello_world` application via U-Boot. Copy |
| ``u-boot/spl/boot.bin``, ``u-boot/u-boot.img``, and ``zephyr/zephyr.bin`` to a FAT32 formatted |
| microSD card, insert the card in the ``SD MICRO`` slot on the Zybo board, ensure the board is |
| configured for ``SD`` boot, and turn on the board. |
| |
| Once U-boot is done initializing, load an run the Zephyr application: |
| |
| .. code-block:: console |
| |
| Zynq> fatload mmc 0 0x0 zephyr.bin |
| 817120 bytes read in 56 ms (13.9 MiB/s) |
| Zynq> go 0x0 |
| ## Starting application at 0x00000000 ... |
| *** Booting Zephyr OS vx.xx.x-xxx-gxxxxxxxxxxxx *** |
| Hello World! zybo |
| |
| Debugging |
| ========= |
| |
| Here is an example for the :ref:`hello_world` application. |
| |
| Ensure the board is configured for JTAG boot, open a serial terminal, turn on/reset the board (press |
| the ``PS-SRST`` button), and initialize the Zynq-7000 series SoC by uploading and running the U-Boot |
| SPL via JTAG. |
| |
| Next, upload and debug the Zephyr application: |
| |
| .. zephyr-app-commands:: |
| :zephyr-app: samples/hello_world |
| :board: zybo |
| :goals: debug |
| |
| Step through the application in your debugger, and you should see the following message in the |
| terminal: |
| |
| .. code-block:: console |
| |
| *** Booting Zephyr OS vx.x.x-xxx-gxxxxxxxxxxxx *** |
| Hello World! zybo |
| |
| .. _Digilent Zybo: |
| https://digilent.com/reference/programmable-logic/zybo/start |
| |
| .. _Das U-Boot Website: |
| https://www.denx.de/wiki/U-Boot |
| |
| .. _Using Distro Boot With Xilinx U-Boot: |
| https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/749142017/Using+Distro+Boot+With+Xilinx+U-Boot |