sensicomm LLC logo

A Reed-Solomon Coder/Decoder for the Blackfin Processor

As of Oct. 2004, this software has been released as open source software under the GNU General Public License (GPL). Downloads page. If you wish to use this software in ways that are incompatible with the GPL, contact me for alternate licensing options. For example if you want to use it in a commercial product that is not open-source, I will license it for $0.50 per copy sold.

This project used the Blackfin C compiler and assembler from Analog Devices to develop a Reed-Solomon encoder and decoder. The Reed-Solomon error correcting codes are a family of codes with symbol size n and total code length 2n-1. In practice, most people use n=8 so that the symbol size is one byte, making the code length 255 bytes. Shorter codes can be obtained by truncating the code, if desired.

The released software is a generic implementation of the RS encode and decode functions, supporting any n from 3 to 24. A compile option selects internal storage unit sizes of 8, 16, or 32 bits. The example code tests n=8 and t=7 (that is, a code consisting of 255, 8-bit symbols and capable of correcting up to 7 symbol errors). This particular code contains 2t+1=15 parity symbols and 240 data symbols.

Other sizes have not been extensively tested. Note that larger sizes may not be practical on many systems. For example, an n=24 code would have a block size of about 16 million symbols, with each symbol stored in a 32-bit word.

Execution times were measured using the internal cycle counter of the Blackfin processor:
Encode and decode cycle counts for n=8, t=7, with 3 errors.
Word SizeOptimizedEncode CyclesDecode Cycles
8No265786613236
16No275455619156
8Yes156311425779
16Yes155112427000

For 8-bit optimized case and a 270 MHz processor, the corresponding times would be encode 0.58ms , decode 1.58ms, for a theoretical decoder peak throughput of 1.2 megabits per second (actual rates will of course depend on i/o and other overhead dependent on the application, as well as on the actual clock rate used).



Page last updated $Date: 2016/02/16 12:27:12 $