SNAU305 February 2025 LMH1229 , LMH1239
The LMH12x9 can be configured to output PRBS-7, PRBS-9, PRBS-23 and PRBS-31. Based on the PRBS polynomial and polarity selected, data is generated after loading the initial seed. The 32-bit data generated is read by the serializer clock. The pattern can be output to SDI_OUT±, OUT0± and/or OUT1±.
| COMMAND | REGISTER | VALUE | MASK | //COMMENTS |
|---|---|---|---|---|
RAW | FF | 04 | 07 | //Select CDR Register Page |
RAW | 2C | 80 | C0 | //Enable the VCO by enabling the VCO_PD override and writing 0 to VCO_PD |
RAW | 45 | 88 | CE | //Enable PFD |
RAW | 41 | 80 | C0 | //Enable Deserializer |
RAW | 3F | 00 | 20 | //Enable PDIQ |
RAW | 3F | 00 | 07 | //Select VCO Scalar Divider |
//Reg0x3F[2:0] = 3'b000 Full-Rate | ||||
//Reg0x3F[2:0] = 3'b001 Divide-by-2 | ||||
//Reg0x3F[2:0] = 3'b010 Divide-by-4 | ||||
//Reg0x3F[2:0] = 3'b011 Divide-by-8 | ||||
//Reg0x3F[2:0] = 3'b100 Divide-by-40 | ||||
RAW | 3F | 08 | 08 | //Enable PDIQ Override |
RAW | 3F | 48 | 48 | //Enable PDIQ PD Override |
RAW | 54 | 80 | E0 | //Reg0x54[7:5] = 3'b100 PRBS data on OUT0 |
10 | 1C | //Reg0x54[4:2] = 3'b100 PRBS data on OUT1 | ||
03 | 03 | //Reg0x54[1:0] = 2'b11 PRBS data on SDI_OUT | ||
RAW | 53 | 02 | 02 | //Override the independent output control |
RAW | 40 | 20 | 20 | //Enable Serializer |
RAW | 82 | 40 | 40 | //Allow serializer clock to drive PRBS-core |
RAW | FF | 05 | 07 | //Select EQ/Drivers Register Page |
RAW | 34 | 40 | 40 | //Disable ability to power down TX0 |
RAW | 36 | 40 | 40 | //Disable ability to power down TX1 |
RAW | 38 | 80 | 80 | //Disable ability to power down SDI_OUT± |
RAW | FF | 00 | 07 | //Select SHARE Register Page |
RAW | 0C | 04 | 04 | //Hold serializer clock in reset state |
RAW | 0B | 04 | 04 | //Enable Serializer Clock |
RAW | 0C | 00 | 04 | //Bring serializer clock out of reset state |
RAW | FF | 04 | 07 | //Select CDR Register Page |
RAW | 79 | 00 | 30 | //Reg0x79[5:4] = 2'b00 PRBS7 |
10 | 30 | //Reg0x79[5:4] = 2'b01 PRBS9 | ||
20 | 30 | //Reg0x79[5:4] = 2'b10 PRBS23 | ||
30 | 30 | //Reg0x79[5:4] = 2'b11 PRBS31 | ||
RAW | 7A | 00 | 01 | //Force no polarity inversion on gen data |
RAW | 79 | 02 | 02 | //Make the logic as PRBS generator |
RAW | 79 | 01 | 01 | //Enable PRBS functionality |
RAW | FF | 00 | 07 | //Select SHARE Register Page |
RAW | FE | 08 | 0C | //Overrides for OUT0± |
When the LMH12x9 is programmed in generator mode the device can generate error-free PRBS. It is possible to inject one bit of error to the generated data by flipping one of the bits in the generated data. The user can assign the error to one of the 32 bits by setting the self clearing inject-bit. After this action, the output data carries one bit error.
| COMMAND | REGISTER | VALUE | MASK | //COMMENTS |
|---|---|---|---|---|
RAW | FF | 04 | 07 | //Select CDR Register Page |
RAW | 82 | xx | 1F | //0x82[4:0] = 5'bxxxxx Select 32-bit address for single-bit error injection |
RAW | 82 | 20 | 20 | //Trigger the PRBS generator to inject just one bit of error in the generated data stream. Self-clearing. |
If the module is set to check PRBS, the incoming deserializer data is first loaded to the device as a seed. Based on the PRBS polynomial and polarity selected by the state machine, the device generates a new value, and this value is compared against the deserializer data in the next data clock cycle. This process repeats for 64 clock cycles and if the data from device matches the deserializer data in all 64 clock cycles, the state machine (SM) declares a PRBS-lock, which means the SM finds a matching PRBS polynomial in the incoming data. Otherwise, the SM switch to test the opposite polarity, and then another polynomial. This process repeats until the SM finds a PRBS lock. However, if the incoming signal does not match any of the supported PRBS polynomial, this process goes on forever.
| COMMAND | REGISTER | VALUE | MASK | //COMMENTS |
|---|---|---|---|---|
RAW | FF | 04 | 07 | //Select CDR Register Page |
RAW | 40 | 20 | 20 | //Initialize clock signals for PRBS checking |
RAW | 82 | 40 | 40 | //Initialize clock signals for PRBS checking |
RAW | 82 | 00 | 40 | //Initialize clock signals for PRBS checking |
RAW | 40 | 00 | 20 | //Initialize clock signals for PRBS checking |
RAW | 8B | 00 | 80 | ///Turn off power cycling |
RAW | 82 | 80 | 80 | //Allow deserializer clock to drive PRBS-core |
RAW | 79 | 04 | 04 | //Make the logic as PRBS Checker |
RAW | 79 | 10 | 10 | //Enable PRBS functionality |
RAR | 73 | 0F | //Read PRBS_PATT_DET to detect which PRBS is being provided | |
//Reg 0x73[3:0] = 4'b1000 PRBS-31 Detected | ||||
//Reg 0x73[3:0] = 4'b0100 PRBS-23 Detected | ||||
//Reg 0x73[3:0] = 4'b0010 PRBS-9 Detected | ||||
//Reg 0x73[3:0] = 4'b0001 PRBS-7 Detected | ||||
RAR | 74 | 07 | //Read upper three bits of eleven-bit wide error sum. Maximum 2047 total errors. | |
//Reg0x74[2:0] = 3'bxxx | ||||
RAR | 75 | FF | //Read lower eight bits of eleven-bit wide error sum | |
//Reg0x75[7:0] = 8'bxxxxxxxx |