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 for ARM 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, see Develop a Code Replacement Library.
Example Code After Code Replacement
Consider a simple Simulink® model that adds two 4x4
matrices.
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 the Home tab, select New > Simulink Model. Next, select Blank Model. Then, select Save > Save as... and save your model as
test
.Select Simulation > Model Configuration Parameters.
In the Configuration Parameters dialog box, select
Solver
.From the Type list, select
Fixed-step
. From the Solver list, selectauto
.In the Configuration Parameters dialog box, select the
Hardware Implementation
tab.Set Hardware board to the hardware you registered, for example,
'My ARM Cortex A Board'
.In the Model Configuration Parameters dialog box, select
Code Generation
tab.In the Build process group, check Generate code only.
Select Code Generation > Report and check Create code generation report
Select Simulation > Hardware Implementation, set Device vendor to
ARM Compatible
and set Device type toARM Cortex
.Select All Parameters, and then select Optimization category. Clear Block reduction. Click OK.
Select Library Browser.
In Simulink library, open Sources and add the Constant block to your model.
Double-click the Constant block and set the Constant value to
single(ones(4))
Copy and paste the Constant block to the same model.
In Simulink library, open Math Operations and add the Add block to your model.
Connect the Constant and Constant1 blocks to the Add block.
In Simulink library, open Sinks, add the Scope block to the model and connect it to the Add block.
Click Build Model in 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.
Select Simulation > Model Configuration Parameters.
Select Code Generation > Interface and set Code replacement library to
ARM Cortex-A
. Click OK.Click Build Model in 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.