.PARAM -- User-Defined Parameters

The .param directive allows the creation of user-defined variables. This is useful for associating a name with a value for the sake of clarity and parameterizing subcircuits so that abstract circuits can be saved in libraries.

The .param statement can be included inside a subcircuit definition to limit the scope the parameter value to that subcircuit.

To invoke parameter substitution and expression evaluation, enclose the expression in curly braces. The enclosed expression will be replaced with the floating-point value.

Below is an example using both a .param statement and directly passing parameters on the subcircuit invocation line.

*
* This is the circuit definition
.params x=y y=z z=1k*tan(pi/4+.1)
X1 a b 0 divider top=x bot=z
V1 a 0 pulse(0 1 0 .5μ .5μ 0 1μ)

* this is the definition of the subcircuit
.subckt divider n1 n2 n3
r1 n1 n2 {top}
r2 n2 n3 {bot}
.ends
*

.tran 3μ
.end

The parameter substitution scheme is a symbolic declarative language. The parameters are not passed to the subcircuit as evaluated values, but by the expressions and relations themselves. When curly braces are encountered, the enclosed expression is evaluated on the basis of all relations available at the scope and reduced to a floating point value.

The following functions and operations are available:

Function NameDescription
abs(x)Absolute value of x
acos(x)Real part of the arc cosine of x, e.g., acos(-5) returns 3.14159, not 3.14159+2.29243i
arccos(x)Synonym for acos()
acosh(x)Real part of the arc hyperbolic cosine of x, e.g., acosh(.5) returns 0, not 1.0472i
asin(x)Real part of the arc sine of x, e.g., asin(-5) returns -1.57080, not -1.57080+2.29243i
arcsin(x)Synonym for asin()
asinh(x)Arc hyperbolic sine
atan(x)Arc tangent of x
arctan(x)Synonym for atan()
atan2(y,x)Four quadrant arc tangent of y/x
atanh(x)Arc hyperbolic tangent
buf(x)1 if x > .5, else 0
cbrt(x)Cube root of (x)
ceil(x)Integer equal or greater than x
cos(x)Cosine of x
cosh(x)Hyperbolic cosine of x
exp(x)e to the x
fabs(x)Same as abs(x)
flat(x)Random number between -x and x with uniform distribution
floor(x)Integer equal to or less than x
gauss(x)Random number from Gaussian distribution with sigma of x.
hypot(x,y)sqrt(x**2 + y**2)
if(x,y,z)If x > .5, then y else z
int(x)Convert x to integer
inv(x)0. if x > .5, else 1.
limit(x,y,z)Intermediate value of x, y, and z
ln(x)Natural logarithm of x
log(x)Alternate syntax for ln()
log10(x)Base 10 logarithm
max(x,y)The greater of x or y
mc(x,y)A random number between x*(1+y) and x*(1-y) with uniform distribution.
min(x,y)The smaller of x or y
pow(x,y)Real part of x**y, e.g., pow(-.5,1.5) returns 0., not 0.353553i
pwr(x,y)abs(x)**y
pwrs(x,y)sgn(x)*abs(x)**y
rand(x)Random number between 0 and 1 depending on the integer value of x.
random(x)Similar to rand(), but smoothly transitions between values.
round(x)Nearest integer to x
sgn(x)Sign of x
sin(x)Sine of x
sinh(x)Hyperbolic sine of x
sqrt(x)Real part of the square root of x, e.g., sqrt(-1) returns 0, not 0.707107i
table(x,a,b,c,d,...)Interpolate a value for x based on a look up table given as a set of pairs of points.
tan(x)Tangent of x.
tanh(x)Hyperbolic tangent of x
u(x)Unit step, i.e., 1 if x > 0., else 0.
uramp(x)x if x > 0., else 0.

The following operations are grouped in reverse order of precedence of evaluation:

OperandDescription
&Convert the expressions to either side to Boolean, then AND.
|Convert the expressions to either side to Boolean, then OR.
^Convert the expressions to either side to Boolean, then XOR.
  
>True if expression on the left is greater than the expression on the right, otherwise false.
<True if expression on the left is less than the expression on the right, otherwise false.
>=True if expression on the left is greater than or equal the expression on the right, otherwise false.
<=True if expression on the left is less than or equal the expression on the right, otherwise false.
  
+Floating point addition
-Floating point subtraction
  
*Floating point multiplication
/Floating point division
  
**Raise left hand side to power of right hand side, only real part is returned, e.g., -2**1.5 returns zero, not 2.82843i

All parameter substitution evaluation is done before the simulation begins.