DW ECC 设计
1 模块接口说明
module DW_ECC #(
parameter width = 32 , // ECC 校验数据位宽
parameter chkbits = 7 , // ECC 校验码数据位宽,示例:64 位数据 - 8 位校验码
parameter synd_sel = 0
)(
input gen , // 1'b1 : 写模式; 1'b0 : 读模式
input correct_n , // 低有效使能数据更正功能,仅作用于读模式
input [width-1:0] datain , // 数据输入
input [chkbits-1:0] chkin , // 校验码输入,仅作用于读模式
output err_detect , // 单 bit 错误报错,仅读模式有效
output err_multpl , // 多 bit 错误报错,仅读模式有效
output dataout , // 输出数据,错误发生且更正功能使能时有效将被更正,仅读模式有效
output chkout // 输出校验码,
); // gen = 1, 写入到存储器的校验码
// gen = 0, 当 synd_sel = 1 时输出 syndrome 值
// 即 chkin 和 rdata 校验码的异或值
2 行为举例说明
假设写入数据为 64'h7766_5544_3322_1100;则 ECC 会生成 8'hC 作为校验码存入 MEM。
读出数据假设发生 1bit 错误: 64'h7766_5544_3322_1100 -> 64'h7766_5544_3322_1101。
此时 DW_ECC 会重新生成 64'h7766_5544_3322_1101 数据的 ECC 校验码 8'hC2,并有如下行为:
- err_detect = 1'b1
- dataout = 64'h7766_5544_3322_1100(correct_n = 1'b0)
- chkout = 8'hC2 ^ 8'hC = 8'hCE(synd_sel = 0)