# Expressions¶

## Indexing¶

Reference

```coefs
coefs[3:0]
coefs[{5,3,1}]
```

## Signals¶

Reference

```V(out)
I(in,gnd)
V(in)
```

## Operators¶

### Arithmetic Operators¶

Reference

Symbol Usage Description
`+` `a + b` Sum `a` and `b`
`-` `a - b` Subtract `b` from `a`
`-` `-a` Negate `a`
`*` `a * b` Multiply `a` and `b`
`/` `a / b` Divide `a` by `b`
`%` `a % b` Modulus (remainder) of `a/b`
`**` `a ** b` `a` raised to the power of `b`

### Bitwise Operators¶

Reference

Symbol Usage Description
`~` `~a` Invert each bit of `a`
`&` `a&b` Logical ‘and’ of each bit of `a` and `b`
`~&` `a~&b` Logical ‘nand’ of each bit of `a` and `b`
`|` `a|b` Logical ‘or’ of each bit of `a` and `b`
`~|` `a~|b` Logical ‘nor’ of each bit of `a` and `b`
`^` `a^b` Logical ‘xor’ of each bit of `a` and `b`
`~^` `a~^b` Logical ‘xnor’ of each bit of `a` and `b`
`^~` `a^~b` Same as `~^`

### Reduction Operators¶

Reference

Symbol Usage Description
`&` `&a` Logical ‘and’ all bits in `a` to form 1 bit result
`~&` `~&a` Logical ‘nand’ all bits in `a` to form 1 bit result
`|` `|a` Logical ‘or’ all bits in `a` to form 1 bit result
`~|` `~|a` Logical ‘nor’ all bits in `a` to form 1 bit result
`^` `^a` Logical ‘xor’ all bits in `a` to form 1 bit result
`~^` `~^a` Logical ‘xnor’ all bits in `a` to form 1 bit result
`^~` `^~a` Same as `~^`

### Logical Operators¶

Reference

Symbol Usage Description
`!` `!a` Is `a` false?
`&&` `a&&b` Are both `a` and `b` true?
`||` `a||b` Are either `a` or `b` true?

### Equality Operators¶

Reference

Symbol Usage Description
`==` `a==b` Is `a` equal to `b`?
`!=` `a!=b` Is `a` not equal to `b`?

### Identity Operators¶

Reference

Symbol Usage Description
`===` `a===b` Is `a` identical to `b`?
`!==` `a!==b` Is `a` not identical to `b`?

### Relational Operators¶

Reference

Symbol Usage Description
`<` `a<b` Is `a` less than `b`?
`>` `a>b` Is `a` greater than `b`?
`<=` `a<=b` Is `a` less than or equal to `b`?
`>=` `a>=b` Is `a` greater than or equal to `b`?

### Shift Operators¶

Reference

Symbol Usage Description
`<<` `a<<b` Shift `a` left `b` bits, vacated bits are filled with 0
`>>` `a>>b` Shift `a` right `b` bits, vacated bits are filled with 0
`<<<` `a<<<b` Shift `a` left `b` bits, vacated bits are filled with 0
`>>>` `a>>>b` Shift `a` right `b` bits, vacated bits are filled with 0 if `a` is unsigned and by the sign bit of `a` otherwise

### Miscellaneous Operators¶

Reference

Symbol Usage Description
`? :` `a ? b : c` Evaluated to `b` if `a` is true and `c` otherwise
`{}` `{a,b}` Concatenates sized bit vectors `a` and `b`
`{{}}` `{a{b}}` Replicate `b`, `a` times

### Size of Integer Results¶

Reference

Form Operators Size
i op j `+`, `-`, `*`, `/`, `%`, `&`, `|`, `^`, `^~` max(L(i), L(j))
op i `+`, `-`, `~` L(i)
i op j `==`, `!=`, `===`, `!==`, `&&`, `||`, `>`, `>=`, `<`, `<=` 1
op i `&`, `~&`, `|`, `~|`, `^`, `~^` 1
i op j `>>`, `<<` L(i)
i ? j : k   max(L(j), L(k)
{i, ..., j}   L(i) + ... + L(j)
{i {j, ..., k}}   i `*` (L(j) + ... + L(k))

## Functions¶

Reference

Function Description
`ln(x)` Natural logarithm (base e)
`log(x)` Common logarithm (base 10)
`exp(x)` Exponential
`sqrt(x)` Square root: √`x`
`min(x,y)` Minimum
`max(x,y)` Maximum
`abs(x)` Absolute value
`floor(x)` Floor (largest integer less than or equal to `x`)
`ceil(x)` Ceiling (smallest integer greater than or equal to `x`)
`pow(x,y)` Power: `x`y (`y` must be integer if `x` < 0)
`sin(x)` Sine (argument is in radians)
`cos(x)` Cosine (argument is in radians)
`tan(x)` Tangent (argument is in radians)
`asin(x)` Arc sine (result is in radians)
`acos(x)` Arc cosine (result is in radians)
`atan(x)` Arc tangent (result is in radians)
`atan2(y,x)` Angle from the origin to the point `x`, `y`
`hypot(x,y)` Distance from the origin to the point `x`, `y`; `hypot(x,y)` = √(x2 + y2)
`sinh(x)` Hyperbolic sine (argument is in radians)
`cosh(x)` Hyperbolic cosine (argument is in radians)
`tanh(x)` Hyperbolic tangent (argument is in radians)
`asinh(x)` Hyperbolic arc sine (result is in radians)
`acosh(x)` Hyperbolic arc cosine (result is in radians)
`atanh(x)` Hyperbolic arc tangent (result is in radians)
`\$abstime` The current time in seconds
`\$realtime` The current time in the current Verilog time units.
`\$temperature` The ambient temperature
`\$vt` The thermal voltage (VT = kT/q) at the ambient temperature

## Random Functions¶

Reference

Function Description
`\$random(seed)` Uniformly distributed random 32-bit integer
`\$dist_uniform(seed, lb, ub)` Uniformly distributed random integer
`\$rdist_uniform(seed, lb, ub)` Uniformly distributed random real value
`\$dist_normal(seed, mean, sd)` Normally distributed random integer
`\$rdist_normal(seed, mean, sd)` Normally distributed random real value
`\$dist_exponential(seed, mean)` Exponentially distributed random integer
`\$rdist_exponential(seed, mean)` Exponentially distributed random real value
`\$dist_poisson(seed, mean)` Poisson distributed random integer
`\$rdist_poisson(seed, mean)` Poisson distributed random real value
`\$dist_chi_square(seed, dof)` Chi square distributed random integer
`\$rdist_chi_square(seed, dof)` Chi square distributed random real value
`\$dist_t(seed, dof)` Student T distributed random integer
`\$rdist_t(seed, dof)` Student T distributed random real value
`\$dist_erlang(seed, k, mean)` Erlang distributed random integer
`\$rdist_erlang(seed, k, mean)` Erlang distributed random real value

## Analog Operators¶

Reference

Operator Description
`ddt(operand, [abstol|nature])` Time derivative
`idt(operand, [ic], [assert], [abstol|nature])` Time integral
`idtmod(operand, [ic], [modulus], [offset], [abstol|nature])` Circular integrator
`transition(operand, delay, trise, [tfall])` Transition
`slew(operand, [rising_sr], [falling_sr])` Slew
`absdelay(operand, delay, [max_delay])` Delay
`laplace_zp(operand, [zeta], [rho], [epsilon])` Laplace, zero-pole form
`laplace_nd(operand, [n], [d], [epsilon])` Laplace, numerator-denominator form
`laplace_zd(operand, [zeta], [d], [epsilon])` Laplace, zero-denominator form
`laplace_np(operand, [n], [rho], [epsilon])` Laplace, numerator-pole form
`zi_zp(operand, [zeta], [rho], T, tau, t0)` Z transform, zero-pole form
`zi_nd(operand, [n], [d], T, tau, t0)` Z transform, numerator-denominator form
`zi_zd(operand, [zeta], [d], T, tau, t0)` Z transform, zero-denominator form
`zi_np(operand, [n], [rho], T, tau, t0)` Z transform, numerator-pole form
`last_crossing(operand, [direction])` Last crossing
`limexp(operand)` Limited exponential

## Small-Signal Stimulus Functions¶

Reference

Function Description
`ac_stim([name], [mag], [phase]))` AC stimulus
`white_noise(pwr, [name])` White noise
`flicker_noise(pwr, [exp], [name])` Flicker noise
`noise_table(pwr, [name])` Noise table

## File Operations¶

Reference

Function Description
`fopen(filename, mode))` File open
`fclose(file)` File close