# Replace Piecewise-Constant Resistor with Switched Linear Components

This example shows how to convert a model that is nonlinear due to a Piecewise-Constant Resistor into a switched linear model making it compatible with Simscape™ to HDL Workflow.

### Introduction

Simscape™ to HDL Workflow supports conversion of Simscape switched linear models to functionally equivalent Simulink® models that are compatible for HDL code generation. In this example, you will learn how to replace a nonlinear element with equivalent switched linear components. Specifically, the model uses a Piecewise-Constant Resistor that contains events not supported by the Simscape HDL Workflow Advisor. You can convert the nonlinear Simscape™ model to a switched linear model and make it compatible for HDL code generation. For more information, see Generate HDL Code for Simscape Models.

To open the Simscape™ model. In the MATLAB® command prompt, enter:

```NonlinearModel = 'sschdlexVariableResistorExample'; open_system(NonlinearModel) set_param(NonlinearModel, 'SimulationCommand', 'update'); ``` To open the Simscape subsystem in the model, enter:

```open_system([NonlinearModel,'/Simscape Subsystem']) ``` This model is an RLC circuit with a Piecewise-Constant Resistor acting as a 'Load' resistance. For the Piecewise-Constant Resistor, the relationship between voltage `V` and current `I` is `V=I*R` where `R` is the numerical value presented at the physical signal port `R`.

To ensure a positive value for the resistance, any value below `1e-6` is replaced by `1e-6`. This resistor is Piecewise-Constant because the resistance only changes when the input value differs from the current resistance value by more than the set tolerance. Thus, a continuously changing input is converted to a discrete set of resistances.

In this model, the signal going into the Piecewise-Constant Resistor is a step function that changes from `2` to `3` at `t = 0.1` thus changing the load resistance from `2`Ω to `3`Ω. To open the Simscape HDL Workflow Advisor, at the MATLAB® command-line, enter:

```sschdladvisor(NonlinearModel) ```

In the Simscape HDL Workflow Advisor, run the `Check model compatibility` task under `Code generation compatibility` subfolder. This task fails because of the presence of the Piecewise-Constant Resistor. ### Replace Piecewise-Constant Resistor with switches and constant resistors

To convert this model to an equivalent switched linear model, replace the Piecewise-Constant Resistor with a set of switches and resistors for each desired value. To open the switched linear version of the model, in the MATLAB® command prompt, enter:

```SwitchedLinearModel = 'sschdlexVariableResistorSwitchedLinearExample'; open_system(SwitchedLinearModel) set_param(SwitchedLinearModel, 'SimulationCommand', 'update'); ``` The Piecewise-Constant Resistor is replaced by a resistor and a switch for each desired resistance. To recreate the behavior of a load resistance that changes from `2`Ω to `3`Ω at `t = 0.1` two resistors are used, one with a resistance of `2`Ω and the other with a resistance of `3`Ω. By closing and opening the switches the load resistance switches from `2`Ω to `3`Ω.

### Controlling the Switches

The switches must be turned on and off to provide the correct load resistance. To view the control signals for the switches, in the MATLAB® command prompt, enter:

```open_system([SwitchedLinearModel,'/Input']) ``` To achieve the correct resistance, create two step functions:

1. To open the switch in series with the `2`Ω resistor at `t = 0.1`.

2. To close the switch in series with the `3`Ω resistor at the same time.

### Setup and Configuration

The default Solver Configuration settings for the switched linear model are:

• Solver type: `Backward Euler`

• Sample time: `1e-3`

In the model window, you can view the model statistics. Select the Debug tab and click Simscape > Statistics Viewer. This opens the Simscape Statistics window for `sschdlexVariableResistorExample` model.

### Generate HDL Implementation Model

For the switched linear components, open the Simscape HDL Workflow Advisor by running `sschdladvisor` function at the MATLAB® command prompt:

```sschdladvisor(SwitchedLinearModel) ```

To generate the HDL implementation model, in the `Implementation model generation` task drop-down list, right-click the `Generate implementation model` task, and then select the `Run to Selected Task` from the list.

After the task passes, you see a link to the HDL implementation model `gmStateSpaceHDL_sschdlexVariableResistorSwi`. Click on the link to open the generated implementation model. When you run the Extract equations task, the task displays the number of states, input, output, modes, and differential variables for the Simscape network. When you run the Discretize equations task, the state-space representation is displayed in the right pane. ### Generate HDL Code

To set up model parameters for HDL code generation, run `hdlsetup` function in MATLAB® command prompt:

```hdlsetup('gmStateSpaceHDL_sschdlexVariableResistorSwi') ```

Save the parameters for HDL implementation model.

```hdlsaveparams('gmStateSpaceHDL_sschdlexVariableResistorSwi') ```

Enable generation of the resource utilization report.

```hdlset_param('gmStateSpaceHDL_sschdlexVariableResistorSwi', 'ResourceReport', 'on') hdlset_param('gmStateSpaceHDL_sschdlexVariableResistorSwi', 'MaskParameterAsGeneric', 'off'); ```

Generate HDL code for the implementation model.

```makehdl('gmStateSpaceHDL_sschdlexVariableResistorSwi/Simscape Subsystem/HDL Subsystem'); ```

When you generate code, HDL Coder creates a code generation report. The resource utilization report in the High-level Resource Report indicates the amount of adders, multipliers, and registers that might be consumed on the target FPGA device. By changing the Piecewise-Constant Resistor to a number of specified resistors that switch on and off, the model has been changed to a form that is compatible with the Simscape to HDL workflow.