I fixed the signal generators (data as well as fault), with a better PRNG. The curves are smoothed but the major problem remains: the rate of missed errors after 16, 32 or 48 words is still unbelievable.
After 16 words:

After 32 words:

After 48 words:

Many conclusions can be drawn:
- The ratio of missed errors depends heavily on the number of affected bits: the more the better. But even with all the efforts, the performance is not great and this is a mystery. The missed errors can be as high as 25 to 40% (for 1 bit) => ratio of 1/2.5 to 1/4, but even with most bits swapped, the error rate is about 1/100...
A lot of discussions will come. - The ratio of CD1 vs Err (error from the CD bit vs errors detected by the modulus) remains roughly 2:1, converging to approx. 66% vs 33%. The C/D bit is clearly a major driver of error detection.
- The CD0 errors (where by miracle, the CD turns to 1 but the first 16-bit word is valid=0) remain few, pretty stable, falling slowly. This is the type of error ratio I expected, and the 0-overhead is kept low, the 2nd check word (to get full 36-bit checksum) is added at the protocol level in the end of the Control sequence. So actually the 0-word covers 2 consecutive message types.
- The big variable that affects the missed ratio is the number of invalid bits => this puts pressure on the GreyPar circuits, which would also include aspects of ParPop to increase avalanche. Errors should affect at least 8 bits, the Hamming distance must be maximised.
- Really: the depth of the buffer has a pretty small effect on the error misses, compared to the number of flipped bits.
...
Stats for 16 loops:
bits CD0 CD1 Err Missed 1 39 332079 259138 408744 2 29 383135 288954 327882 3 30 438323 319817 241830 4 29 489391 347593 162987 5 20 531425 369363 99192 6 23 561524 381666 56787 7 24 579368 385955 34653 8 18 592796 382114 25072 9 10 610942 368068 20980 10 19 614852 366836 18293 11 22 619874 365386 14718 12 17 624048 364910 11025 13 22 631186 361004 7788 14 16 635755 359142 5087 15 14 642032 354627 3327
.
For 32 loops:
1 53 389515 302662 307770 2 48 437467 330242 232243 3 45 486295 356146 157514 4 24 528756 376952 94268 5 25 559156 389902 50917 6 24 579121 393798 27057 7 22 591900 392525 15553 8 16 602327 387123 10534 9 15 618858 372582 8545 10 16 621701 371270 7013 11 14 626560 368182 5244 12 15 628185 368048 3752 13 15 633763 363982 2240 14 20 637123 361492 1365 15 16 642805 356398 781
.
For 48 loops:
1 72 421096 327935 250897 2 54 466379 352575 180992 3 50 509896 374730 115324 4 25 545602 390146 64227 5 28 569483 397240 33249 6 26 584830 397991 17153 7 21 595248 395133 9598 8 21 605975 387822 6182 9 22 621211 373927 4840 10 15 623979 372117 3889 11 24 626966 370253 2757 12 10 629013 369103 1874 13 21 634440 364573 966 14 21 637976 361422 581 15 14 643278 356416 292
.
One notable increase is the number of CD0 (39 - 53 - 72), as there are more opportunities of generating bad data. This is easily filtered by a second check word.
Yann Guidon / YGDES
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.