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
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:
For the Ethos-U evaluation, please download the MPS3 based version of the Arm® Corstone™-300 model that contains Cortex-M55 and offers a choice of the Ethos-U55 and Ethos-U65 processors.
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.
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:
The installation, typically, has the executable under
~/FVP_Corstone_SSE-300/model/<OS>_<compiler-version>/ directory. For the example below, we assume it is:
To run a use-case on the FVP, from the Build directory:
~/FVP_Corstone_SSE-300/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 ALL RIGHTS RESERVED
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 on Ethos-U55 processor can be started by using:
~/FVP_Corstone_SSE-300/models/Linux64_GCC-6.4/FVP_Corstone_SSE-300_Ethos-U55 -a ./bin/ethos-u-img_class.axf
Meanwhile for Ethos-U65:
~/FVP_Corstone_SSE-300/models/Linux64_GCC-6.4/FVP_Corstone_SSE-300_Ethos-U65 -a ./bin/ethos-u-img_class.axf
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-U configuration for the model. The valid parameters are:
256, and the default one
256, and the default one
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/models/Linux64_GCC-6.4/FVP_Corstone_SSE-300_Ethos-U55 -a ./bin/ethos-u-img_class.axf -C ethosu.num_macs=128
To start the model in
512 mode for Ethos-U65:
~/FVP_Corstone_SSE-300/models/Linux64_GCC-6.4/FVP_Corstone_SSE-300_Ethos-U65 -a ./bin/ethos-u-img_class.axf -C ethosu.num_macs=512
-l: shows the full list of supported parameters
--stat: prints some run statistics on simulation exit
--timelimit: sets the number of wall clock seconds for the simulator to run, excluding startup and shutdown.
If there is a need to run the FVP without the UI (e.g running the FVP inside of a docker container), it can be done as follows:
-C mps3_board.visualisation.disable-visualisation=1 and
-C mps3_board.telnetterminal0.start_telnet=0 to the command line arguments when starting the FVP. For example:
FVP_install_location/models/Linux64_GCC-6.4/FVP_Corstone_SSE-300_Ethos-U55 \ -C mps3_board.visualisation.disable-visualisation=1 \ -C mps3_board.telnetterminal0.start_telnet=0 \ ./bin/mps3-sse-300/ethos-u-<use_case>.axf
Once the FVP reports waiting on telnet connections, connect to the first serverport from another terminal. Assuming the FVP has the telnet server running at the default port 5000, connect to it by:
telnet localhost 5000
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".
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
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.
Note:: These instructions are valid only if the evaluation is being done using the MPS3 FPGA platform using an Arm® Corstone™-300 implementation.
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 implementation
AN552, the document is available here: Arm Developer.
For the MPS3 FPGA 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
V2MMPS3 is the
SD card. Note that if
V2MMPS3 device is not listed, you may need to enable USB connection from the board. You can do this by opening a serial connection to the first serial port (as specified in point 3 in the instructions below) and issuing a
usb_on command at the prompt:
Cmd> usb_on Enabling debug USB... USB Serial Number = 5000123456789
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:
For example, the image classification use-case produces:
./bin/sectors/ └── 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/
Note that the
ddr.bin files correspond to the part of the application residing in the first and second load region respectively, as defined in the scatter file.
./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
AN552, to replace the
images.txt file, like so:
cp ./bin/sectors/images.txt /media/user/V2M-MPS3/MB/HBI0309C/AN552/images.txt
Open the first serial port available from MPS3. For example,
/dev/ttyUSB0. This can be typically done using
Putty applications. Make sure the configuration is set to 115200 8/N/1 and that 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 Cmd>
In another terminal, open the second serial port. For example:
minicom --D /dev/ttyUSB1
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.5.1 Build Date: Jun 2 2021 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\AN552\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 0x0C000000 ....................................................................................................................................................................... File \SOFTWARE\ddr.bin written to memory address 0x0C000000 Image loaded from \SOFTWARE\ddr.bin
If the reboot from previous step completes without starting the application, issue a reset command:
$ Cmd> reset
This should trigger the application to start, and the output should be visible on the second serial connection. By default, the FPGA configuration should start the application as soon as it is loaded into the memory and the above command should not be required.
On the second serial port the output should show the standard output and error streams from the application deployed. For example:
INFO - V2M-MPS3 revision C INFO - Application Note AN552, Revision B INFO - MPS3 build 2 INFO - MPS3 core clock has been set to: 32000000Hz INFO - CPU ID: 0x411fd220 INFO - CPU: Cortex-M55 r1p0 ...
The next section of the documentation details: Implementing custom ML application.