To download the examples for Module 6, click Module_6_Examples.zip
What You Will Learn
- How to create a constant resistance subcircuit load.
- How to limit the resistance parameter value to positive numbers.
- How to copy a built-in symbol from a global library to a schematic component file.
- How to edit symbols using the Symbol Editor.
Model Requirements
The constant resistance load should:
- Model a constant resistance for all applied voltages.
- Limit the valid resistance parameter values to positive numbers, not including
zero.
- Include a basic parameter editing dialog.
- Be self-contained in a schematic component file.
Model Design Procedure
The design procedure for this model is broken into three parts.
Part #1: Define
Connectivity and File Name
To begin the model, you will create a new schematic, place and name hierarchical ports and save the schematic as a schematic component.
- From the SIMetrix/SIMPLIS menu bar, select File ▶ New Schematic.
Result: a blank, unnamed schematic sheet opens in the Schematic
Editor window.
- Place a Hierarchical Module Port on the schematic:
- From the Schematic Editor Menu, select Hierarchy ▶ Place Module Port or use the
keyboard shortcut H.
- Press F5 three times to rotate the port so the pin faces downward and the text is on the top of the schematic as shown below:
- Click the left mouse button to place the module port.
- Double click on the module port to edit the pin name.
Result: The Enter text dialog opens:
- Change the name to P. This will be the positive pin on the symbol.
- Click Ok to save the name.
Result: The schematic at this point should appear as:
- Repeat Step 2 to place another module port. This module port will be rotated once and renamed N.
Result: After placing and renaming the two module ports, the schematic will appear approximately as follows: Do not worry too much about the space between the pins, as you can select and move the pins in later steps.
- From the Schematic Editor menu, select File ▶ Save.
Result: The Save As dialog
opens. The program reads the schematic, finds there are module ports and
automatically sets the file type to a schematic component.
- As discussed in the 6.0 Model Requirements topic, you will save your schematic component files to a subdirectory of the main project directory. In this case the subdirectory is Modeling Blocks, and you need to navigate to C:\Training\Module_6_Examples\Modeling Blocks\ to save the schematic component.
- Enter the file name constant_resistance_load as shown below.
- Click Save to save the schematic component.
At this point you have a basic schematic with two module ports. These module ports will map to the symbol pins, connecting the symbol to the higher level schematic. The constant_resistance_load schematic is currently electrically inactive, in the next part, Part_2:_Add_Resistor_Symbol_and_Parameterize, you will add the electrical definition for the subcircuit.
Part #2: Add
Resistor Symbol and Parameterize
In this part, you will add a resistor
symbol and parameterize the resistor value.
- Press 4 to add a "Z" type resistor.
- Move the mouse between the two module ports, and click once to place the
resistor.
- Wire the resistor to the two module ports. The schematic at this point should
appear similar to:
- Edit the resistor to add a parameter value:
- Double click on the resistor symbol to edit the value.
Result: The Choose Component Value dialog opens:
- In the Result field, enter {RESISTANCE}.
Result: The completed dialog appears as follows:
- Click Ok to save your changes.
Result: The
schematic appears as follows:
- From the schematic menu, select File ▶
Save to save the schematic.
At this point, the schematic resistor is
expecting the parameter RESISTANCE to be passed into the subcircuit from the
symbol. The RESISTANCE parameter value can be set with a variable statement at a
higher level, or hand-typed into a dialog. While the dialog can limit the parameter
value, there is still the possibility that the symbol property itself has the
parameter value passed to it inside an expression. When evaluated, this expression
could result in a negative resistance value which is out of the desired range. In the
next part, Part_3:_Check_Passed_Parameter_Value_With_dot_error, you will learn about
the .ERROR statement, which allows you to halt the simulation if a parameter value is
less than a minimum value.
Part
#3: Check Passed Parameter Value With .ERROR
In this part you will learn how to use
the .IF/.ENDIF and .ERROR constructs to check if a parameter value is
within a desired range.
- Press F11 to open the Command (F11) Window.
- Copy the following three lines of text and paste into the F11 window.
.IF { RESISTANCE < 1p }
.ERROR "The resistance parameter (RESISTANCE) for the constant_resistance_load subcircuit must be >= 1p Ohms."
.ENDIF
- Make sure the three lines were copied over correctly. Each line should begin with
a period. If any lines do not begin with a period, you will need to remove the
line breaks to make each line begin with a period. The text in the F11 window
automatically word wraps. You may need to stretch the schematic window to verify
the lines start with a period.
- From the schematic menu, select File ▶
Save to save the schematic.
There should be three lines in the F11
window. The first line is a conditional test:
.IF { RESISTANCE < 1p }
On the above line, the resistance value
is checked to see if the value is less than 1p Ohm. Any value less than 1p Ohm will
test true, and the .ERROR statement on the next line is executed:
.ERROR "The resistance parameter (RESISTANCE) for the constant_resistance_load subcircuit must be >= 1p Ohms."
When a .ERROR statement is reached, the
netlist preprocessor will stop the simulation from proceeding. In section Test_the_Model, you will
purposely set the resistance parameter value less than the minimum limit and verify
the error statement is working properly.
If the RESISTANCE parameter is 1p Ohms
or greater, the simulation proceeds normally.
Symbol Design Procedure
The symbol design procedure is broken into two parts:
Part #1: Assign and Edit a Symbol
At this point, the subcircuit load has a
complete schematic but no symbol. In this section you will learn how to reuse the
graphical elements from built-in symbols for your own custom symbols. In this case
you will take the graphical portion of the built-in Z-shaped resistor symbol and use
this to start your symbol.
- Select R1, the "Z" shaped resistor symbol.
- Right click and select Edit Symbol...
Result: The global symbol for the Z-shaped resistor
opens in the symbol editor: Note that you are NOT editing the instantiated
resistor symbol for the subcircuit load.
- It is very important to save this symbol to your schematic component file
before
you start to edit it. If you make edits to this symbol and inadvertently save
them, those changes would be applied to the global resistor symbol used by other
schematics. This could have disastrous effects in other schematics. To save the
symbol to your schematic component file,
- Select the Symbol Editor menu File ▶
Save...
Result: The Save Symbol dialog opens
- In the Save to radio button group, select Component
file.
- Click the Browse... button to navigate the file system and select
the schematic component file for the constant_resistance_load.
Result: The configured dialog will appear as
follows:
- Delete unneeded symbol properties INCSCRIPT, DECSCRIPT, and
VALUE.
- Position the mouse over the *dec_passive text and left click once.
This text is the property value of the DECSCRIPT property.
Result: The text changes color from black to
blue, indicating the property is selected.
- Press the Delete key to delete the property.
- Repeat for the text *inc_passive and 1K. These two property
values are associated with the INCSCRIPT and VALUE properties.
Result: At this point the symbol editor
should appear as follows:
- To tell the netlister to instantiate a subcircuit model for this symbol, you need
to edit the MODEL property and change the property value to X by
doing the following:
- Position the mouse over the *R text and left click once.
Result: The text changes color from black to
blue, indicating the property is selected.
- Press F7 to edit the MODEL property.
Result: The Edit Property dialog opens:
- Change the Value to X, and Click Ok.
Result: The symbol editor now appears as follows:
- Change the REF property to LOAD?.
- Select the R? text and repeat Steps 5 A-C, changing the REF
property to LOAD?
Result: The symbol now appears as follows:
- Next, you will modify the graphical representation so users will know this is not
the built-in resistor model.
- Position the mouse over the N pin, then press and hold the mouse button
while dragging the pin downwards two major grid ticks.
Result: The N pin is now two grid ticks down from the
original position.
- Repeat for the P pin, moving the pin up two grid ticks.
Result: The P pin is now two grid ticks up from the original
location.
- Connect the pins to the Z-shaped resistor lines and add a graphical box around
the resistor.
-
Double click to start a graphical "wire" segment.
-
Left click once to define a corner or end point.
-
Right click to stop wiring.
- If you make a mistake, right click to stop wiring and press Ctrl-Z
to undo.
Result: The symbol should appear
approximately as follows:
- Select the Symbol Editor menu File ▶
Save... to save the symbol to the schematic component file.
You now have a symbol which will call a
subcircuit based load model. The functionality of the underlying subcircuit is
implied by the Z-shaped resistor, and the box around the resistor suggests to the
user that this is not a normal resistor. At this point the symbol doesn't pass the
RESISTANCE parameter to the underlying subcircuit, nor does the symbol have a
parameter editing dialog. In the next part, Part__2:_Add_RESISTANCE_Parameter_and_Dialog_Properties, you will use a
spreadsheet to add the RESISTANCE symbol property, the critical SIMPLIS_TEMPLATE
property, and the dialog definition properties.
Part #3B: Add RESISTANCE Parameter and Dialog Properties
Included in the Module_6_Examples.zip file is a pre-prepared dialog definition spreadsheet
similar to the ones used in the previous module. Unlike many previous spreadsheets,
this spreadsheet includes commands to add the SIMPLIS_TEMPLATE, TEMPLATE (for
SIMetrix simulations) and RESISTANCE symbol properties. The extracted file is located
at:
C:\Training\Module_6_Examples\6.1.1_constant_resistance_load_dialog_definition_worksheet.xlsx
To add the symbol properties,
- Open the 6.1.1_constant_resistance_load_dialog_definition_worksheet.xlsx
excel spreadsheet.
- Copy the six cells: B21-B27 to the windows clipboard.
- Navigate to the SIMetrix/SIMPLIS command shell window.
- Click the mouse in the command line entry located at the top of the command shell
window:
- Press Ctrl+V to paste the commands in the command line.
Result: the last command is partially visible in the command
line.
- Press Enter or click the Ok Button on the command line.
Result: The commands are executed in SIMetrix/SIMPLIS.
Each AddSymbolProperty command adds a single symbol property to the symbol. As
in previous exercises, the dialog definition properties are protected. All
properties are hidden from view when the symbol is placed on the parent
schematic.
- Select the Symbol Editor menu File ▶
Save... to save the symbol to the schematic component file.
The model and symbol are now complete
and ready for testing.
Test the Model
Now that the model and associated symbol are completed, its time to start testing. A testbench schematic for the subcircuit load is located in the Module_6_Examples directory. After you place the subcircuit load, this test schematic is ready to simulate. You will then run a few experiments on the model to verify it works as expected.
To start testing the model, follow these steps:
- Open the 6.1_test_constant_resistance.sxsch schematic.
Result: The testbench schematic opens, this schematic has been specially prepared to test the load using an XY probe and a ramped current source.:
- From the Schematic Editor menu select Hierarchy ▶ Place Component (Relative Path)....
- Select the constant_resistance_load.sxcmp component file from the Modeling Blocks directory.
- Place the load on the schematic where the opening below H1 is located.
- Press F9 to run the simulation.
Result: The V-I curve for the load is generated. The resistance used is the default value, which is 1 Ohm:
Experiment #1: Test Dialog and Change Resistance Value
Whenever you pass parameters to
subcircuits, it is important to test that the parameters are being passed properly
and the simulation results reflect the actual parameter value. In this experiment,
you will change the resistance parameter to 2 ohms and verify the value changes in
the simulation.
- Navigate to the Schematic Editor window.
- Double click on the subcircuit load symbol to edit the resistance parameter.
Result: The parameter editing dialog opens:
- Change the Resistance value to 2, and click Ok to accept the
dialog.
- Press F9 to run the simulation.
Result: The
V-I curve for the load is generated with the RESISTANCE parameter set to 2 Ohms
(green curve). As expected, the slope of the V-I curve, which is the
resistance, is 1/2 the value in the earlier experiment.
Experiment #2: Test
.ERROR Message
Testing the .ERROR message is slightly
more difficult because the parameter editing dialog will not allow you to enter an
invalid value. Instead you will manually edit the value using the Edit Properties
dialog.
- Select the LOAD1 symbol.
- Right click and select the Edit/Add Properties... menu option.
Result: The Edit Properties dialog opens:
- Double Click on the RESISTANCE entry.
Result: The
Edit Property dialog opens.
- Change the Value to 0, and click Ok on the Edit Property dialog to
accept the changes.
- Click Ok on the Edit Properties dialog.
- Press F9 to run the simulation.
Result: The RESISTANCE parameter is less than the minimum limit specified in
the F11 window of the constant_resistance_load.sxcmp schematic, and the .ERROR
statement text is output to the command shell: The program adds the first line,
indicating which subcircuit definition and instantiation the .ERROR statement
originates
from.
*** ERROR *** (6.1_test_constant_resistance.net): Subckt def constant_resistance_load used by X$LOAD1:
The resistance parameter (RESISTANCE) for the constant_resistance_load subcircuit must be >= 1p Ohms.
Experiment #3: Test Minimum Resistance Value Allowed by Dialog
In the previous experiment you set the
resistance to a value less than the minimum allowed by the parameter editing dialog.
In this short experiment you will verify the dialog prevents users from entering
values less than the specified minimum value.
- Double click on the LOAD1 symbol to open the parameter editing dialog.
Result: Although the RESISTANCE symbol property
value was set to 0 in the last experiment, the dialog automatically changes the
value to 1p, which is the minimum allowed value.
- Press the up arrow button on the spinner control.
Result: The Resistance value changes from 1p to 2p.
- Press the down arrow button twice on the spinner control.
Result: The Resistance value changes from 2p to 1p,
and on the second click, the minimum value of 1p is enforced.
Conclusions and Key Points to Remember
The constant resistance load used in this example is a very simple subcircuit definition. In this topic, you have added a "subcircuit wrapper" around a primitive resistor model. While at first this seems like unnecessary overhead, the resulting model now has a custom dialog with built-in error checking which makes the model more robust, modular and easier to use. As you build higher level models, exploiting the subcircuit interface will allow you to easily manage and reuse your models. When you put together the individual subcircuit loads into a single symbol/model in section 6.2 Assembling the Subcircuit Load, the importance of model reuse and the subcircuit wrapper will become clear.
Key points to remember are:
- You can limit the range of valid parameter values with the .ERROR statement.
- You can copy a built-in symbol from a global library to a schematic component file,
then edit it to suit your needs, saving time.