Part Number: DS560DF810EVM
Setup:
The cable we used is MXP40.
- PPG's 26.5625G NRZ x2 into the EVB RX0 and RX1
- EVB TX0+ into the oscilloscope
- EVB TX0- into the Trigger
- GUI setting to 2xNRZ to PAM4 (PRBS15)
Result: 17.844GBaud PAM4 (need to be 26.5625GBaud PAM4)

If we use the PPG's Trigger for item 3, the clock is right, but the result shows that the output is acutally 17.84GBaud.

So we were wondering what we did wrong.
Are there some settings at the GUI we should try?
Below is the Bringup.py code we are using.
device.hardReadAlways=1;
'''###------------BRINGUP PARAMETERS-------------###'''
sysParams.channelsDataRate=[26.5625]*8; #(in GBaudps) 26.5625 53.125
### Channels to be enabled : [Q0CH0,Q0CH1,Q0CH2,Q0CH3,Q1CH0,Q1CH1,Q1CH2,Q1CH3]
sysParams.channelsEnabled=[1,1,1,1,1,1,1,1]; #[1,0,0,0,0,0,0,0];
### PAM4/NRZ mode : 1->PAM4, 0->NRZ
sysParams.pam4Mode=[0]*8; #1->PAM4, 0->NRZ
### Tx PRBS generator polarity : 0-> Not inverted 1->Inverted, for channels [Q0CH0,Q0CH1,Q0CH2,Q0CH3,Q1CH0,Q1CH1,Q1CH2,Q1CH3]
sysParams.txPolarityInv=[0]*8;
### Rx PRBS checker polarity : 0-> Not inverted 1->Inverted, for channels [Q0CH0,Q0CH1,Q0CH2,Q0CH3,Q1CH0,Q1CH1,Q1CH2,Q1CH3]
sysParams.rxPolarityInv=[0,0,0,0,0,0,0,0];
### Rx PRBS selection : 0->7,1->9,'3->15,4->23,5->31,8->13 [Q0CH0,Q0CH1,Q0CH2,Q0CH3,Q1CH0,Q1CH1,Q1CH2,Q1CH3]
sysParams.rxPrbsSel=[3,3,3,3,3,3,3,3];
### Tx PRBS selection : 0->7,1->9,3->15,4->23,5->31 (for use in PRBS generator mode)
sysParams.txPrbsSel=[3]*8;
### Grey code : 1->enable 0->disable [Q0CH0,Q0CH1,Q0CH2,Q0CH3,Q1CH0,Q1CH1,Q1CH2,Q1CH3]
sysParams.grayCodeEn=[1]*8;
### Gearboxmode:
### 0x00 Straight Mode 0x01 Crosspoint mode 0x02 Broadcast from RX A 0x03 Broadcast from RX B 0x04 Gearbox MUX to TX A 0x05 Gearbox MUX to TX B.
### 0x06 Gearbox DEMUX from RX A 0x07 Gearbox DEMUX from RX B 0x08 Up-convert MUX to TX A 0x09 Up-convert MUX to TX B 0x0a Down-convert DEMUX from RX A.
### 0x0b Down-convert DEMUX from RX B 0x0c GPIO control of Crosspoint 0x80 Analog low latency path.
### [Q0CH0,Q0CH1,Q0CH2,Q0CH3,Q1CH0,Q1CH1,Q1CH2,Q1CH3]
sysParams.gearboxmode=[0x04]*8
### AlarmEvent : each bit represent different event
### 1-Signal detected on channel 2-Signal loss detected on channel 4-Channel initialization started. 8-Channel initialization complete
### 16- Reserved Bit-0 32- Eye offset measurement complete 64- Channel ready
### [Q0CH0,Q0CH1,Q0CH2,Q0CH3,Q1CH0,Q1CH1,Q1CH2,Q1CH3]
sysParams.alarmEventSel=[0xF]*8;
'''-------------------------'''
def bercheck(quad,chRx,polySel,sample_count=2048):
returnArr=[];
vemList=[];
berArr=[];
### Rx PRBS selection : 0->7,1->9,3->15,4->23,5->31,8->13
sysParams.rxPrbsSel[quad*4+chRx]=polySel;
### Check channel init status
[done,resultArr]=ds560.QUAD[quad].chInitStat(chRx);
if(device.chInitComplete[quad*4+chRx]==1):
log("Channel initialization completed successfully",'Debug');
### Vertical eye logging
vemList=ds560.QUAD[quad].verteyeMacroCall(chIdx=chRx);
log("VemList ="+str(vemList[1]));
### RX BER check
berArr=ds560.QUAD[quad].prbsBERCheck(chRx,sysParams.rxPrbsSel[quad*4+chRx],sysParams.rxPolarityInv[quad*4+chRx],symbolWindow=sample_count,serEn=0);
delay(0.2);
else:
error("Channel initialization is in progress / lock not achieved. Please ensure input signal is connected");
returnArr.append(berArr);
returnArr.append(vemList);
returnArr.append(resultArr);
return returnArr;
'''-------------------------'''
'''-----To change CTLE settings-----'''
#0-default and 1-for DAC cable
sysParams.channelType=[0]*8;
#0-default 1-10dB PAM4 2-25dB PAM4 3-35dB NRZ
sysParams.channelPerformanceOptimize=[0]*8;