Пример #1
0
        public void AddVCD(VCD vcd, bool isVerilogVCD)
        {
            Timeline     = new VCDTimeline(vcd);
            IsVerilogVCD = isVerilogVCD;

            SetCircuitState(Timeline.TimeInterval.StartInclusive);
        }
Пример #2
0
        internal static void VerifyComputeGraph(string moduleName, string extension, bool isVerilogVCD, string modulePath)
        {
            CircuitGraph graph    = VerifyMakeGraph(moduleName, extension, modulePath);
            VCDTimeline  timeline = MakeTimeline(moduleName, modulePath);

            VerifyCircuitState(graph, timeline, isVerilogVCD);
        }
Пример #3
0
        internal static void VerifyChiselTest(string moduleName, string extension)
        {
            const string modulePath = "ChiselTests";

            CircuitGraph lowFirGraph = null;

            if (extension == "fir")
            {
                string loFirPath = Path.Combine(modulePath, $"{moduleName}.lo.fir");
                lowFirGraph = VerifyCanCreateGraphFromFile(loFirPath);
            }

            string       firPath = Path.Combine(modulePath, $"{moduleName}.{extension}");
            CircuitGraph graph   = VerifyCanCreateGraphFromFile(firPath, lowFirGraph);

            using VCD vcd = VCDReader.Parse.FromFile($"{modulePath}/{moduleName}.vcd");
            VCDTimeline timeline = new VCDTimeline(vcd);

            VerifyCircuitState(graph, timeline, isLoFIRRTL(extension), false);
        }
Пример #4
0
        internal static void VerifyCircuitState(CircuitGraph graph, VCDTimeline timeline, bool isVerilogVCD)
        {
            graph.SetState(timeline.GetStateAtTime(timeline.TimeInterval.StartInclusive), isVerilogVCD);

            Stopwatch timer = new Stopwatch();

            timer.Start();
            int i = 0;

            foreach (var state in timeline.GetAllDistinctStates())
            {
                if (state.Time == timeline.TimeInterval.InclusiveEnd())
                {
                    break;
                }
                graph.SetState(state, isVerilogVCD);
                graph.ComputeRemainingGraphFast();


                const int reportEveryXTimeStates = 20_000;
                if (i++ % reportEveryXTimeStates == 0)
                {
                    timer.Stop();
                    float msPerState       = (float)timer.ElapsedMilliseconds / reportEveryXTimeStates;
                    float statesPerMs      = 1.0f / msPerState;
                    float statesPerSecs    = statesPerMs * 1000.0f;
                    float totalRemainingMs = msPerState * (timeline.StateCount - i);

                    const int msPerSec         = 1_000;
                    float     remainingSeconds = totalRemainingMs / msPerSec;
                    Console.WriteLine($"{i}/{timeline.StateCount} Remaining: {remainingSeconds.ToString("N0")} States/sec: {statesPerSecs.ToString("N0")}");
                    timer.Restart();
                }
            }
            timer.Stop();
        }