[BP] how to evaluate signaling method follow up
guys,
Here is the next step after the proposal i sent out August 23.
This includes:
1. A simulation file for NRZ simulation.
2. A transmitter subcircuit file for NRZ simulation.
3. A simulation file for PAM4 simulation.
4. A transmitter subcircuit file for PAM4 simulation.
5. a zip file with the PRBS pwl files i used.
You can look at the files to see the structure of the simulation or
use them to do simulations yourself. If you want to do simulations
you will need:
1. A receiver subcircuit file named "rx.inc". I am treating
receivers as proprietary.
2. Package model subcircuit files for the transmitter called:
"TxPackage.inc" and for the receiver called: "RxPackage.inc"
3. A touchstone file describing the channel. You may need to
change the name of the file in the simulation file.
You may want to change the parameter values in the simulation file.
The tap values i have included give fairly good EYEs with Steve
Anderson's thru6 channel and the stresses nearly or just re-close the
EYE.
The over all structure of the simulation deck for either is:
The simulation file includes:
1. Parameter values, which are in 3 kinds:
A. Transmitter definition parameter:
i. baud, baud rate: 10.3125G for NRZ or 5.15625G for PAM4
ii. Amp, the nominal peak to peak differential amplitude
iii. Trf, the trapezoidal rise and fall time in UI
B. Transmitter peaking parameters:
i. 1 Precursor and 1 postcursor tap value for NRZ
ii. 2 Postcursor tap values for PAM4
C. Stress parameters:
i. XtalkAmp, interference amplitude (half peak to peak)
ii. XtalkFratio, ratio of interference frequency to
baud rate.
iii. TJ, total jitter in UI
iv. dutyCycle_over_TJ, fraction of total jitter which is
at half baud rate
2. Transmitter sub circuit. The transmitter sub circuit implements
a 3 tap equalizer and includes parameterized jitter.
3. Package models. I am going to ask that someone else find a
suitable model.
4. The channel.
5. Receiver load (the Tx load is included in the subcircuit)
6. Interference injection sources.
7. An instance of the receiver sub circuit. Someone else should
provide the receiver model. It may be encrypted. The Out
port or the MSB and LSB ports should be considered the
final measurement point.
If we decide to proceed with this approach the following will need
to be done before going too much farther:
1. Define standard values for Transmitter definition parameters
and targets for Stress parameters. These may be different for
the 3 (or more) signaling schemes.
2. Find a set of channels to simulate over.
3. Write scripts for analyzing the output including finding
EYE size if that is relevant and checking for correct data.
4. Write scripts which pre-code PRBS data for duo-binary or
write output analysis script to post-decode the data.
5. Generate longer data files for more through testing. The
included scripts should be good enough for finding the right
equalizer settings etc. but we will want longer more complex
patterns for final evaluation.
6. Separate out all the parts of the simulation file which are
design values (like tap values) from the specified parts, and
put them in an include file.
7. Fix the various problems which the ad-hoc will discover for
me.
charles
|--------------------------------------------------------------------|
| Charles Moore
| Agilent Technologies
| ASIC Products Division
| charles_moore@agilent.com
| (970) 288-4561
|--------------------------------------------------------------------|
test a 3 tap peaked transmitter into a IEEE802.3ap channel
.options list node post
.param baud=10.3125g
.param XtalkAmp=10m XtalkFratio="2*(1+1/(3.7*127))" XtalkF=baud/XtalkFratio
Vxtalk Xtalk 0 sin(0.0 XtalkAmp XtalkF)
Xtx Tx_T Tx_C 0 Tx baud=baud Amp=.8 Trf=.2 pre=.035 post=.38 \
TJ=300m dutyCycle_over_TJ=.1
XtxPack Tx_T Tx_C TP1_T TP1_C 0 TxPackage
Ssa TP1_T TP4_T TP1_C TP4_C 0 MNAME=Sanderson
.MODEL Sanderson S N=4 TSTONEFILE=thru6.s4p TYPE=s
XrxPack Rx_T Rx_C TP4_T TP4_C 0 RxPackage
Rlt Rx_T 0 50
Rlc Rx_C 0 50
*crx Rx_T Rx_C 205f
Extt Rx_T Rxx_T VCVS Xtalk 0 0.5
Extc Rx_C Rxx_C VCVS 0 Xtalk 0.5
Xrx Rxx_T Rxx_C out 0 Rx
.include "TxNRZ3tap.inc"
.include "TxPackage.inc"
.include "RxPackage.inc"
.include rx.inc
.tran ".1/baud" "600/baud"
.end
* model NRZ transmitter with 3 taps
* jitter added at 2 frequencies,
* one at half the baud rate and the other
* at a lower frequency
* Parameters which can be passed are:
*
* baud = the baud rate (bit rate for NRZ)
* Apm = peak to peak differential amplitude into a perfect load
* Trf = Rise and fall time in UI
* pre = precursor tap weight, total tap weight = 1.0
* post = postcursor tap weight, total tap weight = 1.0
* TJ = total jitter peak to peak in UI
* dutyCycle_over_TJ = the fraction of jitter provided by half baud jitter
*
* data in PRBS7_N.pwl is a repeating 127 bit pattern with hooks for jitter
* in each version N represents data advancement, so PRBS7_3.pwl dat is
* one bit time later than PRBS7_4 etc.
.subckt Tx Tx_T Tx_C GND \
baud=10.3125g Amp=1 Trf=.2 pre=.05 post=.25 \
TJ=300m dutyCycle_over_TJ=.2
.param period="1/baud" tr="Trf*period" low="-.5*amp" hig=".5*amp"
.param jt="period*TJ/2"
.param pj="dutyCycle_over_TJ*jt" rj="jt-pj" rjr=".098"
.param main="post+pre-1"
.param twopi="8*atan(1)"
.param edge(n)="max(0,period*n+pj*cos(.5*twopi*n)+rj*sin(rjr*n*twopi))"
.include "PRBS7_3.pwl"
.include "PRBS7_4.pwl"
.include "PRBS7_5.pwl"
G1 Tx_T Tx_C poly(2) PRBS7_5 0 init 0 0 0 0 0 "pre/50" 0
G2 Tx_T Tx_C poly(2) PRBS7_4 0 init 0 0 0 0 0 "main/50" 0
G3 Tx_T Tx_C poly(2) PRBS7_3 0 init 0 0 0 0 0 "post/50" 0
vinit init 0 pwl(0 0 1p 1)
Rt Tx_T GND 50
Rc Tx_C GND 50
G1D dummy 0 poly(2) PRBS7_5 0 init 0 0 0 0 0 "pre/100" 0
G2D dummy 0 poly(2) PRBS7_4 0 init 0 0 0 0 0 "main/100" 0
G3D dummy 0 poly(2) PRBS7_3 0 init 0 0 0 0 0 "post/100" 0
Rd dummy 0 50
.ends Tx
test a 3 tap peaked transmitter into a IEEE802.3ap channel
.options list node post
.param baud=5.15625g
.param XtalkAmp=10m XtalkFratio="2*(1+1/(3.7*127))" XtalkF=baud/XtalkFratio
Vxtalk Xtalk 0 sin(0.0 XtalkAmp XtalkF)
Xtx Tx_T Tx_C 0 Tx baud=baud Amp=.8 Trf=.2 post1=.32 post2=-.02 \
TJ=200m dutyCycle_over_TJ=.1
XtxPack Tx_T Tx_C TP1_T TP1_C 0 TxPackage
Ssa TP1_T TP4_T TP1_C TP4_C 0 MNAME=Sanderson
.MODEL Sanderson S N=4 TSTONEFILE=thru6.s4p TYPE=s
XrxPack Rx_T Rx_C TP4_T TP4_C 0 RxPackage
Rlt Rx_T 0 50
Rlc Rx_C 0 50
Extt Rx_T Rxx_T VCVS Xtalk 0 0.5
Extc Rx_C Rxx_C VCVS 0 Xtalk 0.5
Xrx Rxx_T Rxx_C MSB LSB 0 Rx bitrate=baud
.include "TxPAM4_3tap.inc"
.include "TxPackage.inc"
.include "RxPackage.inc"
.include rx.inc
.tran ".1/baud" "600/baud"
.end
* model PAM transmitter with 3 taps
* jitter added at 2 frequencies,
* one at half the baud rate and the other
* at a lower frequency
* Parameters which can be passed are:
*
* baud = the baud rate (hald bit rate for PAM4)
* Apm = peak to peak differential amplitude into a perfect load
* Trf = Rise and fall time in UI
* post1 = first postcursor tap weight, total tap weight = 1.0
* post2 = second postcursor tap weight, total tap weight = 1.0
* TJ = total jitter peak to peak in UI
* dutyCycle_over_TJ = the fraction of jitter provided by half baud jitter
*
* data in PRBS7_N.pwl is a repeating 127 bit pattern with hooks for jitter
* in each version N represents data advancement, so PRBS7_3.pwl dat is
* one bit time later than PRBS7_4 etc.
.subckt Tx Tx_T Tx_C GND \
baud=5.15625g Amp=1 Trf=.2 post1=.25 post2=.05 \
TJ=300m dutyCycle_over_TJ=.2
.param period="1/baud" tr="Trf*period" low="-.5*amp" hig=".5*amp"
.param jt="period*TJ/2"
.param pj="dutyCycle_over_TJ*jt" rj="jt-pj" rjr=".098"
.param main="abs(post1)+abs(post2)-1"
.param twopi="8*atan(1)"
.param edge(n)="max(0,period*n+pj*cos(.5*twopi*n)+rj*sin(rjr*n*twopi))"
.include "PRBS7_3.pwl"
.include "PRBS7_4.pwl"
.include "PRBS7_5.pwl"
.include "PRBS6_3.pwl"
.include "PRBS6_4.pwl"
.include "PRBS6_5.pwl"
G1 Tx_T Tx_C poly(2) PRBS7_5 0 init 0 0 0 0 0 "main/75" 0
G2 Tx_T Tx_C poly(2) PRBS7_4 0 init 0 0 0 0 0 "post1/75" 0
G3 Tx_T Tx_C poly(2) PRBS7_3 0 init 0 0 0 0 0 "post2/75" 0
G4 Tx_T Tx_C poly(2) PRBS6_5 0 init 0 0 0 0 0 "main/150" 0
G5 Tx_T Tx_C poly(2) PRBS6_4 0 init 0 0 0 0 0 "post1/150" 0
G6 Tx_T Tx_C poly(2) PRBS6_3 0 init 0 0 0 0 0 "post2/150" 0
vinit init 0 pwl(0 0 1p 1)
Rt Tx_T GND 50
Rc Tx_C GND 50
G1D dummy 0 poly(2) PRBS7_5 0 init 0 0 0 0 0 "main/100" 0
G2D dummy 0 poly(2) PRBS7_4 0 init 0 0 0 0 0 "post1/100" 0
G3D dummy 0 poly(2) PRBS7_3 0 init 0 0 0 0 0 "post2/100" 0
G4D dummy 0 poly(2) PRBS6_5 0 init 0 0 0 0 0 "main/100" 0
G5D dummy 0 poly(2) PRBS6_4 0 init 0 0 0 0 0 "post1/100" 0
G6D dummy 0 poly(2) PRBS6_3 0 init 0 0 0 0 0 "post2/100" 0
Rd dummy 0 50
.ends Tx
prbs.zip