第二部分:ECC (30, 24)RTL實現實戰 - 精雕細琢的硬件衛士
理論是基石,實現是關鍵。本部分將 手把手構建參數化、可綜合、高可靠的ECC編解碼器 。本部分將以MIPI 協議中Packet Header 用到的ECC(30,24) 為例子,詳細介紹其 verilog實現。
1. 模塊架構:職責分明
層模塊 Verilog
module ecc_correction (i_clk ,i_rst ,i_data ,i_ecc ,i_valid ,o_valid ,o_errortype ,o_data_rcv
);
//... 實例化syndrome_gen
//... 實例化syndrome_decoderendmodulemodule syndrome_decoder(
clk ,
rst ,
addr ,
ena ,
syn_code
);//... 實例化sprom 查找表endmodulemodule sprom(clk,rst_n,addr,dout,clk_en
);
// 在 ecc_correction 模塊內部
localparam int PARITY_WIDTH = $clog2(DATA_WIDTH) + 1; // 校驗位寬計算公式 p = ceil(log2(k)) + 1
localparam int TOTAL_WIDTH = DATA_WIDTH + PARITY_WIDTH; // 編碼后總位寬
? 工程優勢: 使用 $clog2()
系統函數自動計算校驗位寬 PARITY_WIDTH
和總位寬 TOTAL_WIDTH
。用戶只需指定 DATA_WIDTH
,模塊自動適配, 極大提升復用性 。
2. 編碼器(syndrome_gen)
實現: 并行異或的藝術
Hamming code編碼
assign o_ecc[7:6] = 2'b00;
assign o_ecc[5] = i_data[10]^i_data[11]^i_data[12]^i_data[13]^i_data[14]^i_data[15]^i_data[16]^i_data[17]^i_data[18]^i_data[19]^i_data[21]^i_data[22]^i_data[23];
assign o_ecc[4] = i_data[4]^i_data[5]^i_data[6]^i_data[7]^i_data[8]^i_data[9]^i_data[16]^i_data[17]^i_data[18]^i_data[19]^i_data[20]^i_data[22]^i_data[23];
assign o_ecc[3] = i_data[1]^i_data[2]^i_data[3]^i_data[7]^i_data[8]^i_data[9]^i_data[13]^i_data[14]^i_data[15]^i_data[19]^i_data[20]^i_data[21]^i_data[23];
assign o_ecc[2] = i_data[0]^i_data[2]^i_data[3]^i_data[5]^i_data[6]^i_data[9]^i_data[11]^i_data[12]^i_data[15]^i_data[18]^i_data[20]^i_data[21]^i_data[22];
assign o_ecc[1] = i_data[0]^i_data[1]^i_data[3]^i_data[4]^i_data[6]^i_data[8]^i_data[10]^i_data[12]^i_data[14]^i_data[17]^i_data[20]^i_data[21]^i_data[22]^i_data[23];
assign o_ecc[0] = i_data[0]^i_data[1]^i_data[2]^i_data[4]^i_data[5]^i_data[7]^i_data[10]^i_data[11]^i_data[13]^i_data[16]^i_data[20]^i_data[21]^i_data[22]^i_data[23];
3.解碼器(syndrome_decoder)
實現: 查找表
ECC Correction 模塊的核心模塊,由解碼地址查詢出錯位置,糾正單bit錯誤,標注兩位及以上的錯誤。功能由C代碼實現,生成一個可查詢的文件。
4. 校正錯誤碼
assign o_data_rcv = header^syn_code[31:0]; // 對被檢測到的單比特錯誤取反
5.仿真波形
6. 總結與附件
總結:
通過以上實現,我們成功將漢明碼理論轉化為一個參數化、可綜合的硬件模塊。它能夠實時檢測并嘗試糾正單位錯,檢測雙位錯(標記為不可糾正),為芯片數據完整性提供基礎保障。
附件:
隨本文提供的附件包括:ECC校正實現的Verilog 、testbench 和仿真 script, 以及C和Python源代碼
sim --- simulation scriptsrc --- source codetb --- test bench filestool --- C code and Python script