# 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.