Pulse

- General Form:
`pulse(`*v1 v2*[*td tr tf pw per td1 td2*...] [*pattern_spec*])

- Examples:
`vin 3 0 pulse(-1 1 2ns 2ns 2ns 50ns 100ns)`

vin1 1 0 pulse(0 1 2n .5n .5n 1n 0 6n 10n)

v2 4 0 v(1)*pulse(0 1 5n 10n)

This function applies only to transient analysis, where time is the
running variable. When referring to default values, `tstep` is
the printing increment and `tstop` is the final time in transient
analysis.

The following are the numerical parameters, the *pattern_spec* is
used to specify a patterned pulse train and the syntax will be
described separately below.

parameterdescriptiondefault valueunitsv1initial value volts or amps v2pulsed value volts or amps tddelay time 0.0 seconds trrise time tstepseconds tffall time tstepseconds pwpulse width tstepseconds perperiod tstopseconds

The signal starts at value *v1* at `time=0`. At time *td*, the pulse begins, the value arriving linearly at *v2* after
the rise time *tr*. The value *v2* is maintained for the
pulse width time *pw*, then reverts linearly to value *v1*
over the fall time *tf*. If a period *per* is given and
nonzero, a periodic train of pulses is produced, starting at *td*, with the second pulse starting at *td*+*per*, etc.
The minimum value for *per* is *tr*+*tf*+*pw*,
which is silently enforced.

Numbers *td1*, *td2*, etc. following *per* are taken
as additional delay values (similar to *td*) and a pulse will
start at each given value. These will actually be superposed periodic
pulse trains if *per* is nonzero (it must be given in any case
when using the additional delays).

A single pulse so specified is described by the following table:

timevalue0v1tdv1td+trv2td+tr+pwv2td+tr+pw+tfv1tstopv1

Intermediate points are determined by linear interpolation. It is not an error to omit unused parameters, for example the specification

describes a voltage which, starting from 0, begins rising at 2 nanoseconds, reaching 1 volt at 4 nanoseconds, and remains at that value.vxx 3 0 pulse(0 1 2n 2n)

If this function is used bare and not part of an expression in a
voltage or current source, then the general source instance parameters
`prm1` etc. map as below. It is possible to read and alter these
values using the special vector @*device*[*param*]
construct, or with the **alter** and **sweep** commands. However,
there is no sanity checking so bad numbers can cause wild behavior or
worse.

prm1 v1 prm2 v2 prm3 td prm4 tr prm5 tf prm6 pw prm7 per