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); } } }
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; } }
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; } }
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); } }
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); } }
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); }
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; } }
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); } } }
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); } } }
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; } }
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); } } }
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; } }