public void AddVCD(VCD vcd, bool isVerilogVCD) { Timeline = new VCDTimeline(vcd); IsVerilogVCD = isVerilogVCD; SetCircuitState(Timeline.TimeInterval.StartInclusive); }
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); }
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); }
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(); }