Close

The "same" symbol

A project log for miniMAC - Not an Ethernet Transceiver

custom(izable) circuit for sending some megabytes over differential pairs.

yann-guidon-ygdesYann Guidon / YGDES 04/16/2025 at 15:040 Comments

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:

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.

From https://www.utwente.nl/en/eemcs/dacs/assignments/completed/bachelor/reports/B-assignment_Schellekens.pdf:

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),

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.

Discussions