BBSIM(1:LOCAL)						      BBSIM(1:LOCAL)

      bbsim  - simulate a bang-bang pll

      bbsim [ options ]

      bbsim is a program written in C which produces ascii "X Y" time domain
      output  suitable	for  driving  autoplot(1), or the ap(1) X11 plotting
      script.	Autoplot is available by anonymous ftp from  inside  Agilent
      at  Alternatively, data can be
      plotted by tools such as gnuplot or Rlab.

      -?      (print a usage message).

      -a <input phase mod amplitude>
	      This option allows testing  the  loop  with  sinusoidal  phase
	      modulation with amplitude specified in units of BB times.	 The
	      -f option sets the frequency.   Default phase modulation is 0.

      -b <bangbang time>
	      The standard loop has all parameters normalized to BB  time  =
	      1.   This	 option	 allows	 changing  the	default	 BB time for
	      comparison purposes.

      -e (plot phase error rather than phase)
	      The simulator normally plots data input phase along with	loop
	      tracking	phase.	For examining eye margin, the -e option will
	      show the tracking error instead.

      -f <input phase mod period (normalized to update times)>
	      Although this option is -f (making one think of  "frequency"),
	      it  actually  specifies the modulation period in update times.
	      For instance a 2.5Gb/s link has an update time of 400ps.	A  1
	      MHz  phase modulation on the input waveform would be 1us/400ps
	      = 2500 update times.  This could be simulated with "-f 2500".

      -i <number of interpolated points per timestep>
	      The simulator normally outputs  the  VCO	phase  only  at	 the
	      sampling	instant.  The -i option will generate n interpolated
	      values between sampling instants.	 This is useful to show	 the
	      quadratic	 curvature  of	the  loop  response between sampling

      -j <gaussian data input jitter (rms)>
	      This option adds gaussian jitter to the input  waveform.	 The
	      jitter  sigma  is	 specified  as	a  multiple  of the BB time.
	      Random jitter can be used in conjunction with the	 -f  and  -a
	      options.	The default jitter is 1 BB unit RMS.

      -l <phase detector latency (in bit-times)>
	      This option allows simulating  pipeline  delay  in  the  phase
	      detector logic.

      -m <vco mismatch normalized to bb>
	      When the -m option is specified, the -p (stability)  parameter
	      is  ignored,  and	 a  first order loop is simulated (no charge
	      pump).  The -m option specifies a VCO  mismatch  from  nominal
	      frequency in units of BB delta F.

      -n <number of timesteps to simulate>

      -o <vco starting phase (in bb units)>
	      This option allows simulation of	phase  acquisition  with  an
	      initial phase step.

      -p <stability factor psi>
	      This option specifies the ratio of the linear phase change  to
	      the  quadratic  phase  change during one update time.  A first
	      order loop is the limit as psi goes to infinity.	According to
	      one   way	  of   analyzing   the	 loop,	 this  is  equal  to

      -q  <normalized cycle-to-cycle sigma>  (simulate oscillator phase noise)
	      The delay of each gate in a ring oscillator is  well  modelled
	      by  (tau + sigma).  After N such delays, the timing of the Nth
	      VCO clock edge is N*tau + sqrt(sigma).  The -q option adds  an
	      integrated  noise to the incoming signal.	 In other words, the
	      random value at the Nth update time is the  next	term  in  an
	      ongoing  summation  of  N	 random	 gaussian  variates with the
	      specified cycle-to-cycle sigma (normalized  to  bb  delta	 T).
	      The default VCO jitter is 0 BB unit RMS.

      -r (plot data phase also)
	      Normally, just the loop phase is plotted.	 This  option  plots
	      the data phase also.

      -s (statistics only)
	      all waveform  output  is	inhibited  and	a  summary  of	loop
	      statistics  is  printed instead. The format looks like: "STAT:
	      1	  3    3    0.996019	2.7426"	  where	  the	fields	 are
	      specified_jitter_value,	  psi,	   max_pd_hi,	  max_pd_lo,
	      actual_sigma_data_jitter,	 actual_sigma_vco_jitter.   The	  pd
	      hi/lo  counts  can be used to estimate when the loop goes into
	      slew-rate limiting.

      -t (output tplot title)
	      This flag turns on autoplots-style x and y axis labels plus  a
	      title showing the command line options.

      -v (verbose flag)
	      This option is parsed  but  currently  does  nothing.   It  is
	      reserved	for  debugging and custom modification of the source

      -w (do windowed dft freq & gain calc.)
	      When used with -f and -a, the -w option  performs	 a  windowed
	      DFT frequency and phase calculation to measure jitter transfer
	      gain.   The  DFT	uses  data  from  the  second  half  of	 the
	      simulation  time	interval  and  uses  a	triangular window to
	      minimize truncation effects.  The output	format	looks  like:
	      DFT: period input_amplitude output_amplitude output_phase

      -x <transition probability>
	      This option controls transition probability of the data.	 The
	      default  is  "-x	1"  which  simulates  "1010..."	 data with a
	      transition at every bit boundary.	 Specifying "-x	 0.5"  is  a
	      good simulation of random or scrambled data.  Using integer -x
	      values greater  than  one	 will  simulate	 deterministic	data
	      patterns	of  various  runlengths.   For	example,  -x 5, will
	      simulate	  the	 loop	 with	 a    data    pattern	  of

      -z (tristate during non-transition times)
	      This option turns tristating on/off.  The default is off.

      To simulate a bb loop for 1000 time steps with stability of 20, random
      transition  density  of  .3  and	an input random jitter of 2 bb units

	   bbsim -n 1000 -p 20 -x .3 -j 2 | ap

      Notice that VCO phase noise affects the loop the same as	input  phase
      noise  (both  need  to be tracked and "use up" part of the loop jitter
      tolerance capability).  Here's the same  simulation  as  the  previous
      example,	but  with  a  VCO exhibiting a random jitter sigma of 0.1 bb
      units (rms) in addition to the random input data jitter of 2 bb  units

	   bbsim -n 1000 -p 20 -x .3 -j 2 -q 0.1 | ap

      Same as above  with  autoplot  titles  and  showing  the	input  phase
      waveform as a separate trace:

	   bbsim -n 1000 -p 20 -x .3 -j 2 -t -r | ap

      Same as above, but looking at a phase  aquisition	 transient  starting
      500 bb units out of lock:

	   bbsim -n 1000 -p 20 -x .3 -j 2 -t -r -o 500 | ap

      The same loop, but tracking a  phase  modulated  input  with  a  pk/pk
      amplitude of 10 bb phase units, and a period of 500 update times:

	   bbsim -a 10 -f 500 -n 1000 -p 20 -x .3 -j 2 -t -r | ap

      An ideal loop, with no input jitter whatsoever:

	   bbsim -x.5 -n 1000 -p 20 -j 0 -t -r | ap

      The same loop with tristating.  Notice the big  reduction	 in  hunting
      jitter during long runlengths:

	   bbsim -z -x.5 -n 1000 -p 20 -j 0 -t -r | ap

      A paper describing the theoretical foundations of the simulator
      is Walker, R.C., Designing Bang-bang PLLs for Clock and Data 
      Recovery in Serial Data Transmission Systems, pp. 34-45, a chapter
      appearing in "Phase-Locking in High-Performance Sytems - From
      Devices to Architectures", edited by Behzad Razavi, IEEE Press,
      2003, ISBN 0-471-44727-7.  An electronic copy should be available

      Rick Walker (