ECC校验及使用
- 1 RAM ECC Demo
在IC设计中会经常用到ram来进行存储,在存储数据时我们写读时需要知道在传输过程中有没有出现差错,因此需要额外的校验位也存储下来;
ECC验证能纠正1bit错误,能发现2bit错误,但是无法纠正;
因此RAM ECC(Error Correcting Code,错误检查和纠正)是一种内存技术,它通过在数据位上添加额外的位来检测和纠正内存中的错误;
一般ecc校验值时用海明码来计算;具体原理在这里就不展开了,只关注在设计中如何进行使用;
ram经常使用的场景:一个是在模块中作为二维数组来进行存储,并进行索引;另一个是作为FIFO的存储;
1 RAM ECC Demo
以1r1w的ram为例,假如我们需要一个32x119的ram,那么该怎么存呢;一般来说ram都会设计拼接(不过肯定是相同的来进行拼接);
因为ecc模块可能是固定的若干种来进行选择,比如ecc64_8 ecc_32_? 等,在这里假如选择ecc_64_8 模块来进行生成ecc检验值;那此时
119bit(width_real) --> (64+8) * 2 = 144bit; 且此时拼接的ram为ram78,则测试需要拼接两个;且一般会把ecc校验位放在最后;
Steps:
Wdata:现根据真实wdata的位宽---->计算得到加上ecc校验值后的位宽---->确定选择ecc计算的模块,通过拆分数据来进行分别送进去,去得到ecc校验值---->然后再放入真实的RAM里面;
Rdata:然后从ram里读出值---->拆分数据+相应ecc校验值,送进去ecc_check模块---->然后分别得到data_out的值以及有没有data_err;
[Ref]
https://blog.csdn.net/icxiaoge/article/details/122655042