Close

Rotating constellations

A project log for miniPHY

the thing you need to plug to a miniMAC

yann-guidon-ygdesYann Guidon / YGDES 05/25/2025 at 13:340 Comments

Following the logs

Today's concern is about "optimising" a word's coding to reduce droop. There should be approximately as many -1 and +1 levels. This increases the number of bits per word but we have one possible bit:

Words (so far) are 20 bits wide, and symbols represent 3 bits, 3×7=21, so we could select one encoding among two... What could this bit affect ? It's not a XOR of the input bits since the constellation seems to be quite symmetrical and XORing the inputs would just flip the signal's polarity and nothing is solved.

Let's go back to the current constellation:

The corresponding tables:

encoding:
bits  trits
000    - 0
001    0 -
010    + +
011    - -  \
100    + 0  /
101    0 +
110    - +
111    + -

decoding:
trits   pos  neg
 - -    011  010
 - 0    000  100
 - +    110  111   <= requirement for polarity sense
 0 -    001  101
 0 +    101  101
 + -    111  110   <=
 + 0    100  000
 + +    010  011

As previously noted, the table is almost symmetrical, but not completely (and this is on purpose), so the polarity is handled at the output of the comparators, not at the table level.

6 permutations require a whole bitrit to encode, and 2 symbols are lost (out of 8 tribits).

.

Some of the permutations/increments should have some symmetries and could be discarded, I guess.

Each tribit is expanded to four bits, 2 pairs that represent one trit each, with the encoding

00 => 0
10  => +
01  => -

=> It is possible to replicate a popcount circuit for the droop estimate, 20 bits => 14 trits => 4 bits per polarity suffice and such a circuit has already been designed for the ParPop circuit. Well, the sum can vary from -14 to +14 so that's 5 bits total.

A pre-decoding table can be used, derived from the original encoding table.

encoding:
bits  trits  weight
000    - 0   -
001    0 -   -
010    + +   ++
011    - -   --
100    + 0   +
101    0 +   +
110    - +   0
111    + -   0

Nice, the LSB is almost unused. The 5 output codes need 3 bits, or 4 bits to encode them separately (-, +, -- and ++) to be processed by a less dense circuit.

Discussions