This example shows how to compile an S-Function to be compatible with Simulink® Design Verifier™ for test case generation. SLDV supports S-Functions that are:
Generated with the Legacy Code Tool, with def.Options.supportCoverageAndDesignVerifier
set to true
,
Generated with the SFunctionBuilder, with Enable support for Design Verifier selected on the Build Info tab of the SFunctionBuilder dialog box, or
Compiled with the function slcovmex, with the option -sldv
passed.
The handwritten S-Function is found in the file sldvexSFunctionHandlingSFcn.c, and the user source code for the lookup table is found in the file sldvexSFunctionHandlingSource.c. Call the function slcovmex to compile the C-MEX S-Function and make it compatible with SLDV.
slcovmex('-sldv', ... '-output', 'sldvexSFunctionHandlingSFcn',... ['-I', fullfile(matlabroot, 'toolbox', 'sldv', 'sldvdemos', 'src')], ... fullfile(matlabroot, 'toolbox', 'sldv', 'sldvdemos', 'src', 'sldvexSFunctionHandlingSource.c'),... fullfile(matlabroot, 'toolbox', 'sldv', 'sldvdemos', 'src', 'sldvexSFunctionHandlingSFcn.c') ... );
mex -I/mathworks/devel/bat/BR2020bd/build/matlab/toolbox/sldv/sldvdemos/src /tmp/BR2020bd_1444674_32127/publish_examples0/tp314dc2b9_96eb_47d4_ba74_48f63cc816e4/tpa950ef42_83c7_4fb8_af24_3304f8972b22.c /tmp/BR2020bd_1444674_32127/publish_examples0/tp314dc2b9_96eb_47d4_ba74_48f63cc816e4/tp54950136_3644_49cc_9d23_6c25d4cf06fc.c -L/mathworks/devel/bat/BR2020bd/build/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output sldvexSFunctionHandlingSFcn Building with 'gcc'. MEX completed successfully. mex -I/mathworks/devel/bat/BR2020bd/build/matlab/toolbox/sldv/sldvdemos/src /mathworks/devel/bat/BR2020bd/build/matlab/toolbox/sldv/sldvdemos/src/sldvexSFunctionHandlingSource.c /tmp/BR2020bd_1444674_32127/publish_examples0/tp314dc2b9_96eb_47d4_ba74_48f63cc816e4/sldvexSFunctionHandlingSFcn.c /tmp/BR2020bd_1444674_32127/publish_examples0/tp314dc2b9_96eb_47d4_ba74_48f63cc816e4/tp09e62928_482c_4796_a436_449506613cd7.c /tmp/BR2020bd_1444674_32127/publish_examples0/tp314dc2b9_96eb_47d4_ba74_48f63cc816e4/tp1d9b0435_8d79_4631_a88a_3d7f8398db48.c -L/mathworks/devel/bat/BR2020bd/build/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output sldvexSFunctionHandlingSFcn Building with 'gcc'. MEX completed successfully.
The example model sldvexSFunctionHandlingExample example contains the handwritten S-Function, which implements a lookup table algorithm. The S-Function block returns the interpolated value at the first output port and returns the status of the interpolation at the second output port. The second output port returns the value -1
if a lower saturation occurs, 1
if a upper saturation occurs, and 0
otherwise. Open the sldvexSFunctionHandlingExample model and configure the analysis options by turning on S-Function support for test generation. On running the analysis, Simulink® Design Verifier™ returns a test suite that satisfies all coverage objectives.
open_system('sldvexSFunctionHandlingExample');
opts = sldvoptions; opts.Mode = 'TestGeneration'; opts.ModelCoverageObjectives = 'ConditionDecision'; opts.SaveHarnessModel = 'off'; opts.SaveReport = 'off'; opts.SFcnSupport = 'on'; [status, fileNames] = sldvrun('sldvexSFunctionHandlingExample', opts, true);
The sldvruntest
function verifies that the test suite achieves complete model coverage. The cvhtml
function produces a coverage report that indicates 100% Condition and Decision coverage is achieved with the generated test vectors.
[~, finalCov] = sldvruntest('sldvexSFunctionHandlingExample', fileNames.DataFile, [], true); cvhtml('Final Coverage', finalCov);
To complete the demo, close all models.
close_system('sldvexSFunctionHandlingExample', 0);