Auto-Generated Memory Map with Single Address Option
This example highlights the use of the auto-generated memory map with single address 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 component input or output is bound point-to-point to another component. 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 auto-generated memory map with single address option generates a TLM component with only one read and one write register with one address each. 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 or it could be attached to a communication channel.
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 auto-generated memory map with single address, click the Open Model button.
The following model opens in Simulink.
2. Set the Option to Auto-Generated Memory Map with Single Address
In the Configuration Parameters dialog box, select the TLM Generator view in the left-hand pane. In the TLM Mapping tab, under Socket Mapping option select One combined TLM socket for input data, output data and control. Under Combined TLM Socket, select Auto-generated memory map and Single input and output address offsets, 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_asmem/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 11.496s 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 11.88s
5. Open the Generated Files
Open the following files 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 single address memory map.
To provide a set of input to the generated TLM component, an TLM initiator should send a write TLM transaction with a payload containing a data of type DualFilter_combined_IN_BANK_T at the address DualFilter_combined_IN_BANK_ADDR.
To obtain a set of output from the generated TLM component, an TLM initiator should send a read TLM transaction with a payload containing a data of type DualFilter_combined_OUT_BANK_T at the address DualFilter_combined_OUT_BANK_ADDR.