英飞凌
直播中

徐伟

7年用户 855经验值
私信 关注

Traveo T2G SRAM不是32位的吗?如何得到一个64位的?

在进行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 结果的 Reduction 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位吗?

                                                                                                                                                                                                                                                                                                                                                                                                        
                                                        

回帖(1)

王芳

2024-6-3 14:12:37
Traveo T2G SRAM 是一个 32 位的存储器,但是它可以通过 ECC(错误校正码)来实现 64 位的数据宽度。ECC 是一种用于检测和校正数据损坏的技术,它可以在数据传输和存储过程中保护数据的完整性。

在进行 SRAM 的 ECC 故障注入时,需要计算其 ECC 校验值。根据您提供的手册描述,以下是生成 8 位 ECC 奇偶校验的步骤:

1. 初始化一个 128 位的全零 codeword_sw:`CODEWORD_SW[127:0] = {128 {1'b0}};`
2. 将实际的数据 word(64 位)放入 codeword_sw 的低 64 位:`codeword_sw[63:0] = actualword[63:0];`
3. 计算地址宽度(ADDR_WIDTH),它是 RAM_SIZE(RAMx 的大小)的对数:`ADDR_WIDTH = log2(RAM_SIZE)`
4. 将地址的高 3 位放入 codeword_sw 的相应位置:`CODEWORD_SW[ADDR_WIDTH+60:64] = ADDR[ADDR_WIDTH-1:3];`
5. 使用 ECC_P0_SW(一个预定义的 128 位 ECC 校验码)来生成 ECC 校验值。

通过这些步骤,您可以生成一个 64 位的 ECC 校验值,用于检测和校正 Traveo T2G SRAM 中的数据损坏。请注意,这里的 64 位并不是指 SRAM 的数据宽度,而是指 ECC 校验值的数据宽度。实际上,SRAM 的数据宽度仍然是 32 位,但通过 ECC 技术,我们可以在 32 位的数据中实现更高的数据完整性和可靠性。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分