![]() |
RA Flexible Software Package Documentation
Release v6.4.0
|
|
Functions | |
| fsp_err_t | RM_ETHOSU_Open (rm_ethosu_ctrl_t *p_api_ctrl, rm_ethosu_cfg_t const *const p_cfg) |
| fsp_err_t | RM_ETHOSU_CallbackSet (rm_ethosu_ctrl_t *const p_api_ctrl, void(*p_callback)(rm_ethosu_callback_args_t *), void *const p_context, rm_ethosu_callback_args_t *const p_callback_memory) |
| fsp_err_t | RM_ETHOSU_Close (rm_ethosu_ctrl_t *p_api_ctrl) |
Middleware to support Ethos-U NPU driver. This module implements the Ethos-U Interface.
RM_ETHOSU module is a wrapper of the Ethos-U core driver.
| Configuration | Options | Default | Description |
|---|---|---|---|
| Parameter Checking |
| Default (BSP) | Selects if code for parameter checking is to be included in the build. |
| Ethos-U log level |
| Disabled | Defines Ethos-U log level. |
| Configuration | Options | Default | Description |
|---|---|---|---|
| Name | Name must be a valid C symbol | g_rm_ethosu0 | Module name. |
| Callback | Name must be a valid C symbol | NULL | A user callback function that will be called from the interrupt service routine (ISR). |
| NPU Interrupt Priority | MCU Specific Options | Select Ethos-U interrupt priority. | |
| Enable Secure Mode |
| Enabled | Set Ethos-U NPU secure mode. |
| Enable Privilege Mode |
| Enabled | Set Ethos-U NPU privilege mode. |
The NPU clock is configurable on the clocks tab.
Below are the steps to create an AI application that uses a tflite model. If you have a model geneated by RUHMI framework, the TFLM Core lib is not required, and the project type doesn't need to be C++. Please refer to RHUMI framework for more information https://github.com/renesas/ruhmi-framework-mcu.
Start by creating a new C++ project in e² studio. On the BSP tab, stack and heap need to be configured. On the Clocks tab, NPU clock needs to be configured. On the Stacks tab, add New Stack > AI > Google TFLM Core Lib.
To build Google TFLM Core Lib, C++17 is recommended. Lower versions may not be supported. Also Run-Time Type Information and exceptions need to be disabled.
| Toolchain | C++ Settings |
|---|---|
| GCC/LLVM | -fno-rtti, -fno-exceptions |
| ARMCC | -D__ARMCC_USING_STANDARDLIB=1 |
| IAR | -DARM_MATH_AUTOVECTORIZE=1, -DFLATBUFFERS_USE_STD_OPTIONAL=0 |
Please note
Users can use tools like Netron to find out what operators are used by the model. If there are operators not yet supported by Ethos-U55, they must be run on MCU. It is also possible to run a model on MCU only if the model is not optimized for NPU support.
There are two types of MCU kernels: optimized kernel based on CMSIS-NN, and reference kernel. Optimized kernel (CMSIS-NN kernel) should always be preferred on ARM MCUs. Please refer to https://github.com/tensorflow/tflite-micro/blob/main/tensorflow/lite/micro/docs/optimized_kernel_implementations.md for more information.
Users can refer to https://gitlab.arm.com/artificial-intelligence/ethos-u/ethos-u-core-software/-/tree/main/applications for how to integrate TFLM inference functions, e.g parsing model, creating interpreter, allocating tensors and running inference. Please note by default lots of operators are registered to micro_op_resolver in micro_mutable_all_ops_resolver.h. Only operators used in your model need to be registered.
Create inference job and run, e.g
Ethos-U Profiler stack has the components for performance profiling, e.g ethos-u monitor, event recoder. Users will have to implement ticks_per_second() and GetCurrentTimeTicks() for this purpose. Here is an example
Ethos-U Profiler stack is not required. Users can use a timer for performance profiling.Below weak functions shall be overwritten by the application as needed.
| Function | Description |
|---|---|
ethosu_mutex_create | define mutex API based on RTOS |
ethosu_mutex_destroy | define mutex API based on RTOS |
ethosu_mutex_lock | define mutex API based on RTOS |
ethosu_mutex_unlock | define mutex API based on RTOS |
ethosu_semaphore_create | define semaphore API based on RTOS |
ethosu_semaphore_destroy | define semaphore API based on RTOS |
ethosu_semaphore_take | define semaphore API based on RTOS |
ethosu_semaphore_give | define semaphore API based on RTOS |
ethosu_inference_begin | Callback invoked just before the inference is started. |
ethosu_inference_end | Callback invoked just after the inference is completed. |
Below weak functions are overwritten in the rm_ethosu driver
| Function | Description |
|---|---|
ethosu_flush_dcache | Flush/clean the data cache by address and size. Passing NULL as p argument expects the whole cache to be flushed. |
ethosu_invalidate_dcache | Invalidate the data cache by address and size. Passing NULL as p argument expects the whole cache to be invalidated. |
Please refer to https://git.mlplatform.org/ml/ethos-u/ethos-u-core-driver.git/tree/README.md for more information.
Ethos-U Profiler can only be used with the tflite-microThis is a basic example of Ethos-U NPU application.
Data Structures | |
| struct | rm_ethosu_instance_ctrl_t |
| struct rm_ethosu_instance_ctrl_t |
Instance control block. This is private to the FSP and should not be used or modified by the application.
| fsp_err_t RM_ETHOSU_Open | ( | rm_ethosu_ctrl_t * | p_api_ctrl, |
| rm_ethosu_cfg_t const *const | p_cfg | ||
| ) |
Enable Ethos-U NPU and initialize driver. Implements rm_ethosu_api_t::open.
This function performs the following tasks:
| p_api_ctrl | Pointer to the control structure. |
| p_cfg | Pointer to a configuration structure. |
| FSP_SUCCESS | NPU initialized successfully. |
| FSP_ERR_ASSERTION | An input parameter is invalid or NULL. |
| FSP_ERR_ALREADY_OPEN | The instance has already been opened. |
| FSP_ERR_INVALID_ARGUMENT | Failed to initialize ethosu driver |
| fsp_err_t RM_ETHOSU_CallbackSet | ( | rm_ethosu_ctrl_t *const | p_api_ctrl, |
| void(*)(rm_ethosu_callback_args_t *) | p_callback, | ||
| void *const | p_context, | ||
| rm_ethosu_callback_args_t *const | p_callback_memory | ||
| ) |
Updates the user callback and has option of providing memory for callback structure. Implements rm_ethosu_api_t::callbackSet
| FSP_SUCCESS | Callback updated successfully. |
| FSP_ERR_ASSERTION | A required pointer is NULL. |
| FSP_ERR_NOT_OPEN | The control block has not been opened. |
| FSP_ERR_NO_CALLBACK_MEMORY | p_callback is non-secure and p_callback_memory is either secure or NULL. |
| fsp_err_t RM_ETHOSU_Close | ( | rm_ethosu_ctrl_t * | p_api_ctrl | ) |
Disable NPU and set the instance as not open. Implements rm_ethosu_api_t::close.
| p_api_ctrl | Pointer to an opened instance. |
| FSP_SUCCESS | Channel successfully closed. |
| FSP_ERR_ASSERTION | The parameter p_api_ctrl is NULL. |
| FSP_ERR_NOT_OPEN | The channel has not been opened. Open the channel first. |