dv-flow-mgr 0.0.1.12750690879a1__tar.gz → 0.0.1.12761553329a1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/PKG-INFO +1 -1
  2. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/docs/index.rst +4 -3
  3. dv_flow_mgr-0.0.1.12761553329a1/docs/intro.rst +185 -0
  4. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/pyproject.toml +1 -1
  5. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr.egg-info/PKG-INFO +1 -1
  6. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr.egg-info/SOURCES.txt +1 -0
  7. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/.github/workflows/ci.yml +0 -0
  8. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/.gitignore +0 -0
  9. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/.vscode/settings.json +0 -0
  10. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/LICENSE +0 -0
  11. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/README.md +0 -0
  12. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/docs/Makefile +0 -0
  13. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/docs/Notes.md +0 -0
  14. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/docs/Roadmap.md +0 -0
  15. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/docs/Stages.md +0 -0
  16. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/docs/TypesAndDefs.md +0 -0
  17. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/docs/conf.py +0 -0
  18. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/docs/quickstart.rst +0 -0
  19. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/docs/reference.rst +0 -0
  20. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/ivpm.yaml +0 -0
  21. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/setup.cfg +0 -0
  22. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/__init__.py +0 -0
  23. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/__main__.py +0 -0
  24. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/cmds/cmd_run.py +0 -0
  25. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/fileset.py +0 -0
  26. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/flow.py +0 -0
  27. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/fragment_def.py +0 -0
  28. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/package.py +0 -0
  29. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/package_def.py +0 -0
  30. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/package_import_spec.py +0 -0
  31. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/parameters.py +0 -0
  32. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/session.py +0 -0
  33. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/share/flow.json +0 -0
  34. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/task.py +0 -0
  35. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/task_data.py +0 -0
  36. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/task_def.py +0 -0
  37. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/task_memento.py +0 -0
  38. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/tasklib/hdl/sim/mti_pkg.py +0 -0
  39. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/tasklib/hdl/sim/mti_task_sim_image.py +0 -0
  40. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/tasklib/hdl/sim/mti_task_sim_run.py +0 -0
  41. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/tasklib/hdl/sim/pkg_hdl_sim.py +0 -0
  42. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/tasklib/hdl/sim/task_sim_image.py +0 -0
  43. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/tasklib/hdl/sim/vcs_pkg.py +0 -0
  44. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/tasklib/hdl/sim/vcs_task_sim_image.py +0 -0
  45. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/tasklib/hdl/sim/vcs_task_sim_run.py +0 -0
  46. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/tasklib/hdl/sim/vl_task_sim_image.py +0 -0
  47. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/tasklib/hdl/sim/vlt_pkg.py +0 -0
  48. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/tasklib/hdl/sim/vlt_task_sim_image.py +0 -0
  49. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/tasklib/hdl/sim/vlt_task_sim_run.py +0 -0
  50. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/tasklib/std/fileset.py +0 -0
  51. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/tasklib/std/pkg_std.py +0 -0
  52. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/tasklib/std/std.dfs +0 -0
  53. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/tasklib/std/task_fileset.py +0 -0
  54. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr/tasklib/std/task_null.py +0 -0
  55. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr.egg-info/dependency_links.txt +0 -0
  56. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr.egg-info/entry_points.txt +0 -0
  57. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr.egg-info/requires.txt +0 -0
  58. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/src/dv_flow_mgr.egg-info/top_level.txt +0 -0
  59. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/tests/examples/example1/example1.flow +0 -0
  60. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/tests/unit/data/fileset/test1/files1/file1_1.sv +0 -0
  61. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/tests/unit/data/fileset/test1/files1/file1_2.sv +0 -0
  62. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/tests/unit/data/fileset/test1/files2/file2_1.sv +0 -0
  63. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/tests/unit/data/fileset/test1/files2/file2_2.sv +0 -0
  64. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/tests/unit/data/fileset/test1/test1.dfs +0 -0
  65. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/tests/unit/data/fileset/test1 copy/files1/file1_1.sv +0 -0
  66. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/tests/unit/data/fileset/test1 copy/files1/file1_2.sv +0 -0
  67. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/tests/unit/data/fileset/test1 copy/files2/file2_1.sv +0 -0
  68. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/tests/unit/data/fileset/test1 copy/files2/file2_2.sv +0 -0
  69. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/tests/unit/data/fileset/test1 copy/test1.dfs +0 -0
  70. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/tests/unit/data/proj1/proj1.dfs +0 -0
  71. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/tests/unit/data/proj2/proj2.dfs +0 -0
  72. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/tests/unit/data/proj3/proj3.dfs +0 -0
  73. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/tests/unit/test_fileset.py +0 -0
  74. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/tests/unit/test_smoke copy.sav +0 -0
  75. {dv_flow_mgr-0.0.1.12750690879a1 → dv_flow_mgr-0.0.1.12761553329a1}/tests/unit/test_smoke.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.12750690879a1
3
+ Version: 0.0.1.12761553329a1
4
4
  Summary: DV Flow Manager is a build system for silicon design
5
5
  Author-email: Matthew Ballance <matt.ballance@gmail.com>
6
6
  License: Apache License
@@ -6,9 +6,9 @@
6
6
  DV Flow Manager
7
7
  ===============
8
8
 
9
- DV Flow Manager helps users capture the tasks and dataflow in their
10
- design and verification (DV) flows. You can think of DV Flow Manager as a
11
- sort of "make for silicon engineering".
9
+ DV Flow Manager provides a "make for silicon engineering": a specification
10
+ for capturing design and verification (DV) tasks and dataflow in a way that
11
+ enables concurrent execution and efficient avoidance of redundant work.
12
12
 
13
13
  .. mermaid::
14
14
 
@@ -28,4 +28,5 @@ sort of "make for silicon engineering".
28
28
  :caption: Contents:
29
29
 
30
30
  quickstart
31
+ intro
31
32
  reference
@@ -0,0 +1,185 @@
1
+ ############
2
+ Introduction
3
+ ############
4
+
5
+
6
+
7
+
8
+ Many software languages have co-evolved with a build system. For example, C/C++
9
+ has Make and CMake. Java has ANT, Maven, and Gradle. All of these build systems
10
+ provide features that cater to specific ways that a given language is processed,
11
+ and provide built-in notions to make setting up simple cases as easy as possible.
12
+
13
+ One simple example is Make and a single-file C program. Take the code below:
14
+
15
+ .. code-block:: C
16
+
17
+ #include <stdio.h>
18
+
19
+ int main() {
20
+ printf("Hello, world!\n");
21
+ return 0;
22
+ }
23
+
24
+
25
+ Make provides enough built-in features that are C/C++-specific that we can create
26
+ an executable from this source file (assume it's named hello.c) simply by running:
27
+
28
+ .. code-block:: bash
29
+
30
+ make hello
31
+
32
+ Make knows about C files, it knows about the existance of a C compiler, and it knows
33
+ that an executable can be created from a C file of the same name.
34
+
35
+ Meanwhile, in Silicon Engineering Land...
36
+ =========================================
37
+
38
+ Much like software languages, the languages, tools, and flows used in silicon engineering
39
+ have their own unique characteristics. For example, in a silicon-design environment, many
40
+ flows are run over the same source files -- possibly with different configurations.
41
+
42
+ * We compile our design with a UVM testbench to run dynamic (simulation-based) verification
43
+ * We compile our design with different testbenches to run formal verification
44
+ * We likely use slightly different subset when targeting synthesis
45
+
46
+ In addition, we also need to be flexible when it comes to tooling. Over time, we'll likely
47
+ use different tools from different providers, and want our projects to adapt as easily as
48
+ possible to a change of tool. It's also likely that we will either want to add new tools
49
+ to our environment over time, or adapt our environment to take advantage of new
50
+ productivity-enhancing tool features.
51
+
52
+ DV Flow Manager is designed to be the 'make' for silicon engineering. There are three
53
+ aspects to the tool:
54
+
55
+ * **Flow Specification** - Processing steps for a given project are captured in a hierarchy
56
+ of YAML files. The flow-specification schema is designed to be tool-independent, such
57
+ that multiple tools can be implemented that comprehend a flow specification.
58
+ * **Task Library** - Processing steps are implemented as `tasks`. A library of common tasks
59
+ is defined to cover common cases, such as creating a simulation image. External libraries
60
+ of tasks are supported, such that tools can bundle a task library along with the tool installation.
61
+ * **Tools** - The Python implementation of DV Flow Manager is one example of a tool. Other tools
62
+ may be added in the future to provide visualization, simplify development, etc.
63
+
64
+
65
+
66
+ Key Concepts
67
+ ============
68
+
69
+ DV Flow Manager has three key concepts:
70
+ * **Package** - A packages is parameterizd namespace that contain tasks.
71
+ * **Task** - A task is a processing step in a flow. Tasks represent a data-processing step, which
72
+ might be as simple as building a list of files, or might be a complex as creating a hardened macro
73
+ from multiple source collections.
74
+ * **Dataflow Dependencies** - Tasks are related by dataflow dependencies. In order for a task to
75
+ execute, the data from all of its dependencies must be available. Each task also produces a
76
+ dataflow object that can be consumed by other tasks.
77
+
78
+ Let's look at an example to better-understand these concepts.
79
+
80
+ .. code-block:: YAML
81
+
82
+ package:
83
+ name: my_ip
84
+
85
+ imports:
86
+ - name: hdl.sim.vlt
87
+ as: hdl.sim
88
+
89
+ tasks:
90
+ - name: rtl
91
+ uses: std.Fileset
92
+ with:
93
+ base: "rtl"
94
+ include: "*.sv"
95
+
96
+ - name: tb
97
+ uses: std.Fileset
98
+ needs: [rtl]
99
+ with:
100
+ base: "tb"
101
+ include: "*.sv"
102
+
103
+ - name: sim
104
+ uses: hdl.sim.SimImage
105
+ needs: [rtl, tb]
106
+
107
+ -name: test1
108
+ uses: hdl.sim.RunSim
109
+ needs: [sim]
110
+
111
+ The code above specifies two collections of source code --
112
+ one for the design and one for the testbench. This source
113
+ code is compiled into as simulation image using the
114
+ pre-defined task named `hdl.sim.SimImage`. After,
115
+ we execute the simulation image.
116
+
117
+
118
+ .. mermaid::
119
+
120
+ flowchart TD
121
+ A[rtl] --> B[tb]
122
+ B[tb] --> E[sim]
123
+ E --> F[test1]
124
+
125
+ The task graph for this flow is shown above. Each step depends on the
126
+ prior step, so there is no opportunity for concurrent execution.
127
+
128
+ Now, let's say that we want to run a series of tests. We can add
129
+ a new task per tests, where we customize the activity that is run
130
+ by passing arguments to the simulation.
131
+
132
+ .. code-block:: YAML
133
+
134
+ # ...
135
+ -name: test1
136
+ uses: hdl.sim.RunSim
137
+ needs: [sim]
138
+ -name: test2
139
+ uses: hdl.sim.RunSim
140
+ needs: [sim]
141
+ -name: test3
142
+ uses: hdl.sim.RunSim
143
+ needs: [sim]
144
+
145
+ .. mermaid::
146
+
147
+ flowchart TD
148
+ A[rtl] --> B[tb]
149
+ B[tb] --> E[sim]
150
+ E --> F[test1]
151
+ E --> G[test2]
152
+ E --> H[test3]
153
+
154
+ Our task graph now looks like the above. Our build tasks are sequential,
155
+ while our test tasks only depend on the simulation image being
156
+ up-to-date, and and can execute concurrently.
157
+
158
+ ## Dataflow
159
+
160
+ What ties all the tasks above together is dependency-based dataflow.
161
+
162
+ .. code-block:: YAML
163
+
164
+ - name: tb
165
+ uses: std.Fileset
166
+ needs: [rtl]
167
+ with:
168
+ base: "tb"
169
+ include: "*.sv"
170
+
171
+ - name: sim
172
+ uses: hdl.sim.SimImage
173
+ needs: [rtl, tb]
174
+
175
+ When the `sim` task places dependencies on the `rtl` and `tb`
176
+ tasks, it receives the output from those tasks as input. In
177
+ this case, that means that the simulation-image compilation
178
+ task has a list of all of the source files that it needs to
179
+ compile. The `sim` task also produces an output, which contains
180
+ a reference to the directory where the simulation image resides.
181
+ The `test` tasks use this input to locate the simulation image.
182
+
183
+
184
+
185
+
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
 
6
6
  [project]
7
7
  name = "dv-flow-mgr"
8
- version = "0.0.1.12750690879a1"
8
+ version = "0.0.1.12761553329a1"
9
9
  dependencies = [
10
10
  "pyyaml",
11
11
  "toposort",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.12750690879a1
3
+ Version: 0.0.1.12761553329a1
4
4
  Summary: DV Flow Manager is a build system for silicon design
5
5
  Author-email: Matthew Ballance <matt.ballance@gmail.com>
6
6
  License: Apache License
@@ -12,6 +12,7 @@ docs/Stages.md
12
12
  docs/TypesAndDefs.md
13
13
  docs/conf.py
14
14
  docs/index.rst
15
+ docs/intro.rst
15
16
  docs/quickstart.rst
16
17
  docs/reference.rst
17
18
  src/dv_flow_mgr/__init__.py