summaryrefslogtreecommitdiff
path: root/docs/sections/deployment.md
blob: 354d30bf4a617e81111e1483e8de7d4d0ca85122 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
# Deployment

- [Fixed Virtual Platform](#fixed-virtual-platform)
  - [Setting up the MPS3 Arm Corstone-300 FVP](#setting-up-the-mps3-arm-corstone-300-fvp)
  - [Deploying on an FVP emulating MPS3](#deploying-on-an-fvp-emulating-mps3)
- [MPS3 board](#mps3-board)
  - [Deployment on MPS3 board](#deployment-on-mps3-board)

The sample application for Arm® Ethos™-U55 can be deployed on two
target platforms, both of which implement the Arm® Corstone™-300 design (see
<https://www.arm.com/products/iot/soc/corstone-300>):

- A physical Arm MPS3 FPGA prototyping board

- An MPS3 FVP

## Fixed Virtual Platform

The FVP is available publicly from [Arm Ecosystem FVP downloads
](https://developer.arm.com/tools-and-software/open-source-software/arm-platforms-software/arm-ecosystem-fvps).
Download the correct archive from the list under `Arm Corstone-300`. We need the one which:

- Emulates MPS3 board (not for MPS2 FPGA board)
- Contains support for Arm® Ethos™-U55

> **Note:** Currently, the FVP only has a Linux OS version. Also, there are no FVPs available for `SSE-200`
> which satisfy the above conditions.

For FVP, the elf or the axf file can be run using the Fast Model
executable as outlined under the [Starting Fast Model simulation](./setup.md/#starting-fast-model-simulation)
except for the binary being pointed at here
is the one just built using the steps in the previous section.

### Setting up the MPS3 Arm Corstone-300 FVP

For Ethos-U55 sample application, please download the MPS3 version of the
Arm® Corstone™-300 model that contains 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

    `./FVP_Corstone_SSE-300_Ethos-U55.sh`

- Follow the instructions to install the FVP to your desired 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](#Setting-up-the-MPS3-Arm-Corstone-300-FVP)) to the user's home directory `~/FVP_Corstone_SSE-300_Ethos-U55`.

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

To run a use case on the FVP, from the [Build directory](../sections/building.md#Create-a-build-directory):

```commandline
~/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
    ALL RIGHTS RESERVED
```

This will also launch a telnet window with the sample application's standard output and error log entries containing
information about the pre-built application version, TensorFlow Lite Micro library version used, data type as well as
the input and output tensor sizes of the model compiled into the executable binary.

After the application has started it outputs a menu and waits for the user input from telnet terminal.

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

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

The FVP supports many command line parameters:

- 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 performed per cycle count available on the hardware.
  - `cpu0.CFGITCMSZ`: ITCM size for the Cortex-M CPU. Size of ITCM is pow(2, CFGITCMSZ - 1) KB
  - `cpu0.CFGDTCMSZ`: DTCM size for the Cortex-M CPU. 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 data written by the UART
    (use '-' to send all output to stdout, empty by default).
  - `mps3_board.uart0.shutdown_on_eot`: Sets to shutdown simulation when a EOT (ASCII 4) char is transmitted.
  - `mps3_board.visualisation.disable-visualisation`: Enables or disables visualisation (disabled by default).

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

    ```commandline
    ~/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

    ```commandline
    ~/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

    ```commandline
    ~/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 you have the MPS3 board powered on,
and USB A to B connected between your machine and the MPS3.
The connector on the MPS3 is marked as "Debug USB".

![MPS3](../media/mps3.png)

1. MPS3 board top view.

Once the board has booted, the micro SD card will enumerate as a mass
storage device. On most systems this will be automatically mounted, but
you might need to mount it manually.

Also, there should be four serial-over-USB ports available for use via
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 (15200 bauds,
8 bits, no parity and 1 stop bit) with no flow control.

> **Note:** For Windows machines, additional FTDI drivers might need to be installed
for these serial ports to be available.
For more information on getting started with an MPS3 board, please refer to
<https://developer.arm.com/-/media/Arm%20Developer%20Community/PDF/MPS3GettingStarted.pdf>

### Deployment on MPS3 board

> **NOTE**: These instructions are valid only if the evaluation is being
 done using the MPS3 FPGA platform using either `SSE-200` or `SSE-300`.

To run the application on MPS3 platform, firstly it's necessary to make sure
that the platform has been set up using the correct configuration.
For details, on platform set up, please see the relevant documentation. For `Arm Corstone-300`, this is available
[here](https://developer.arm.com/-/media/Arm%20Developer%20Community/PDF/DAI0547B_SSE300_PLUS_U55_FPGA_for_mps3.pdf?revision=d088d931-03c7-40e4-9045-31ed8c54a26f&la=en&hash=F0C7837C8ACEBC3A0CF02D871B3A6FF93E09C6B8).

For MPS3 board, instead of loading the axf file directly, the executable blobs
generated under the *sectors/<use_case>* subdirectory need to be
copied over to the MP3 board's micro SD card. Also, every use case build
generates a corresponding images.txt file which is used by the MPS3 to
understand which memory regions the blobs are to be loaded into.

Once the USB A <--> B cable between the MPS3 and the development machine
is connected and the MPS3 board powered on, the board should enumerate
as a mass storage device over this USB connection.
There might be two devices also, depending on the version of the board
you are using. The device named `V2M-MPS3` or `V2MMPS3` is the `SD card`.

If the axf/elf file is within 1MiB, it can be flashed into the FPGA
memory directly without having to break it down into separate load
region specific blobs. However, with neural network models exceeding
this size, it becomes necessary to follow this approach.

1. For example, the image classification use case will produce:

    ```tree
    ./bin/sectors/
        └── img_class
            ├── dram.bin
            └── itcm.bin
    ```

    For example, if the micro SD card is mounted at
    /media/user/V2M-MPS3/:

    ```commandline
    cp -av ./bin/sectors/img_class/* /media/user/V2M-MPS3/SOFTWARE/
    ```

2. The generated `\<use-case\>_images.txt` file needs to be copied
over to the MPS3. The exact location for the destination will depend
on the MPS3 board's version and the application note for the bit
file in use.
For example, for MPS3 board hardware revision C, using an
application note directory named "ETHOSU", to replace the images.txt
file:

    ```commandline
    cp ./bin/images-img_class.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.

    ```commandline
    minicom --D /dev/ttyUSB0
    ```

    ```log
    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>
    ```

4. In another terminal, open the second serial port, for example,
    "/dev/ttyUSB1":

    ```commandline
    minicom --D /dev/ttyUSB1
    ```

5. On the first serial port, issue a "reboot" command and press the
    return key

    ```commandline
    $ Cmd> reboot
    ```

    ```log
    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 will go on to reboot the board and prime the application to run by
    flashing the binaries into their respective FPGA memory locations. For example:

    ```log
    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\dram.bin to Address 0x08000000

    ..........................................................................


    File \SOFTWARE\dram.bin written to memory address 0x08000000
    Image loaded from \SOFTWARE\dram.bin
    ```

6. When the reboot from previous step is completed, issue a reset
        command on the command prompt.

    ``` commandline
    $ Cmd> reset
    ```

    This will trigger the application to start, and the output should be visible on the second serial connection.

7. On the second serial port, output similar to section 2.2 should be visible:

    ```log
    [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
    ...
    ```


Next section of the main documentation, [Running code samples applications](../documentation.md#Running-code-samples-applications).