eIQ Neutron SDK is a new software package that includes the Neutron Converter tool and eIQ Neutron libraries to run Neutron converted neural network models on devices that have an eIQ Neutron NPU like MCX N, i.MX RT700, or i.MX95
Previously the Neutron Converter tool was part of eIQ Toolkit. However going forward, new versions of the Neutron Converter tool will be released as part of the eIQ Neutron SDK. This change will allow for more frequent updates to provide better performance and additional operator support.
MCUXpresso SDK and Linux BSP use Neutron libraries as part of the eIQ examples included in those software releases. However to use the latest Neutron Converter, an eIQ project will need to be updated to use the latest Neutron software libraries. This post walks through where to place the updated Neutron libraries and header files.
If the version of the Neutron Converter tool that was used to convert a model does not match the Neutron libraries used by the eIQ project, then during inference you will see the following error(s) printed on the serial terminal and may get incorrect results:
Microcode version mismatch
Or
Internal Neutron NPU driver error 281b in model prepare
Or
Incompatible Neutron NPU microcode and driver versions
The version of the Neutron Converter tool that was used to convert a model can be found by either viewing the converted model in Netron or by looking at the generated header file:
Here is a table showing where you can find the matching version of the Neutron Converter tool for the default Neutron libraries found in different versions of MCUXpresso SDK:
|
MCUXpresso SDK |
Default Neutron Library Version in MCUXpresso SDK |
Default Compatible Neutron Converter Can Be Found In |
|
24.12 |
1.2.0+0x6f710a6d |
eIQ Toolkit 1.17 |
|
25.03 |
1.2.0+0X1b86b19d |
eIQ Toolkit 1.17 |
|
25.06 |
2.0.2 |
eIQ Toolkit 1.17 |
|
25.09 |
2.1.3 |
eIQ Toolkit 1.17 |
|
25.12 |
2.2.2 |
eIQ Neutron SDK 2.2.2 |
|
26.03 |
3.0.0 |
eIQ Neutron SDK 3.0.0 |
|
Manually Update SDK Libraries To Use Latest Version |
|
eIQ Neutron SDK 3.1.2 |
It is highly recommend to always use the latest Neutron Converter tool and to update the libraries in your eIQ project to match the latest Neutron Converter tool. The libraries can be updated by overwriting the original files. You may wish to make a backup first though as the default eIQ examples in that SDK will use models that were converted to match those original Neutron libraries.
The Neutron file structure in eIQ Neutron SDK and MCUXpresso SDK are now the same so that the entire Neutron folder can be overwritten directly.
Updating Neutron Libraries in MCUXpresso SDK 25.12 and later:
|
File |
Source Directory in eIQ Neutron SDK |
Target Directory in MCUXpresso SDK |
|
libNeutronDriver.a |
target\imxrt700\ rt700\cm33\ |
\middleware\eiq\neutron\rt700\cm33\ |
|
libNeutronFirmware.a |
target\imxrt700\ rt700\cm33\ |
\middleware\eiq\neutron\rt700\cm33\ |
|
NeutronDriver.h |
target\imxrt700\ driver\include\ |
\middleware\eiq\neutron\driver\include\ |
|
NeutronErrors.h |
target\imxrt700\ common\include\ |
\middleware\eiq\neutron\common\include\ |
Note: The target\imxrt700\driver\include\NeutronEnvConfig.h and the libraries in target\imxrt700\cmodel are used by the ExecuTorch inference engine and so are not needed for TFLM eIQ projects.
Note: In MCUXpresso SDK 26.03 there are two sets of Neutron libraries in imported projects. It's the files in the /middleware/eiq folder that need to be updated.
Updating Neutron Libraries in MCUXpresso SDK 25.09 or before:
|
File |
Source Directory in eIQ Neutron SDK |
Target Directory in MCUXpresso SDK |
|
libNeutronDriver.a |
target\imxrt700\ rt700\cm33\ |
\middleware\eiq\tensorflow-lite\third_party\neutron\rt700\ |
|
libNeutronFirmware.a |
target\imxrt700\ rt700\cm33\ |
\middleware\eiq\tensorflow-lite\third_party\neutron\rt700\ |
|
NeutronDriver.h |
target\imxrt700\ driver\include\ |
\middleware\eiq\tensorflow-lite\third_party\neutron\driver\include\ |
|
NeutronErrors.h |
target\imxrt700\ common\include\ |
\middleware\eiq\tensorflow-lite\third_party\neutron\common\include\ |
Updating Neutron Libraries for MCUXpresso SDK 2.16 or before:
Replace the entire middleware\eiq directory from MCUXpresso SDK 26.03 into your project, and then the Neutron libraries can be updated per the instructions above. In these older MCUXpresso SDK releases there were additional eIQ changes beyond just the four files above, so the easiest method to update those older projects is just to replace the entire eIQ middleware directory.
Updating Neutron Libraries for i.MX devices:
To update the neutron runtime on a target device, upload the files to their designated directories, as follows:
|
File |
Target Directory |
|
NeutronFirmware.elf |
/lib/firmware |
|
libNeutronDriver.so |
/lib/ |
|
libneutron_delegate.so |
/lib/ |