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

Subversion Repositories bluespec-reedsolomon

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

Show entire file | Details | Blame | View Log

Rev 5 Rev 9
Line 40... Line 40...
unsigned char gfmult_hw(unsigned char a, unsigned char b)
unsigned char gfmult_hw(unsigned char a, unsigned char b)
{
{
 
 
   unsigned int temp = 0;
   unsigned int temp = 0;
 
 
   #pragma unroll yes
   // Directive: Unroll loop maximally
   for (int i = 0; i < 8; i++)
   for (int i = 0; i < 8; i++)
      if (b & (1 << i))
      if (b & (1 << i))
         temp ^= (unsigned int)(a << i);
         temp ^= (unsigned int)(a << i);
 
 
   #pragma unroll yes 
   // Directive: Unroll loop maximally 
   for (int k = 15; k > 7; k--)
   for (int k = 15; k > 7; k--)
      if (temp & (1 << k))
      if (temp & (1 << k))
             temp ^= (unsigned int)(pp_char << (k - 8));
             temp ^= (unsigned int)(pp_char << (k - 8));
 
 
   return (temp & 255);
   return (temp & 255);
Line 378... Line 378...
 
 
unsigned char alphainv_lut (unsigned char n)
unsigned char alphainv_lut (unsigned char n)
{
{
  if (n == 0)
  if (n == 0)
     return 1;
     return 1;
//    unsigned char a = 2;
 
//    for (int i = 1; i < n; ++ i)
 
//       a = gfmult_hw (a, 2);
 
 
 
//   return gfinv_lut( a );
 
   return gfinv_lut( alpha (n) );
   return gfinv_lut( alpha (n) );
}
}
 
 
unsigned char gfdiv_lut (unsigned char dividend, unsigned char divisor)
unsigned char gfdiv_lut (unsigned char dividend, unsigned char divisor)
{
{
Line 396... Line 391...
 
 
 
 
// Assumption: First bit of Lambda (alpha**0) is not transmitted
// Assumption: First bit of Lambda (alpha**0) is not transmitted
void compute_deriv (unsigned char lambda[tt], unsigned char lambda_deriv[tt])
void compute_deriv (unsigned char lambda[tt], unsigned char lambda_deriv[tt])
{
{
   #pragma unroll true
   // Directive: Unroll loop maximally
   for (int i = 0; i < tt; i++)
   for (int i = 0; i < tt; i++)
        lambda_deriv[i] = (i % 2 == 0) ? lambda[i] : 0;
        lambda_deriv[i] = (i % 2 == 0) ? lambda[i] : 0;
}
}
 
 
 
 
unsigned char poly_eval (unsigned char poly[tt], unsigned char alpha_inv)
unsigned char poly_eval (unsigned char poly[tt], unsigned char alpha_inv)
{
{
   unsigned char val = 0;
   unsigned char val = 0;
 
 
   #pragma unroll true
   // Directive: Unroll loop maximally
   for (int j = tt-1; j >= 0; j--)
   for (int j = tt-1; j >= 0; j--)
   {
   {
      val = gfadd_hw(gfmult_hw(val, alpha_inv), poly[j]);
      val = gfadd_hw(gfmult_hw(val, alpha_inv), poly[j]);
   }
   }
   return val;
   return val;
}
}
 
 
// int main() {
 
//   for(int i=0; i<256; i++)    
 
//     cout << "," << (int)gfinv_lut(i) << endl;
 
// };
 
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

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