olo_ft_pkg_ecc¶
Status Information¶
VHDL Source: olo_ft_pkg_ecc
Description¶
This package contains SECDED (Single Error Correction, Double Error Detection) Hamming code functions used internally by the ECC-protected entities in the ft area (e.g. olo_ft_ram_sp).
For the SECDED scheme overview, codeword layout and overhead table, see Open Logic Fault-Tolerance Principles.
All functions in this package are synthesizable; there are no testbench-only helpers. They split into two categories:
- Elaboration-time helpers — eccParityBits and eccCodewordWidth are
pure integer functions of a
positiveargument. Their typical use is to size ports and signals from a generic data width (e.g.signal Codeword : std_logic_vector(eccCodewordWidth(Width_g) - 1 downto 0);). They evaluate to a constant at elaboration and produce no logic. - Combinational RTL logic — eccEncode, eccSyndromeAndParity, eccCorrectData, eccSecError and eccDedError operate on signals in the read/write datapath. They synthesize to combinational logic (XOR trees and selection).
Functions¶
eccParityBits¶
function eccParityBits (
DataWidth : positive
) return positive;
Returns the number of Hamming parity bits required for a given data width (excluding the overall parity bit). Computed as the smallest m such that 2^m >= DataWidth + m + 1.
Usage: Synthesizable, elaboration-time helper. Typical use is to size signals/ports from a generic.
eccCodewordWidth¶
function eccCodewordWidth (
DataWidth : positive
) return positive;
Returns the total codeword width including data bits, Hamming parity bits, and the overall parity bit. Equivalent to DataWidth + eccParityBits(DataWidth) + 1.
Usage: Synthesizable, elaboration-time helper. Typical use is to size signals/ports from a generic.
eccEncode¶
function eccEncode (
Data : std_logic_vector
) return std_logic_vector;
Encodes a data word into a SECDED codeword. Bit 0 of the result is the overall parity bit; bits at power-of-2 positions (1, 2, 4, 8, ...) are Hamming parity bits; remaining positions hold the data bits.
Usage: Synthesizable, combinational. Used on the write path to produce the codeword stored in memory.
eccSyndromeAndParity¶
function eccSyndromeAndParity (
Codeword : std_logic_vector;
DataWidth : positive
) return std_logic_vector;
Computes the syndrome and overall parity from a (possibly corrupted) codeword. The result packs both into one vector: bits ParityBits-1 downto 0 hold the syndrome, bit ParityBits holds the overall parity error. Result intended to be fed into eccCorrectData, eccSecError, and eccDedError.
Usage: Synthesizable, combinational. Used on the read path before the optional ECC pipeline registers.
eccCorrectData¶
function eccCorrectData (
Codeword : std_logic_vector;
SynPar : std_logic_vector;
DataWidth : positive
) return std_logic_vector;
Extracts the corrected data bits from a codeword using the precomputed syndrome/parity from eccSyndromeAndParity. When a single-bit error is detected (overall parity odd, syndrome nonzero), the offending bit is corrected before extraction.
Usage: Synthesizable, combinational. Used on the read path to drive the corrected data output.
eccSecError¶
function eccSecError (
SynPar : std_logic_vector
) return std_logic;
Returns '1' when a single-bit error was corrected. Under SECDED assumption (at most two bit errors per codeword), an odd overall parity bit indicates a single-bit error.
Usage: Synthesizable, combinational. Drives the SEC status output.
eccDedError¶
function eccDedError (
SynPar : std_logic_vector
) return std_logic;
Returns '1' when a double-bit error was detected. A nonzero syndrome combined with even overall parity indicates two bit errors, which SECDED can detect but not correct.
Usage: Synthesizable, combinational. Drives the DED status output.