diff options
author | Patrick Lehmann <Paebbels@gmail.com> | 2023-01-12 05:53:48 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-12 05:53:48 +0100 |
commit | fb7ef864c019d325f3fc37125e6d6cdc50ae4b83 (patch) | |
tree | 8ecca65254f939c987f182531b0cc7e13ff422b3 /testsuite/pyunit/dom/StopWatch.py | |
parent | 60774db2a547493b7f89de6239794b7354a0e31f (diff) | |
download | ghdl-fb7ef864c019d325f3fc37125e6d6cdc50ae4b83.tar.gz ghdl-fb7ef864c019d325f3fc37125e6d6cdc50ae4b83.tar.bz2 ghdl-fb7ef864c019d325f3fc37125e6d6cdc50ae4b83.zip |
Dependency Graphs (#2308)
* Further fixes to the example code.
* Bumped dependencies.
* Fixed Debouncer example code.
* Some more cleanup.
* Black's opinion.
* Run with pyVHDLModel dev-branch.
* Fixed imports for Name.
* Fixed test case.
* Added a formatter to write dependency graphs and hierarchy as graphml.
* Improved GraphML formatting.
* Write compile order graph.
* Computing compile order.
* Bumped dependencies.
* Black's opinion.
* Fixed incorrect dependency.
Diffstat (limited to 'testsuite/pyunit/dom/StopWatch.py')
-rw-r--r-- | testsuite/pyunit/dom/StopWatch.py | 73 |
1 files changed, 64 insertions, 9 deletions
diff --git a/testsuite/pyunit/dom/StopWatch.py b/testsuite/pyunit/dom/StopWatch.py index 6301eb1df..deab50a9f 100644 --- a/testsuite/pyunit/dom/StopWatch.py +++ b/testsuite/pyunit/dom/StopWatch.py @@ -30,11 +30,20 @@ # # SPDX-License-Identifier: GPL-2.0-or-later # ============================================================================ +from time import perf_counter_ns as time_perf_counter from pathlib import Path +from textwrap import dedent +from typing import Dict, List from unittest import TestCase +from pyTooling.Graph import Vertex + +import pyVHDLModel +import pyVHDLModel.DesignUnit from pyGHDL.dom.NonStandard import Design, Document +from pyGHDL.dom.formatting.GraphML import DependencyGraphFormatter, HierarchyGraphFormatter, CompileOrderGraphFormatter from pyGHDL.dom.formatting.prettyprint import PrettyPrint +from pyVHDLModel import DependencyGraphVertexKind, DependencyGraphEdgeKind, Library if __name__ == "__main__": print("ERROR: you called a testcase declaration file as an executable module.") @@ -106,19 +115,65 @@ class Display(Designs): class CompileOrder(Designs): def test_Encoder(self): + print() design = Design() - design.LoadStdLibrary() - design.LoadIEEELibrary() - for lib, file in self._encoderFiles: + design.LoadDefaultLibraries() + t1 = time_perf_counter() + for lib, file in self._stopwatchFiles: library = design.GetLibrary(lib) document = Document(self._sourceDirectory / file) design.AddDocument(document, library) + print(dedent("""\ + file: {} + libghdl processing time: {:5.3f} us + DOM translation time: {:5.3f} us + """ + ).format( + document.Path, + document.LibGHDLProcessingTime * 10**6, + document.DOMTranslationTime * 10**6, + ) + ) + pyGHDLTime = time_perf_counter() - t1 design.Analyze() - PP = PrettyPrint() - buffer = [] - buffer.append("Design:") - for line in PP.formatDesign(design, 1): - buffer.append(line) - print("\n".join(buffer)) + toplevel = [root.Value.Identifier for root in design.HierarchyGraph.IterateRoots()] + + print(dedent(""" + pyGHDL: + sum: {:5.3f} us + Analysis: + default library load time: {:5.3f} us + dependency analysis time: {:5.3f} us + Toplevel: {toplevel} + Compile order:\ + """ + ).format( + pyGHDLTime * 10**6, + design._loadDefaultLibraryTime * 10**6, + design._analyzeTime * 10**6, + toplevel=", ".join(toplevel) + ) + ) + for i, vertex in enumerate(design.IterateDocumentsInCompileOrder()): + print(f" {i:<2}: {vertex.Value.Path.relative_to(Path.cwd())}") + + graphML = Path("dependencies.graphml") + dependencyFormatter = DependencyGraphFormatter(design.DependencyGraph) + dependencyFormatter.WriteGraphML(graphML) + + graphML = Path("hierarchy.graphml") + hierarchyFormatter = HierarchyGraphFormatter(design.HierarchyGraph) + hierarchyFormatter.WriteGraphML(graphML) + + graphML = Path("compileorder.graphml") + compileOrderFormatter = CompileOrderGraphFormatter(design.CompileOrderGraph) + compileOrderFormatter.WriteGraphML(graphML) + + # PP = PrettyPrint() + # buffer = [] + # buffer.append("Design:") + # for line in PP.formatDesign(design, 1): + # buffer.append(line) + # print("\n".join(buffer)) |