Close

A reversible mixing primitive

A project log for miniMAC - Not an Ethernet Transceiver

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

yann-guidon-ygdesYann Guidon / YGDES 7 days ago0 Comments

I think I have something interesting for the Hamming maximiser. Long story short, it's a "primitive" with 9 bits in, 9 bits out, meant to be used in layers with bit permutations between them.

On Falstad's circuitjs: one layer.

On the left, the encoder, on the right is the decoder, with an error injection layer.

There are several zones of interest:

Also not that the "flippers" could be merged as a XOR3 gate with the next layer.

Conveniently the 9 bits are a divisor of 18, and it would work as well for 16 bit words (by removing one gate).

The encoder could work well with 3 or 4 layers in the pipeline. The decoder could need a pipeline in the middle, because each primitive has a 4-XOR latency that could be too much...

We'll have to check how many layers are required, and what amount and type of bit permutation are best.

Here is a circuit with 3 layers, without the permutations (left unconnected so far)

.

A more systematic and hierarchical version is built with these combined primitives, which can communicate with neighbours.

The error inputs are anotated with the number of affected bits at the output.

This is meant to be combined with other identical blocks, here two are enough. In this configuration the circuit yields an avalanche between 1 and 15 bits:

And a 3rd layer evens this all out, mostly, thanks to some 2:1 interleaving:

As a result, all injected errors trigger an avalanche of at least 8 bits.

Still, 8 inputs trigger only 2 changes at the encoded word, meaning that certain 2-bit errors will trigger only 1 bit of output (de-amplifying them). The below case could be handled by more interleaving but it might not be pertinent/appropriate.

Anyway it's getting pretty sick ! (circuit)

So a 4th layer (with 3:1 interleaving ?) should be "good".

The point, now, would be to remove error de-amplification. For this, we have a good help : the encoder is the reverse of the decoder, so a single-bit input should encode to at least 4 bits.

.

Discussions