Kiwi Scientific Acceleration: C# high-level synthesis for FPGA execution.
Common HLS Paradigms Demonstrated

Kiwi Scientific Acceleration: Common HLS Paradigms Demonstrated

Src Code

// Kiwi Scientific Acceleration: KiwiC compiler test/demo.
using System;
using System.Text;
using KiwiSystem;

class LoopClassic
{

  public static int associative_reduction_example(int starting)
  {
    int vr = 0;
    for (int i=0;i<5;i++)
      {
	int vx = (i+starting)*(i+3)*(i+5);
	vr ^= ((vx & 128)>0 ? 1:0);
      }
    return vr;
  }

  public static int loop_carried_example(int seed)
  {
    int vp = seed;
    for (int i=0;i<5;i++)
      {
	vp = vp * 31241/121;
      }
    return vp;
  }

  
  static int [] foos = new int [10];
  static int ipos = 0;
  public static int loop_forwarding_example(int newdata)
  {
    foos[ipos ++] = newdata;
    ipos %= foos.Length;
    int sum = 0;
    for (int i=0;i<foos.Length-1;i++)
      {
	sum += foos[i]^foos[i+1];
      }
    return sum;
  }


  public static int data_dependent_controlflow_example(int seed)
  {
    int vr = 0;
    int i;
    for (i=0;i<20;i++)
      {
	vr += i*i*seed;
	if (vr > 1111) break;
      }
    return i;
  }
}

class bench
{
  const int limit = 100000000;  // Some stopping value

  [Kiwi.OutputBitPort("done")] static bool done = false;

  [Kiwi.HardwareEntryPoint()]
  public static void Main()
  {
    Console.WriteLine("LoopClassic Demo Start");
    for (int jojo=3;jojo<12;jojo += 3) 
      {
        Kiwi.NoUnroll(); 
        int result;
	//result = LoopClassic.loop_carried_example(jojo);
	//result = LoopClassic.data_dependent_controlflow_example(jojo);
	result = LoopClassic.loop_forwarding_example(jojo);
	//result = LoopClassic.associative_reduction_example(jojo);
        Console.WriteLine("   jojo={0}  test result={1}", jojo, result); 
      }  
    Console.WriteLine(" Test LoopClassic finished.");
    done = true;
  }
}

Conclusions

TBC ...


December 2016.               UP.