OpenCores
URL https://opencores.org/ocsvn/bluespec-reedsolomon/bluespec-reedsolomon/trunk

Subversion Repositories bluespec-reedsolomon

[/] [bluespec-reedsolomon/] [trunk/] [sw-reedsolomon/] [chien_search.cpp] - Diff between revs 5 and 9

Show entire file | Details | Blame | View Log

Rev 5 Rev 9
Line 27... Line 27...
 
 
#include "global_rs.h"
#include "global_rs.h"
#include "gf_arith.h"
#include "gf_arith.h"
#include "chien_search.h"
#include "chien_search.h"
 
 
#pragma design
// Directive: Synthesize independently
void chien_search(  unsigned char k, unsigned char t, unsigned char lambda[tt],
void chien_search(  unsigned char k, unsigned char t, unsigned char lambda[tt],
                    unsigned char *err_no, unsigned char err_loc[tt], unsigned char alpha_inv[tt])
                    unsigned char *err_no, unsigned char err_loc[tt], unsigned char alpha_inv[tt])
{
{
    unsigned char accum = 0;
    unsigned char accum = 0;
    unsigned char err_cnt = 0;
    unsigned char err_cnt = 0;
    unsigned char alphainv = 1;
    unsigned char alphainv = 1;
    unsigned char lambda_a[tt];
    unsigned char lambda_a[tt];
    unsigned char err_loc_temp[tt];
    unsigned char err_loc_temp[tt];
    unsigned char alpha_inv_temp[tt];
    unsigned char alpha_inv_temp[tt];
 
 
    #pragma unroll yes
    // Directive: Unroll loop maximally
    Chien_AssignInArray: for (int i = 0; i < tt; i++)
    Chien_AssignInArray: for (int i = 0; i < tt; i++)
       lambda_a[i] = lambda[i];
       lambda_a[i] = lambda[i];
 
 
    for (int i = nn-1; i >= 0; i--)
    for (int i = nn-1; i >= 0; i--)
    {
    {
       #pragma unroll yes
       // Directive: Unroll loop maximally
       Chien_Inner1: for (int j = 0; j < tt; j++)
       Chien_Inner1: for (int j = 0; j < tt; j++)
            lambda_a[j] = gfmult_hw(lambda_a[j], alpha(j+1));
            lambda_a[j] = gfmult_hw(lambda_a[j], alpha(j+1));
 
 
       accum = 1;
       accum = 1;
 
 
       #pragma unroll yes   
       // Directive: Unroll loop maximally   
       Chien_Inner2: for (int j = 0; j < tt; j++)
       Chien_Inner2: for (int j = 0; j < tt; j++)
            accum = gfadd_hw(accum, lambda_a[j]);
            accum = gfadd_hw(accum, lambda_a[j]);
 
 
       alphainv = gfmult_hw(alphainv, 2);
       alphainv = gfmult_hw(alphainv, 2);
 
 
Line 64... Line 64...
            alpha_inv_temp[err_cnt] = alphainv;
            alpha_inv_temp[err_cnt] = alphainv;
            err_cnt++ ;
            err_cnt++ ;
       }
       }
    }
    }
 
 
    #pragma unroll yes
    // Directive: Unroll loop maximally
    Chien_AssignOutArray: for (int i = 0; i < tt; i++)
    Chien_AssignOutArray: for (int i = 0; i < tt; i++)
    {
    {
       err_loc[i]   = err_loc_temp[i];
       err_loc[i]   = err_loc_temp[i];
       alpha_inv[i] = alpha_inv_temp[i];
       alpha_inv[i] = alpha_inv_temp[i];
    }
    }

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.