Main Content

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 blocks B and C, and one terminate port driven by block D, 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 or ResetGen2 > TermGen > A10aGen or A10bGen or A[]Gen > D1Gen > D2Gen

  • A10aGen or A10bGen > 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