The sample application for Arm® Ethos™-U55 can be deployed on two target platforms:

  • A physical Arm MPS3 FPGA prototyping board

  • An MPS3 FVP

Both implement the Arm® Corstone™-300 design. For further information, please refer to: Arm Corstone-300

Fixed Virtual Platform

The FVP is available publicly from the following page: Arm Ecosystem FVP downloads.

Please ensure that you download the correct archive from the list under Arm Corstone-300. You need the one which:

  • Emulates MPS3 board and not for MPS2 FPGA board,
  • Contains support for Arm® Ethos™-U55.

Setting up the MPS3 Arm Corstone-300 FVP

For the Ethos-U55 sample application, please download the MPS3 version of the Arm® Corstone™-300 model that contains both the Ethos-U55 and Arm® Cortex®-M55. The model is currently only supported on Linux-based machines.

To install the FVP:

  • Unpack the archive.

  • Run the install script in the extracted package:


  • Follow the instructions to install the FVP to your required location.

Deploying on an FVP emulating MPS3

This section assumes that the FVP has been installed (see Setting up the MPS3 Arm Corstone-300 FVP) to the home directory of the user: ~/FVP_Corstone_SSE-300_Ethos-U55.

The installation, typically, has the executable under ~/FVP_Corstone_SSE-300_Ethos-U55/model/<OS>_<compiler-version>/ directory. For the example below, we assume it is: ~/FVP_Corstone_SSE-300_Ethos-U55/models/Linux64_GCC-6.4.

To run a use-case on the FVP, from the Build directory:

~/FVP_Corstone_SSE-300_Ethos-U55/models/Linux64_GCC-6.4/FVP_Corstone_SSE-300_Ethos-U55 -a ./bin/ethos-u-<use_case>.axf
telnetterminal0: Listening for serial connection on port 5000
telnetterminal1: Listening for serial connection on port 5001
telnetterminal2: Listening for serial connection on port 5002
telnetterminal5: Listening for serial connection on port 5003

    Ethos-U rev 0 --- Oct 13 2020 11:27:45
    (C) COPYRIGHT 2019-2020 Arm Limited

This also launches a telnet window with the standard output from the sample application. And also error log entries containing information about the pre-built application version, TensorFlow Lite Micro library version used, and data type. It also includes the input and output tensor sizes of the model that are compiled into the executable binary.

Note: For details on the specific use-case, follow the instructions in the corresponding documentation.

After starting, the application outputs a menu and waits for the user-input from the telnet terminal.

For example, the image classification use-case can be started by using:

~/FVP_Corstone_SSE-300_Ethos-U55/models/Linux64_GCC-6.4/FVP_Corstone_SSE-300_Ethos-U55 -a ./bin/ethos-u-img_class.axf


FVP Terminal

The FVP supports many command-line parameters, such as:

  • Those passed by using -C <param>=<value>. The most important ones are:

    • ethosu.num_macs: Sets the Ethos-U55 configuration for the model. Valid parameters are 32, 64, 256, and the default one 128. The number signifies the 8x8 MACs that are performed per cycle-count and that are available on the hardware.
    • cpu0.CFGITCMSZ: The ITCM size for the Cortex-M CPU. The size of ITCM is pow(2, CFGITCMSZ - 1) KB
    • cpu0.CFGDTCMSZ: The DTCM size for the Cortex-M CPU. The size of DTCM is pow(2, CFGDTCMSZ - 1) KB
    • mps3_board.telnetterminal0.start_telnet: Starts the telnet session if nothing connected.
    • mps3_board.uart0.out_file: Sets the output file to hold the data written by the UART. Use '-' to send all output to stdout and is empty by default).
    • mps3_board.uart0.shutdown_on_eot: Shut down the simulation when an EOT (ASCII 4) char is transmitted.
    • mps3_board.visualisation.disable-visualisation: Enables, or disables, visualization and is disabled by default.

    To start the model in 128 mode for Ethos-U55:

    ~/FVP_Corstone_SSE-300_Ethos-U55/models/Linux64_GCC-6.4/FVP_Corstone_SSE-300_Ethos-U55 -a ./bin/ethos-u-img_class.axf -C ethosu.num_macs=128
  • -l: shows the full list of supported parameters

    ~/FVP_Corstone_SSE-300_Ethos-U55/models/Linux64_GCC-6.4/FVP_Corstone_SSE-300_Ethos-U55 -l
  • --stat: prints some run statistics on simulation exit

    ~/FVP_Corstone_SSE-300_Ethos-U55/models/Linux64_GCC-6.4/FVP_Corstone_SSE-300_Ethos-U55 --stat
  • --timelimit: sets the number of wall clock seconds for the simulator to run, excluding startup and shutdown.

MPS3 board

Note: Before proceeding, make sure that you have the MPS3 board powered on, and a USB A to B cable connected between your machine and the MPS3. The connector on the MPS3 is marked as "Debug USB".


MPS3 board top-view

Once the board has booted, the micro SD card is enumerated as a mass storage device. On most systems, this is automatically mounted. However, manual mounting is sometimes required.

Also, check for four serial-over-USB ports that are available for use through this connection. On Linux-based machines, these would typically be /dev/ttyUSB<n> to /dev/ttyUSB<n+3>.

The default configuration for all of them is 115200, 8/N/1. So, 15200 Baud, 8 bits, no parity, and one stop bit, with no flow control.

Note: For Windows machines, extra FTDI drivers may be required for these serial ports to be available.

For more information on getting started with an MPS3 board, please refer to: MPS3 Getting Started.

Deployment on MPS3 board

Note:: These instructions are valid only if the evaluation is being done using the MPS3 FPGA platform using SSE-300.

To run the application on MPS3 platform, you must first ensure that the platform has been set up using the correct configuration.

For details on platform set-up, please see the relevant documentation. For the Arm Corstone-300, the PDF is available here: Arm Developer.

For the MPS3 board, instead of loading the axf file directly, copy the executable blobs generated under the sectors/<use_case> subdirectory to the micro SD card located on the board. Also, the sectors/images.txt file is used by the MPS3 to understand which memory regions the blobs must be loaded into.

Once the USB A to USB B cable between the MPS3 and the development machine is connected, and the MPS3 board powered on, the board enumerates as a mass storage device over this USB connection.

Depending on the version of the board you are using, there might be two devices listed. The device named V2M-MPS3, or V2MMPS3, which is the SD card.

If the axf or elf file is within the ITCM load size limit, it can be copied into the FPGA memory directly without having to break it down into separate load region-specific blobs. However, if the neural network models exceed this size, you must use the following approach:

  1. For example, the image classification use-case produces:

        └── img_class
            ├── ddr.bin
            └── itcm.bin

    If the micro SD card is mounted at /media/user/V2M-MPS3/, then use:

    cp -av ./bin/sectors/img_class/* /media/user/V2M-MPS3/SOFTWARE/
  2. The ./bin/sectors/images.txt file must be copied over to the MPS3. The exact location for the destination depends on the version of the MPS3 board and the application note for the bit file in use.

    For example, the revision C of the MPS3 board hardware uses an application note directory named ETHOSU, to replace the images.txt file, like so:

    cp ./bin/sectors/images.txt /media/user/V2M-MPS3/MB/HBI0309C/ETHOSU/images.txt
  3. Open the first serial port available from MPS3. For example, /dev/ttyUSB0. This can be typically done using minicom, screen, or Putty application. Make sure the flow control setting is switched off:

    minicom --D /dev/ttyUSB0
    Welcome to minicom 2.7.1
    OPTIONS: I18n
    Compiled on Aug 13 2017, 15:25:34.
    Port /dev/ttyUSB0, 16:05:34
    Press CTRL-A Z for help on special keys
  4. In another terminal, open the second serial port. For example: /dev/ttyUSB1:

    minicom --D /dev/ttyUSB1
  5. On the first serial port, issue a "reboot" command and then press the return key:

    $ Cmd> reboot
    Rebooting...Disabling debug USB..Board rebooting...
    ARM V2M-MPS3 Firmware v1.3.2
    Build Date: Apr 20 2018
    Powering up system...
    Switching on main power...
    Configuring motherboard (rev C, var A)...

    This goes on to reboot the board and prime the application to run by flashing the binaries into their respective FPGA memory locations. For example:

    Reading images file \MB\HBI0309C\ETHOSU\images.txt
    Writing File \SOFTWARE\itcm.bin to Address 0x00000000
    File \SOFTWARE\itcm.bin written to memory address 0x00000000
    Image loaded from \SOFTWARE\itcm.bin
    Writing File \SOFTWARE\ddr.bin to Address 0x08000000
    File \SOFTWARE\ddr.bin written to memory address 0x08000000
    Image loaded from \SOFTWARE\ddr.bin
  6. When the reboot from previous step is completed, issue a reset command on the command prompt:

    $ Cmd> reset

    This triggers the application to start, and the output becomes visible on the second serial connection.

  7. On the second serial port, the output is similar to that in section 2.2, is visible, like so:

    INFO - Setting up system tick IRQ (for NPU)
    INFO - V2M-MPS3 revision C
    INFO - Application Note AN540, Revision B
    INFO - FPGA build 1
    INFO - Core clock has been set to: 32000000 Hz
    INFO - CPU ID: 0x410fd220
    INFO - CPU: Cortex-M55 r0p0

The next section of the documentation details: Implementing custom ML application.