Target Language Compiler    

Block I/O Information

The block I/O vector (also referred to as the rtB vector) is described in the following BlockOutputs record. Each nonvirtual block output defines an entry in this conceptual vector. This record differs from the CompiledModel.RootSignals and CompiledModel.Subsystem records that describe the signal information for virtual and nonvirtual blocks. These two records also include model hierarchy information while the BlockOutputs record does not.

The BlockOutputs record provides a listing of all blocks that write to the block output vector. Several optimizations that affect block outputs are provided through Simulink dialog boxes. The Advanced page of the Simulation Parameters dialog box page provides the Signal storage reuse optimization. When you enable this option, rtwgen will attempt to reuse signal storage, mapping multiple BlockOutput records together. If you disable this option, rtwgen will create a unique record for all block signals. When this options is enabled, you can selectively add the output from a particular block by specifying the block output as a test point.

To specify a block output as a test point, select a line and then select Edit -> Signal Properties -> check box SimulinkGlobal (Test Point). Once you have tagged a signal as a test point, the Target Language Compiler always writes to the block I/O vector. If a signal is not visible in the block outputs vector, it will allow reuse of its memory location by several blocks. This can substantially reduce memory requirements.

Table A-11: Model.rtw Block I/O Information 
Variable/Record Name
Description
BlockOutputs {

List of block output signals in the block diagram.

  BlockOutputDefaults {

    RecordType

BlockOutput.

    SigSrc

[]: The default source is non-existent indicating that signal reuse has caused this block output (memory location) to be written to by multiple sources.

    Width

1: Signal width

    MemoryMapIdx

[-1,-1,-1]: used to populate global data map record (GlobalMemoryMap) during code generation. Refer to
matlabroot/rtw/c/tlc/mw/globalmaplib.tlc for usage information on the MemoryMapIdx field.

    HasObject

0: Indicates whether this signal has an associated Simulink.Signal object. Default is 0 indicating this signal output is not associated with a Simulink.Signal.

    TestPoint

no: The default is that this signal has not been marked as a signal of interest in your model (see signal properties dialog).

    ConstExpr

0: the default is this output is not a const expression.

    StorageClass

Auto: The default value specifies that Real-Time Workshop decides where to declare this signal.

    StorageTypeQualifier

"": The default type qualifier is empty.

    IdentiferScope

top-level: The default is to declare the block output signal in the global block I/O vector. The other option is fcn-level, which will explicitly appear below.

    Invariant

no: The default is that this signal has a non-constant sample time and change during execution.

    InitialValue

[]: The default initial value is empty for non-invariant signals.

    DataTypeIdx

0: The default data type is real_T.

    ComplexSignal

no: The default is a non-complex real valued signal.

    SigLabel

"": No signal label on the line.

    SigConnected

all: All destination elements of the signal are connected to other nonvirtual blocks or root outports.

    NumReusedBlockOuputs

0: Number of reused block outputs.

    NumMergedBlockOutputs

0: Number of merged block outputs.

  }

  ReusedBlockOutputDefaults

{

    RecordType

ReusedBlockOutput

    SigLabel

"": No signal label on the line.

    SigConnected

all: All destination elements of signal are connected to other nonvirtual blocks or root outports.

  }

  MergedBlockOutputDefaults

{

    RecordType

MergedBlockOutput

    SigLabel

"": No signal label on the line.

    SigConnected

all: All destination elements of signal are connected to other nonvirtual blocks or root outports.

  }

  NumBlockOutputs

Number of data output port signals.

  BlockOutput {

One record for each data output signal. Remark: If a block outputs buffer contains the output of a Merge block then you will have MergedBlockOutput sub-sub-records inside a ReusedBlockOutput sub-record inside this BlockOutput record.

    Identifier

Unique variable name across all block outputs.

    Width

Output signal width, only written if its greater than 1.

    TestPoint

yes. Only written when this signal has been marked as a test point in the block diagram. Test point block outputs are always in the global scope (top-level).

    StorageClass

Only written if either ExportedGlobal, ImportedExtern, ImportedExternPointer or DefinedInTLC. This setting determines how this signal is declared.

    StorageTypeQualifier

Only written if non-empty (e.g., const or something similar).

    IdentifierScope

fcn-level: Only written when the output signal is local to a function. The default (above) is top-level.

    Invariant

yes: Only written when this block output cannot change during execution. For example, the output of a Width block and the output of a Constant block is invariant if InlineParameters=1.

    InitialValue

Non-empty vector that is only written when Invariant is yes and the data type of the block output signal is a built-in data type.

    DataTypeIdx

Only written when data is non-real_T (i.e., non-zero). This is the index in to the data type table that identifies this signals data type.

    ComplexSignal

yes: Only written if this signal is complex.

    SigSrc

[systemIdx, callSiteIdx, blockIdx, outputPortIdx]. Note that callSiteIdx is an index into System[systemIdx].CallSites.

    SigLabel

Signal label entered by user. Only written if non-empty ("").

    SigConnected

Only written if one or more elements are not connected to destination non-virtual or root outport blocks. In this case it will be none if no elements are connected or a vector of length signal Width where each element is either a 1 or 0 indicating whether or not the corresponding output signal is connected.

    NumMergedBlockOutputs

Number of MergedBlockOutput records. These occur when Merge blocks exist in your model. The number of these records will equal the number of merge block outputs in your model.

    MergedBlockOutput {

Only written if the BlockOutput record corresponds to a Merge block. In this case, the number of MergedBlockOutput records is equal to the number of input ports on the Merge block.

      Identifer

Unique variable name across all block outputs.

      SigSrc

[systemIdx, callSiteIdx, blockIdx, outputPortIdx]. Note that callSiteIdx is an index into System[systemIdx].CallSites.

      SigLabel

Signal label entered by user. Only written if nonempty ("").

    }

    NumReusedBlockOutputs

Number of ReusedBlockOutput records.

    ReusedBlockOutput {

Only written when this BlockOutput record is being reused by multiple blocks. There is one record for each block output port that is reused by this BlockOutput record.

      Identifer

Unique variable name across all block outputs.

      SigSrc

[systemIdx, callSiteIdx, blockIdx, outputPortIdx]. Note that callSiteIdx is an index into System[systemIdx].CallSites.

      SigLabel

Signal label entered by user. Only written if non-empty ("").

      MergedBlockOutput {

Only written if this ReusedBlockOutput record corresponds to a Merge block. In this case, the number of MergedBlockOutput records is equal to the number of input ports on the Merge block. See above for contents of the MergedBlockOutput records.

      }

    }

    HasObject

1: Indicates whether the output signal has an associated Simulink.Signal object. This only occurs when there is one source of this signal (i.e., not merged or reused).

    Object{

Contents of Simulink.Signal Only written if HasObject=1, (a Unified Data Repository object is attached to the output signal) and the output signal is not being reused.

       ...

Fields in the Object record depend upon the contents of the object.

    }

  }

}


  External Inputs and Outputs Signal Connections