We are using a Cyclone III running the Reed Solomon decoder. I was using Quartus version 9.1sp2 with RS version 1 core many years ago. About 3 years ago, I updated to Quartus version 126.96.36.199 (the last supporting the Cyclone III) and upgraded the RS core to version 2. Everything seemed to work ok with that.
Fast forward to today. I’m trying to track down a problem that came up in our system, I traced the problem back the RS decoder. The RS decoder II clearly isn’t working as well as RS decoder I. It’s like the correct and detection isn’t working very well on the RS decoder II. How this was discovered is I have a CRC-8 byte in the packet as a last resort catch in case the RS passes but it should have failed. I see with RS decoder I not one time did the CRC fail. With RS decoder II, the CRC fails many times meaning the packet is not getting flagged as a failure.
I can now provide test vectors of the failure case. I clearly see RS I report decoder failure but RS II pass the data.
I have files with the TX Samples (the un-errored RX data) and 2 sets of Errored RX Samples that failed with RS I decoder but passed and shouldn’t have with RS II decoder. This behavior of the RS II decoder with these data sets was verified in hardware and in simulation. I understand there is a probability of the RS passing when it should have failed but the behavior shouldn’t be different between RS I and RS II decoders. In fact, not one time did the RS I decoder pass when it should have failed but this happened quite often with RS II decoder.
RS Decoder setup:
Number of channels: 1
Number of bits per symbol: 8
Number of symbols per codeword: 70
Number of check symbols per codeword: 14
Field polynomial: 391
Type of Generator Polynomial: Classical
First root polynomial generator: 120
Root spacing in the polynomial generator: 1
No erasure support
Is there a known issue or errata with the Reed Solomon II core?
My customer looked at the RS1 manual and RS2 manual and observed
On page 3-4 of the RS1 manual:
Errors <= R/2 : Detects & Corrects
R/2 <= Errors <= R : Detects only
Errors > R : Unpredictable
On page 3-3 of the RS2 manual:
e <= R/2 : Detects & Corrects
R/2 < e : “Decoder asserts error signal and decoding fails. The probability that the decoder might not assert the error signal is less than 1/t”
In layman’s terms, the RS 2 decoder is not as good as the RS 1 decoder! It seems like the designer of RS 2 knew about this limitation from the beginning.
My customer needs the performance of RS1 in Cyclone 10 LP, but currently support is limited to Cyclone IV. Considering the architecture of Cyclone IV and Cyclone 10 LP is the same, what is the likelihood of having RS1 ported to the Cyclone 10 LP?
The RS1 is NOT official support for Cyclone 10 LP, but I did a quick test by instantiate the RS1 in cyclone IV device, and then compile in Cyclone 10 LP project, the Quartus does not block it. You may give it a try and see if it break any functionality by using this unsupported flow.