There could be a solution to the droop problem and I only have a little hint so far.
Let's imagine I use PAM3 over a pair of lanes : each clock cycle can transfer one of 3×3 symbol, or just above 3 bits, in the 3B2T scheme. The code 0,0 is not used to prevent DC imbalance.
This is quite efficient and requires only 2×2 diff inputs, which is the self-imposed limit. By itself, this does not "solve droop" but this encoding leaves one symbol "reserved for other purposes". I don't need this since the control/data mark is already embedded in the binary code.
What I could do though is use the 0,0 symbol as "same symbol as before", it's a neutral value that restores DC balance so it's fine.
The only problem here is that the droop is a per-lane problem, not a symbol problem. One lane could droop like hell while the other wiggles and there is no solution here. This means that the "same" symbol must be applied orthogonally to the above idea.
There is one convenient way to use this principle but it implies stripping the ParPop layer away, leaving a "naked PEAC" configuration, so only 18 bits per word are used. This reduces the error detection significantly but also increases the channel efficiency.
The 18-bit word is split in half, giving a pair of three trits, and each lane gets 3 symbols to encode in 2 cycles each. Thus it is easy to detect when a symbol repeats, and the lane can "go neutral", further reducing the power and EMI.
PEAC by itself still provides a good error detection though the mark bits have some worst case situations to study. Going to a "non-binary" modulus will greatly increase the avalanche speed so the retransmit window will be shorter...
There is also another more practical aspect to solve: magjacks are usually made for 2 pairs, 4 pairs is less cheap or available. But the dual-lane, "bi-trit" method is worth investigating.
Important read : https://www.researchgate.net/publication/374112905_PAM3_History_Algorithm_and_Performance_Comparison_to_NRZ_and_PAM4
"PAM3: History, Algorithm, and Performance Comparison to NRZ and PAM4 Sherman"
by Shan Chen , Francesco de Paulis , David R. Stauffer , and Brian Holden
September 2023 - DOI:10.1007/978-981-99-4476-7_9
Here are some 3B2T encoding tables from the paper:
100BASE-T1 1000Base-T1 USB4v2.0
000 - - - - - -
001 - 0 0 - - +
010 - + - 0 - + [???]
011 0 - - + + -
100 0 + 0 + 0 +
101 + - + - + - [???]
110 + 0 + + + 0
111 + + 0 + [???] + +
Their copy of the tables seems to have 3 errors. Anyway, there are many, many ways to map 8 values to 9 symbols and we can trust the IEEE people to find a very efficient one... For now let's assume the (errorless) 100Base-T1 convention but there is some considerable margin here.
Also from the paper:
- "The basic encoding format for PAM3 is 3B2T which maps 3 bits to 2 trits and achieves a transmission efficiency of 1.5 bits/symbol. In terms of the specific mapping codebook, variants exist. For example, the 3B2T mapping scheme used in USB4v2.0, 100BASE-T1, and 1000BASE-T1 are all different from each other, as presented by Tables 9.1, 9.2, and 9.3. It can be seen that in both 3B2T mapping schemes, the ternary combination “00” is not employed. There are two reasons for doing so:
1. DC balance: Without the (0, 0) code, the DC balance is maintained. Adding the (0, 0) code will however inevitably breach the DC balance.
2. According to 802.3 section “96.3.3.3.5 Generation of ternary pair (TAn, TBn)” (IEEE Computer Society 2018), the ternary symbol pair (0, 0) is used in certain special, non-data codes.
Based on our experiment, replacing either (−1, −1) and (1, 1) by (0, 0) indeed improves the resulting eye diagrams—due to the less inter-symbol interference (ISI) as a result of the replacement. But because of the above two reasons, the 802.3 committees (and USB-IF as well) decided not to use the (0, 0) code for data transferring and instead use it for the con trol signals."
As mentioned before, the 18-bit word already has a low-overhead "mark" field that has the same density as the 9th "special" symbol, with extra parity thrown in for good measure. This allows me to use (0,0) as I please, reducing power, droop and EMI.
- 3B2T even reaches 95 percent of the theoretical limit [4], but has the drawback it introduces a DC component. Since there are 8 3bit symbols, and 9 ternary symbols, one can be left out. When this symbol is chosen to be 00, the ++ and -- symbols are still used, causing the possibility for an infinite dsv and hard clock recovery.
Which is why I use 00 as a "repetition" symbol.
Oh and this scheme also works for a single-lane configuration. This would result in 12 clock cycles instead of just 6 per word. Considering a "reasonable" 30MHz working frequency (to keep FCC happy and the distortions low),
- 1 lane emits 30M/12=2.5M words or 5M bytes per second
- 2 lanes reach 10M bytes/s
So the design goals are reached, at the cost of losing the 1st line of defense given by the ParPop unit and its parity.
ParPop can still be stripped to just parity and mark rotation though. There is no room left for byte-flipping and the "same" symbol now does a similar work.
Yann Guidon / YGDES
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.