FPGA实现ECC的计算很简单,但是如果想要使用matlab来实现,如果不注意很容易卡住,或者写出来的代码很复杂,可读性也会变得很差。
如下存在verilog实现的ECC计算
ecc_o[0]=da_i[0]^da_i[1]^da_i[3]^da_i[4]^da_i[6];
ecc_o[1]=da_i[0]^da_i[2]^da_i[3]^da_i[5]^da_i[6];
ecc_o[2]=da_i[1]^da_i[2]^da_i[3]^da_i[7];
ecc_o[3]=da_i[4]^da_i[5]^da_i[6]^da_i[7];
ecc_o[4]=(^dat_i[7:0])^(^ecc_o[3:0]);
显然,HDL语言描述和处理很容易。
但是,Matlab上实现对于Matlab初学者 可能会有一点麻烦。
function ecc = ecc_capture(dat)
dat_i = de2bi(dat, 8, 'right-msb');
ecc_0 = dat_i( 0 );
for i = [ 1 3 4 6 ]
ecc_0 = bitxor( ecc_0,dat_i( i ));
end
ecc_1 = dat_i( 0 );
for i = [ 2 3 5 6]
ecc_1 = bitxor( ecc_1,dat_i( i ));
end
ecc_2 = dat_i( 1 );
for i =[ 2 3 7]
ecc_2 = bitxor( ecc-2,dat_i( i ));
end
ecc_3 = dat_i( 1 );
for i = [ 4 5 6 7]
ecc_3 = bitxor( ecc_3 , dat_i( i ));
end
ecc_4_xor = dat_i( 0 );
for i = [ 1 2 3 4 5 6 7]
ecc_4_xor = bitxor(ecc_4_xor,dat_i(i));
end
ecc_3_to_0 = ecc_3 * ( 2 ^ 3 ) ...
+ ecc_2 * ( 2 ^ 2 ) ...
+ ecc_1 * ( 2 ^ 1 ) ...
+ ecc_0;
ecc_3_0 = de2bi ( ecc_3_to_0 , 4 , 'right-msb' ) ;
ecc_4 = ecc_4_xor;
for i = [ 0 1 2 3]
ecc_4 = bitxor( ecc_4_xor , ecc_3_0) ;
end
ecc = ecc_4 * ( 2 ^ 4) + ecc_3_0;
endfunction