This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

nowECC Version 2.17 ECC Without ADDRESS doesn't match with Boolean Equations as given for ECC

Other Parts Discussed in Thread: NOWECC

Hello Support,

In the attached Test_ECC.zip file, you will find Cortex_F021_ECC.pdf file describing the issue.

When I perform offline calculation with spna126.pdf given Boolean Equation, the value obtained doesn't match with nowECC output.

I am using 16M_NOADD option for nowECC.

testecc.bat contains the command I used for generating the output file.

Please help.

Thank you.

Regards

Pashan

 

Test_ECC.zip
  • Hello Pashan,

    I understand your question and am working on an answer.  Thanks.

    Regards,

    Kevin Lavery

  • Hi Pashan,

    You reference spna126.pdf. With this document, I think  can explain your results.

    1.) When you compute ECC for 0 (64-bit), you get a value of 0x0C. Obviously, no data bits XOR'd to create 1s. The 1s come from the column marked CPU Parity.

    2.) So, take the next value, 1 (64 bit value). As was previously stated, this 64 bit value is re-ordered. If I XOR 0x0C and 0x6E, I get a result 0x62 which aligns to data-bit 56. This makes sense.

    3.) So, take the next value, 2 (64 bit value). If I XOR 0x0C and 0x68, I get a result 0x64 which aligns to data-bit 57. This makes sense.

    4.) So, take the next value, 4 (64 bit value). If I XOR 0x0C and 0x6E, I get a result 0x67 which aligns to data-bit 58. This makes sense.

    Regards,

    Kevin Lavery

  • Hello Kevin,

    Following are the Boolean Equations given by Charles Tsai in http://e2e.ti.com/support/microcontrollers/hercules/f/312/t/184489.aspx

    Can you please relate me how 0x0C need to be XORed with nowECC output for 0x01, 0x02, 0x04 64-Bit DATA Items?

    According to the Boolean Equations, only RAW 64-Bit DATA is given as INPUT as shown below. The output being ECC Value, which should match with nowECC output.

    Please help me understand.  Boolean Equations have been pasted below for easy reference.

    Thank you.

    Regards

    Pashan

     

    ECC(0) <= DATA(1) xor DATA(2) xor DATA(3) xor DATA(5) xor

                DATA(8) xor DATA(9) xor DATA(11) xor DATA(14) xor

                DATA(17) xor DATA(18) xor DATA(19) xor DATA(21) xor

                DATA(24) xor DATA(25) xor DATA(27) xor DATA(30) xor

                DATA(32) xor DATA(36) xor DATA(38) xor DATA(39) xor

                DATA(42) xor DATA(44) xor DATA(45) xor DATA(47) xor

                DATA(48) xor DATA(52) xor DATA(54) xor DATA(55) xor

                DATA(58) xor DATA(60) xor DATA(61) xor DATA(63);

     

      ECC(1) <= DATA(0) xor DATA(1) xor DATA(2) xor DATA(4) xor

                DATA(6) xor DATA(8) xor DATA(10) xor DATA(12) xor

                DATA(16) xor DATA(17) xor DATA(18) xor DATA(20) xor

                DATA(22) xor DATA(24) xor DATA(26) xor DATA(28) xor

                DATA(32) xor DATA(33) xor DATA(34) xor DATA(36) xor DATA(38) xor

                DATA(40) xor DATA(42) xor DATA(44) xor DATA(48) xor

                DATA(49) xor DATA(50) xor DATA(52) xor DATA(54) xor

                DATA(56) xor DATA(58) xor DATA(60);

     

      ECC(2) <= not (DATA(0) xor DATA(3) xor DATA(4) xor DATA(7) xor

                DATA(9) xor DATA(10) xor DATA(13) xor DATA(15) xor

                DATA(16) xor DATA(19) xor DATA(20) xor DATA(23) xor

                DATA(25) xor DATA(26) xor DATA(29) xor DATA(31) xor

                DATA(32) xor DATA(35) xor DATA(36) xor DATA(39) xor

                DATA(41) xor DATA(42) xor DATA(45) xor DATA(47) xor

                DATA(48) xor DATA(51) xor DATA(52) xor DATA(55) xor

                DATA(57) xor DATA(58) xor DATA(61) xor DATA(63));

     

      ECC(3) <= not (DATA(0) xor DATA(1) xor DATA(5) xor DATA(6) xor

                DATA(7) xor DATA(11) xor DATA(12) xor DATA(13) xor

                DATA(16) xor DATA(17) xor DATA(21) xor DATA(22) xor

                DATA(23) xor DATA(27) xor DATA(28) xor DATA(29) xor

                DATA(32) xor DATA(33) xor DATA(37) xor DATA(38) xor

                DATA(39) xor DATA(43) xor DATA(44) xor DATA(45) xor

                DATA(48) xor DATA(49) xor DATA(53) xor DATA(54) xor

                DATA(55) xor DATA(59) xor DATA(60) xor DATA(61));

     

      ECC(4) <= DATA(2) xor DATA(3) xor DATA(4) xor DATA(5) xor

                DATA(6) xor DATA(7) xor DATA(14) xor DATA(15) xor

                DATA(18) xor DATA(19) xor DATA(20) xor DATA(21) xor

                DATA(22) xor DATA(23) xor DATA(30) xor DATA(31) xor

                DATA(34) xor DATA(35) xor DATA(36) xor DATA(37) xor

                DATA(38) xor DATA(39) xor DATA(46) xor DATA(47) xor

                DATA(50) xor DATA(51) xor DATA(52) xor DATA(53) xor

                DATA(54) xor DATA(55) xor DATA(62) xor DATA(63);

     

      ECC(5) <= DATA(8) xor DATA(9) xor DATA(10) xor DATA(11) xor

                DATA(12) xor DATA(13) xor DATA(14) xor DATA(15) xor

                DATA(24) xor DATA(25) xor DATA(26) xor DATA(27) xor

                DATA(28) xor DATA(29) xor DATA(30) xor DATA(31) xor DATA(40) xor

                DATA(41) xor DATA(42) xor DATA(43) xor DATA(44) xor

                DATA(45) xor DATA(46) xor DATA(47) xor DATA(56) xor

                DATA(57) xor DATA(58) xor DATA(59) xor DATA(60) xor

                DATA(61) xor DATA(62) xor DATA(63);

     

      ECC(6) <= DATA(0) xor DATA(1) xor DATA(2) xor DATA(3) xor

                DATA(4) xor DATA(5) xor DATA(6) xor DATA(7) xor

                DATA(24) xor DATA(25) xor DATA(26) xor DATA(27) xor

                DATA(28) xor DATA(29) xor DATA(30) xor DATA(31) xor

                DATA(32) xor DATA(33) xor DATA(34) xor DATA(35) xor

                DATA(36) xor DATA(37) xor DATA(38) xor DATA(39) xor

                DATA(56) xor DATA(57) xor DATA(58) xor DATA(59) xor

                DATA(60) xor DATA(61) xor DATA(62) xor DATA(63);

     

      ECC(7) <= DATA(0) xor DATA(1) xor DATA(2) xor DATA(3) xor

                DATA(4) xor DATA(5) xor DATA(6) xor DATA(7) xor

                DATA(24) xor DATA(25) xor DATA(26) xor DATA(27) xor

                DATA(28) xor DATA(29) xor DATA(30) xor DATA(31) xor

                DATA(40) xor DATA(41) xor DATA(42) xor DATA(43) xor

                DATA(44) xor DATA(45) xor DATA(46) xor DATA(47) xor

                DATA(48) xor DATA(49) xor DATA(50) xor DATA(51) xor

                DATA(52) xor DATA(53) xor DATA(54) xor DATA(55);

     

  • Pashan,

    As I had responded in the earlier post, I did work out the boolean math. However I will do so again for the sake of clarity.

    Step 1) Prior to computation, the data is switched from BE8 data foramtting to LE data format. Explicitly, the 64-bit value 0x07060504_03020100 (in BE8) is converted to 0x00010203_04050607.

    Step 2)  The boolean expressions listed above are correct. However, notice that ECC(2) and ECC(3) are inverted with a NOT.

    Applying this:

    0x00000000_00000001 is converted to 0x01000000_00000000 which means that DATA(56) is 1 and all other values are 0.

    ECC(0) = 0 because ECC(0) has no dependency upon DATA(56) 

    ECC(1) = 1 because ECC(1) is dependent upon DATA(56)

    ECC(2) = not (0) = 1 because ECC(2) has no dependcy upon DATA(56)

    ECC(3) = not (0) = 1 because ECC(3) has no dependcy upon DATA(56)

    ECC(4) = 0 because ECC(4) has no dependcy upon DATA(56)

    ECC(5) = 1 because ECC(5) is depent upon DATA(56)

    ECC(6) = 1 because ECC(6) is depent upon DATA(56)

    ECC(7) = 0 because ECC(7) has no dependcy upon DATA(56)

    The ECC result is 01101110b or 0x6E.

    Obviously, if you want, you can carry out the boolean operations for other data patterns. While this approach is useful, we find it efficient to let the nowECC tool compute the values. (N.B. this result is identical to the result I posted last night.)

    regards,

    Kevin Lavery

  • Hello Kevin,

    I am satisfied with yoyr answer regarding Boolean Equations.

    In your second-last mail, for 0x01 DATA, you wrote:

    " If I XOR 0x0C and 0x6E, I get a result 0x62 which aligns to data-bit 56. This makes sense."

    What is 0x62 aligns to Bit 56 means?

    Thank you.

    Regards

    Pashan

     

  • Pashan,

    0x62 aligns to data-bit 56 because data-bit 56 affects ECC-bits 6,5, and 1 (0x62).

    Kevin