I tried to feed the circuit from itself and see if loops appear, and how long they would be. I start with one bit set:
- Start= 0 or 11 => cycle in 1777 cycles
- 1 : 3556 cycles
- 2 leads to 5 or 16 : 5334
- 3 : not part of an orbit, leads to a 10668-loop
- 4 : leads to 1
- 6 or 8 : 10667
- 7 : 2666
- 9 : not part of a cycle, leads to a 889-loop
- 10 leads to 6/8
- 12 : not part of a cycle, leads to 10668-loop
- 13 : leads to 5 or 16 : 5334
- 14 : leads to 5 or 16 : 5334
- 15 : loop in 2667
- 17 : not part of a cycle, leads to a 762-loop
Actually the lengths of the loops do not matter a lot (unless they are ridiculously short) since this would assume a stream of data=0 which can't happen due to gPEAC.
The fact that the values change so drastically is a big improvement over the previous simple NRZ scheme, since this totally locks the error, while the NRZ could have its effect cancelled as soon as the next cycle if two bits are flipped at the same location on consecutive cycles.
Since the expected buffer size (16 or 32 words max) is way shorter than the observed loop length, there is no need to optimise further, as it could only impede (a bit) directed attacks, not improve error detection in common cases.
And I expect a big jump of error detection eficiency: this additional convolutional layer adds one word of latency but is the key to achieve true 2 bits-per word error detection: 15 words will lead to 1 chance in a billion of leaking an error, and 32 words (64 bits) will make it virtually impossible to pass in real life scenarios.
This also means that a 32-word buffer is all that's needed. In high/medium error rates, there is no need to transmit "empty commands" anymore, saving 2 or 4 intermediate checksums, or about 1/16th of bandwidth! So this new unit is very important for efficiency overall, though it couldn't be enough all by itself, its proterties are complementary to those of the gPEAC layer. It's the pair that works together to reach the theoretical limit.
That new unit also over-scrambles the transmitted data stream. This is not the intended function but it does it (somehow) anyway. So the data's properties must be re-evaluated and at least discarded. This implies that the #miniPHY should expect absolutely random data, no special case... This removes one of the (initially supposed) advantages of gPEAC but it's for the overall best.
Yann Guidon / YGDES
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.