Example #1
0
 private async void StimulateAndTest()
 {
     for (int i = -5; i < 5; i += 2)
     {
         for (int j = -5; j < 5; j += 2)
         {
             _a.Next = StdLogicVector.FromInt(i, 32);
             _b.Next = StdLogicVector.FromInt(j, 32);
             while (_rdy.Cur != '0')
             {
                 await Tick;
             }
             while (_rdy.Cur != '1')
             {
                 await Tick;
             }
             Console.WriteLine("A = " + _a.Cur.IntValue + ", B = " + _b.Cur.IntValue + ", Sum = " + _sum.Cur.IntValue);
             Console.WriteLine("A = " + _a.Cur.IntValue + ", B = " + _b.Cur.IntValue + ", Diff = " + _diff.Cur.IntValue);
             Console.WriteLine("A = " + _a.Cur.IntValue + ", B = " + _b.Cur.IntValue + ", Prod = " + _prod.Cur.IntValue);
             Console.WriteLine("A = " + _a.Cur.IntValue + ", B = " + _b.Cur.IntValue + ", Quot = " + _quot.Cur.IntValue);
             Console.WriteLine("A = " + _a.Cur.IntValue + ", B = " + _b.Cur.IntValue + ", Neg = " + _neg.Cur.IntValue);
             Console.WriteLine("A = " + _a.Cur.IntValue + ", B = " + _b.Cur.IntValue + ", Abs = " + _abs.Cur.IntValue);
         }
     }
 }
Example #2
0
        private async void Computation()
        {
            await Tick;

            Rdy.Next = '0';
            while (true)
            {
                ProgramFlow.DoNotUnroll();
                int a    = A.Cur.IntValue;
                int b    = B.Cur.IntValue;
                int sum  = a + b;
                int diff = a - b;
                int prod = a * b;
                int quot = a / b;
                ProgramFlow.IOBarrier();
                Rdy.Next  = '1';
                Sum.Next  = StdLogicVector.FromInt(sum, 32);
                Diff.Next = StdLogicVector.FromInt(diff, 32);
                Prod.Next = StdLogicVector.FromInt(prod, 32);
                Quot.Next = StdLogicVector.FromInt(quot, 32);
                await Tick;
                ProgramFlow.IOBarrier();
                Rdy.Next = '0';
                await Tick;
            }
        }
Example #3
0
        private async void Computation()
        {
            await Tick;

            while (true)
            {
                ProgramFlow.DoNotUnroll();
                ProgramFlow.IOBarrier();
                Rdy.Next = '0';
                int i = 0;
                int j = 0;
                while (i++ < 10)
                {
                    ProgramFlow.DoNotUnroll();
                    j += i;
                    if (j < 8)
                    {
                        continue;
                    }
                    else
                    {
                        break;
                    }
                }
                Z.Next = StdLogicVector.FromInt(j, 32);
                await 63.Ticks();
                ProgramFlow.IOBarrier();
                Rdy.Next = '1';
                ProgramFlow.IOBarrier();
                await Tick;
            }
        }
Example #4
0
 private async void ComputeGCD()
 {
     while (true)
     {
         int a = A.Cur.IntValue;
         int b = B.Cur.IntValue;
         int r;
         if (a == 0)
         {
             r = 0;
         }
         else
         {
             while (b != 0)
             {
                 if (a > b)
                 {
                     a -= b;
                 }
                 else
                 {
                     b -= a;
                 }
             }
             r = a;
         }
         await Tick;
         R.Next = StdLogicVector.FromInt(r, 32);
     }
 }
 private async void StimulateAndTest()
 {
     for (int i = 1; i < 10; i++)
     {
         _in.Next = StdLogicVector.FromInt(i, 32);
         Console.WriteLine("in: " + _in.Cur.IntValue + ", out: " + _out.Cur.IntValue);
         await RisingEdge(_clk);
     }
 }
Example #6
0
 private async void ComputeSum()
 {
     while (true)
     {
         int   a  = A.Cur.IntValue;
         int   b  = B.Cur.IntValue;
         int   c  = C.Cur.IntValue;
         int   d  = D.Cur.IntValue;
         int   t1 = a + b;
         int   t2 = c + d;
         int   t3 = t1 + t2;
         await Tick;
         R.Next = StdLogicVector.FromInt(t3, 32);
     }
 }
Example #7
0
        public override StdLogicVector[] SerializeInstance(object instance)
        {
            Contract.Assert(instance.GetType().Equals(LayoutedType.CILType));
            var            values     = LayoutedType.CILType.GetEnumValues();
            int            index      = Array.IndexOf(values, instance);
            int            wsize      = (int)_wordSize;
            int            alignedNum = (NumBits + wsize - 1) / wsize * wsize;
            StdLogicVector vec        = StdLogicVector.FromInt(index, alignedNum);

            StdLogicVector[] result = new StdLogicVector[Size];
            for (int i = 0; i < (int)Size; i++)
            {
                result[i] = vec[i + wsize - 1, i];
            }
            return(result);
        }
Example #8
0
        private async void StimProcess()
        {
            await Tick;

            int i = -100;
            int j = 100;

            while (true)
            {
                Console.WriteLine("Next input: a = " + i + ", b = " + j);
                _a.Next = StdLogicVector.FromInt(i, _a.Size);
                _b.Next = StdLogicVector.FromInt(j, _b.Size);
                i      += 2;
                --j;
                await Tick;
            }
        }
Example #9
0
 private async void Tester()
 {
     for (int a = 0; a < 10; a++)
     {
         for (int b = 0; b < 10; b++)
         {
             _a.Next = StdLogicVector.FromInt(a, 32);
             _b.Next = StdLogicVector.FromInt(b, 32);
             int c = 3 * a;
             int d = 2 * a - b;
             _c.Next = StdLogicVector.FromInt(c, 32);
             _d.Next = StdLogicVector.FromInt(d, 32);
             await Tick;
             int   r1 = _r1.Cur.IntValue;
             Console.WriteLine("The GCD of {0} and {1} is {2}.", a, b, r1);
         }
     }
 }
Example #10
0
 private async void StimulateAndTest()
 {
     for (int i = 0; i < 10; i++)
     {
         for (int j = 0; j < 10; j++)
         {
             _x.Next = StdLogicVector.FromInt(i, 32);
             _y.Next = StdLogicVector.FromInt(j, 32);
             while (_rdy.Cur != '0')
             {
                 await _rdy;
             }
             while (_rdy.Cur != '1')
             {
                 await _rdy;
             }
             Console.WriteLine("The GCD of " + i + " and " + j + " is " + _z.Cur.IntValue);
         }
     }
 }
Example #11
0
        private async void Computation()
        {
            await Tick;

            while (true)
            {
                ProgramFlow.DoNotUnroll();
                ProgramFlow.IOBarrier();
                Rdy.Next = '0';
                int x = X.Cur.IntValue;
                int y = Y.Cur.IntValue;
                int z;
                if (x == 0)
                {
                    z = y;
                }
                else
                {
                    while (y != 0)
                    {
                        ProgramFlow.DoNotUnroll();

                        if (x > y)
                        {
                            x -= y;
                        }
                        else
                        {
                            y -= x;
                        }
                    }
                    z = x;
                }
                Z.Next = StdLogicVector.FromInt(z, 32);
                await 63.Ticks();
                ProgramFlow.IOBarrier();
                Rdy.Next = '1';
                ProgramFlow.IOBarrier();
                await Tick;
            }
        }
Example #12
0
 private async void StimulateAndTest()
 {
     for (int i = 1; i < 10; i++)
     {
         for (int j = 1; j < 10; j++)
         {
             _a.Next = StdLogicVector.FromInt(i, 32);
             _b.Next = StdLogicVector.FromInt(j, 32);
             do
             {
                 await RisingEdge(_clk);
             } while (_rdy.Cur != '0');
             do
             {
                 await RisingEdge(_clk);
             } while (_rdy.Cur != '1');
             Console.WriteLine(i + " + " + j + " = " + _sum.Cur.IntValue);
             Console.WriteLine(i + " - " + j + " = " + _diff.Cur.IntValue);
             Console.WriteLine(i + " * " + j + " = " + _prod.Cur.IntValue);
             Console.WriteLine(i + " / " + j + " = " + _quot.Cur.IntValue);
         }
     }
 }
Example #13
0
        private async void Computation()
        {
            await Tick;

            while (true)
            {
                ProgramFlow.IOBarrier();
                Rdy.Next  = '0';
                Sum.Next  = StdLogicVector.FromInt(A.Cur.IntValue + B.Cur.IntValue, 32);
                Diff.Next = StdLogicVector.FromInt(A.Cur.IntValue - B.Cur.IntValue, 32);
                Prod.Next = StdLogicVector.FromInt(A.Cur.IntValue * B.Cur.IntValue, 32);
                Quot.Next = StdLogicVector.FromInt(B.Cur.IntValue / A.Cur.IntValue, 32);
                Neg.Next  = StdLogicVector.FromInt(-A.Cur.IntValue, 32);
                Abs.Next  = StdLogicVector.FromInt(Math.Abs(A.Cur.IntValue), 32);
                //await 9.Ticks();
                await NTicks(9);

                ProgramFlow.IOBarrier();
                Rdy.Next = '1';
                ProgramFlow.IOBarrier();
                await Tick;
            }
        }