Matlab实现ECC的计算

        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

        

        

猜你喜欢

转载自blog.csdn.net/wuxunxu/article/details/85232579