在进行sram的ecc故障注入的时候,需要计算其ecc校验值,在手册上有这样的描述
10.3.4 由软件生成 ECC 奇偶校验 要注入 ECC 错误以生成故障,必须由软件生成 ECC 奇偶校验。 按照此步骤生成 8 位 ECC 奇偶校验。
CODEWORD_SW[127:0] = {128 {1'b0}};
codeword_sw[63:0] = actualword[63:0];
ADDR_WIDTH = log2(RAM_SIZE) CODEWORD_SW[ADDR_WIDTH+60:64] = ADDR[ADDR_WIDTH-1:3];
注:RAM_SIZE 为 RAMx 的大小,其中 "x "为 RAM 单位编号。
ECC_P0_SW = 128b00000001_10111111_10111011_01110101_10111110_00111010_01110010_11011100_ 01000100_10000100_01001010_10001000_10010101_00101010_10101101_01011011;
ECC_P1_SW = 128b00000010_11011111_01110110_11111001_11011101_10011001_10111001_01110001_ 00010001_00001000_10010011_00010001_00100110_10110011_00110110_01101101;
ECC_P2_SW = 128b00000100_11101111_11001111_10011111_10011010_11010101_11001110_10010111_ 00000110_00010001_00011100_00100010_00111000_11000011_11000111_10001110;
ECC_P3_SW = 128b00001000_11110111_11101100_11110110_11101101_01100111_01001110_01101100_ 10011000_00100001_11100000_01000011_11000000_11111100_00000111_11110000;
ECC_P4_SW = 128b00010000_11111011_01111011_10101111_01101011_10100110_10110101_10100110_ 11100000_00111110_00000000_01111100_00000000_11111111_11111000_00000000;
ECC_P5_SW = 128b00100000_11111101_10110111_11001110_11110011_01101100_10101011_01011011_ 11111111_11000000_00000000_01111111_11111111_00000000_00000000_00000000;
ECC_P6_SW = 128b01000000_11111110_11011101_01111011_01110100_11011011_01010101_10101011_ 11111111_11111111_11111111_10000000_00000000_00000000_00000000_00000000;
ECC_P7_SW = 128b10000000_01111111_00000000_00000000_00000111_11111111_11111111_11111111_ 11010100_01000010_00100101_10000100_01001011_10100110_01011100_10110111;
如图所示,CODEWORD_SW[127:0] 与各自 ECC 常量的 AND 结果的 Reduc
tion XOR 将给出一个奇偶校验位。
奇偶校验[0] = ^ (CW_SW[127:0] ECC_P0_SW)
奇偶校验[1] = ^ (CW_SW[127:0] ECC_P1_SW)
... 奇偶校验[7] = ^ (CW_SW[127:0] ECC_P7_SW)
奇偶校验[6:0]为 32 比特 ACTUALWORD[127:0] 提供 7 比特奇偶校验。
请问,SRAM不是32位的吗?如何得到一个64位的ACTUALWORD[63:0]?比如我要对0x08000500地址进行注入故障,ACTUALWORD[127:0]是否应该等于0x08000500地址处的值?(ACTUALWORD[127:0]=(*(0x08000500))?但是(*(0x08000500))不是只有32位吗?