229 lines
8.0 KiB
ReStructuredText
229 lines
8.0 KiB
ReStructuredText
.. _arty:
|
|
|
|
Digilent Arty
|
|
#############
|
|
|
|
Overview
|
|
********
|
|
|
|
The `Digilent Arty`_ is a line of FPGA-based development boards aimed for makers
|
|
and hobbyists. The Arty is available in several configurations, each with a
|
|
different Xilinx FPGA (Spartan-7, Artix-7, or Zynq-7000 series).
|
|
|
|
Each board is equipped with on-board JTAG for FPGA programming and debugging,
|
|
LEDs, switches, buttons, DDR3 RAM, and QSPI flash for storing the FPGA
|
|
bitstream.
|
|
|
|
.. figure:: arty_a7-35.jpg
|
|
:align: center
|
|
:alt: Digilent Arty A7-35
|
|
|
|
Digilent Arty A7-35 (Credit: Digilent Inc)
|
|
|
|
The Spartan-7 and Artix-7 based Arty board do not contain a CPU, but require a
|
|
so-called soft processor to be instantiated within the FPGA in order to run
|
|
Zephyr. The Zynq-7000 based Arty boards are not yet supported by Zephyr.
|
|
|
|
ARM Cortex-M1/M3 DesignStart FPGA
|
|
*********************************
|
|
|
|
One way of instantiating soft processors on the Arty is using the `ARM
|
|
DesignStart FPGA`_ Xilinx edition reference designs from ARM. Zephyr supports
|
|
both the Cortex-M1 and the Cortex-M3 reference designs. The Cortex-M1 design
|
|
targets either the Spartan-7 or Artix-7 based Arty boards, whereas the Cortex-M3
|
|
design only targets the Artix-7 based boards. Zephyr only supports the Artix-7
|
|
targeted designs for now.
|
|
|
|
For more information about the ARM Cortex-M1/M3 DesignStart FPGA, see the
|
|
following websites:
|
|
|
|
- `Technical Resources for DesignStart FPGA`_
|
|
- `Technical Resources for DesignStart FPGA on Xilinx`_
|
|
- `ARM DesignStart FPGA Xilinx FAQs`_
|
|
|
|
Supported Features
|
|
==================
|
|
|
|
The ``arty_a7/designstart_fpga_cortex_m1`` board configuration supports the following
|
|
hardware features of the Cortex-M1 reference design:
|
|
|
|
+-----------+------------+-------------------------------------+
|
|
| Interface | Controller | Driver/Component |
|
|
+===========+============+=====================================+
|
|
| NVIC | on-chip | nested vector interrupt controller |
|
|
+-----------+------------+-------------------------------------+
|
|
| SYSTICK | on-chip | systick |
|
|
+-----------+------------+-------------------------------------+
|
|
| GPIO | on-chip | gpio, non-interrupt |
|
|
+-----------+------------+-------------------------------------+
|
|
| UART | on-chip | serial port-polling; |
|
|
| | | serial port-interrupt |
|
|
+-----------+------------+-------------------------------------+
|
|
| QSPI | on-chip | QSPI flash |
|
|
+-----------+------------+-------------------------------------+
|
|
|
|
The default configuration for the Cortex-M1 can be found in the defconfig file:
|
|
:file:`boards/digilent/arty_a7/arty_a7_designstart_fpga_cortex_m1_defconfig`.
|
|
|
|
In addition to the above, the ``arty_a7/designstart_fpga_cortex_m3`` board configuration
|
|
supports the following hardware features of the Cortex-M3 reference design:
|
|
|
|
+-----------+------------+-------------------------------------+
|
|
| Interface | Controller | Driver/Component |
|
|
+===========+============+=====================================+
|
|
| MPU | on-chip | Memory Protection Unit |
|
|
+-----------+------------+-------------------------------------+
|
|
|
|
The default configuration for the Cortex-M3 can be found in the defconfig file:
|
|
:file:`boards/digilent/arty_a7/arty_a7_designstart_fpga_cortex_m3_defconfig`.
|
|
|
|
Other hardware features are not currently supported by the port.
|
|
|
|
System Clock
|
|
============
|
|
|
|
The Cortex-M1 reference design is configured to use the 100 MHz external
|
|
oscillator on the board as CPU system clock whereas the Cortex-M3 reference
|
|
design is configured for 50MHz CPU system clock.
|
|
|
|
Serial Port
|
|
===========
|
|
|
|
The reference design contains one Xilinx UART Lite. This UART is configured as
|
|
console and is accessible through the on-board JTAG adapter via USB connector
|
|
``J10``.
|
|
|
|
Connecting the Debug Probes
|
|
===========================
|
|
|
|
Two different debug probes are needed in order to program the board; the
|
|
on-board Digilent JTAG connected to the FPGA, and an external Serial Wire Debug
|
|
(SWD) capable debug probe connected to the ARM Cortex-M1 CPU.
|
|
|
|
The on-board JTAG is used for configuring and debugging the Xilinx FPGA
|
|
itself. It is available on USB connector ``J10``.
|
|
|
|
The external SWD debug probe can be connected to connector ``J4`` (``nSRST`` on
|
|
``IO39``, ``SWDIO`` on ``IO40``, and ``SWCLK`` on ``IO41``). Another option is
|
|
to use the dedicated :ref:`v2c_daplink_shield`.
|
|
|
|
Programming and Debugging
|
|
*************************
|
|
|
|
First, configure the FPGA with the selected reference design FPGA bitstream
|
|
using Xilinx Vivado as described in the ARM Cortex-M1/Cortex-M3 DesignStart FPGA
|
|
Xilinx edition user guide (available as part of the reference design download
|
|
from `Technical Resources for DesignStart FPGA on Xilinx`_).
|
|
|
|
Another option for configuring the FPGA with the reference design bitstream is
|
|
to use the :ref:`openocd-debug-host-tools`:
|
|
|
|
.. code-block:: console
|
|
|
|
openocd -f board/arty_s7.cfg -c "init;\
|
|
pld load 0 m1_for_arty_a7_reference.bit;\
|
|
shutdown"
|
|
|
|
or:
|
|
|
|
.. code-block:: console
|
|
|
|
openocd -f board/arty_s7.cfg -c "init;\
|
|
pld load 0 m3_for_arty_a7_reference.bit;\
|
|
shutdown"
|
|
|
|
.. note::
|
|
|
|
The pre-built FPGA bitstream only works for Arty boards equipped with an
|
|
Artix-35T FPGA. For other Arty variants (e.g. the Arty A7-100) the bitstream
|
|
must be rebuilt.
|
|
|
|
Next, build and flash applications as usual (see :ref:`build_an_application` and
|
|
:ref:`application_run` for more details).
|
|
|
|
Configuring a Console
|
|
=====================
|
|
|
|
The UART console is available via the on-board JTAG on USB connector
|
|
``J10``. The on-board JTAG will enumerate as two USB serial ports. The UART is
|
|
typically available on the second serial port.
|
|
|
|
Use the following settings with your serial terminal of choice (minicom, putty,
|
|
etc.):
|
|
|
|
- Speed: 115200
|
|
- Data: 8 bits
|
|
- Parity: None
|
|
- Stop bits: 1
|
|
|
|
Flashing
|
|
========
|
|
|
|
Here is an example for building and flashing the :zephyr:code-sample:`hello_world` application
|
|
for the Cortex-M1 reference design:
|
|
|
|
.. zephyr-app-commands::
|
|
:zephyr-app: samples/hello_world
|
|
:board: arty_a7/designstart_fpga_cortex_m1
|
|
:goals: flash
|
|
|
|
After flashing, you should see message similar to the following in the terminal:
|
|
|
|
.. code-block:: console
|
|
|
|
*** Booting Zephyr OS build zephyr-v2.3.99 ***
|
|
Hello World! arty_a7
|
|
|
|
The same procedure can be used for the Cortex-M3 reference design.
|
|
|
|
Note, however, that the application was not persisted in flash memory by the
|
|
above steps. It was merely written to internal block RAM in the FPGA. It will
|
|
revert to the application stored in the block RAM within the FPGA bitstream
|
|
the next time the FPGA is configured.
|
|
|
|
The steps to persist the application within the FPGA bitstream are covered by
|
|
the ARM Cortex-M1/M3 DesignStart FPGA Xilinx edition user guide. If the
|
|
:kconfig:option:`CONFIG_BUILD_OUTPUT_BIN` is enabled and the `SiFive elf2hex`_ package
|
|
is available, the build system will automatically generate a Verilog memory hex
|
|
dump :file:`zephyr.mem` file suitable for initialising the block RAM using
|
|
`Xilinx Vivado`_.
|
|
|
|
Debugging
|
|
=========
|
|
|
|
Here is an example for the :zephyr:code-sample:`hello_world` application.
|
|
|
|
.. zephyr-app-commands::
|
|
:zephyr-app: samples/hello_world
|
|
:board: arty_a7/designstart_fpga_cortex_m1
|
|
:goals: debug
|
|
|
|
Step through the application in your debugger, and you should see a message
|
|
similar to the following in the terminal:
|
|
|
|
.. code-block:: console
|
|
|
|
*** Booting Zephyr OS build zephyr-v2.3.99 ***
|
|
Hello World! arty_a7
|
|
|
|
.. _Digilent Arty:
|
|
https://store.digilentinc.com/arty
|
|
|
|
.. _ARM DesignStart FPGA:
|
|
https://www.arm.com/resources/designstart/designstart-fpga
|
|
|
|
.. _Technical Resources for DesignStart FPGA:
|
|
https://developer.arm.com/ip-products/designstart/fpga
|
|
|
|
.. _Technical Resources for DesignStart FPGA on Xilinx:
|
|
https://developer.arm.com/ip-products/designstart/fpga/fpga-xilinx
|
|
|
|
.. _ARM DesignStart FPGA Xilinx FAQs:
|
|
https://developer.arm.com/ip-products/designstart/fpga/fpga-xilinx-faqs
|
|
|
|
.. _SiFive elf2hex:
|
|
https://github.com/sifive/elf2hex
|
|
|
|
.. _Xilinx Vivado:
|
|
https://www.xilinx.com/products/design-tools/vivado.html
|