Main Content

Simulate Harness Model with Signal Editor Inputs Block

This example shows how to generate model coverage report by simulating the test harness model with the Signal Editor Inputs block. You can simulate a single test case or counterexample by selecting the active scenario in the Signal Editor dialog box. For more information see, Simulate Harness Model by Using the Signal Editor Inputs Block.

To simulate all the test cases and measure their combined model coverage, use the cvsim or the parsim command.

In this example, you generate a harness model by selecting the Signal Editor as the harness source. The Signal Editor scenarios consists of signal sources that are associated with the test cases or counterexamples. Then, to generate combined model coverage report, you simulate all the scenarios by using the cvsim or parsim function.

1. Open the model and configure harness options

Create a harness model for the sldvdemo_cruise_control model by using the sldvharnessopts options. Set the HarnessSource option to Signal Editor.

model = 'sldvdemo_cruise_control';
opts = sldvoptions;
opts.Mode = 'TestGeneration';
opts.SaveHarnessModel = 'on';
opts.HarnessSource = 'Signal Editor';
opts.HarnessModelFileName = 'sldvdemo_cruise_control_harness';
opts.SaveReport = 'off';

2. Generate test cases

Analyze the model by using the sldvrun function and sldvoptions.

sldvrun('sldvdemo_cruise_control', opts);
Checking compatibility for test generation: model 'sldvdemo_cruise_control'
Compiling model...done
Building model representation...done

'sldvdemo_cruise_control' is compatible for test generation with Simulink Design Verifier.

Generating tests using model representation from 23-Feb-2021 18:36:34...

Completed normally.

Generating output files:

    Harness model:

Results generation completed.

    Data file:

3. Generate combined model coverage report

After the analysis generates the harness model, use this code that uses cvtest and cvsim functions to generate the combined model coverage report.

signalEditorBlock = 'sldvdemo_cruise_control_harness/Inputs';
numOfScenarios = str2double(get_param(signalEditorBlock,'NumberOfScenarios'));
harnessModel = 'sldvdemo_cruise_control_harness';
test = cvtest(harnessModel);
test.modelRefSettings.enable = 'On';
test.modelRefSettings.excludeTopModel = 1;
covData = [];
for id = 1:numOfScenarios
aCovData = cvsim(harnessModel);
if isempty(covData)
covData = aCovData;
covData = covData + aCovData;

Optionally, you can use this code that uses the parsim function to generate the combined model coverage report.

signalEditorBlock = 'sldvdemo_cruise_control_harness/Inputs';
numOfScenarios = str2double(get_param(signalEditorBlock,'NumberOfScenarios'));
harnessModel = 'sldvdemo_cruise_control_harness';

simIn  = Simulink.SimulationInput.empty(0,numOfScenarios);
for id = 1:numOfScenarios
    simIn(id) = Simulink.SimulationInput(harnessModel);
    simIn(id) = simIn(id).setBlockParameter(signalEditorBlock,'ActiveScenario', id);
    simIn(id) = simIn(id).setModelParameter('CovEnable', 'on');
    simIn(id) = simIn(id).setModelParameter('CovSaveSingleToWorkspaceVar', 'on');

simOut = parsim(simIn);
[23-Feb-2021 18:37:04] Checking for availability of parallel pool...
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 4).
[23-Feb-2021 18:37:47] Starting Simulink on parallel workers...
[23-Feb-2021 18:38:48] Configuring simulation cache folder on parallel workers...
[23-Feb-2021 18:38:49] Loading model on parallel workers...
[23-Feb-2021 18:39:21] Running simulations...
[23-Feb-2021 18:39:37] Completed 1 of 3 simulation runs
[23-Feb-2021 18:39:37] Completed 2 of 3 simulation runs
[23-Feb-2021 18:39:37] Completed 3 of 3 simulation runs
[23-Feb-2021 18:39:37] Cleaning up parallel workers...

The coverage report indicates that 100% coverage is achieved by simulating all the test cases for sldvdemo_cruise_control_model.

5. Clean Up

% To complete this example, close the models.
close_system('sldvdemo_cruise_control_harness', 0);
close_system('sldvdemo_cruise_control', 0);