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:
- there's the "verbatim" bit, which has a pretty important fanout (6). It is not transformed and can be boosted in some way.
- There are 4 "flippers", one layer deep. They could be made of slower, smaller XOR gates.
- There is the "cascade" with gates that need more speed, and could be implemented with MAJ3 or things like that.
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.
.
Yann Guidon / YGDES
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.