Activate the Code Replacement Feature
MathWorks®code generation software generates ANSI®/ISO®C code. For the best execution performance, generated code must often be hardware-specific. The code replacement feature helps you enable your target to replace parts of generated code with hardware-specific code. In this section, you will implement the code replacement feature.
ARM®Cortex®-A processors use ARM NEON SIMD instructions, which are tailored for multimedia applications. Application-specific libraries provided by ARM and compiler-specific properties take advantage of these instructions. The reference target forARM Cortex-A hardware, ships a code replacement library (CRL) that uses these instructions. Your target can reuse this library.
If you need to implement additional code replacement libraries for your reference target, seeDevelop a Code Replacement Library.
Example Code After Code Replacement
Consider a simple Simulink®model that adds two4x4
matrices. The model diagram is shown in the following figure.
The following table shows the source code generated for the Add block in the model: ANSI/ISO C code, on the left, and the hardware-specific code using a code replacement library, on the right.
ANSI/ISO C Source Code | Hardware-Specific Code After Code Replacement |
---|---|
for (i = 0; i < 16; i++) { rtb_Add[i] = test_P.MatrixA_Value[i] + test_P.MatrixB_Value[i]; } |
mw_neon_mm_add_f32x4( test_P.MatrixA_Value, 4, 4, test_P.MatrixB_Value, rtb_Add); |
Verify that the expected code replacements happen for your target with the following steps.
In MATLAB®, on theHometab, selectNew>Simulink Model. Next, selectBlank Model. Then, selectSave>Save as...and save your model as
test
.SelectSimulation>Model Configuration Parameters.
In the Configuration Parameters dialog box, select
Solver
.From theTypelist, select
Fixed-step
. From theSolverlist, selectauto
.In the Configuration Parameters dialog box, select the
Hardware Implementation
tab.SetHardware board例如,硬件你注册
'My ARM Cortex A Board'
.In theModel Configuration Parametersdialog box, select
Code Generation
tab.In theBuild processgroup, checkGenerate codeonly.
SelectCode Generation > Reportand checkCreate code generation report
SelectSimulation > Hardware Implementation, setDevice vendorto
ARM Compatible
and setDevice typetoARM Cortex
.SelectAll Parameters, and then selectOptimization类别。清晰的Block reduction. ClickOK.
SelectLibrary Browser.
In Simulink library, openSourcesand add theConstantblock to your model.
Double-click theConstantblock and set theConstant valueto
single(ones(4))
Copy and paste theConstantblock to the same model.
In Simulink library, openMath Operationsand add theAddblock to your model.
连接theConstantandConstant1blocks to theAddblock.
In Simulink library, openSinks, add theScopeblock to the model and connect it to theAddblock.
ClickBuild Modelin your model.
In Code Generation Report that opens, click the
test.c
file and find the code that implements the Add block.Verify that matrix addition is implemented as a for loop adding matrix elements one-by-one.
SelectSimulation>Model Configuration Parameters.
SelectCode Generation>Interfaceand set代码替换库to
ARM Cortex-A
. ClickOK.ClickBuild Modelin your model.
In Code Generation Report, click the
test.c
file and find code that implements the Add block.Verify that matrix addition is implemented as a function call to
mw_neon_mm_add_f32x4
function.