Skip to content

sec_ded

Component for Single Error Correction and Double Error Detection (SEC-DED) in LPDDR5.

SecDed

Bases: Base

Component for Single Error Correction and Double Error Detection (SEC-DED).

This module handles the diagnostic coverage for multiple fault types (SBE, DBE, TBE, MBE) and manages the transformation of Triple Bit Errors (TBE) into Multi Bit Errors (MBE).

Source code in src/ecc_analyzer/models/lpddr5/sec_ded.py
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
class SecDed(Base):
    """Component for Single Error Correction and Double Error Detection (SEC-DED).

    This module handles the diagnostic coverage for multiple fault types (SBE, DBE, TBE, MBE)
    and manages the transformation of Triple Bit Errors (TBE) into Multi Bit Errors (MBE).
    """

    def __init__(self, name: str):
        """Initializes the SEC-DED component with coverage and source parameters.

        Args:
            name (str): The descriptive name of the component.
        """

        self.sbe_dc = 1.0
        self.dbe_dc = 1.0
        self.mbe_dc = 0.5
        self.tbe_dc = 1.0

        self.tbe_split_to_mbe = 0.56

        self.lfm_sbe_dc = 1.0
        self.lfm_dbe_dc = 1.0

        self.sdb_source = 0.1

        super().__init__(name)

    def configure_blocks(self):
        """Configures the block structure.

        Uses a SumBlock to combine the latent fault source (SDB) with the main
        processing pipeline (Split & Coverage).
        """
        spfm_pipeline = PipelineBlock(
            "SEC_DED_Processing",
            [
                SplitBlock(
                    "TBE_to_MBE_Split",
                    FaultType.TBE,
                    {
                        FaultType.MBE: self.tbe_split_to_mbe,
                        FaultType.TBE: 1.0 - self.tbe_split_to_mbe,
                    },
                    is_spfm=True,
                ),
                CoverageBlock(
                    FaultType.SBE,
                    self.sbe_dc,
                    dc_rate_latent_cL=self.lfm_sbe_dc,
                    is_spfm=True,
                ),
                CoverageBlock(
                    FaultType.DBE,
                    self.dbe_dc,
                    dc_rate_latent_cL=self.lfm_dbe_dc,
                    is_spfm=True,
                ),
                CoverageBlock(FaultType.TBE, self.tbe_dc, is_spfm=True),
                CoverageBlock(FaultType.MBE, self.mbe_dc, is_spfm=True),
            ],
        )

        self.root_block = SumBlock(
            self.name,
            [
                spfm_pipeline,
                BasicEvent(FaultType.SDB, self.sdb_source, is_spfm=False),
            ],
        )

__init__(name)

Initializes the SEC-DED component with coverage and source parameters.

Parameters:

Name Type Description Default
name str

The descriptive name of the component.

required
Source code in src/ecc_analyzer/models/lpddr5/sec_ded.py
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
def __init__(self, name: str):
    """Initializes the SEC-DED component with coverage and source parameters.

    Args:
        name (str): The descriptive name of the component.
    """

    self.sbe_dc = 1.0
    self.dbe_dc = 1.0
    self.mbe_dc = 0.5
    self.tbe_dc = 1.0

    self.tbe_split_to_mbe = 0.56

    self.lfm_sbe_dc = 1.0
    self.lfm_dbe_dc = 1.0

    self.sdb_source = 0.1

    super().__init__(name)

configure_blocks()

Configures the block structure.

Uses a SumBlock to combine the latent fault source (SDB) with the main processing pipeline (Split & Coverage).

Source code in src/ecc_analyzer/models/lpddr5/sec_ded.py
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
def configure_blocks(self):
    """Configures the block structure.

    Uses a SumBlock to combine the latent fault source (SDB) with the main
    processing pipeline (Split & Coverage).
    """
    spfm_pipeline = PipelineBlock(
        "SEC_DED_Processing",
        [
            SplitBlock(
                "TBE_to_MBE_Split",
                FaultType.TBE,
                {
                    FaultType.MBE: self.tbe_split_to_mbe,
                    FaultType.TBE: 1.0 - self.tbe_split_to_mbe,
                },
                is_spfm=True,
            ),
            CoverageBlock(
                FaultType.SBE,
                self.sbe_dc,
                dc_rate_latent_cL=self.lfm_sbe_dc,
                is_spfm=True,
            ),
            CoverageBlock(
                FaultType.DBE,
                self.dbe_dc,
                dc_rate_latent_cL=self.lfm_dbe_dc,
                is_spfm=True,
            ),
            CoverageBlock(FaultType.TBE, self.tbe_dc, is_spfm=True),
            CoverageBlock(FaultType.MBE, self.mbe_dc, is_spfm=True),
        ],
    )

    self.root_block = SumBlock(
        self.name,
        [
            spfm_pipeline,
            BasicEvent(FaultType.SDB, self.sdb_source, is_spfm=False),
        ],
    )