No Memory Map Option
This example highlights the use of the no memory map option when you generate a SystemC™/TLM component from a Simulink® model using the tlmgenerator target for either Simulink Coder or Embedded Coder™.
In Simulink, each block input or output is bound point-to-point to another block. In SystemC/TLM, each component communicates through a TLM socket. This socket handles all the incoming and outgoing communication formatted inside TLM transactions. Because each system handles communication differently, we must define a communication interface for the SystemC/TLM component when it is generated from a Simulink model. Depending on the intended use of this SystemC/TLM component, this communication interface could require building a memory map (or address) for each input/output in the component. This memory map may be simple or detailed.
The no memory map option generates a TLM component with only one read and one write register without any address. The Simulink model inputs are bound to the write register and the outputs are bound to the read register. When created with this option, the generated TLM component could be used in a virtual platform (VP) as a standalone component in a test bench, as a direct bound co-processing unit, or it could be attached to a communication channel using an adapter.
For this example we use a Simulink model of a FIR filter as the basis of the SystemC/TLM generation.
Requirements to run this example:
SystemC 2.3.1 (includes the TLM library)
Note: The example includes a code generation build procedure. Simulink does not permit you to build programs in the MATLAB installation area. If necessary, change to a working directory that is not in the MATLAB installation area prior to starting any build.
1. Open the Preconfigured Model
To open the FIR Filter model with no memory map, click the Open Model button.
The following model opens in Simulink.
2. Set the Option to No Memory Map
In the Configuration Parameters dialog box, select the TLM Generator view in the left-hand pane. In the TLM Mapping tab, under Socket Mapping, select One combined TLM socket for input data, output data and control. Under Combined TLM Socket, select No memory map, as shown in the following image.
3. Set the Other Options
Set the remaining TLM Generation options according to your preferences (or leave the default values as they are) and click OK to apply these settings and exit the Configuration Parameters dialog box.
4. Build the Model
In the model window, right-click on the DualFilter block and select C/C++ Code > Generate Code for this Subsystem in the context menu to start the TLM component generation. Or you can execute the following command in the MATLAB command window:
>> slbuild('tlmgdemo_nomem/DualFilter');
The generation is completed when the following message appears in the MATLAB command window:
### Starting Simulink Coder build procedure for model: DualFilter ### Successful completion of Simulink Coder build procedure for model: DualFilter Build Summary Top model targets: Model Build Reason Status Build Duration ================================================================================================ DualFilter Information cache folder or artifacts were missing. Code generated. 0h 0m 20.62s 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 25.624s
5. Open the Generated Files
Open the following file in the MATLAB Editor:
6. Observe the Generated Code
Find the following lines of code. These lines represent the input and output definitions of the FIR Filter when generated as a TLM component with no memory map.
To provide a set of input to the generated TLM component, an TLM initiator should send a write TLM transaction with no address and with a payload containing a datum of type DualFilter_combined_IN_BANK_T.
To obtain a set of output from the generated TLM component, an TLM initiator should send a read TLM transaction with no address and with a payload containing a datum of type DualFilter_combined_OUT_BANK_T.