Editing and Defining Properties
This chapter contains these topics:
About the Edit Properties Form
Editing an Object's Properties
Editing Properties for a Group of Objects
Editing Many-to-Many Instance Parameters
Defining a New Cellview Property
Defining a New Object Property
About the Modify Property Form
Changing a Property Using the Modify Property Form
Viewing the Attributes of a Contact
Viewing the Attributes of a Donut
Viewing the Attributes of a Dot
Viewing the Attributes of an Ellipse or Circle
Viewing the Attributes of an Instance
Viewing the Attributes of a Label
Viewing the Attributes of a Line
Viewing the Attributes of a Path
Viewing the Attributes of a ROD Multipart Path
Viewing the Attributes of a Pin Name or Other Text Display
Viewing the Attributes of a Polygon or Polygon Pin
Using Net Expressions and Inherited Connections
Understanding Properties
The Properties command lets you edit the information that defines selected objects. Every object in your database has information associated with it. The Edit Properties form displays this information, dividing it into the following categories:
Attributes define the object. Each type of object has specific, built-in attributes. For example, a polygon always has a layer and a set of coordinates that define vertexes. You can view and change attributes of an object.
The Connectivity category shows information on how this object relates to a net and/or a terminal and associated net expressions.
Parameters control values associated with a cell. Only parameterized cells (pcells) can have parameters.
Properties are user-created information that further define the object. However, some applications add properties.
ROD displays the relative object design (ROD) name, handle, and alignment information of the object or instance.
About the Edit Properties Form
To open the Edit Properties form,
![]()
Select an object before or after doing one of the following:
Choose Edit - Properties.
Type
q.
Click on the properties icon in the icon menu.
The title and contents of the form vary with the object you select.
Next highlights the next object in the group and resets the form to show that object's properties.
Previous highlights the previous object in the group and resets the form to show that object's properties.
Attribute represents the characteristics of the object. The available attributes vary, depending on the type of object. If the object is a ROD multipart path (MPP), the Subpart option appears. See "Viewing the Attributes of a ROD Multipart Path".
Connectivity displays routing and net information about selected pins and shapes on a net. Only pins display I/O Type or Access Direction.
Net Name displays the name of the net to which the pin is connected. You cannot edit this field.
Terminal Name sets the name of the terminal associated with this pin. The terminal name should always be the same as the net name.
Net Expression assigns a net expression of the terminal listed in the Terminal Name field.
Net Status shows whether a hierarchical pin is connected (used by the Cadence® place-and-route tools).
Net Criticality sets a weighting factor that determines the routing priority for this net for the Cadence place-and-route tools.
I/O Type assigns a property used by routers to identify the direction of the signal into or out of this cellview. The signal can be input, output, inputOutput (bidirectional), switch (carries data either in or out, but not simultaneously), or jumper (passes data through this cellview).
Access Direction assigns a property used to identify the part of the pin to which the routers can connect routing. Applies only to rectangle pins.
Parameter displays any parameters defined for a parameterized cell.
Property sets the properties of the object and lets you add your own properties to an object.
Add opens the Add Property form, which lets you add a new cellview property.
Delete deletes a selected property created with Add.
Modify opens the Modify Property form, which lets you change the definition for any property created with Add.
ROD displays the ROD properties of the object.
Common lets you edit properties common to a group of selected objects. The Common functionality does not support ROD objects.
Layer displays the layer of a common property if it is the same for all objects. If the layer is not the same for all objects, AS IS appears in the field.
Left, Right, Bottom, and Top display the value of a common property if it is the same for all objects. If the value of a common property is not the same for all objects, the words AS IS appears in the fields.
Displaying Properties
To display the properties of an object,
Select one or more objects.
The Edit Properties form for the first selected object appears.
Click on the appropriate radio button at the top of the form to see attributes, connectivity, parameters, or user-defined properties.
Set Common to see the common properties of all selected objects.
Editing an Object's Properties
To edit the properties for one object,
The Edit Properties form appears.
Editing Properties for a Group of Objects
To edit properties for a group of objects,
Select all the objects you want to edit.
The Edit Properties form appears.
Editing Many-to-Many Instance Parameters
If a pcell instance is part of a Many-to-Many group in a connectivity-driven flow containing Many-to-Many instance mapping module generators, the parameters are editable in the Edit Instance Properties form.
To edit properties for a many-to-many group of instances,
Select all the instances you want to edit.
The Edit Instance Properties form appears.
In the upper section of the form (MTM Shared Parameters), edit any shared parameters of the pcells in the fields.
In the lower section of the form (MTM Instance Parameters), select any instance parameter by clicking on the cyclic field in the lower portion of the form.
The cyclic field contains the names of all the parameters of the selected instances, whether or not they are shared. The name of the instance or instances containing the selected parameter are displayed on the left side of the lower portion of the form. The parameter values are displayed in the field next to the instance name on the right side of the lower portion of the form. These fields are editable if the parameter exists in the instance.
Edit the value of the parameter in the field next to the name of the instance you are editing.
Searching for and Replacing Properties
You can search for one or more objects with identical properties and replace those properties with a new value. This way you can quickly change a large number of objects.
To search for objects and replace their properties,
Use the Search form to choose the object you want to search for and to set any search criteria.
In the Replace cyclic field, choose the type of property you want to replace.
About the ROD Property Form
The ROD property form displays the ROD name, handle, and alignment information of the object or instance.
ROD Name displays the name of the ROD object.
Handle displays the system handle and user handle information. A handle is an attribute of, or item of information about, a ROD object, such as the coordinates of a point on the bounding box around an object, the width of the bounding box of an object, or the resistance of an object.
System handle displays handle names assigned to the object. When you choose a different handle from the cyclic field, the Value field updates to reflect the current handle.
Value is a noneditable field displaying the location of the system handle displayed in the System handle field. These values are predefined reference points.
User handle displays handle names assigned by the user to the object. When you choose a different handle from the cyclic field, the Value field updates to reflect the current handle. If a user handle is not assigned, the fields are empty.
Value displays the current location of the system handle displayed in the User handle field. You can change these values by typing new coordinates in this field.
Alignment displays the alignment information about two ROD objects. You can edit these fields if the objects have alignment values assigned to them, otherwise the fields are empty. When looking at the alignment information for two objects, the selected object is Align object. The separation is the distance from Reference object (unselected) to Align object (selected).
Reference object displays the name of the object assigned to be the reference object of Align object. If there is more than one object assigned to be Reference object, you can choose that object from the cyclic field.
Align object displays the name of the object aligned to Reference object. This field is not editable.
Reference handle displays the name of the handle Align object is aligned to.
Align handle displays the name of the handle Reference object is aligned to.
X separation displays the distance in the X direction from either the reference point handle or the reference point on Reference object to the alignment point handle on Align object. The value can be positive or negative or a Cadence SKILL language expression that evaluates to a positive or negative number.
Y separation displays the distance in the Y direction from either the reference point handle or the reference point on Reference object to the alignment point handle on Align object. The value can be positive or negative or a SKILL expression that evaluates to a positive or negative number.
For complete information on setting ROD handles and alignment, see the Virtuoso Relative Object Design User Guide.
For examples of how to edit aligned ROD objects using the Edit Properties form, see the Cell Design Tutorial.
About the Add Property Form
You use the Add Property form to define a new property.
To open the Add Property form,
![]()
Click Add in the Edit Cellview Properties form or the Edit Properties form. Name specifies the name to assign to this property. This name will appear on the Edit Properties or the Edit Cellview Properties form.
Type controls the type of value for the property. This can be Int (integer), Float (floating-point number), String (any text, displayed in a cyclic field), Time (date and time), Boolean (on or off), or ILList (list of IL values).
Value shows either a text entry field, a Boolean button, or a cyclic field, depending on the Type setting.
Choices sets the possible values that appear in the cyclic field for a string property. One of the values listed here must match the default shown in Value.
Minimum and Maximum display the minimum and maximum values for integer, floating-point, and time properties. The values appear in parentheses after the property name in the Edit Properties or the Edit Cellview Properties form.
Defining a New Cellview Property
A cellview property is information that you or a Cadence application assigns to the cellview. This information can be used to override default information or to add information for further processing by other applications. For example, when postprocessing cells, you could have a SKILL routine use a property to identify which cells to process.
To define a new cellview property,
Choose Design - Properties [
Shift-q].
The Edit Cellview Properties form appears.
The properties of the cellview appear. Most of these properties correspond to settings in the Display Options form.
Fill out the Add Property form.
Defining a New Object Property
An object property is information that you assign to a contact, circle, donut, ellipse, instance, label, path, pin, polygon, or rectangle. This information can be used to identify an object or to add information for further processing by other applications.
To define a new object property,
Select one or more objects.
The Edit Properties form for the first selected object appears.
Fill out the Add Property form.
About the Modify Property Form
The Modify Property form lets you change a user-created property.
Note: You can modify and delete only those properties you added using the Add Property form.
Name displays the name of the property.
Type controls the type of value for the property. This can be Int (integer), Float (floating-point number), String (any text, displayed in a cyclic field), Time (date and time), Boolean (on or off), or ILList (list of IL values).
Value sets the default value for this property. This line can show a text entry field, a Boolean button, or a cyclic field, depending on the Type setting.
Choices sets the possible values that appear in the cyclic field for a string property. One of the values listed here must match the default shown in Value.
Minimum and Maximum set the minimum and maximum values for integer, floating-point, and time properties. The values appear in parentheses after the property name in the Edit Cellview Properties or the Edit Properties form.
Changing a Property Using the Modify Property Form
To change a user-created property,
Click Modify in the Edit Cellview Properties form or the Edit Properties form.
If you want to change a cellview property, choose Design - Properties [
Shift-q].If you want to change an object property, select the object and then choose Edit - Properties [
q].
The Edit Properties form or the Edit Cellview Properties form appears.
In the Modify Property form, make your changes.
Deleting a Property
If you want to delete a cellview property, choose
Design - Properties [Shift-q].If you want to delete an object property, select the object and then choose Edit - Properties [
q].
The Edit Properties form or the Edit Cellview Properties form appears.
Editing Object Attributes
The characteristics that define an object are known as the object's attributes. All design objects have default attributes, such as color.
To change the attributes of an object,
Viewing the Attributes of a Contact
The Edit Contact Properties form lets you view and change the attributes and add, modify, or delete properties of a contact.
To view the attributes of a contact,
Contact Type selects the contact from the technology file and controls the layers on which the contact is drawn.
Justification sets the origin of a single contact or of a contact array.
Origin: x and y set the X and Y coordinates of the contact origin.
Width and Length set the width and length of the contact or via cut, in user units (typically microns).
Rows and Columns set the number of rows or the number of columns of contact cuts in a contact array.
Delta X sets the horizontal distance between the center points of the contacts when Rows is set to greater than 1.
Delta Y sets the vertical distance between the center points of the contacts when Columns is set to greater than 1.
Viewing the Attributes of a Donut
The Edit Donut Properties form lets you view and change the attributes and add, modify, or delete properties of a donut.
To view the attributes of a donut,
Layer sets the layer on which the donut is drawn.
bBox displays the coordinates of the box surrounding the donut.
Center: x and y set the X and Y coordinates of the center of the donut.
Inner Radius and Outer Radius set the inner and outer radius of the donut.
Viewing the Attributes of a Dot
The Edit Dot Properties form lets you view and change the attributes and add, modify, or delete properties of a dot. If the dot is a ROD object, you can edit the ROD properties by choosing the ROD category.
To view the attributes of a dot,
Layer sets the layer of the dot.
bBox displays the coordinates of the bounding box of the dot.
Center: x and y set the X and Y coordinates of the dot origin.
Width sets the width of the dot in user units (usually microns).
Height sets the height of the dot in user units (usually microns).
ROD Name displays the name of the dot if it is a ROD object.
Viewing the Attributes of an Ellipse or Circle
The Edit Ellipse Properties form lets you view and change the attributes and add, modify, or delete properties of an ellipse or circle.
To view the attributes of an ellipse or circle,
Layer sets the layer of the ellipse or circle.
Left, Right, Bottom, and Top set the coordinates of the box that defines the ellipse or circle.
Viewing the Attributes of an Instance
The Edit Instance Properties form lets you view and change the attributes and add, modify, or delete properties of a instance. If the instance contains ROD objects, you can edit the ROD properties. by choosing the ROD category.
When you route your design to the Virtuoso® Custom Router, the changes you make in the Edit Instance Properties form are reflected in your custom router design.
To view the attributes of an instance,
Library, Cell, and View set the library, cell, and view names of the master cell for this instance.
Origin: x and y set the X and Y coordinates of the origin of the instance.
Name sets the name assigned to this instance. The layout editor automatically assigns instance names that begin with the letter I, followed by a number.
Mag(nification) enlarges or reduces the size of the cell instance.
Rotation sets whether the instance is rotated or mirrored.
R0 = no rotation
R90 = rotated 90 degrees
R180 = rotated 180 degrees
R270 = rotated 270 degrees
MY = mirrored over the Y axis
MYR90 = mirrored over Y, rotated 90 degrees
MX = mirrored over the X axis
MXR90 = mirrored over X, rotated 90 degrees
Viewing the Attributes of a Label
The Edit Label Properties form lets you view and change the attributes and add, modify, or delete properties of a label.
To view the attributes of a label,
Layer sets the layer on which the label is drawn.
bBox displays the coordinates of the box surrounding the label.
Text sets the text that appears in the label.
Origin: x and y set the X and Y coordinates of the label origin.
Height sets the height of the label, in user units (usually microns).
Rotation sets whether the label is rotated or mirrored.
Font sets the text style of the label.
Justification sets the location of the label origin. The origin appears as a small square on the label when you place or select it.
Drafting prevents the label from being rotated more than 90 degrees.
Overbar is a display option that determines how text strings containing underscore characters are displayed in a layout window.
When the overbar is disabled (default), the software displays underscore characters ( _ ) as part of the text string. When the overbar is enabled, the software interprets underscore characters ( _ ) in the text string name as toggle switches that control where overbars begin and end. Overbars appear above the text string, as shown in the examples.
Viewing the Attributes of a Line
The Edit Line Properties form lets you view and change the attributes and add, modify, or delete properties of a line. If the line is a ROD object, you can edit the ROD properties by choosing the ROD category.
To view the attributes of a line,
Layer sets the layer of the line.
bBox sets the coordinates of the box surrounding the line.
Points sets the coordinates of each point of the line.
ROD Name displays the name of the line if it is a ROD object.
Viewing the Attributes of a Path
The Edit Path Properties form lets you view and change the attributes and add, modify, or delete properties of a path. If the path is a ROD object, you can edit the ROD properties by choosing the ROD category.
To view the attributes of a path,
Layer sets the layer of the path.
bBox sets the coordinates of the box surrounding the path.
Points sets the coordinates of each point of the path.
Width specifies the path width in user units (usually microns).
Type controls how the path ends are drawn.
Begin Extension and End Extension set the length of the beginning and ending extension in user units if Type is set to variable.
ROD Name appears if the path is a ROD object.
Subpart appears if the path is a multipart path and has subparts.
Viewing the Attributes of a ROD Multipart Path
A multipart path (MPP) is a single ROD object consisting of one or more parts at level zero in the hierarchy on the same or on different layers. A multipart path consists of a single master path and one or more subparts. The master path is an ordinary path; however, it is the defining part of a multipart path; all subparts are based on the master path.
The Edit ROD Multipart Path Properties form lets you
View and change the attributes of the master path
View and change the attributes of the subparts, except for the layer
Change the ROD information for the entire multipart path including
View and change the ROD properties
To view the attributes of an MPP,
Master Path Fields
Layer sets the layer of the master path.
bBox displays the coordinates of the box surrounding the path.
Points sets the coordinates of each point of the master path.
Width specifies the path width in user units (usually microns).
Type controls how the path ends are drawn.
Begin Extension and End Extension set the length of the beginning and ending extension in user units if Type is set to variable.
Choppable indicates whether or not a ROD path can be chopped. The value must be
tornil. When a path has subparts and the master path is choppable, all subpaths and sets of subrectangles must be choppable also. When a path has subparts and the master path is not choppable, each subpath and/or set of subrectangles can be choppable or not. The default is choppable.ROD Name displays the name of the MPP.
Subpart opens one of three subpart forms:
For complete form field descriptions, see the ROD Subpart Form section of the Virtuoso Layout Editor User Guide.
For an example of how to edit an MPP, see "Editing Multipart Paths".
Offset Subpath Fields
Enclosure Subpath Fields
Subrectangle Fields
Limitations to Editing Multipart Paths
There are a few attributes that cannot be edited using the Edit ROD Multipart Path Properties form.
Adding or deleting subparts of an existing MPP
To add or delete subparts of an existing MPP, you must use the Create - Multipart Path command. For example, if you want to delete all the subrectangles from an existing MPP, you would have to create a new MPP minus the subrectangles, rather than deleting the rectangles in the Edit ROD Multipart Path Properties form.
However, you can create a new MPP quickly by loading a template containing all the data about the particular MPP. After loading the template, you can delete the subrectangle information. For complete information about ROD MPPs and templates, see the Creating Multipart Paths section of the Virtuoso Layout Accelerator User Guide.
Changing subpart layers
Viewing the Attributes of a Pin Name or Other Text Display
The Edit Text Display Properties form lets you view and change the attributes and add, modify, or delete properties of a text display, such as a pin name display.
To view the attributes of text display,
Layer sets the layer of the text display.
bBox displays the coordinates of the box surrounding the text display.
Text displays the text of the text display for the associated pin and is not editable.
Origin: x and y set the X and Y coordinates of the text display origin.
Height sets the height of the text display in user units (usually microns).
Rotation sets whether the text display is rotated or mirrored.
R0 = no rotation
R90 = rotated 90 degrees
R180 = rotated 180 degrees
R270 = rotated 270 degrees
MY = mirrored over the Y axis
MYR90 = mirrored over Y, rotated 90 degrees
MX = mirrored over the X axis
MXR90 = mirrored over X, rotated 90 degrees
Font sets the text style of the text display.
Justification sets the location of the origin of the text display origin. The origin appears as a small square on the pin name when you place or select it.
Drafting prevents the text from being rotated more than 90 degrees.
Overbar is a display option that determines how text strings containing underscore characters are displayed in a layout window.
When the overbar is disabled (default), the software displays underscore characters ( _ ) as part of the text string. When the overbar is enabled, the software interprets underscore characters ( _ ) in the text string name as toggle switches that control where overbars begin and end. Overbars appear above the text string, as shown in the examples.
Viewing the Attributes of a Polygon or Polygon Pin
The Edit Polygon Properties form lets you view and change the attributes and add, modify, or delete properties of a polygon or polygon pin. If the polygon or polygon pin is a ROD object, you can edit the ROD properties by choosing the ROD category.
To view the attributes of a polygon,
Layer sets the layer of the polygon.
bBox sets the coordinates of the box surrounding the polygon.
Points sets the coordinates of each point of the polygon.
ROD Name displays the name of the polygon if it is a ROD object.
Viewing the Attributes of a Rectangle or a Rectangle Pin
The Edit Rectangle Properties form lets you view and change the attributes and add, modify, or delete properties of a rectangle or rectangle pin. If the rectangle or rectangle pin is a ROD object, you can edit the ROD properties by choosing the ROD category.
To view the attributes of a rectangle,
Layer sets the layer of the rectangle.
Left, Right, Bottom, and Top set the coordinates of the rectangle.
ROD Name displays the name of the rectangle if it is a ROD object.
Editing Multipart Paths
You can change the attributes of the MPPs master path and subparts through the Edit ROD Multipart Path Properties form. In this procedure, you change this data in the sample MPP shown here.
Edit the subparts of the sample by doing the following:
Click Subpart in the Edit ROD Multipart Path Properties form.
Select the subpart in the scroll window at the top of the form.
Click Subpart in the Edit ROD Multipart Path Properties form.
Select the subpart in the scroll window at the top of the form.
Click OK to close the Edit ROD Multipart Path Properties form. The three subparts of the MPP have been edited.
For complete information about ROD MPPs, see "Creating Multipart Paths" in the Virtuoso Layout Accelerator User Guide.
Using Net Expressions and Inherited Connections
Inherited Connections
Inherited connections is an extension to the connectivity model that allows you to create global signals and override their names for selected branches of the design hierarchy. This flexibility allows you to use
Multiple power supplies in a design
Overridable substrate connections
Parameterized power and ground symbols
To learn about using inherited connections and net expressions with various Cadence tools in the design flow, refer to the Inherited Connections Flow Guide.
To learn about connectivity and naming conventions for inherited connections and how to add and edit net expressions in a schematic or symbol cellview, refer to the Virtuoso Schematic Composer User Guide.
Net Expressions in the Virtuoso Layout Editor Environment
A net expression is a special property placed on a net or terminal to define its connectivity. A net expression consists of a property name and a default net name. You use a net expression to override the connection made by a signal or terminal. This allows you to use, for example, multiple power supplies in your design. The signal is redefined due to the value assigned to it. Redefining the signal eliminates the problem of global nets being merged into a single, electrically-equivalent signal, which occurs when the signal traverses the design hierarchy.
You can create, edit, and delete net expressions for pins by changing the net expression information in the Connectivity category of the Edit Properties form.
Once the net expression information is applied to a terminal, the net expression is displayed in the text labels of pins. The following must be true for the net expression to display:
The pin is created with Create Label set on in the Create Pin form
Net Expressions is set on in the Display Options form
Note: Net expressions are not interpreted by the display code in the Virtuoso Layout Editor. The net expressions are displayed as is, but other tools, such as the Layout Versus Schematic (LVS) program, use and interpret net expressions. The net expressions on layout terminals must match those found in schematic views.
Creating a Net Expression
Open the Edit Properties form.
Type the net expression override property name in the Net Expression Property field.
Type the default net name in the Default field. This is used when no override property is defined in the hierarchy above this point in the schematic view. If you do not enter a default net name, the terminal name is used.
Note: The Net Expressions field in the Display Options form must be set to on for the net expressions to display in your cellview.
Editing Net Expressions
To edit net expression information for pins,
Select the pin whose terminal's net expression you want to change.
Open the Edit Properties form.
Change the information in the Net Expression Property and Default fields.
(Clearing the Net Expression Property field in the Edit Properties form deletes the net expression from your design.)
If several pins in your design have the same terminal name, you need update only one pin and the rest will update automatically. You see the edited text labels after you use Window - Redraw.
Viewing Instances Containing Net Expressions
When you view an instance containing a pin whose terminal has a net expression, the label display is the terminal name, not the net expression. To see the net expression in a hierarchical design, you must descend into the cellview containing the net expression to see the full text display of the net expression.
Using the Edit Cellview Properties Form
The Design Properties command lets you edit the attributes or properties (defaults) of this cellview. The form can display either attributes or properties.
About the Edit Cellview Properties Form
To open the Edit Cellview Properties form,
![]()
Choose Design - Properties [ Shift-q].Attribute represents the characteristics of the object. None of these fields can be changed.
Library displays the name of the library containing this cellview.
Cell displays the name of this cell.
View displays the name of this view.
bBox displays the coordinates of the invisible box surrounding the design in the cellview.
Type displays the view type that corresponds to the view name for this cellview. View types are defined in your technology file.
DBU per micron displays the number of database units (DBU) per user unit (usually microns). Database units and user units are defined in the
.cdsenvfile or by the library manager.Mode shows whether this cellview is opened in edit mode (
Edit) or read-only mode (Read).
Save Needed shows whether you made changes to this cellview that need to be saved to disk.
Property shows the properties for this cellview. Most properties correspond to settings in the Display Options form. Other Cadence applications such as DRC or Extract can also add properties.
Add opens the Open Property form, which lets you add a new cellview property.
Delete deletes a selected property created with Add.
Modify opens the Modify Property form, which lets you change the definition for any property created with Add.
Common is not used when you edit cellview properties. This button is used when you edit properties of objects inside this cellview with the
Edit - Properties command.Next and Previous (at the top of the form) are not used when you edit cellview properties but when you edit properties of objects inside this cellview with the Edit - Properties command.
Connectivity is not used when you edit cellview properties. This button is used when you edit properties of objects inside this cellview with the
Edit - Properties command.Parameter is not used when you edit cellview properties. This button is used when you edit properties of objects inside this cellview with the
Edit - Properties command.ROD is not used when you edit cellview properties. This button is used when you edit properties of ROD objects inside this cellview with the
Edit - Properties command.
Viewing and Editing Cellview Properties
As you set and change the display options, your changes can be saved as properties of the current cellview.
To view and change these properties for any cellview,
Choose Design - Properties [
Shift-q].
The Edit Cellview Properties form appears.
The settings you saved to this cellview using the Display Options form appear. Any properties attached to the cellview by other applications, such as the last time you ran DRC on the cellview, appear.
For support, see http://www.cadence.com/support
or try Cadence's SourceLink service.
Copyright © 2003, Cadence Design Systems, Inc.
All rights reserved.
Legal notices and trademark attributions