golay_decoder_ul_us HDL Worker
Implementation of a Golay decoder that decodes Golay [24,12,8] codewords.
Detail
The Golay codewords generated by this worker use the characteristic polynomial shown in the following equation, which can also defined as 0xAE3.
The input port data is a potential Golay codeword.
This worker detects if there was a parity bit error and/or codeword error. For codeword errors it only checks if there was an error not the amount of bits that have an error.
If there is an error it can only correct up to 3 bit errors. If the bit errors in a codeword is greater than 3, then the wrong data may be decoded.
This implementation uses a ROM of precomputed Golay error patterns for 3 or fewer bit errors. The syndrome is calculated and then used as an address to the error pattern ROM.
It only can process 24 bit data at a time, so it only looks at the 24 LSB bits of the input data port.
The codewords that are decoded are 12 bits wide, placed in the 12 LSB bits of the output data port.
Latency:
The output has a latency of one
input_in.clkclock cycle
References:
http://aqdi.com/articles/using-the-golay-error-detection-and-correction-code-3/
https://www.sciencedirect.com/science/article/pii/S1665642313715438
https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.323.9943&rep=rep1&type=pdf
http://www.rajivchakravorty.com/source-code/uncertainty/multimedia-sim/html/golay_8c-source.html
Worker Properties
clr_parity_bit_sticky_errorType:
boolAccess:
Parameter:
FalseWritable:
TrueInitial:
FalseVolatile:
FalseRead back:
False
Default value:
false
parity_bit_sticky_errorType:
boolAccess:
Parameter:
FalseWritable:
FalseInitial:
FalseVolatile:
TrueRead back:
False
Default value:
None
clr_codeword_sticky_errorType:
boolAccess:
Parameter:
FalseWritable:
TrueInitial:
FalseVolatile:
FalseRead back:
False
Default value:
false
codeword_sticky_errorType:
boolAccess:
Parameter:
FalseWritable:
FalseInitial:
FalseVolatile:
TrueRead back:
False
Default value:
None
checkbits_maskType:
ushortAccess:
Parameter:
FalseWritable:
FalseInitial:
TrueVolatile:
FalseRead back:
False
Default value:
0
ocpi_buffer_size_outputType:
ushortAccess:
Parameter:
FalseWritable:
FalseInitial:
TrueVolatile:
FalseRead back:
False
Default value:
0
ocpi_blocked_outputType:
ulongAccess:
Parameter:
FalseWritable:
FalseInitial:
FalseVolatile:
TrueRead back:
False
Default value:
None
ocpi_max_latency_outputType:
ushortAccess:
Parameter:
TrueWritable:
FalseInitial:
FalseVolatile:
FalseRead back:
False
Default value:
None
ocpi_latency_outputType:
ushortAccess:
Parameter:
FalseWritable:
FalseInitial:
FalseVolatile:
TrueRead back:
False
Default value:
None
ocpi_messages_outputType:
ulongAccess:
Parameter:
FalseWritable:
FalseInitial:
FalseVolatile:
TrueRead back:
False
Default value:
None
ocpi_bytes_outputType:
ulongAccess:
Parameter:
FalseWritable:
FalseInitial:
FalseVolatile:
TrueRead back:
False
Default value:
None
Worker Ports
inputProtocol:
ulong_timed_sampleOptional:
False
outputProtocol:
ushort_timed_sampleOptional:
False
Inputs:
Outputs:
Worker Ports
Inputs:
input:Type:
StreamInterfaceProtocol:
ulong_timed_sample-protClockDirection:
inData width:
32
Outputs:
output:Type:
StreamInterfaceProtocol:
ushort_timed_sample-protWorker EOF:
trueInsertEOM:
trueClock:
inputData width:
16
Utilisation
Utilization reporting is not currently implemented.