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

Subversion Repositories reedsolomon

[/] [reedsolomon/] [trunk/] [cpp-source/] [chien_search.cpp] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 abhiag
//----------------------------------------------------------------------//
2
// The MIT License 
3
// 
4
// Copyright (c) 2010 Abhinav Agarwal, Alfred Man Cheuk Ng
5
// Contact: abhiag@gmail.com
6
// 
7
// Permission is hereby granted, free of charge, to any person 
8
// obtaining a copy of this software and associated documentation 
9
// files (the "Software"), to deal in the Software without 
10
// restriction, including without limitation the rights to use,
11
// copy, modify, merge, publish, distribute, sublicense, and/or sell
12
// copies of the Software, and to permit persons to whom the
13
// Software is furnished to do so, subject to the following conditions:
14
// 
15
// The above copyright notice and this permission notice shall be
16
// included in all copies or substantial portions of the Software.
17
// 
18
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
20
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
22
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
23
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
24
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25
// OTHER DEALINGS IN THE SOFTWARE.
26
//----------------------------------------------------------------------//
27
 
28
#include "global_rs.h"
29
#include "gf_arith.h"
30
#include "chien_search.h"
31
 
32
// Directive: Synthesize independently
33
void chien_search(  unsigned char k, unsigned char t, unsigned char lambda[tt],
34
                    unsigned char *err_no, unsigned char err_loc[tt], unsigned char alpha_inv[tt])
35
{
36
    unsigned char accum = 0;
37
    unsigned char err_cnt = 0;
38
    unsigned char alphainv = 1;
39
    unsigned char lambda_a[tt];
40
    unsigned char err_loc_temp[tt];
41
    unsigned char alpha_inv_temp[tt];
42
 
43
    // Directive: Unroll loop maximally
44
    Chien_AssignInArray: for (int i = 0; i < tt; i++)
45
       lambda_a[i] = lambda[i];
46
 
47
    for (int i = nn-1; i >= 0; i--)
48
    {
49
       // Directive: Unroll loop maximally
50
       Chien_Inner1: for (int j = 0; j < tt; j++)
51
            lambda_a[j] = gfmult_hw(lambda_a[j], alpha(j+1));
52
 
53
       accum = 1;
54
 
55
       // Directive: Unroll loop maximally   
56
       Chien_Inner2: for (int j = 0; j < tt; j++)
57
            accum = gfadd_hw(accum, lambda_a[j]);
58
 
59
       alphainv = gfmult_hw(alphainv, 2);
60
 
61
       if ((i >= 2*tt) && (i < kk+2*tt) && (accum == 0))
62
       {
63
            err_loc_temp[err_cnt] = i-2*tt;
64
            alpha_inv_temp[err_cnt] = alphainv;
65
            err_cnt++ ;
66
       }
67
    }
68
 
69
    // Directive: Unroll loop maximally
70
    Chien_AssignOutArray: for (int i = 0; i < tt; i++)
71
    {
72
       err_loc[i]   = err_loc_temp[i];
73
       alpha_inv[i] = alpha_inv_temp[i];
74
    }
75
 
76
    *err_no = err_cnt;
77
}

powered by: WebSVN 2.1.0

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