Sorting Rules for Explicitly Scheduled Model Components
Simulink® determines the execution order for model components, that is, subsystems and referenced models.
Export-Function Models
Export-function models include Function-Call Subsystem blocks, function-call Model blocks, Simulink Function blocks at the root level, and S-Function blocks invoked by function-call root Inport blocks.
Root function-call Inport blocks are sorted with the following rules:
First compare block priorities. The block with the highest priority (smallest number) is sorted before the others.
If block priorities are the same, compare sample times. The block with a faster rate (smaller sample time value) is sorted before the other.
If sample times are the same, compare input port numbers. The block with the smaller port number is sorted before the other.
If the
OrderFunctionsByDependency
parameter is set to'on'
, blocks that have the same sample times are further sorted based on any relative data dependency of the functions to which the blocks are connected. See Execution Order for Root-Level Function-Call Inport Blocks.
Root Simulink Function blocks are sorted after root function-call Inport blocks.
Test Harness for Export Function Models with Strict Scheduling
Reference the export-function model in a test harness and connect ports to Function Generator blocks.
If you select the check box for the configuration parameter Enable strict
scheduling checks for referenced models, both compile time and run-time checks
ensure initiators will invoke function-calls based on the pre-defined scheduling order.
Initiators are sorted based on their sample time priorities. For this example, the
scheduling order and the sample time priorities do not match. The model
mHarness_ExpFcnMdl
displays an error.
Test Harness for Export-Function Models Without Strict Scheduling
Reference the export-function model in a test harness and connect ports to Function-Call Generator blocks.
If you clear the check box for the configuration parameter Enable strict
scheduling checks for a referenced model and the test harness model is in
signal taking mode, the function-call initiators are sorted based on their sample time
priorities. For this example, the execution order is FcnCallGen0p1
>
FcnCallGen0p2
> FcnCallGen0p3
>
FcnCallGen0p1
.
Data Dependency Error Caused by Data Sorting Rules
Consider a model where the output from one function-call initiator is the input to another.
The function-call initiator FcnCallGen0p3
should be executed before
FcnCallGen0p4
based on their sample times. However, because
FcnCallGen0p4
is also a source for FcnCallGen0p3
a
data dependency occurs and Simulink displays an error.
Test Harness for Models with Initialize, Reset, and Terminate Function Blocks
If a Model block references a model that has an initialize, reset, or terminate ports, the function-call initiators connected to these ports have a higher priority than other function-call input ports. For example, export-function models, rate-based models, and JMAAB-B (Simulink Coder) models can have other function-call input ports. Simulink sorts function-call initiators in the following order:
Initialize, reset, and then terminate ports.
If there is more than one reset port, initiators to those reset ports are not sorted. For example, if a model has one initialize port driven by block
A
, two reset ports driven by blocksB
andC
, and one terminate port driven by blockD
, then Simulink sorts in the order A, B or C, and then D. B and C are sorted using general sorting rules.
Initiators for Model Block in Test Harness
Add function-call event ports to a Model block in a test harness that references a rate-based model or JMAAB-B model by selecting the Model block parameter Schedule rates.
In a single tasking model, all discrete rates are in the same task. In a multi-tasking model, discrete rates with the same value execute in the same task. Simulink sorts test harness initiators in the same task in the following order:
Initialize, reset, and then terminate ports.
Function-call input ports mapped to asynchronous function-call root Inport blocks if adapted model is a JMAAB-B model. Among those "async" function-call input ports, use the task priorities specified by the Asynchronous Task Specification block connected to the function-call root Inport block inside the referenced model to compare ports. In the following cases, do not compare ports:
For two "async" function-call input ports with the same task priorities.
For "async" function-call input ports with an empty (unspecified) task priority
Periodic function-call event input ports mapped to discrete rates. Use rate monotonic scheduling (RMS) rules to compare.
In a single tasking model, all initiators are in the same task:
InitGen
>ResetGen1
orResetGen2
>TermGen
>A10aGen
orA10bGen
orA[]Gen
>D1Gen
>D2Gen
A10aGen
orA10bGen
>A20Gen
Could swap relative ordering of (
ResetGen1
,ResetGen2
) or (A10aGen
,A10bGen
), or (A[]Gen
,A20Gen
), etc.
In a multi-tasking model, initiators of the same color are in the same task.
InitGen > D1Gen > D2Gen
A10aGen or A10bGen > A20Gen