::SpiceGenTclTop, Main, Index
CommandsTop, Main, Index
importNgspice [::SpiceGenTcl]Top, Main, Index
Imports all ::SpiceGenTcl::Ngspice commands to caller namespace
proc ::SpiceGenTcl::importNgspice {} { # Imports all ::SpiceGenTcl::Ngspice commands to caller namespace uplevel 1 {foreach nameSpc [namespace children ::SpiceGenTcl::Ngspice] { namespace import ${nameSpc}::* }} }
importXyce [::SpiceGenTcl]Top, Main, Index
Imports all ::SpiceGenTcl::Xyce commands to caller namespace
proc ::SpiceGenTcl::importXyce {} { # Imports all ::SpiceGenTcl::Xyce commands to caller namespace uplevel 1 {foreach nameSpc [namespace children ::SpiceGenTcl::Xyce] { namespace import ${nameSpc}::* }} }
ClassesTop, Main, Index
Analysis [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
addParam | Adds new Parameter object to the list Params . |
configure | Configure properties. |
deleteParam | Deletes existing Parameter object from list Params . |
duplListCheck | See DuplChecker.duplListCheck |
genSPICEString | Creates analysis for SPICE netlist. |
getParams | Gets the dictionary that contains parameter name as keys and parameter values as the values. |
setParamValue | Sets (or changes) value of particular parameter. |
Properties
Readable: -Name
, -Type
Writable: -Name
, -Type
Superclasses
Mixins
Subclasses
::SpiceGenTcl::Ngspice::Analyses::Dc, ::SpiceGenTcl::Ngspice::Analyses::Ac, ::SpiceGenTcl::Ngspice::Analyses::Sp, ::SpiceGenTcl::Ngspice::Analyses::SensAc, ::SpiceGenTcl::Ngspice::Analyses::SensDc, ::SpiceGenTcl::Ngspice::Analyses::Tran, ::SpiceGenTcl::Ngspice::Analyses::Op, ::SpiceGenTcl::Xyce::Analyses::Dc, ::SpiceGenTcl::Xyce::Analyses::Ac, ::SpiceGenTcl::Xyce::Analyses::Sens, ::SpiceGenTcl::Xyce::Analyses::Tran, ::SpiceGenTcl::Xyce::Analyses::Op
constructor [::SpiceGenTcl::Analysis]Analysis, Top, Main, Index
Creates object of class Analysis
.
Analysis new type params ?args?
Parameters
type | Type of analysis, for example, tran, ac, dc, etc. |
params | List of instance parameters in form {{Name Value} {Name -sw} {Name Value -eq} {Name Value -posnocheck} ...} |
args | Optional argument -name |
Description
Class models analysis statement.
method constructor {type params args} { # Creates object of class `Analysis`. # type - type of analysis, for example, tran, ac, dc, etc # params - list of instance parameters in form # `{{Name Value} {Name -sw} {Name Value -eq} {Name Value -posnocheck} ...}` # args - optional argument *-name* # Class models analysis statement. my variable Name set arguments [argparse { -name= }] if {[info exists name]} { my configure -Name $name } else { my configure -Name [self object] } my configure -Type $type # create Analysis objects foreach param $params { if {[lindex $param 2]=={}} { my addParam [lindex $param 0] [lindex $param 1] } elseif {[lindex $param 1]=="-sw"} { my addParam [lindex $param 0] -sw } else { my addParam {*}$param } } }
addParam [::SpiceGenTcl::Analysis]Analysis, Top, Main, Index
Adds new Parameter object to the list Params
.
Parameters
paramName | Name of parameter. |
value | Value of parameter. |
args | Optional arguments -eq or -posnocheck as parameter qualificators. |
method addParam {paramName value args} { # Adds new Parameter object to the list `Params`. # paramName - name of parameter # value - value of parameter # args - optional arguments *-eq* or *-posnocheck* as parameter qualificators set arguments [argparse { {-eq -forbid {posnocheck}} {-poseq -forbid {posnocheck}} {-posnocheck -forbid {eq}} {-pos -forbid {eq}} {-nocheck -forbid {eq}} }] set paramName [string tolower $paramName] if {[info exists Params]} { set paramList [dict keys $Params] } lappend paramList $paramName if {[my duplListCheck $paramList]} { error "Parameters list \{$paramList\} has already contains parameter with name \{$paramName\}" } if {$value=="-sw"} { dict append Params $paramName [::SpiceGenTcl::ParameterSwitch new $paramName] } elseif {[info exists eq]} { dict append Params $paramName [::SpiceGenTcl::ParameterEquation new $paramName $value] } elseif {[info exists poseq]} { dict append Params $paramName [::SpiceGenTcl::ParameterPositionalEquation new $paramName $value] } elseif {[info exists posnocheck]} { dict append Params $paramName [::SpiceGenTcl::ParameterPositionalNoCheck new $paramName $value] } elseif {[info exists pos]} { dict append Params $paramName [::SpiceGenTcl::ParameterPositional new $paramName $value] } elseif {[info exists nocheck]} { dict append Params $paramName [::SpiceGenTcl::ParameterNoCheck new $paramName $value] } else { dict append Params $paramName [::SpiceGenTcl::Parameter new $paramName $value] } return }
deleteParam [::SpiceGenTcl::Analysis]Analysis, Top, Main, Index
Deletes existing Parameter
object from list Params
.
Parameters
paramName | Name of parameter that will be deleted. |
method deleteParam {paramName} { # Deletes existing `Parameter` object from list `Params`. # paramName - name of parameter that will be deleted set paramName [string tolower $paramName] set error [catch {dict get $Params $paramName}] if {$error>0} { error "Parameter with name '$paramName' was not found in device's '[my configure -Name]' list of parameters '[dict keys [my getParams]]'" } else { set Params [dict remove $Params $paramName] } return }
genSPICEString [::SpiceGenTcl::Analysis]Analysis, Top, Main, Index
Creates analysis for SPICE netlist.
Return value
string '.$Type
$Params
'
method genSPICEString {} { # Creates analysis for SPICE netlist. # Returns: string '.$Type $Params' if {[info exists Params]} { dict for {paramName param} $Params { lappend params [$param genSPICEString] } return ".[my configure -Type] [join $params]" } else { return ".[my configure -Type]" } }
getParams [::SpiceGenTcl::Analysis]Analysis, Top, Main, Index
Gets the dictionary that contains parameter name as keys and parameter values as the values
Return value
parameters dictionary
method getParams {} { # Gets the dictionary that contains parameter name as keys and # parameter values as the values # Returns: parameters dictionary set tempDict [dict create] dict for {paramName param} $Params { dict append tempDict $paramName [$param configure -Value] } return $tempDict }
setParamValue [::SpiceGenTcl::Analysis]Analysis, Top, Main, Index
Sets (or changes) value of particular parameter.
Parameters
paramName | Name of parameter. |
value | The new value of parameter. |
method setParamValue {paramName value} { # Sets (or changes) value of particular parameter. # paramName - name of parameter # value - the new value of parameter set paramName [string tolower $paramName] set error [catch {dict get $Params $paramName}] if {$error>0} { error "Parameter with name '$paramName' was not found in parameter analysis's '[my configure -Name]' list of parameters '[dict keys [my getParams]]'" } else { set param [dict get $Params $paramName] } $param configure -Value $value return }
Axis [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
appendDataPoints | See Dataset.appendDataPoints |
configure | Configure properties. |
getDataPoints | See Dataset.getDataPoints |
getStr | See Dataset.getStr |
setDataPoints | See Dataset.setDataPoints |
Properties
Readable: -Len
, -Name
, -NumType
, -Type
Writable: -Len
, -Name
, -NumType
, -Type
Superclasses
constructor [::SpiceGenTcl::Axis]Axis, Top, Main, Index
initialize axis
Axis new name type len ?numType?
Parameters
name | Name of the axis. |
type | Type of axis. |
len | Total number of points. |
numType | Numerical type of axis. Optional, default real . |
method constructor {name type len {numType real}} { # initialize axis # name - name of the axis # type - type of axis # len - total number of points # numType - numerical type of axis next $name $type $len $numType }
BinaryReader [::SpiceGenTcl]Top, Main, Index
Method summary
configure | Configure properties. |
readComplex | Reads two 8 byte numbers from file. |
readFloat32 | Reads 4 bytes number from file. |
readFloat64 | Reads 8 bytes number from file . |
skip4bytes | Moves pointer of position in file forward in 4 bytes. |
skip8bytes | Moves pointer of position in file forward in 8 bytes. |
skip16bytes | Moves pointer of position in file forward in 16 bytes. |
Subclasses
readComplex [::SpiceGenTcl::BinaryReader]BinaryReader, Top, Main, Index
Reads two 8 byte numbers from file.
Parameters
file | File handler. |
Return value
list of two values.
method readComplex {file} { # Reads two 8 byte numbers from file. # file - file handler # Returns: list of two values. set s [read $file 16] binary scan $s "dd" re im return [list $re $im] }
readFloat32 [::SpiceGenTcl::BinaryReader]BinaryReader, Top, Main, Index
Reads 4 bytes number from file.
Parameters
file | File handler. |
Return value
value of number.
method readFloat32 {file} { # Reads 4 bytes number from file. # file - file handler # Returns: value of number. set s [read $file 4] binary scan $s "f" num return $num }
readFloat64 [::SpiceGenTcl::BinaryReader]BinaryReader, Top, Main, Index
Reads 8 bytes number from file .
Parameters
file | File handler. |
Return value
value of number.
method readFloat64 {file} { # Reads 8 bytes number from file . # file - file handler # Returns: value of number. set s [read $file 8] binary scan $s "d" num return $num }
skip4bytes [::SpiceGenTcl::BinaryReader]BinaryReader, Top, Main, Index
Moves pointer of position in file forward in 4 bytes.
Parameters
file | File handler. |
method skip4bytes {file} { # Moves pointer of position in file forward in 4 bytes. # file - file handler read $file 4 return }
skip8bytes [::SpiceGenTcl::BinaryReader]BinaryReader, Top, Main, Index
Moves pointer of position in file forward in 8 bytes.
Parameters
file | File handler. |
method skip8bytes {file} { # Moves pointer of position in file forward in 8 bytes. # file - file handler read $file 8 return }
skip16bytes [::SpiceGenTcl::BinaryReader]BinaryReader, Top, Main, Index
Moves pointer of position in file forward in 16 bytes.
Parameters
file | File handler. |
method skip16bytes {file} { # Moves pointer of position in file forward in 16 bytes. # file - file handler read $file 16 return }
Circuit [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
add | Adds elements object to Elements dictionary. |
configure | Configure properties. |
del | Deletes element from the circuit by its name. |
detachSimulator | Removes Simulator object reference from Circuit . |
duplListCheck | See DuplChecker.duplListCheck |
genSPICEString | Creates circuit string for SPICE netlist. |
getAllElemNames | See Netlist.getAllElemNames |
getDataDict | Method to get dictionary with raw data vectors. |
getElement | Gets particular element object reference by its name. |
runAndRead | Invokes 'runAndRead', 'configure -Log' and 'configure -Data' methods from attached simulator. |
Properties
Readable: -Data
, -Log
, -Name
, -Simulator
Writable: -Data
, -Log
, -Name
, -Simulator
Superclasses
constructor [::SpiceGenTcl::Circuit]Circuit, Top, Main, Index
Creates object of class CircuitNetlist
.
Circuit new name
Parameters
name | Name of the tol-level circuit. |
Description
Class implements a top level netlist which is run in SPICE. We should add Simulator
object reference to make it able to run simulation. Results of last simulation attached as RawData
class object and can be retrieved by getData
method.
method constructor {name} { # Creates object of class `CircuitNetlist`. # name - name of the tol-level circuit # Class implements a top level netlist which is run in SPICE. We should add `Simulator` # object reference to make it able to run simulation. Results of last simulation attached as `RawData` class object # and can be retrieved by `getData` method. next $name }
add [::SpiceGenTcl::Circuit]Circuit, Top, Main, Index
Adds elements object to Elements dictionary.
Parameters
element | Element object reference. |
method add {element} { # Adds elements object to Elements dictionary. # element - element object reference my variable Elements set elemName [string tolower [$element configure -Name]] if {([info object class $element {::SpiceGenTcl::Analysis}]) && ([info exists ContainAnalysis])} { error "Netlist '[my configure -Name]' already contains Analysis element" } elseif {[info object class $element {::SpiceGenTcl::Analysis}]} { set ContainAnalysis "" } if {[info exists Elements]} { set elemList [my getAllElemNames] } lappend elemList $elemName if {[my duplListCheck $elemList]} { error "Netlist '[my configure -Name]' already contains element with name $elemName" } dict append Elements [$element configure -Name] $element return }
del [::SpiceGenTcl::Circuit]Circuit, Top, Main, Index
Deletes element from the circuit by its name.
Parameters
elemName | Name of element to delete. |
method del {elemName} { # Deletes element from the circuit by its name. # elemName - name of element to delete my variable Elements set elemName [string tolower $elemName] set error [catch {dict get $Elements $elemName}] if {$error>0} { error "Element with name '$elemName' was not found in device's '[my configure -Name]' list of elements" } else { set Elements [dict remove $Elements $elemName] if {[info object class [dict get $Elements $elemName] {::SpiceGenTcl::Analysis}]} { unset ContainAnalysis } } return }
detachSimulator [::SpiceGenTcl::Circuit]Circuit, Top, Main, Index
Removes Simulator
object reference from Circuit
.
method detachSimulator {} { # Removes `Simulator` object reference from `Circuit`. unset Simulator return }
genSPICEString [::SpiceGenTcl::Circuit]Circuit, Top, Main, Index
Creates circuit string for SPICE netlist.
Return value
'circuit string'
method genSPICEString {} { # Creates circuit string for SPICE netlist. # Returns: 'circuit string' my variable Elements lappend totalStr [my configure -Name] dict for {elemName element} $Elements { lappend totalStr [$element genSPICEString] } return [join $totalStr \n] }
getDataDict [::SpiceGenTcl::Circuit]Circuit, Top, Main, Index
Method to get dictionary with raw data vectors.
Return value
dict with vectors data, keys - names of vectors
method getDataDict {} { # Method to get dictionary with raw data vectors. # Returns: dict with vectors data, keys - names of vectors return [[my configure -Data] getTracesData] }
getElement [::SpiceGenTcl::Circuit]Circuit, Top, Main, Index
Gets particular element object reference by its name.
Parameters
elemName | Name of element. |
method getElement {elemName} { # Gets particular element object reference by its name. # elemName - name of element my variable Elements set elemName [string tolower $elemName] set error [catch {dict get $Elements $elemName}] if {$error>0} { error "Element with name '$elemName' was not found in netlist's '[my configure -Name]' list of elements" } else { set foundElem [dict get $Elements $elemName] } return $foundElem }
runAndRead [::SpiceGenTcl::Circuit]Circuit, Top, Main, Index
Invokes 'runAndRead', 'configure -Log' and 'configure -Data' methods from attached simulator.
method runAndRead {} { # Invokes 'runAndRead', 'configure -Log' and 'configure -Data' methods from attached simulator. if {[info exists Simulator]==0} { error "Simulator is not attached to '[my configure -Name]' circuit" } $Simulator runAndRead [my genSPICEString] my configure -Log [$Simulator configure -Log] my configure -Data [$Simulator configure -Data] }
Comment [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
configure | Configure properties. |
genSPICEString | Creates comment string for SPICE netlist. |
Properties
Readable: -Name
, -Value
Writable: -Name
, -Value
Superclasses
constructor [::SpiceGenTcl::Comment]Comment, Top, Main, Index
Creates object of class Comment
.
Comment new value ?args?
Parameters
value | Value of the comment. |
args | Optional argument -name - represent name of comment string. |
Description
Class represent comment string, it can be a multiline comment.
method constructor {value args} { # Creates object of class `Comment`. # value - value of the comment # args - optional argument -name - represent name of comment string # Class represent comment string, it can be a multiline comment. set arguments [argparse { -name= }] if {[info exists name]} { my configure -Name $name } else { my configure -Name [self object] } my configure -Value $value }
genSPICEString [::SpiceGenTcl::Comment]Comment, Top, Main, Index
Creates comment string for SPICE netlist.
Return value
string '*$Value
'
method genSPICEString {} { # Creates comment string for SPICE netlist. # Returns: string '*$Value' set splitted [split [my configure -Value] "\n"] set prepared [join [lmap line $splitted {set result "*$line"}] \n] return $prepared }
Dataset [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
appendDataPoints | Method to set the data points. |
configure | Configure properties. |
getDataPoints | Not documented. |
getStr | Not documented. |
setDataPoints | Method to set the data points. |
Properties
Readable: -Len
, -Name
, -NumType
, -Type
Writable: -Len
, -Name
, -NumType
, -Type
Subclasses
constructor [::SpiceGenTcl::Dataset]Dataset, Top, Main, Index
initialize dataset
Dataset new name type len ?numType?
Parameters
name | Name of the dataset. |
type | Type of dataset. |
len | Total number of points. |
numType | Numerical type of dataset. Optional, default real . |
method constructor {name type len {numType real}} { # initialize dataset # name - name of the dataset # type - type of dataset # len - total number of points # numType - numerical type of dataset my configure -Name $name my configure -Type $type my configure -Len $len my configure -NumType $numType }
appendDataPoints [::SpiceGenTcl::Dataset]Dataset, Top, Main, Index
method to set the data points
Parameters
dataPoint | Not documented. |
method appendDataPoints {dataPoint} { # method to set the data points lappend DataPoints $dataPoint return }
getDataPoints [::SpiceGenTcl::Dataset]Dataset, Top, Main, Index
method getDataPoints {} { if {[info exists DataPoints]} { return $DataPoints } else { error "Dataset with name '[my configure -Name]' doesn't contain non-zero points" } return }
getStr [::SpiceGenTcl::Dataset]Dataset, Top, Main, Index
method getStr {} { return "Name: '[my configure -Name]', Type: '[my configure -Type]', Length: '[my configure -Len]', Numerical type: '[my configure -NumType]'" }
setDataPoints [::SpiceGenTcl::Dataset]Dataset, Top, Main, Index
method to set the data points
Parameters
dataPoints | Not documented. |
method setDataPoints {dataPoints} { # method to set the data points set DataPoints $dataPoints return }
Device [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
addParam | Adds new parameter to device, and throws error on dublicated names. |
checkFloatingPins | Check if some pin device doesn't have connected nodes and return list of them. |
configure | Configure properties. |
deleteParam | Deletes existing Parameter object from list Params . |
duplListCheck | See DuplChecker.duplListCheck |
genSPICEString | Creates device string for SPICE netlist. |
getParams | Gets the dictionary that contains parameter name as keys and parameter values as the values. |
getPins | Gets the dictionary that contains pin name as keys and connected node name as the values. |
setParamValue | Sets (or change) value of particular parameter. |
setPinNodeName | Sets node name of particular pin, so, in other words, connect particular pin to particular node. |
Properties
Readable: -Name
Writable: -Name
Superclasses
Mixins
Subclasses
::SpiceGenTcl::Common::BasicDevices::Resistor, ::SpiceGenTcl::Common::BasicDevices::Capacitor, ::SpiceGenTcl::Common::BasicDevices::Inductor, ::SpiceGenTcl::Common::BasicDevices::SubcircuitInstance, ::SpiceGenTcl::Common::BasicDevices::VSwitch, ::SpiceGenTcl::Common::BasicDevices::CSwitch, ::SpiceGenTcl::Common::BasicDevices::SubcircuitInstanceAuto, ::SpiceGenTcl::Common::Sources::dc, ::SpiceGenTcl::Common::Sources::ac, ::SpiceGenTcl::Common::Sources::pulse, ::SpiceGenTcl::Common::Sources::sin, ::SpiceGenTcl::Common::Sources::exp, ::SpiceGenTcl::Common::Sources::pwl, ::SpiceGenTcl::Common::Sources::sffm, ::SpiceGenTcl::Common::Sources::Vccs, ::SpiceGenTcl::Common::Sources::Vcvs, ::SpiceGenTcl::Common::Sources::Cccs, ::SpiceGenTcl::Common::Sources::Ccvs, ::SpiceGenTcl::Ngspice::BasicDevices::Resistor, ::SpiceGenTcl::Ngspice::BasicDevices::Capacitor, ::SpiceGenTcl::Ngspice::BasicDevices::Inductor, ::SpiceGenTcl::Ngspice::BasicDevices::SubcircuitInstance, ::SpiceGenTcl::Ngspice::BasicDevices::SubcircuitInstanceAuto, ::SpiceGenTcl::Ngspice::Sources::pulse, ::SpiceGenTcl::Ngspice::Sources::sffm, ::SpiceGenTcl::Ngspice::Sources::am, ::SpiceGenTcl::Ngspice::Sources::Vport, ::SpiceGenTcl::Ngspice::Sources::BehaviouralSource, ::SpiceGenTcl::Ngspice::SemiconductorDevices::Diode, ::SpiceGenTcl::Ngspice::SemiconductorDevices::Bjt, ::SpiceGenTcl::Ngspice::SemiconductorDevices::Jfet, ::SpiceGenTcl::Ngspice::SemiconductorDevices::Mesfet, ::SpiceGenTcl::Ngspice::SemiconductorDevices::Mosfet, ::SpiceGenTcl::Xyce::BasicDevices::Resistor, ::SpiceGenTcl::Xyce::BasicDevices::Capacitor, ::SpiceGenTcl::Xyce::BasicDevices::Inductor, ::SpiceGenTcl::Xyce::BasicDevices::GenSwitch, ::SpiceGenTcl::Xyce::BasicDevices::SubcircuitInstance, ::SpiceGenTcl::Xyce::BasicDevices::SubcircuitInstanceAuto, ::SpiceGenTcl::Xyce::Sources::BehaviouralSource, ::SpiceGenTcl::Xyce::SemiconductorDevices::Diode, ::SpiceGenTcl::Xyce::SemiconductorDevices::Bjt, ::SpiceGenTcl::Xyce::SemiconductorDevices::Jfet, ::SpiceGenTcl::Xyce::SemiconductorDevices::Mesfet, ::SpiceGenTcl::Xyce::SemiconductorDevices::Mosfet
constructor [::SpiceGenTcl::Device]Device, Top, Main, Index
Creates object of class Device
.
Device new name pins params
Parameters
name | Name of the device. |
pins | List of pins in the order they appear in SPICE device's definition together with connected node in form: {{Name0 NodeName} {Name1 NodeName} {Name2 NodeName} ...} Nodes string values could be empty. |
params | List of instance parameters in form {{Name Value ?-pos|eq|poseq?} {Name Value ?-pos|eq|poseq?} {Name Value ?-pos|eq|poseq?} ...} Parameter list can be empty if device doesn't have instance parameters. |
Description
Class models general device in SPICE, number of which must be assembled (connected) to get the circuit to simulate. This class provides basic machinery for creating any device that can be connected to net in circuit. It can be instantiated to create device that contains:
- reference name, like R1, L1, M1, etc;
- list of pins in the order of appearence of device's definition, for example, 'drain gate source' for MOS transistor;
- list of parameters, that could be positional (+equation), keyword (+equation) parameters, like
R1 nm np 100 tc1=1 tc2={tc0*tc12}
, where 100 - positional parameter, tc1 - keyword parameters and tc2 - keyword parameter with equation
This class accept definition that contains elements listed above, and generates classes: Pin, Parameter, PositionalParameter with compositional relationship (has a).
Each parameter definition could be modified by optional flags:
- pos - parameter has strict position and only '
$Value
' is displayed in netlist - eq - parameter may contain equation in terms of functions and other parsmeters, printed as '
$Name
={$Equation
}' - poseq - combination of both flags, print only '{
$Equation
}'
method constructor {name pins params} { # Creates object of class `Device`. # name - name of the device # pins - list of pins in the order they appear in SPICE device's definition together # with connected node in form: `{{Name0 NodeName} {Name1 NodeName} {Name2 NodeName} ...}` # Nodes string values could be empty. # params - list of instance parameters in form `{{Name Value ?-pos|eq|poseq?} {Name Value ?-pos|eq|poseq?} {Name Value ?-pos|eq|poseq?} ...}` # Parameter list can be empty if device doesn't have instance parameters. # Class models general device in SPICE, number of which # must be assembled (connected) to get the circuit to simulate. This class provides basic machinery # for creating any device that can be connected to net in circuit. It can be instantiated to create # device that contains: # - reference name, like R1, L1, M1, etc; # - list of pins in the order of appearence of device's definition, for example, 'drain gate source' for MOS # transistor; # - list of parameters, that could be positional (+equation), keyword (+equation) parameters, like `R1 nm np 100 tc1=1 tc2={tc0*tc12}`, # where 100 - positional parameter, tc1 - keyword parameters and tc2 - keyword parameter with equation # This class accept definition that contains elements listed above, and generates classes: Pin, Parameter, PositionalParameter # with compositional relationship (has a). my configure -Name $name # create Pins objects foreach pin $pins { my AddPin [lindex $pin 0] [lindex $pin 1] } #ruff # Each parameter definition could be modified by # optional flags: # - pos - parameter has strict position and only '$Value' is displayed in netlist # - eq - parameter may contain equation in terms of functions and other parsmeters, # printed as '$Name={$Equation}' # - poseq - combination of both flags, print only '{$Equation}' if {$params!=""} { foreach param $params { if {[lindex $param 2]=={}} { my addParam [lindex $param 0] [lindex $param 1] } elseif {[lindex $param 1]=="-sw"} { my addParam [lindex $param 0] -sw } else { my addParam {*}$param } } } else { set Params "" } }
addParam [::SpiceGenTcl::Device]Device, Top, Main, Index
Adds new parameter to device, and throws error on dublicated names.
Parameters
paramName | Name of parameter. |
value | Value of parameter. |
args | Optional arguments that adds qualificator to parameter: -pos - positional parameter, -eq - equational parameter, -poseq - positional equation parameter. |
method addParam {paramName value args} { # Adds new parameter to device, and throws error on dublicated names. # paramName - name of parameter # value - value of parameter # args - optional arguments that adds qualificator to parameter: -pos - positional parameter, -eq - # equational parameter, -poseq - positional equation parameter set arguments [argparse { {-pos -forbid {poseq}} {-eq -forbid {poseq}} {-poseq -forbid {pos eq}} {-posnocheck -forbid {poseq eq pos}} {-nocheck -forbid {pos eq poseq}} }] # method adds new Parameter object to the list Params set paramName [string tolower $paramName] if {[info exists Params]} { set paramList [dict keys $Params] } lappend paramList $paramName if {[my duplListCheck $paramList]} { error "Parameters list '$paramList' has already contains parameter with name '$paramName'" } # select parameter object according to parameter qualificator if {$value=="-sw"} { dict append Params $paramName [::SpiceGenTcl::ParameterSwitch new $paramName] } elseif {[info exists pos]} { dict append Params $paramName [::SpiceGenTcl::ParameterPositional new $paramName $value] } elseif {[info exists eq]} { dict append Params $paramName [::SpiceGenTcl::ParameterEquation new $paramName $value] } elseif {[info exists poseq]} { dict append Params $paramName [::SpiceGenTcl::ParameterPositionalEquation new $paramName $value] } elseif {[info exists posnocheck]} { dict append Params $paramName [::SpiceGenTcl::ParameterPositionalNoCheck new $paramName $value] } elseif {[info exists nocheck]} { dict append Params $paramName [::SpiceGenTcl::ParameterNoCheck new $paramName $value] } else { dict append Params $paramName [::SpiceGenTcl::Parameter new $paramName $value] } return }
checkFloatingPins [::SpiceGenTcl::Device]Device, Top, Main, Index
Check if some pin device doesn't have connected nodes and return list of them.
Return value
list of floating pins
method checkFloatingPins {} { # Check if some pin device doesn't have connected nodes and return list of them. # Returns: list of floating pins set floatingPins {} dict for {pinName pin} $Pins { if {[$pin checkFloating]=="true"} { lappend floatingPins [$pin configure -Name] } } return $floatingPins }
deleteParam [::SpiceGenTcl::Device]Device, Top, Main, Index
Deletes existing Parameter
object from list Params
.
Parameters
paramName | Name of parameter that will be deleted. |
method deleteParam {paramName} { # Deletes existing `Parameter` object from list `Params`. # paramName - name of parameter that will be deleted set paramName [string tolower $paramName] set error [catch {dict get $Params $paramName}] if {$error>0} { error "Parameter with name '$paramName' was not found in device's '[my configure -Name]' list of parameters '[dict keys [my getParams]]'" } else { set Params [dict remove $Params $paramName] } return }
genSPICEString [::SpiceGenTcl::Device]Device, Top, Main, Index
Creates device string for SPICE netlist.
Return value
string '$Name
$Nodes
$Params
'
method genSPICEString {} { # Creates device string for SPICE netlist. # Returns: string '$Name $Nodes $Params' dict for {pinName pin} $Pins { set error [catch {$pin genSPICEString} errStr] if {$error!=1} { lappend nodes [$pin genSPICEString] } else { error "Device '[my configure -Name]' can't be netlisted because '$pinName' pin is floating" } } if {($Params=="") || ([info exists Params]==0)} { lappend params "" return "[my configure -Name] [join $nodes]" } else { dict for {paramName param} $Params { lappend params [$param genSPICEString] } return "[my configure -Name] [join $nodes] [join $params]" } }
getParams [::SpiceGenTcl::Device]Device, Top, Main, Index
Gets the dictionary that contains parameter name as keys and parameter values as the values.
Return value
parameters dictionary
method getParams {} { # Gets the dictionary that contains parameter name as keys and # parameter values as the values. # Returns: parameters dictionary set tempDict [dict create] dict for {paramName param} $Params { dict append tempDict $paramName [$param configure -Value] } return $tempDict }
getPins [::SpiceGenTcl::Device]Device, Top, Main, Index
Gets the dictionary that contains pin name as keys and connected node name as the values.
Return value
parameters dictionary
method getPins {} { # Gets the dictionary that contains pin name as keys and # connected node name as the values. # Returns: parameters dictionary set tempDict [dict create] dict for {pinName pin} $Pins { dict append tempDict $pinName [$pin configure -NodeName] } return $tempDict }
setParamValue [::SpiceGenTcl::Device]Device, Top, Main, Index
Sets (or change) value of particular parameter.
Parameters
paramName | Name of parameter. |
value | New value of parameter. |
method setParamValue {paramName value} { # Sets (or change) value of particular parameter. # paramName - name of parameter # value - new value of parameter set paramName [string tolower $paramName] set error [catch {dict get $Params $paramName}] if {$error>0} { error "Parameter with name '$paramName' was not found in device's '[my configure -Name]' list of parameters '[dict keys [my getParams]]'" } else { set param [dict get $Params $paramName] } $param configure -Value $value return }
setPinNodeName [::SpiceGenTcl::Device]Device, Top, Main, Index
Sets node name of particular pin, so, in other words, connect particular pin to particular node.
Parameters
pinName | Name of the pin. |
nodeName | Name of the node that we want connect to pin. |
method setPinNodeName {pinName nodeName} { # Sets node name of particular pin, so, # in other words, connect particular pin to particular node. # pinName - name of the pin # nodeName - name of the node that we want connect to pin set error [catch {dict get $Pins $pinName}] if {$error>0} { error "Pin with name '$pinName' was not found in device's '[my configure -Name]' list of pins '[dict keys [my getPins]]'" } else { set pin [dict get $Pins $pinName] } $pin configure -NodeName $nodeName return }
DuplChecker [::SpiceGenTcl]Top, Main, Index
Method summary
configure | Configure properties. |
duplListCheck | Checks if list contains duplicates. |
Subclasses
Device, Model, Options, ParamStatement, Netlist, Analysis
duplListCheck [::SpiceGenTcl::DuplChecker]DuplChecker, Top, Main, Index
Checks if list contains duplicates.
Parameters
list | List to check. |
Return value
0 if there are no duplicates and 1 if there are.
method duplListCheck {list} { # Checks if list contains duplicates. # list - list to check # Returns: 0 if there are no duplicates and 1 if there are. set flag 0 set new {} foreach item $list { if {[lsearch $new $item] < 0} { lappend new $item } else { set flag 1 break } } return $flag }
EmptyTrace [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
appendDataPoints | See Dataset.appendDataPoints |
configure | Configure properties. |
getDataPoints | Not documented. |
getStr | See Dataset.getStr |
setDataPoints | See Dataset.setDataPoints |
Properties
Readable: -Len
, -Name
, -NumType
, -Type
Writable: -Len
, -Name
, -NumType
, -Type
Superclasses
constructor [::SpiceGenTcl::EmptyTrace]EmptyTrace, Top, Main, Index
initialize dummy trace
EmptyTrace new name type len ?numType?
Parameters
name | Name of the dummy trace. |
type | Type of dummy trace. |
len | Total number of points. |
numType | Numerical type of dummy trace. Optional, default real . |
axis | Name of axis that is linked to dummy trace. |
method constructor {name type len {numType real}} { # initialize dummy trace # name - name of the dummy trace # type - type of dummy trace # len - total number of points # axis - name of axis that is linked to dummy trace # numType - numerical type of dummy trace next $name $type $len $numType }
getDataPoints [::SpiceGenTcl::EmptyTrace]EmptyTrace, Top, Main, Index
method getDataPoints {} { if {[info exists DataPoints]} { return "" } return }
Include [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
configure | Configure properties. |
genSPICEString | Creates include string for SPICE netlist. |
Properties
Readable: -Name
, -Value
Writable: -Name
, -Value
Superclasses
constructor [::SpiceGenTcl::Include]Include, Top, Main, Index
Creates object of class Include
.
Include new value ?args?
Parameters
value | Value of the include path. |
args | Optional argument -name - represent name of include statement. |
Description
This class represent .include statement.
method constructor {value args} { # Creates object of class `Include`. # value - value of the include path # args - optional argument -name - represent name of include statement # This class represent .include statement. set arguments [argparse { -name= }] if {[info exists name]} { my configure -Name $name } else { my configure -Name [self object] } my configure -Value $value }
genSPICEString [::SpiceGenTcl::Include]Include, Top, Main, Index
Creates include string for SPICE netlist.
Return value
'.include $Value
'
method genSPICEString {} { # Creates include string for SPICE netlist. # Returns: '.include $Value' return ".include [my configure -Value]" }
KeyArgsBuilder [::SpiceGenTcl]Top, Main, Index
Method summary
argsPreprocess | Calls argparse and constructs list for passing to Device constructor. |
buildArgStr | Builds argument list for argparse. |
Subclasses
::SpiceGenTcl::Common::BasicDevices::Inductor, ::SpiceGenTcl::Common::Sources::Vsin, ::SpiceGenTcl::Ngspice::Sources::sffm, ::SpiceGenTcl::Ngspice::Sources::Vsffm, ::SpiceGenTcl::Ngspice::Sources::BehaviouralSource, ::SpiceGenTcl::Ngspice::BasicDevices::RModel, ::SpiceGenTcl::Ngspice::BasicDevices::CModel, ::SpiceGenTcl::Ngspice::BasicDevices::LModel, ::SpiceGenTcl::Ngspice::BasicDevices::VSwitchModel, ::SpiceGenTcl::Ngspice::BasicDevices::CSwitchModel, ::SpiceGenTcl::Ngspice::SemiconductorDevices::DiodeModel, ::SpiceGenTcl::Ngspice::SemiconductorDevices::BjtGPModel, ::SpiceGenTcl::Ngspice::SemiconductorDevices::Jfet1Model, ::SpiceGenTcl::Ngspice::SemiconductorDevices::Jfet2Model, ::SpiceGenTcl::Ngspice::SemiconductorDevices::Mesfet1Model, ::SpiceGenTcl::Xyce::BasicDevices::Resistor, ::SpiceGenTcl::Xyce::BasicDevices::Capacitor, ::SpiceGenTcl::Xyce::BasicDevices::Inductor, ::SpiceGenTcl::Xyce::Sources::BehaviouralSource
argsPreprocess [::SpiceGenTcl::KeyArgsBuilder]KeyArgsBuilder, Top, Main, Index
Calls argparse and constructs list for passing to Device constructor.
Parameters
paramsNames | List of parameter names, define alias for parameter name by using two element list {paramName aliasName} |
args | Argument list with key names and it's values. |
Return value
string in form *-paramName= \n {-paramName= -alias aliasName} \n ...*
method argsPreprocess {paramsNames args} { # Calls argparse and constructs list for passing to Device constructor. # paramsNames - list of parameter names, define alias for parameter name by # using two element list {paramName aliasName} # args - argument list with key names and it's values # Returns: string in form *-paramName= \n {-paramName= -alias aliasName} \n ...* set paramDefList [my buildArgStr $paramsNames] set arguments [argparse -inline " $paramDefList "] set params "" dict for {paramName value} $arguments { lappend params "$paramName $value" } return $params }
buildArgStr [::SpiceGenTcl::KeyArgsBuilder]KeyArgsBuilder, Top, Main, Index
Builds argument list for argparse.
Parameters
paramsNames | List of parameter names, define alias for parameter name by using two element list {paramName aliasName} |
Return value
string in form *-paramName= \n {-paramName= -alias aliasName} \n ...*
method buildArgStr {paramsNames} { # Builds argument list for argparse. # paramsNames - list of parameter names, define alias for parameter name by # using two element list {paramName aliasName} # Returns: string in form *-paramName= \n {-paramName= -alias aliasName} \n ...* foreach paramName $paramsNames { if {[llength $paramName]>1} { lappend paramDefList "\{-[lindex $paramName 0]= -alias [lindex $paramName 1]\}" } else { lappend paramDefList "-${paramName}=" } } set paramDefStr [join $paramDefList \n] return $paramDefStr }
Library [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
configure | Configure properties. |
genSPICEString | Creates library string for SPICE netlist. |
Properties
Readable: -LibValue
, -Name
, -Value
Writable: -LibValue
, -Name
, -Value
Superclasses
constructor [::SpiceGenTcl::Library]Library, Top, Main, Index
Creates object of class Library
.
Library new value libValue ?args?
Parameters
value | Value of the include file. |
libValue | Value of selected library. |
args | Optional argument -name - represent name of library statement. |
Description
Class represent .lib statement.
method constructor {value libValue args} { # Creates object of class `Library`. # value - value of the include file # libValue - value of selected library # args - optional argument -name - represent name of library statement # Class represent .lib statement. set arguments [argparse { -name= }] if {[info exists name]} { my configure -Name $name } else { my configure -Name [self object] } my configure -Value $value my configure -LibValue $libValue }
genSPICEString [::SpiceGenTcl::Library]Library, Top, Main, Index
Creates library string for SPICE netlist.
Return value
'.lib $Value
$LibValue
'
method genSPICEString {} { # Creates library string for SPICE netlist. # Returns: '.lib $Value $LibValue' return ".lib [my configure -Value] [my configure -LibValue]" }
Model [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
addParam | Adds new parameter to device, and throws error on dublicated names. |
configure | Configure properties. |
deleteParam | Deletes existing Parameter object from list Params . |
duplListCheck | See DuplChecker.duplListCheck |
genSPICEString | Creates model string for SPICE netlist. |
getParams | Gets the dictionary that contains parameter name as keys and parameter values as the values. |
setParamValue | Sets (or change) value of particular parameter. |
Properties
Readable: -Name
, -Type
Writable: -Name
, -Type
Superclasses
Mixins
Subclasses
::SpiceGenTcl::Ngspice::BasicDevices::RModel, ::SpiceGenTcl::Ngspice::BasicDevices::CModel, ::SpiceGenTcl::Ngspice::BasicDevices::LModel, ::SpiceGenTcl::Ngspice::BasicDevices::VSwitchModel, ::SpiceGenTcl::Ngspice::BasicDevices::CSwitchModel, ::SpiceGenTcl::Ngspice::SemiconductorDevices::DiodeModel, ::SpiceGenTcl::Ngspice::SemiconductorDevices::BjtGPModel, ::SpiceGenTcl::Ngspice::SemiconductorDevices::Jfet1Model, ::SpiceGenTcl::Ngspice::SemiconductorDevices::Jfet2Model, ::SpiceGenTcl::Ngspice::SemiconductorDevices::Mesfet1Model
constructor [::SpiceGenTcl::Model]Model, Top, Main, Index
Creates object of class Model
.
Model new name type params
Parameters
name | Name of the model. |
type | Type of model, for example, diode, npn, etc. |
params | Not documented. |
instParams | List of instance parameters in form {{Name Value ?-pos|eq|poseq?} {Name Value ?-pos|eq|poseq?} {Name Value ?-pos|eq|poseq?} ...} |
Description
Class represents model card in SPICE netlist.
method constructor {name type params} { # Creates object of class `Model`. # name - name of the model # type - type of model, for example, diode, npn, etc # instParams - list of instance parameters in form `{{Name Value ?-pos|eq|poseq?} {Name Value ?-pos|eq|poseq?} {Name Value ?-pos|eq|poseq?} ...}` # Class represents model card in SPICE netlist. my configure -Name $name my configure -Type $type # create Params objects if {$params!=""} { foreach param $params { if {[lindex $param 2]=={}} { my addParam [lindex $param 0] [lindex $param 1] } elseif {[lindex $param 2]=="-eq"} { my addParam [lindex $param 0] [lindex $param 1] -eq } else { error "Wrong parameter definition in model $name" } } } else { set Params "" } }
addParam [::SpiceGenTcl::Model]Model, Top, Main, Index
Adds new parameter to device, and throws error on dublicated names.
Parameters
paramName | Name of parameter. |
value | Value of parameter. |
args | Optional arguments that adds qualificator to parameter: -pos - positional parameter, -eq - equational parameter, -poseq - positional equation parameter. |
method addParam {paramName value args} { # Adds new parameter to device, and throws error on dublicated names. # paramName - name of parameter # value - value of parameter # args - optional arguments that adds qualificator to parameter: -pos - positional parameter, -eq - # equational parameter, -poseq - positional equation parameter set arguments [argparse { {-pos -forbid {poseq}} {-eq -forbid {poseq}} {-poseq -forbid {pos eq}} {-posnocheck -forbid {poseq eq pos}} {-nocheck -forbid {pos eq poseq}} }] # method adds new Parameter object to the list Params set paramName [string tolower $paramName] if {[info exists Params]} { set paramList [dict keys $Params] } lappend paramList $paramName if {[my duplListCheck $paramList]} { error "Parameters list '$paramList' has already contains parameter with name '$paramName'" } # select parameter object according to parameter qualificator if {$value=="-sw"} { dict append Params $paramName [::SpiceGenTcl::ParameterSwitch new $paramName] } elseif {[info exists pos]} { dict append Params $paramName [::SpiceGenTcl::ParameterPositional new $paramName $value] } elseif {[info exists eq]} { dict append Params $paramName [::SpiceGenTcl::ParameterEquation new $paramName $value] } elseif {[info exists poseq]} { dict append Params $paramName [::SpiceGenTcl::ParameterPositionalEquation new $paramName $value] } elseif {[info exists posnocheck]} { dict append Params $paramName [::SpiceGenTcl::ParameterPositionalNoCheck new $paramName $value] } elseif {[info exists nocheck]} { dict append Params $paramName [::SpiceGenTcl::ParameterNoCheck new $paramName $value] } else { dict append Params $paramName [::SpiceGenTcl::Parameter new $paramName $value] } return }
deleteParam [::SpiceGenTcl::Model]Model, Top, Main, Index
Deletes existing Parameter
object from list Params
.
Parameters
paramName | Name of parameter that will be deleted. |
method deleteParam {paramName} { # Deletes existing `Parameter` object from list `Params`. # paramName - name of parameter that will be deleted set paramName [string tolower $paramName] set error [catch {dict get $Params $paramName}] if {$error>0} { error "Parameter with name '$paramName' was not found in device's '[my configure -Name]' list of parameters '[dict keys [my getParams]]'" } else { set Params [dict remove $Params $paramName] } return }
genSPICEString [::SpiceGenTcl::Model]Model, Top, Main, Index
Creates model string for SPICE netlist.
Return value
string '.model $Name
$Type
$Params
'
method genSPICEString {} { # Creates model string for SPICE netlist. # Returns: string '.model $Name $Type $Params' if {($Params=="") || ([info exists Params]==0)} { lappend params "" return ".model [my configure -Name] [my configure -Type]" } else { dict for {paramName param} $Params { lappend params [$param genSPICEString] } return ".model [my configure -Name] [my configure -Type]([join $params])" } }
getParams [::SpiceGenTcl::Model]Model, Top, Main, Index
Gets the dictionary that contains parameter name as keys and parameter values as the values.
Return value
parameters dictionary
method getParams {} { # Gets the dictionary that contains parameter name as keys and # parameter values as the values. # Returns: parameters dictionary set tempDict [dict create] dict for {paramName param} $Params { dict append tempDict $paramName [$param configure -Value] } return $tempDict }
setParamValue [::SpiceGenTcl::Model]Model, Top, Main, Index
Sets (or change) value of particular parameter.
Parameters
paramName | Name of parameter. |
value | New value of parameter. |
method setParamValue {paramName value} { # Sets (or change) value of particular parameter. # paramName - name of parameter # value - new value of parameter set paramName [string tolower $paramName] set error [catch {dict get $Params $paramName}] if {$error>0} { error "Parameter with name '$paramName' was not found in device's '[my configure -Name]' list of parameters '[dict keys [my getParams]]'" } else { set param [dict get $Params $paramName] } $param configure -Value $value return }
Netlist [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
add | Adds elements object to Elements dictionary. |
configure | Configure properties. |
del | Deletes element from the netlist by its name. |
duplListCheck | See DuplChecker.duplListCheck |
genSPICEString | Creates netlist string for SPICE netlist. |
getAllElemNames | Gets names of all elements in netlist. |
getElement | Gets particular element object reference by its name. |
Properties
Readable: -Name
Writable: -Name
Superclasses
Mixins
Subclasses
constructor [::SpiceGenTcl::Netlist]Netlist, Top, Main, Index
Creates object of class Netlist
.
Netlist new name
Parameters
name | Name of the netlist. |
Description
Class implements netlist as a collection of SPICE elements. Any element that has SPICEElement as a parent class can be added to Netlist, except Options and Analysis.
method constructor {name} { # Creates object of class `Netlist`. # name - name of the netlist # Class implements netlist as a collection of SPICE elements. Any element that has SPICEElement # as a parent class can be added to Netlist, except Options and Analysis. my configure -Name $name }
add [::SpiceGenTcl::Netlist]Netlist, Top, Main, Index
Adds elements object to Elements dictionary.
Parameters
element | Element object reference. |
method add {element} { # Adds elements object to Elements dictionary. # element - element object reference set elementClass [info object class $element] if {$elementClass=={::SpiceGenTcl::Options}} { error "Options element can't be included in general netlist, only top-level Circuit" } elseif {$elementClass=={::SpiceGenTcl::Analysis}} { error "Analysis element can't be included in general netlist, only top-level Circuit" } set elemName [string tolower [$element configure -Name]] if {[info exists Elements]} { set elemList [my getAllElemNames] } lappend elemList $elemName if {[my duplListCheck $elemList]} { error "Netlist '[my configure -Name]' already contains element with name $elemName" } dict append Elements [$element configure -Name] $element return }
del [::SpiceGenTcl::Netlist]Netlist, Top, Main, Index
Deletes element from the netlist by its name.
Parameters
elemName | Name of element to delete. |
method del {elemName} { # Deletes element from the netlist by its name. # elemName - name of element to delete set elemName [string tolower $elemName] set error [catch {dict get $Elements $elemName}] if {$error>0} { error "Element with name '$elemName' was not found in netlist's '[my configure -Name]' list of elements" } else { set Elements [dict remove $Elements $elemName] } return }
genSPICEString [::SpiceGenTcl::Netlist]Netlist, Top, Main, Index
Creates netlist string for SPICE netlist.
Return value
'netlist string'
method genSPICEString {} { # Creates netlist string for SPICE netlist. # Returns: 'netlist string' dict for {elemName element} $Elements { lappend totalStr [$element genSPICEString] } return [join $totalStr \n] }
getAllElemNames [::SpiceGenTcl::Netlist]Netlist, Top, Main, Index
Gets names of all elements in netlist.
Return value
list of elements names
method getAllElemNames {} { # Gets names of all elements in netlist. # Returns: list of elements names dict for {elemName elem} $Elements { lappend names $elemName } return $names }
getElement [::SpiceGenTcl::Netlist]Netlist, Top, Main, Index
Gets particular element object reference by its name.
Parameters
elemName | Name of element. |
method getElement {elemName} { # Gets particular element object reference by its name. # elemName - name of element set elemName [string tolower $elemName] set error [catch {dict get $Elements $elemName}] if {$error>0} { error "Element with name '$elemName' was not found in netlist's '[my configure -Name]' list of elements" } else { set foundElem [dict get $Elements $elemName] } return $foundElem }
Options [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
addParam | Creates new parameter object and add it to the list Params . |
configure | Configure properties. |
deleteParam | Deletes existing Parameter object from list Params . |
duplListCheck | See DuplChecker.duplListCheck |
genSPICEString | Creates options string for SPICE netlist. |
getParams | Gets the dictionary that contains parameter name as keys and parameter values as the values. |
setParamValue | Sets (or changes) value of particular parameter it throws a error if try to set a value of switch parameter. |
Properties
Readable: -Name
Writable: -Name
Superclasses
Mixins
constructor [::SpiceGenTcl::Options]Options, Top, Main, Index
Creates object of class Options
.
Options new params ?args?
Parameters
params | List of instance parameters in form {{Name Value ?-sw?} {Name Value ?-sw?} {Name Value ?-sw?} ...} |
args | Optional argument -name - represent name of library statement. |
name | Name of the parameter. |
Description
This class represent .options statement.
method constructor {params args} { # Creates object of class `Options`. # name - name of the parameter # params - list of instance parameters in form `{{Name Value ?-sw?} {Name Value ?-sw?} {Name Value ?-sw?} ...}` # args - optional argument -name - represent name of library statement # This class represent .options statement. set arguments [argparse { -name= }] if {[info exists name]} { my configure -Name $name } else { my configure -Name [self object] } foreach param $params { if {[lindex $param 2]=={}} { if {[lindex $param 1]=="-sw"} { my addParam [lindex $param 0] -sw } else { my addParam [lindex $param 0] [lindex $param 1] } } else { error "Wrong parameter definition in Options" } } }
addParam [::SpiceGenTcl::Options]Options, Top, Main, Index
Creates new parameter object and add it to the list Params
.
Parameters
paramName | Name of parameter. |
value | Value of parameter, with optional qualificator -eq. |
method addParam {paramName value} { # Creates new parameter object and add it to the list `Params`. # paramName - name of parameter # value - value of parameter, with optional qualificator -eq set paramName [string tolower $paramName] if {[info exists Params]} { set paramList [dict keys $Params] } lappend paramList $paramName if {[my duplListCheck $paramList]} { error "Parameters list '$paramList' has already contains parameter with name '$paramName'" } if {$value=="-sw"} { dict append Params $paramName [::SpiceGenTcl::ParameterSwitch new $paramName] } else { dict append Params $paramName [::SpiceGenTcl::ParameterNoCheck new $paramName $value] } return }
deleteParam [::SpiceGenTcl::Options]Options, Top, Main, Index
Deletes existing Parameter
object from list Params
.
Parameters
paramName | Name of parameter that will be deleted. |
method deleteParam {paramName} { # Deletes existing `Parameter` object from list `Params`. # paramName - name of parameter that will be deleted set paramName [string tolower $paramName] set error [catch {dict get $Params $paramName}] if {$error>0} { error "Parameter with name '$paramName' was not found in device's '[my configure -Name]' list of parameters '[dict keys [my getParams]]'" } else { set Params [dict remove $Params $paramName] } return }
genSPICEString [::SpiceGenTcl::Options]Options, Top, Main, Index
Creates options string for SPICE netlist.
Return value
'.options $Params
'
method genSPICEString {} { # Creates options string for SPICE netlist. # Returns: '.options $Params' dict for {paramName param} $Params { lappend params [$param genSPICEString] } return ".options [join $params]" }
getParams [::SpiceGenTcl::Options]Options, Top, Main, Index
Gets the dictionary that contains parameter name as keys and parameter values as the values.
Return value
parameters dictionary
method getParams {} { # Gets the dictionary that contains parameter name as keys and # parameter values as the values. # Returns: parameters dictionary set tempDict [dict create] dict for {paramName param} $Params { # check if parameter doesn't have value, it means that we return {} for switch parameter if {[catch {$param configure -Value}]} { dict append tempDict $paramName "" } else { dict append tempDict $paramName [$param configure -Value] } } return $tempDict }
setParamValue [::SpiceGenTcl::Options]Options, Top, Main, Index
Sets (or changes) value of particular parameter it throws a error if try to set a value of switch parameter.
Parameters
paramName | Name of parameter. |
value | New value of parameter. |
method setParamValue {paramName value} { # Sets (or changes) value of particular parameter # it throws a error if try to set a value of switch parameter. # paramName - name of parameter # value - new value of parameter set paramName [string tolower $paramName] set error [catch {dict get $Params $paramName}] if {$error>0} { error "Parameter with name '$paramName' was not found in options's '[my configure -Name]' list of parameters '[dict keys [my getParams]]'" } else { set param [dict get $Params $paramName] } $param configure -Value $value return }
Parameter [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
configure | Configure properties. |
genSPICEString | Creates string for SPICE netlist. |
Properties
Readable: -Name
, -Value
Writable: -Name
, -Value
Superclasses
Subclasses
ParameterNoCheck, ParameterPositional, ParameterDefault, ParameterEquation
constructor [::SpiceGenTcl::Parameter]Parameter, Top, Main, Index
Creates object of class Parameter
with parameter name and value.
Parameter new name value
Parameters
name | Name of the parameter. |
value | Value of the parameter. |
Description
Class models parameter that has a name and a value - the most common type of parameters in SPICE netlist. Its representation in netlist is 'Name=Value', and can be called "keyword parameter".
method constructor {name value} { # Creates object of class `Parameter` with parameter name and value. # name - name of the parameter # value - value of the parameter # Class models parameter that has a name and a value - the most # common type of parameters in SPICE netlist. Its representation in netlist is # 'Name=Value', and can be called "keyword parameter". my configure -Name $name my configure -Value $value }
genSPICEString [::SpiceGenTcl::Parameter]Parameter, Top, Main, Index
Creates string for SPICE netlist.
Return value
'$Name
=$Value
'
method genSPICEString {} { # Creates string for SPICE netlist. # Returns: '$Name=$Value' return "[my configure -Name]=[my configure -Value]" }
ParameterDefault [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
configure | Configure properties. |
genSPICEString | See Parameter.genSPICEString |
resetValue | Resets value of the parameter to it's default value. |
Properties
Readable: -DefValue
, -Name
, -Value
Writable: -DefValue
, -Name
, -Value
Superclasses
constructor [::SpiceGenTcl::ParameterDefault]ParameterDefault, Top, Main, Index
Creates object of class ParameterDefault
with parameter name, value and default value.
ParameterDefault new name value defValue
Parameters
name | Name of the parameter. |
value | Value of the parameter. |
defValue | Default value of the parameter. |
Description
Class models parameter that has a name and a value, but it differs from parent class in sense of having default value, so it has special ability to reset its value to default value by special method resetValue
.
method constructor {name value defValue} { # Creates object of class `ParameterDefault` with parameter name, value and default value. # name - name of the parameter # value - value of the parameter # defValue - default value of the parameter # Class models parameter that has a name and a value, but it differs from # parent class in sense of having default value, so it has special ability to reset its value to default # value by special method `resetValue`. my configure -DefValue $defValue next $name $value }
resetValue [::SpiceGenTcl::ParameterDefault]ParameterDefault, Top, Main, Index
Resets value of the parameter to it's default value.
method resetValue {} { # Resets value of the parameter to it's default value. my configure -Value [my configure -DefValue] return }
ParameterEquation [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
configure | Configure properties. |
genSPICEString | Creates string for SPICE netlist. |
Properties
Readable: -Name
, -Value
Writable: -Name
, -Value
Superclasses
Subclasses
constructor [::SpiceGenTcl::ParameterEquation]ParameterEquation, Top, Main, Index
Creates object of class ParameterEquation
with parameter name and value as an equation.
ParameterEquation new name value
Parameters
name | Name of the parameter. |
value | Value of the parameter. |
Description
Class models parameter that has representation as an equation. Example: R={R1+R2}
method constructor {name value} { # Creates object of class `ParameterEquation` with parameter name and value as an equation. # name - name of the parameter # value - value of the parameter # Class models parameter that has representation as an equation. # Example: R={R1+R2} next $name $value }
genSPICEString [::SpiceGenTcl::ParameterEquation]ParameterEquation, Top, Main, Index
Creates string for SPICE netlist.
Return value
'$Name
={$Value
}'
method genSPICEString {} { # Creates string for SPICE netlist. # Returns: '$Name={$Value}' return "[my configure -Name]=\{[my configure -Value]\}" }
ParameterNoCheck [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
configure | Configure properties. |
genSPICEString | See Parameter.genSPICEString |
Properties
Readable: -Name
, -Value
Writable: -Name
, -Value
Superclasses
constructor [::SpiceGenTcl::ParameterNoCheck]ParameterNoCheck, Top, Main, Index
Creates object of class ParameterNoCheck
with parameter name and value.
ParameterNoCheck new name value
Parameters
name | Name of the parameter. |
value | Value of the parameter. |
Description
Class models parameter the same as described by Parameter
but without check for value form.
method constructor {name value} { # Creates object of class `ParameterNoCheck` with parameter name and value. # name - name of the parameter # value - value of the parameter # Class models parameter the same as described by `Parameter` but without check for value form. next $name $value }
ParameterPositional [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
configure | Configure properties. |
genSPICEString | Creates string for SPICE netlist. |
Properties
Readable: -Name
, -Value
Writable: -Name
, -Value
Superclasses
Subclasses
constructor [::SpiceGenTcl::ParameterPositional]ParameterPositional, Top, Main, Index
Creates object of class ParameterPositional
with parameter name and value.
ParameterPositional new name value
Parameters
name | Name of parameter. |
value | Value of parameter. |
Description
Class models parameter that has a name and a value, but it differs from parent class in the sense of netlist representation: this parameter represents only by the value in the netlist. It's meaning for holding element is taken from it's position in the element's definition, for example, R1 np nm 100 tc1=1 tc2=0 - resistor with positional parameter R=100, you can't put it after parameters tc1 and tc2, it must be placed right after the pins definition.
method constructor {name value} { # Creates object of class `ParameterPositional` with parameter name and value. # name - name of parameter # value - value of parameter # Class models parameter that has a name and a value, but it differs from # parent class in the sense of netlist representation: this parameter represents only # by the value in the netlist. It's meaning for holding element is taken from # it's position in the element's definition, for example, R1 np nm 100 tc1=1 tc2=0 - resistor # with positional parameter R=100, you can't put it after parameters tc1 and tc2, it must be placed # right after the pins definition. next $name $value }
genSPICEString [::SpiceGenTcl::ParameterPositional]ParameterPositional, Top, Main, Index
Creates string for SPICE netlist.
Return value
'$Value
'
method genSPICEString {} { # Creates string for SPICE netlist. # Returns: '$Value' return "[my configure -Value]" }
ParameterPositionalEquation [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
configure | Configure properties. |
genSPICEString | Creates string for SPICE netlist. |
Properties
Readable: -Name
, -Value
Writable: -Name
, -Value
Superclasses
constructor [::SpiceGenTcl::ParameterPositionalEquation]ParameterPositionalEquation, Top, Main, Index
Creates object of class ParameterPositionalEquation
with parameter name and value as an equation in positional form.
ParameterPositionalEquation new name value
Parameters
name | Name of the parameter. |
value | Value of the parameter. |
Description
Class models parameter that has representation as an equation, but in form of positional parameter. Example: {R1+R2}
method constructor {name value} { # Creates object of class `ParameterPositionalEquation` with parameter name and value as an equation in positional form. # name - name of the parameter # value - value of the parameter # Class models parameter that has representation as an equation, but in form of # positional parameter. Example: {R1+R2} next $name $value }
genSPICEString [::SpiceGenTcl::ParameterPositionalEquation]ParameterPositionalEquation, Top, Main, Index
Creates string for SPICE netlist.
Return value
'{$paramValue
}'
method genSPICEString {} { # Creates string for SPICE netlist. # Returns: '{$paramValue}' return "\{[my configure -Value]\}" }
ParameterPositionalNoCheck [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
configure | Configure properties. |
genSPICEString | Creates string for SPICE netlist. Results: '$Value ' |
Properties
Readable: -Name
, -Value
Writable: -Name
, -Value
Superclasses
constructor [::SpiceGenTcl::ParameterPositionalNoCheck]ParameterPositionalNoCheck, Top, Main, Index
Creates object of class ParameterPositionalNoCheck
.
ParameterPositionalNoCheck new name value
Parameters
name | Name of parameter. |
value | Value of parameter. |
Description
Class models parameter the same as described by ParameterPositional
but without check for value form.
method constructor {name value} { # Creates object of class `ParameterPositionalNoCheck`. # name - name of parameter # value - value of parameter # Class models parameter the same as described by `ParameterPositional` but without check for value form. next $name $value }
genSPICEString [::SpiceGenTcl::ParameterPositionalNoCheck]ParameterPositionalNoCheck, Top, Main, Index
Creates string for SPICE netlist. Results: '$Value
'
method genSPICEString {} { # Creates string for SPICE netlist. # Results: '$Value' return "[my configure -Value]" }
ParameterSwitch [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
configure | Configure properties. |
genSPICEString | Creates string for SPICE netlist. |
Properties
Readable: -Name
Writable: -Name
Superclasses
Subclasses
constructor [::SpiceGenTcl::ParameterSwitch]ParameterSwitch, Top, Main, Index
Creates object of class ParameterSwitch
with parameter name.
ParameterSwitch new name
Parameters
name | Name of the parameter. |
Description
Class models base parameter acting like a switch - its presence gives us information that something it controls is on. This parameter doesn't have a value, and it is the most basic class in Parameter class family.
method constructor {name} { # Creates object of class `ParameterSwitch` with parameter name. # name - name of the parameter # Class models base parameter acting like a switch - # its presence gives us information that something it controls is on. # This parameter doesn't have a value, and it is the most basic class # in Parameter class family. my configure -Name $name }
genSPICEString [::SpiceGenTcl::ParameterSwitch]ParameterSwitch, Top, Main, Index
Creates string for SPICE netlist.
Return value
string '$Name
'
method genSPICEString {} { # Creates string for SPICE netlist. # Returns: string '$Name' return "[my configure -Name]" }
ParamStatement [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
addParam | Adds new Parameter object to the list Params. |
configure | Configure properties. |
deleteParam | Deletes existing Parameter object from list Params . |
duplListCheck | See DuplChecker.duplListCheck |
genSPICEString | Creates parameter statement string for SPICE netlist. |
getParams | Gets the dictionary that contains parameter name as keys and parameter values as the values. |
setParamValue | Sets (or changes) value of particular parameter. |
Properties
Readable: -Name
Writable: -Name
Superclasses
Mixins
constructor [::SpiceGenTcl::ParamStatement]ParamStatement, Top, Main, Index
Creates object of class ParamStatement
.
ParamStatement new params ?args?
Parameters
params | List of instance parameters in form {{Name Value} {Name Value} {Name Equation -eq} ...} |
args | Optional argument -name - represent name of library statement. |
Description
Class represent .param statement.
method constructor {params args} { # Creates object of class `ParamStatement`. # params - list of instance parameters in form `{{Name Value} {Name Value} {Name Equation -eq} ...}` # args - optional argument -name - represent name of library statement # Class represent .param statement. set arguments [argparse { -name= }] if {[info exists name]} { my configure -Name $name } else { my configure -Name [self object] } foreach param $params { if {[lindex $param 2]=={}} { my addParam [lindex $param 0] [lindex $param 1] } elseif {[lindex $param 2]=="-eq"} { my addParam [lindex $param 0] [lindex $param 1] -eq } else { error "Wrong parameter definition in ParamStatement" } } }
addParam [::SpiceGenTcl::ParamStatement]ParamStatement, Top, Main, Index
Adds new Parameter object to the list Params.
Parameters
paramName | Name of parameter. |
value | Value of parameter. |
args | Optional parameter qualificator -eq. |
method addParam {paramName value args} { # Adds new Parameter object to the list Params. # paramName - name of parameter # value - value of parameter # args - optional parameter qualificator -eq set arguments [argparse { -eq }] set paramName [string tolower $paramName] if {[info exists Params]} { set paramList [dict keys $Params] } lappend paramList $paramName if {[my duplListCheck $paramList]} { error "Parameters list \{$paramList\} has already contains parameter with name \{$paramName\}" } if {[info exists eq]} { dict append Params $paramName [::SpiceGenTcl::ParameterEquation new $paramName $value] } else { dict append Params $paramName [::SpiceGenTcl::Parameter new $paramName $value] } return }
deleteParam [::SpiceGenTcl::ParamStatement]ParamStatement, Top, Main, Index
Deletes existing Parameter
object from list Params
.
Parameters
paramName | Name of parameter that will be deleted. |
method deleteParam {paramName} { # Deletes existing `Parameter` object from list `Params`. # paramName - name of parameter that will be deleted set paramName [string tolower $paramName] set error [catch {dict get $Params $paramName}] if {$error>0} { error "Parameter with name '$paramName' was not found in device's '[my configure -Name]' list of parameters '[dict keys [my getParams]]'" } else { set Params [dict remove $Params $paramName] } return }
genSPICEString [::SpiceGenTcl::ParamStatement]ParamStatement, Top, Main, Index
Creates parameter statement string for SPICE netlist.
Return value
'.param $Params
'
method genSPICEString {} { # Creates parameter statement string for SPICE netlist. # Returns: '.param $Params' dict for {paramName param} $Params { lappend params [$param genSPICEString] } return ".param [join $params]" }
getParams [::SpiceGenTcl::ParamStatement]ParamStatement, Top, Main, Index
Gets the dictionary that contains parameter name as keys and parameter values as the values.
Return value
parameters dictionary
method getParams {} { # Gets the dictionary that contains parameter name as keys and # parameter values as the values. # Returns: parameters dictionary set tempDict [dict create] dict for {paramName param} $Params { dict append tempDict $paramName [$param configure -Value] } return $tempDict }
setParamValue [::SpiceGenTcl::ParamStatement]ParamStatement, Top, Main, Index
Sets (or changes) value of particular parameter.
Parameters
paramName | Name of parameter. |
value | New value of parameter. |
method setParamValue {paramName value} { # Sets (or changes) value of particular parameter. # paramName - name of parameter # value - new value of parameter set paramName [string tolower $paramName] set error [catch {dict get $Params $paramName}] if {$error>0} { error "Parameter with name '$paramName' was not found in parameter statement's '[my configure -Name]' list of parameters '[dict keys [my getParams]]'" } else { set param [dict get $Params $paramName] } $param configure -Value $value return }
Pin [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
checkFloating | Determines if pin is connected to the node. |
configure | Configure properties. |
genSPICEString | Creates string for SPICE netlist. |
unsetNodeName | Makes pin floating by setting NodeName with empty string. |
Properties
Readable: -Name
, -NodeName
Writable: -Name
, -NodeName
Superclasses
constructor [::SpiceGenTcl::Pin]Pin, Top, Main, Index
Creates object of class Pin
with name and connected node
Pin new name nodeName
Parameters
name | Name of the pin. |
nodeName | Name of the node that connected to pin. |
Description
Class models electrical pin of device/subcircuit, it has name and name of the node connected to it. It has general interface method genSPICEString
that returns name of the node connected to it, this method must be called only in method with the same name in other classes. We can check if pin is floating by checking the name of connected node in method checkFloating
- if is contains empty string it is floating. Floating pin can't be netlisted, so it throws error when try to do so. Set pin name empty by special method unsetNodeName
.
method constructor {name nodeName} { # Creates object of class `Pin` with name and connected node # name - name of the pin # nodeName - name of the node that connected to pin # Class models electrical pin of device/subcircuit, # it has name and name of the node connected to it. # It has general interface method `genSPICEString` that returns # name of the node connected to it, this method must be called only # in method with the same name in other classes. We can check if pin is # floating by checking the name of connected node in method `checkFloating` - # if is contains empty string it is floating. # Floating pin can't be netlisted, so it throws error when try to # do so. Set pin name empty by special method `unsetNodeName`. my configure -Name $name my configure -NodeName $nodeName }
checkFloating [::SpiceGenTcl::Pin]Pin, Top, Main, Index
Determines if pin is connected to the node.
Return value
true
if connected and false
if not
method checkFloating {} { # Determines if pin is connected to the node. # Returns: `true` if connected and `false` if not if {[my configure -NodeName]=={}} { set floating true } else { set floating false } return $floating }
genSPICEString [::SpiceGenTcl::Pin]Pin, Top, Main, Index
Creates string for SPICE netlist.
Return value
string '$NodeName
'
method genSPICEString {} { # Creates string for SPICE netlist. # Returns: string '*$NodeName*' if {[my checkFloating]=="true"} { error "Pin '[my configure -Name]' is not connected to the node so can't be netlisted" } return "[my configure -NodeName]" }
unsetNodeName [::SpiceGenTcl::Pin]Pin, Top, Main, Index
Makes pin floating by setting NodeName
with empty string.
method unsetNodeName {} { # Makes pin floating by setting `NodeName` with empty string. my configure -NodeName {} }
RawFile [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
configure | Configure properties. |
getCurrentsNames | Returns list that contains names of all current variables. |
getTrace | Returns trace object reference by it's name. |
getTracesData | Returns dictionary that contains all data in value and name as a key. |
getTracesStr | Returns information about all Traces in raw file in form of string. |
getVariablesNames | Returns list that contains names of all variables. |
getVoltagesNames | Returns list that contains names of all voltage variables. |
readComplex | See BinaryReader.readComplex |
readFloat32 | See BinaryReader.readFloat32 |
readFloat64 | See BinaryReader.readFloat64 |
skip4bytes | See BinaryReader.skip4bytes |
skip8bytes | See BinaryReader.skip8bytes |
skip16bytes | See BinaryReader.skip16bytes |
Properties
Readable: -Axis
, -BlockSize
, -NPoints
, -NVariables
, -Path
, -RawParams
, -Traces
Writable: -Axis
, -BlockSize
, -NPoints
, -NVariables
, -Path
, -RawParams
, -Traces
Mixins
constructor [::SpiceGenTcl::RawFile]RawFile, Top, Main, Index
Creates RawFile object.
RawFile new path ?traces2read? ?simulator?
Parameters
path | Path to raw file including it's file name. |
traces2read | List of traces that will be readed, default value is *, that means reading all traces. Optional, default * . |
simulator | Simulator that produced this raw file, default is ngspice. Optional, default ngspice . |
method constructor {path {traces2read *} {simulator ngspice}} { # Creates RawFile object. # path - path to raw file including it's file name # traces2read - list of traces that will be readed, default value is \*, # that means reading all traces # simulator - simulator that produced this raw file, default is ngspice my configure -Path $path set fileSize [file size $path] set file [open $path r] fconfigure $file -translation binary #### read header set ch [read $file 6] if {$ch=={Title:}} { set encSize 1 set encode "utf-8" set line "Title:" } elseif {$ch=={Tit}} { set encSize 2 set encode "utf-16-le" set line "Tit" } else { error "Unknown encoding" } my configure -RawParams [dict create Filename $path] set header "" set binaryStart 6 while true { set ch [read $file $encSize] incr binaryStart $encSize if {$ch=="\n"} { if {$encode=="utf-8"} { set line [string trimright $line "\r"] } lappend header $line if {$line in {Binary: Values:}} { set rawType $line break } set line "" } else { append line $ch } } #### save header parameters foreach line $header { set lineList [split $line ":"] if {[lindex $lineList 0]=="Variables"} { break } dict append RawParams [lindex $lineList 0] [string trim [lindex $lineList 1]] } my configure -NPoints [dict get [my configure -RawParams] "No. Points"] my configure -NVariables [dict get [my configure -RawParams] "No. Variables"] if {[dict get [my configure -RawParams] "Plotname"] in {"Operating Point" "Transfet Function"}} { set hasAxis 0 } else { set hasAxis 1 } set flags [split [dict get [my configure -RawParams] "Flags"]] if {("complex" in $flags) || ([dict get [my configure -RawParams] "Plotname"]=="AC Analysis")} { set numType complex } else { if {("double" in $flags) || ($simulator=="ngspice")} { set numType double } else { set numType real } } #### parse variables set i [lsearch $header "Variables:"] set ivar 0 foreach line [lrange $header [+ $i 1] end-1] { set lineList [split [string trim $line] \t] lassign $lineList idx name varType if {$ivar==0} { if {$numType=="real"} { set axisNumType double } else { set axisNumType $numType } my configure -Axis [::SpiceGenTcl::Axis new $name $varType $NPoints $axisNumType] set trace $Axis } elseif {($traces2read=="*") || ($name in $traces2read)} { if {$hasAxis} { set trace [::SpiceGenTcl::Trace new $name $varType $NPoints [[my configure -Axis] configure -Name] $numType] } else { set trace [::SpiceGenTcl::Trace new $name $varType $NPoints {} $numType] } } else { set trace [::SpiceGenTcl::EmptyTrace new $name $varType $NPoints $numType] } lappend Traces $trace incr ivar } if {($traces2read=="") || ([llength $traces2read]==0)} { close $file return } #### read data if {$rawType=="Binary:"} { my configure -BlockSize [expr {($fileSize - $binaryStart)/$NPoints}] set scanFunctions "" set calcBlockSize 0 foreach trace [my configure -Traces] { if {[$trace configure -NumType]=="double"} { incr calcBlockSize 8 if {[info object class $trace ::SpiceGenTcl::EmptyTrace]} { set fun skip8bytes } else { set fun readFloat64 } } elseif {[$trace configure -NumType]=="complex"} { incr calcBlockSize 16 if {[info object class $trace ::SpiceGenTcl::EmptyTrace]} { set fun skip16bytes } else { set fun readComplex } } elseif {[$trace configure -NumType]=="real"} { incr calcBlockSize 4 if {[info object class $trace ::SpiceGenTcl::EmptyTrace]} { set fun skip4bytes } else { set fun readFloat32 } } else { error "Invalid data type '[$trace configure -NumType]' for trace '[$trace configure -Name]'" } lappend scanFunctions $fun } if {$calcBlockSize!=[my configure -BlockSize]} { error "Error in calculating the block size. Expected '[my configure -BlockSize]' bytes, but found '$calcBlockSize' bytes" } for {set i 0} {$i<$NPoints} {incr i} { for {set j 0} {$j<[llength [my configure -Traces]]} {incr j} { set value [eval "my [lindex $scanFunctions $j]" $file] set trace [lindex [my configure -Traces] $j] if {[info object class $trace]!="::SpiceGenTcl::EmptyTrace"} { $trace appendDataPoints $value } } } } elseif {$rawType=="Values:"} { for {set i 0} {$i<$NPoints} {incr i} { set firstVar true for {set j 0} {$j<[+ [llength [my configure -Traces]] 1]} {incr j} { set line [gets $file] if {$line==""} { continue } set lineList [textutil::split::splitx $line] if {$firstVar=="true"} { set firstVar false set sPoint [lindex $lineList 1] if {$i!=int($sPoint)} { error "Error reading file" } if {$numType=="complex"} { set value [split [lindex $lineList 2] ","] } else { set value [lindex $lineList 2] } } else { if {$numType=="complex"} { set value [split [lindex $lineList 1] ","] } else { set value [lindex $lineList 1] } } set trace [lindex [my configure -Traces] $j] $trace appendDataPoints $value } } } close $file }
getCurrentsNames [::SpiceGenTcl::RawFile]RawFile, Top, Main, Index
Returns list that contains names of all current variables
Return value
Returns list that contains names of all current variables
method getCurrentsNames {} { # Returns list that contains names of all current variables foreach trace [my configure -Traces] { if {[$trace configure -Type]=="current"} { lappend currNames [$trace configure -Name] } } return $currNames }
getTrace [::SpiceGenTcl::RawFile]RawFile, Top, Main, Index
Returns trace object reference by it's name
Parameters
traceName | Not documented. |
Return value
Returns trace object reference by it's name
method getTrace {traceName} { # Returns trace object reference by it's name set traceFoundFlag false foreach trace [my configure -Traces] { if {[$trace configure -Name]==$traceName} { set traceFound $trace set traceFoundFlag true break } } if {$traceFoundFlag==false} { error "Trace with name '$traceName' was not found in raw file '[my configure -Path]' list of traces" } return $traceFound }
getTracesData [::SpiceGenTcl::RawFile]RawFile, Top, Main, Index
Returns dictionary that contains all data in value and name as a key
Return value
Returns dictionary that contains all data in value and name as a key
method getTracesData {} { # Returns dictionary that contains all data in value and name as a key set dict [dict create] foreach trace [my configure -Traces] { dict append dict [$trace configure -Name] [$trace getDataPoints] } return $dict }
getTracesStr [::SpiceGenTcl::RawFile]RawFile, Top, Main, Index
Returns information about all Traces in raw file in form of string
Return value
Returns information about all Traces in raw file in form of string
method getTracesStr {} { # Returns information about all Traces in raw file in form of string foreach trace [my configure -Traces] { lappend tracesList "[$trace configure -Name] [$trace configure -Type] [$trace configure -NumType]" } return $tracesList }
getVariablesNames [::SpiceGenTcl::RawFile]RawFile, Top, Main, Index
Returns list that contains names of all variables
Return value
Returns list that contains names of all variables
method getVariablesNames {} { # Returns list that contains names of all variables foreach trace [my configure -Traces] { lappend tracesNames [$trace configure -Name] } return $tracesNames }
getVoltagesNames [::SpiceGenTcl::RawFile]RawFile, Top, Main, Index
Returns list that contains names of all voltage variables
Return value
Returns list that contains names of all voltage variables
method getVoltagesNames {} { # Returns list that contains names of all voltage variables foreach trace [my configure -Traces] { if {[$trace configure -Type]=="voltage"} { lappend voltNames [$trace configure -Name] } } return $voltNames }
RawString [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
configure | Configure properties. |
genSPICEString | Creates raw string for SPICE netlist. |
Properties
Readable: -Name
, -Value
Writable: -Name
, -Value
Superclasses
Subclasses
constructor [::SpiceGenTcl::RawString]RawString, Top, Main, Index
Creates object of class RawString
.
RawString new value ?args?
Parameters
value | Value of the raw string. |
Description
Class represent arbitary string. It can be used to pass any string directly into netlist, for example, it can add elements that doesn't have dedicated class.
method constructor {value args} { # Creates object of class `RawString`. # value - value of the raw string # Class represent arbitary string. # It can be used to pass any string directly into netlist, # for example, it can add elements that doesn't have dedicated class. set arguments [argparse { -name= }] if {[info exists name]} { my configure -Name $name } else { my configure -Name [self object] } my configure -Value $value }
genSPICEString [::SpiceGenTcl::RawString]RawString, Top, Main, Index
Creates raw string for SPICE netlist.
Return value
string '$Value
'
method genSPICEString {} { # Creates raw string for SPICE netlist. # Returns: string '$Value' return [my configure -Value] }
Simulator [::SpiceGenTcl]Top, Main, Index
Method summary
configure | Configure properties. |
getLog | Returns log file of completed simulations. |
readData | Reads raw data file of last simulation. |
readLog | Reads log file of completed simulations. |
run | Runs simulation. |
Properties
Readable: -Command
, -Data
, -Log
, -Name
, -Path
Writable: -Command
, -Data
, -Log
, -Name
, -Path
Subclasses
::SpiceGenTcl::Ngspice::Simulators::Batch, ::SpiceGenTcl::Xyce::Simulators::Batch
getLog [::SpiceGenTcl::Simulator]Simulator, Top, Main, Index
Returns log file of completed simulations.
Return value
Returns log file of completed simulations.
method getLog {} { # Returns log file of completed simulations. error "Not implemented" }
readData [::SpiceGenTcl::Simulator]Simulator, Top, Main, Index
Reads raw data file of last simulation.
method readData {} { # Reads raw data file of last simulation. error "Not implemented" }
readLog [::SpiceGenTcl::Simulator]Simulator, Top, Main, Index
Reads log file of completed simulations.
method readLog {} { # Reads log file of completed simulations. error "Not implemented" }
run [::SpiceGenTcl::Simulator]Simulator, Top, Main, Index
Runs simulation.
method run {} { # Runs simulation. error "Not implemented" }
SPICEElement [::SpiceGenTcl]Top, Main, Index
Method summary
configure | Configure properties. |
genSPICEString | Declaration of method common for all SPICE elements that generates representation of element in SPICE netlist. Not implemented in abstraction class. |
Subclasses
Pin, ParameterSwitch, Device, Model, RawString, Options, ParamStatement, Temp, Netlist, Analysis
genSPICEString [::SpiceGenTcl::SPICEElement]SPICEElement, Top, Main, Index
Declaration of method common for all SPICE elements that generates representation of element in SPICE netlist. Not implemented in abstraction class.
method genSPICEString {} { # Declaration of method common for all SPICE elements that generates # representation of element in SPICE netlist. Not implemented in # abstraction class. error "Not implemented" }
Subcircuit [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
add | Add element object reference to Netlist , it extends add method to add check of element class because subcircuit can't contain particular elements inside, like Include , Library , Options and Anslysis . |
addParam | Adds new parameter to subcircuit, and throws error on dublicated names. |
configure | Configure properties. |
del | See Netlist.del |
deleteParam | Deletes existing Parameter object from list Params . |
duplListCheck | See DuplChecker.duplListCheck |
genSPICEString | Creates subcircuit string for SPICE subcircuit. |
getAllElemNames | See Netlist.getAllElemNames |
getElement | See Netlist.getElement |
getParams | Gets the dictionary that contains parameter name as keys and parameter values as the values. |
getPins | Gets the dictionary that contains pin name as keys and connected node name as the values. |
setParamValue | Sets (or change) value of particular parameter. |
Properties
Readable: -Name
Writable: -Name
Superclasses
constructor [::SpiceGenTcl::Subcircuit]Subcircuit, Top, Main, Index
Creates object of class Subcircuit
.
Subcircuit new name pins params
Parameters
name | Name of the subcircuit. |
pins | List of pins in the order they appear in SPICE subcircuits definition together in form: {pinName0 pinName1 pinName2 ...} |
params | List of input parameters in form {{Name Value} {Name Value} {Name Value} ...} |
Description
This class implements subcircuit, it is subclass of netlist because it holds list of elements inside subcircuit, together with header and connection of elements inside.
method constructor {name pins params} { # Creates object of class `Subcircuit`. # name - name of the subcircuit # pins - list of pins in the order they appear in SPICE subcircuits definition together # in form: `{pinName0 pinName1 pinName2 ...}` # params - list of input parameters in form `{{Name Value} {Name Value} {Name Value} ...}` # This class implements subcircuit, it is subclass of netlist because it holds list of elements # inside subcircuit, together with header and connection of elements inside. # create Pins objects, nodes are set to empty line foreach pin $pins { my AddPin [lindex $pin 0] {} } # create Params objects that are input parameters of subcircuit if {$params!=""} { foreach param $params { if {[llength $param]<=2} { my addParam [lindex $param 0] [lindex $param 1] } else { error "Wrong parameter '[lindex $param 0]' definition in subcircuit $name" } } } else { set Params "" } # pass name of subcircuit to Netlist constructor next $name }
add [::SpiceGenTcl::Subcircuit]Subcircuit, Top, Main, Index
Add element object reference to Netlist
, it extends add method to add check of element class because subcircuit can't contain particular elements inside, like Include
, Library
, Options
and Anslysis
.
Parameters
element | Element object reference. |
method add {element} { # Add element object reference to `Netlist`, # it extends add method to add check of element class because subcircuit can't contain particular elements inside, # like `Include`, `Library`, `Options` and `Anslysis`. # element - element object reference set elementClass [info object class $element] set elementClassSuperclass [info class superclasses $elementClass] if {$elementClass=={::SpiceGenTcl::Include}} { error "Include element can't be included in subcircuit" } elseif {$elementClass=={::SpiceGenTcl::Library}} { error "Library element can't be included in subcircuit" } elseif {$elementClass=={::SpiceGenTcl::Options}} { error "Options element can't be included in subcircuit" } elseif {$elementClassSuperclass=={::SpiceGenTcl::Analysis}} { error "Analysis element can't be included in subcircuit" } next $element }
addParam [::SpiceGenTcl::Subcircuit]Subcircuit, Top, Main, Index
Adds new parameter to subcircuit, and throws error on dublicated names.
Parameters
paramName | Name of parameter. |
value | Value of parameter. |
method addParam {paramName value} { # Adds new parameter to subcircuit, and throws error # on dublicated names. # paramName - name of parameter # value - value of parameter set paramName [string tolower $paramName] if {[info exists Params]} { set paramList [dict keys $Params] } lappend paramList $paramName if {[my duplListCheck $paramList]} { error "Parameters list '$paramList' has already contains parameter with name '$paramName'" } dict append Params $paramName [::SpiceGenTcl::Parameter new $paramName $value] return }
deleteParam [::SpiceGenTcl::Subcircuit]Subcircuit, Top, Main, Index
Deletes existing Parameter
object from list Params
.
Parameters
paramName | Name of parameter that will be deleted. |
method deleteParam {paramName} { # Deletes existing `Parameter` object from list `Params`. # paramName - name of parameter that will be deleted set paramName [string tolower $paramName] set error [catch {dict get $Params $paramName}] if {$error>0} { error "Parameter with name '$paramName' was not found in device's '[my configure -Name]' list of parameters '[dict keys [my getParams]]'" } else { set Params [dict remove $Params $paramName] } return }
genSPICEString [::SpiceGenTcl::Subcircuit]Subcircuit, Top, Main, Index
Creates subcircuit string for SPICE subcircuit.
Return value
'.subckt $Pins
$Params
'
method genSPICEString {} { # Creates subcircuit string for SPICE subcircuit. # Returns: '.subckt $Pins $Params' set name [my configure -Name] dict for {pinName pin} $Pins { lappend nodes [$pin configure -Name] } if {$Params==""} { lappend params "" set header ".subckt $name [join $nodes]" } else { dict for {paramName param} $Params { lappend params [$param genSPICEString] } set header ".subckt $name [join $nodes] [join $params]" } # get netlist elements from netlist genSPICEString method set resStr [next] set end ".ends" return [join [list $header $resStr $end] \n] }
getParams [::SpiceGenTcl::Subcircuit]Subcircuit, Top, Main, Index
Gets the dictionary that contains parameter name as keys and parameter values as the values.
Return value
parameters dictionary
method getParams {} { # Gets the dictionary that contains parameter name as keys and # parameter values as the values. # Returns: parameters dictionary set tempDict [dict create] dict for {paramName param} $Params { dict append tempDict $paramName [$param configure -Value] } return $tempDict }
getPins [::SpiceGenTcl::Subcircuit]Subcircuit, Top, Main, Index
Gets the dictionary that contains pin name as keys and connected node name as the values.
Return value
parameters dictionary
method getPins {} { # Gets the dictionary that contains pin name as keys and # connected node name as the values. # Returns: parameters dictionary set tempDict [dict create] dict for {pinName pin} $Pins { dict append tempDict $pinName [$pin configure -NodeName] } return $tempDict }
setParamValue [::SpiceGenTcl::Subcircuit]Subcircuit, Top, Main, Index
Sets (or change) value of particular parameter.
Parameters
paramName | Name of parameter. |
value | New value of parameter. |
method setParamValue {paramName value} { # Sets (or change) value of particular parameter. # paramName - name of parameter # value - new value of parameter set paramName [string tolower $paramName] set error [catch {dict get $Params $paramName}] if {$error>0} { error "Parameter with name '$paramName' was not found in device's '[my configure -Name]' list of parameters '[dict keys [my getParams]]'" } else { set param [dict get $Params $paramName] } $param configure -Value $value return }
Temp [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
configure | Configure properties. |
genSPICEString | Creates .temp statement string for SPICE netlist. |
Properties
Readable: -Name
, -Value
Writable: -Name
, -Value
Superclasses
constructor [::SpiceGenTcl::Temp]Temp, Top, Main, Index
Creates object of class Temp
.
Temp new value ?args?
Parameters
value | Value of the temperature. |
args | Optional parameter qualificator -eq. |
Description
This class represent .temp statement with temperature value.
method constructor {value args} { # Creates object of class `Temp`. # value - value of the temperature # args - optional parameter qualificator -eq # This class represent .temp statement with temperature value. set arguments [argparse { {-eq -boolean} }] my configure -Name temp if {$eq} { my AddParam temp $value -eq } else { my AddParam temp $value } }
genSPICEString [::SpiceGenTcl::Temp]Temp, Top, Main, Index
Creates .temp statement string for SPICE netlist.
Return value
'.temp $Value
'
method genSPICEString {} { # Creates .temp statement string for SPICE netlist. # Returns: '.temp $Value' return ".temp [$Value genSPICEString]" }
Trace [::SpiceGenTcl]Top, Main, Index
Method summary
constructor | Constructor for the class. |
appendDataPoints | See Dataset.appendDataPoints |
configure | Configure properties. |
getDataPoints | See Dataset.getDataPoints |
getStr | See Dataset.getStr |
setDataPoints | See Dataset.setDataPoints |
Properties
Readable: -Axis
, -Len
, -Name
, -NumType
, -Type
Writable: -Axis
, -Len
, -Name
, -NumType
, -Type
Superclasses
constructor [::SpiceGenTcl::Trace]Trace, Top, Main, Index
initialize trace
Trace new name type len axis ?numType?
Parameters
name | Name of the trace. |
type | Type of trace. |
len | Total number of points. |
axis | Name of axis that is linked to trace. |
numType | Numerical type of trace. Optional, default real . |
method constructor {name type len axis {numType real}} { # initialize trace # name - name of the trace # type - type of trace # len - total number of points # axis - name of axis that is linked to trace # numType - numerical type of trace my configure -Axis $axis next $name $type $len $numType }