基于KeyStone 器件建立鲁棒性系统
DSP 不同的是,KeyStone DSP 不能对内存分块使能EDC。一旦EDC 使能,EDC 逻辑对整个CorePac L2 内存生效。然而,可以对不同的内存访问请求者分别使能,如L1D 控制器、L1P 控制器或DMA 控制器。例如,如果用户只需要对代码段使用EDC,需要使能下面三个域:
1. 设置L2EDCMD 寄存器中的EN bit 以使能LL2 EDC 逻辑;
2. 设置L2EDCEN 寄存器中的PL2SEN 比特以使能L1 SRAM 的EDC 逻辑对L1P 访问的检查;
3. 设置L2EDCEN 寄存器中的PL2CEN 比特以使能L2 cache 的EDC 逻辑对L1P 访问的检查。
从关闭到使能状态转变时,LL2 EDC 逻辑不会初始化校验RAM。因此,在进入使能状态后,校验RAM 中的值是随机值,需要用户软件对其进行初始化,。对L2 EDC 的配置必须遵循“TMS320C66x DSP CorePac User Guide(SPRUGW0)”中阐述的EDC 配置顺序。下面是从例程中摘录的L2 EDC 使能函数参考代码:
对来自L1D 控制器的访问错误处理:在经过L1D cache 从LL2 中获取数据时,对所有这些数据会进行错误检查,但是不会有任何的纠正。不管是1-bit 或者是多bit 错误,将会通过#117 号系统事件(L2_ED2:不可纠正比特错误检测)上报给DSP core。
对来自L1P 及DMA 控制器的访问错误处理:1-bit 错误可以被纠正并通过#116 号系统事件(L2_ED1:可被纠正的比特错误)上报 。2-bit 错误可以被检测,并通过#117 号系统事件上报该错误。
下表列出对于不同存储器访问请求者,相应的1-bit 错误处理细节。
错误计数器(L2EDCPEC, L2EDNPEC)非常有用,可用于在长时间运行的系统中评估校验比特错误发生的种类与概率。
下表列出对不同存储器访问请求者,相应的2-bit 错误处理细节。
对于大于2 bits 的错误,EDC 逻辑可能会检测并报告为1-bit 或2-bit 错误,或者EDC 根本检测不到该错误。所以说,KeyStone 系列EDC 硬件逻辑只能保证检测2-bit 错误或纠正1-bit 错误。
通常软错误出现的概率很低,首先出现1-bit 错误,在相对长时间后,第二个错误bit 也许会产生。由于1-bit 错误可以被纠正,而2-bit 错误不能被纠正,所以我们应该尽可能在第二个比特错误出现前纠正好第一个比特错误。
纠正1-bit 错误的操作通常称为“刷新”。 为了刷新一块存储器,可以使用IDMA,把IDMA 的源地址与目的地址设为相同的地址;字节长度设置为期望覆盖的内存块。地址访问必须是128-bit 对齐,并且整块的内存范围长度必须是128 bits 的整数倍。在IDMA 从LL2 读取数据时,对于存在有效校验信息的128-bit 字,EDC 硬件会纠正可能存在于其中的1-bit 错误。当IDMA 把数据回写到相同的地址时,EDC 会对数据产生校验信息并标识其为有效。
刷新操作通常是在1-bit 错误中断服务函数中进行。但是在1-bit 错误发生之后2-bit 错误发生之前,某些数据也许不会被访问,在没有访问时1-bit 错误是不会被自动上报的。为了避免这种情况,应该周期性地刷新整块存储器区间来纠正潜在的1-bit 错误。下面是一段LL2 EDC 刷新的代码例子。
通常,这个函数可以在一个定时中断中调用。如在一个600 秒周期的定时中断中调用该函数。
这样, 1MB 的存储区间会每7 天被刷新一遍。
由于刷新操作会与正常的内存操作相竞争,因此会影响正常内存操作的性能。所以刷新操作不能太频繁,但是必须在2-bit 错误产生前完成。在设计时必须权衡考虑。
LL2 EDC 功能验证:通过设置L2EDCMD 寄存器中的SUSP 比特可以暂停LL2 EDC 逻辑。使用该特性,可以软件模仿EDC 错误并验证EDC 功能。与本文对应的例程中提供了验证LL2 EDC 功能的代码,对应函数LL2_ED_test()。
3.3 SL2 错误检测与纠正
对共享存储器SL2 的基本信息,参考“KeyStone Architecture Multicore Shared Memory Controller User Guide(SPRUGW7)”。
校验比特产生与核对:有两种机制用于MSMC 校验信息的产生与检测:
1. 对任意master 发起的256-bit 内存段的写操作时,校验信息会被更新并设置为有效。小于256 bits 的写操作会使校验信息失效。当DSP master 发起256-bit 内存段的的读操作时,校验信息会被检查。
2. MSMC 包含一个后台错误纠正硬件称作刷新引擎,用于周期刷新存储器的内容。刷新的周期数可以通过SMEDCC 寄存器中的REFDEL 比特域来配置,每次刷新会读取并回写大小是4 个32字节的块。在检测并纠正1-bit 或者检查到2-bit 错误时,刷新引擎还会上报EDC 错误。在MSMC用户手册中有具体的机制细节描述。
DSP 复位后,MSMC 硬件会使校验信息失效,并重新初始化校验信息。在第一次读MSMC 存储器时,
- HyperLink编程和性能考量(01-15)
- 在KeyStone 器件实现IEEE1588 时钟方案(10-15)
- 基于多核处理器的弹载嵌入式系统设计研究(02-18)
- Navigator Runtime 最大限度提高多内核效率(05-08)
- 基于KeyStone DSP的多核视频处理技术(09-15)
- KeyStone多核SoC工具套件: 单个平台满足所有需求(09-07)