コード例 #1
0
        public override void StreamVhdlRealization(KeyValuePair <string, TimeInterval> param, System.IO.StreamWriter sw)
        {
            int numbRepeats = (int)(param.Value.GetTimeUnitInFS() / this.timeStep.GetTimeUnitInFS()); //число повторений

            sw.Write("--random generator\n");
            sw.Write("process is \n begin\n");
            sw.Write(param.Key);
            sw.Write(" <= ");
            sw.Write(DataConvertorUtils.ToBitArrayString((int)this.NextValue(), SizeVector));
            sw.Write(";\n");
            StringBuilder temp = new StringBuilder();

            for (int i = 0; i < numbRepeats;)
            {
                temp = new StringBuilder();
                for (int j = i % 1000; (j < 1000 - 1) && (j < numbRepeats); ++j, ++i)
                {
                    temp.Append("wait for ");
                    temp.Append(timeStep.TimeNumber);
                    temp.Append(" ");
                    temp.Append(timeStep.Unit);
                    temp.Append(";\n");
                    temp.Append(param.Key);
                    temp.Append(" <= ");
                    temp.Append(DataConvertorUtils.ToBitArrayString((int)this.NextValue(), SizeVector));
                    temp.Append(";\n");
                }
                sw.Write(temp);
                ++i;
            }
            sw.Write("wait;\n");
            sw.Write("end process;\n");
        }
コード例 #2
0
 public override IEnumerable <bool[]> GetBitArrayEnumerator()
 {
     while (true)
     {
         yield return(DataConvertorUtils.ToBitArray((int)NextValue(), SizeInBits));
     }
 }
コード例 #3
0
ファイル: Constant.cs プロジェクト: cuijialang/HDL_ANTLR4
        SortedList <ulong, bool[]> IGeneratorDataFill <bool[]> .InsertValues(ulong StartTime, ulong EndTime)
        {
            SortedList <UInt64, bool[]> data = new SortedList <ulong, bool[]>();

            data.Add(StartTime, DataConvertorUtils.ToBitArray(IntegerValue, 64));
            return(data);
        }
コード例 #4
0
ファイル: Counter.cs プロジェクト: cuijialang/HDL_ANTLR4
        public override string GetStringStartValue()
        {
            StringBuilder res = new StringBuilder();

            res.Append("\"");
            for (int i = CurrentValue.Length - 1; i >= 0; i--)
            {
                res.Append(DataConvertorUtils.BoolToInt(CurrentValue[i]));
            }
            res.Append("\"");
            return(res.ToString());
        }
コード例 #5
0
        /// <summary>
        /// Создание объекта STD_LOGIC_VECTOR_VALUE из числа
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static STD_LOGIC_VECTOR_VALUE CreateSTD_LOGIC_VECTOR_VALUE(Int64 value, int size)
        {
            List <AbstractValue> elements = new List <AbstractValue>();

            bool[] booleanData = DataConvertorUtils.ToBitArray(value, size);

            foreach (bool b in booleanData)
            {
                elements.Add(new STD_LOGIC_VALUE(b ? VHDL.builtin.StdLogic1164.STD_LOGIC_1 : VHDL.builtin.StdLogic1164.STD_LOGIC_0));
            }

            return(new STD_LOGIC_VECTOR_VALUE(elements));
        }
コード例 #6
0
        /// <summary>
        /// Создание объекта BIT_VECTOR_VALUE из числа
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static BIT_VECTOR_VALUE CreateBIT_VECTOR_VALUE(Int64 value, int size)
        {
            List <AbstractValue> elements = new List <AbstractValue>();

            bool[] booleanData = DataConvertorUtils.ToBitArray(value, size);

            foreach (bool b in booleanData)
            {
                elements.Add(new BIT_VALUE(b ? VHDL.builtin.Standard.BIT_1 : VHDL.builtin.Standard.BIT_0));
            }

            return(new BIT_VECTOR_VALUE(elements));
        }
コード例 #7
0
ファイル: Counter.cs プロジェクト: cuijialang/HDL_ANTLR4
        public IEnumerable <double> GetDoubleEnumerator()
        {
            yield return(DataConvertorUtils.ToLong(CurrentValue));

            while (true)
            {
                if (isUpDirection == true)
                {
                    yield return(DataConvertorUtils.ToLong(Next()));
                }
                else
                {
                    yield return(DataConvertorUtils.ToLong(Prev()));
                }
            }
        }
コード例 #8
0
        public override StringBuilder StringVhdlRealization(KeyValuePair <string, TimeInterval> param)
        {
            int           numbRepeats = (int)(param.Value.GetTimeUnitInFS() / this.timeStep.GetTimeUnitInFS()); //число повторений
            StringBuilder res         = new StringBuilder();

            res.Append("--random generator\n");
            res.Append("process is \n begin\n");
            res.Append(param.Key).Append(" <= ").Append(DataConvertorUtils.ToBitArrayString((int)this.NextValue(), SizeVector)).Append(";\n");
            for (int i = 0; i < numbRepeats; ++i)
            {
                res.Append("wait for ").Append(timeStep.TimeNumber).Append(" ").Append(timeStep.Unit).Append(";\n");
                res.Append(param.Key).Append(" <= ").Append(DataConvertorUtils.ToBitArrayString((int)this.NextValue(), SizeVector)).Append(";\n");
            }
            res.Append("wait;\n");
            res.Append("end process;\n");
            return(res);
        }
コード例 #9
0
        private bool GenerateCounter()
        {
            Counter counter = null;

            if (RadiobuttonCounterBinary.IsChecked == true)
            {
                counter = new BinaryCounter();
            }
            if (RadiobuttonCounterGray.IsChecked == true)
            {
                counter = new GrayCounter();
            }
            if (RadiobuttonCounterJohnson.IsChecked == true)
            {
                counter = new JohnsonCounter();
            }
            if (RadiobuttonCounterOneHot.IsChecked == true)
            {
                counter = new Circular1();
            }
            if (RadiobuttonCounterOneZero.IsChecked == true)
            {
                counter = new Circular0();
            }

            counter.IsUpDirection = RadiobuttonCounterUp.IsChecked == true;
            counter.StepCount     = (uint)TextBoxCounterChangeBy.GetIntegerValue();
            counter.CurrentValue  = DataConvertorUtils.ToBitArray(TextBoxCounterStartValue.GetIntegerValue(), (int)genSettings.Size);
            if (counter.CurrentValue == null)
            {
                MessageBox.Show(string.Format("You have errors, when enter StartValue for {0}. It must be one \'0\' and other \'1\'(Circular0) or one \'1\' and other \'0\'(Circular1)", counter.ToString()), "Error!");
                return(false);
            }

            if (timeUnitUserControlClock.TimeInterval.GetTimeUnitInFS() == 0)
            {
                MessageBox.Show("Time must be non zero", "Error!", MessageBoxButton.OK);
                return(false);
            }

            counter.TimeStep = timeUnitUserControlCounter.TimeInterval;

            generator = counter;
            return(true);
        }
コード例 #10
0
ファイル: Clock.cs プロジェクト: cuijialang/HDL_ANTLR4
        public override StringBuilder StringVhdlRealization(KeyValuePair <string, TimeInterval> param)
        {
            StringBuilder res = new StringBuilder();

            if (dutyCycle == 50)
            {
                res.Append(param.Key).Append("<=not ").Append(param.Key).Append(" after ").Append((ulong)timeStep.GetTimeUnitInFS() / 2).Append(" ").Append(TimeUnit.fs).Append(" when now < END_TIME;");
            }
            else
            {
                res.Append("process is").Append("\n").Append("begin").Append("\n").Append(" if now<END_TIME then").Append("\n").Append(param.Key).Append("<=").Append("\'").Append(DataConvertorUtils.BoolToInt(startValue)).Append("\';").Append("\n");
                res.Append(" wait for ").Append((ulong)(timeStep.GetTimeUnitInFS() * (dutyCycle / 100))).Append(" ").Append(TimeUnit.fs).Append(" ;").Append("\n");
                res.Append(param.Key).Append("<=").Append("\'").Append(DataConvertorUtils.BoolToInt(!startValue)).Append("\';").Append("\n");
                res.Append(" wait for ").Append((ulong)(timeStep.GetTimeUnitInFS() * (1 - dutyCycle / 100))).Append(" ").Append(TimeUnit.fs).Append(" ;").Append("\n");
                res.Append(" else wait;").Append("\n").Append(" end if;").Append("\n").Append("end process; ").Append("\n");
            }
            return(res);
        }
コード例 #11
0
        private static SortedList <UInt64, TimeStampInfo <VHDLBaseValue> > FormIntegerGeneratedData(BaseGenerator generator, UInt64 StartTime, UInt64 EndTime)
        {
            SortedList <UInt64, TimeStampInfo <VHDLBaseValue> > res = new SortedList <UInt64, TimeStampInfo <VHDLBaseValue> >();

            if (generator is IGeneratorDataFill <Int64> )
            {
                SortedList <UInt64, Int64> valuesForInsert = (generator as IGeneratorDataFill <Int64>).InsertValues(StartTime, EndTime);
                foreach (var el in valuesForInsert)
                {
                    TimeStampInfo <VHDLBaseValue> inf = new TimeStampInfo <VHDLBaseValue>(new VHDLIntegerValue(Convert.ToInt32(el.Value)));
                    res.Add(el.Key, inf);
                }
                return(res);
            }
            if (generator is IGeneratorDataFill <bool[]> )
            {
                SortedList <UInt64, bool[]> valuesForInsert = (generator as IGeneratorDataFill <bool[]>).InsertValues(StartTime, EndTime);
                foreach (var el in valuesForInsert)
                {
                    TimeStampInfo <VHDLBaseValue> inf = new TimeStampInfo <VHDLBaseValue>(new VHDLIntegerValue(DataConvertorUtils.ToInt(el.Value)));
                    res.Add(el.Key, inf);
                }
                return(res);
            }
            if (generator is IGeneratorDataFill <Double> )
            {
                SortedList <UInt64, Double> valuesForInsert = (generator as IGeneratorDataFill <Double>).InsertValues(StartTime, EndTime);
                foreach (var el in valuesForInsert)
                {
                    TimeStampInfo <VHDLBaseValue> inf = new TimeStampInfo <VHDLBaseValue>(new VHDLIntegerValue(Convert.ToInt32(el.Value)));
                    res.Add(el.Key, inf);
                }
                return(res);
            }

            return(res);
        }
コード例 #12
0
ファイル: Clock.cs プロジェクト: cuijialang/HDL_ANTLR4
 public override string GetStringStartValue()
 {
     return("\'" + DataConvertorUtils.BoolToInt(startValue) + "\'");
 }