完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在进行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个回答
|
|
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 位的数据中实现更高的数据完整性和可靠性。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教个XMC1404调试串口接收时为什么一直无法接收数据的问题
360 浏览 0 评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
6255 浏览 2 评论
4104 浏览 9 评论
请问TLE5012B_E1000 启动后为什么位置不能正确获取
3630 浏览 9 评论
1230 浏览 8 评论
457浏览 2评论
270浏览 2评论
376浏览 2评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
6260浏览 2评论
如果是打开已有的dave工程,怎么查看这个工程选择的mcu型号?
456浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 02:00 , Processed in 0.890579 second(s), Total 79, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号