Spelling corrections
Signed-off-by: Krzysztof Boronski <kboronski@antmicro.com>
This commit is contained in:
parent
3f5202d2ba
commit
080a59884a
|
@ -11,17 +11,17 @@ For more detailed, up-to-date information about the code, refer to the pydoc doc
|
||||||
|
|
||||||
## Project's structure
|
## Project's structure
|
||||||
|
|
||||||
* `__init__.py` contains the logic and entrypoint of the build system
|
* `__init__.py` contains the logic and entry point of the build system
|
||||||
* `argparser.py` contains boring code for CLI interface
|
* `argparser.py` contains boring code for CLI interface
|
||||||
* `cache.py` contains code needed for tracking modifications in the project.
|
* `cache.py` contains code needed for tracking modifications in the project.
|
||||||
* `common.py` contains code shared by the main utility and the modules
|
* `common.py` contains code shared by the main utility and the modules
|
||||||
* `flow_config.py` contains code for reading and accessing flow definitions and configurations
|
* `flow_config.py` contains code for reading and accessing flow definitions and configurations
|
||||||
* `module_inspector.py` contains utilities for inpecting I/O of modules
|
* `module_inspector.py` contains utilities for inspecting I/O of modules
|
||||||
* `module_runner.py` contains code required to load modules at runtime
|
* `module_runner.py` contains code required to load modules at run-time
|
||||||
* `module.py` contains definitions required for writing and using f4pga modules
|
* `module.py` contains definitions required for writing and using f4pga modules
|
||||||
* `part_db.json` contains mappings from part names to platform names
|
* `part_db.json` contains mappings from part names to platform names
|
||||||
* `setup.py` contains a package installation script
|
* `setup.py` contains a package installation script
|
||||||
* `stage.py` contains classes relevant to stage represetation
|
* `stage.py` contains classes relevant to stage representation
|
||||||
* `modules` contains loadable modules
|
* `modules` contains loadable modules
|
||||||
* `platforms` contains platform flow definitions
|
* `platforms` contains platform flow definitions
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ _DFS_ approach to invoke modules and check their inputs and outputs.
|
||||||
### Modification tracking
|
### Modification tracking
|
||||||
|
|
||||||
Modification tracking is done by taking, comparing and keeping track of `adler32`
|
Modification tracking is done by taking, comparing and keeping track of `adler32`
|
||||||
hashes of all dependencies. Each dependency has a set of hashes associted with it.
|
hashes of all dependencies. Each dependency has a set of hashes associated with it.
|
||||||
The reason for having multiple hashes is that a dependency may have multiple
|
The reason for having multiple hashes is that a dependency may have multiple
|
||||||
"_consumers_", ie. _stages_ which take it as input. Each hash is associated with
|
"_consumers_", ie. _stages_ which take it as input. Each hash is associated with
|
||||||
particular consumer. This is necessary, because the system tries to avoid rebuilds
|
particular consumer. This is necessary, because the system tries to avoid rebuilds
|
||||||
|
@ -67,9 +67,9 @@ _f4pga_ exposes some data to the user as well as reads some using internal
|
||||||
environmental variables. These can be referenced by users in
|
environmental variables. These can be referenced by users in
|
||||||
_platform flow definitions_ and _project flow configurations_ using the
|
_platform flow definitions_ and _project flow configurations_ using the
|
||||||
`${variable_name}` syntax when defining values. They can also be read inside
|
`${variable_name}` syntax when defining values. They can also be read inside
|
||||||
_f4pga modules_ by accesing the `ctx.values` namespace.
|
_f4pga modules_ by accessing the `ctx.values` namespace.
|
||||||
|
|
||||||
The core of tis system is the `ResolutionEnvironemt` class which can be found
|
The core of its system is the `ResolutionEnvironemt` class which can be found
|
||||||
inside the `common` module.
|
inside the `common` module.
|
||||||
|
|
||||||
### Installation
|
### Installation
|
||||||
|
@ -84,18 +84,18 @@ Check `CMakeLists.txt`.
|
||||||
|
|
||||||
* Force "_on-demand_" outputs if they are required by another stage.
|
* Force "_on-demand_" outputs if they are required by another stage.
|
||||||
This may require redesigning the "on-demand" feature, which currently works
|
This may require redesigning the "on-demand" feature, which currently works
|
||||||
by producing a dependency if and only if the user explicitely provides the
|
by producing a dependency if and only if the user explicitly provides the
|
||||||
path. Otherwise the path is unknown.
|
path. Otherwise the path is unknown.
|
||||||
|
|
||||||
* Make commenting style consistent
|
* Make commenting style consistent
|
||||||
|
|
||||||
* Document writing flow defintions
|
* Document writing flow definitions
|
||||||
|
|
||||||
* Extend the metadata system for modules, perhaps make it easier to use.
|
* Extend the metadata system for modules, perhaps make it easier to use.
|
||||||
|
|
||||||
* Add missing metadata for module targets.
|
* Add missing metadata for module targets.
|
||||||
|
|
||||||
* (_suggestion_) Generate platform defintions using CMake.
|
* (_suggestion_) Generate platform definitions using CMake.
|
||||||
|
|
||||||
### Out of the current scope
|
### Out of the current scope
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@ If you want to create a new project, it's highly recommended that you read this
|
||||||
|
|
||||||
### f4pga
|
### f4pga
|
||||||
|
|
||||||
`f4pga` is a modular build system designed to handle various _Verilog-to-bitsream_ flows for FPGAs.
|
`f4pga` is a modular build system designed to handle various _Verilog-to-bitstream_ flows for FPGAs.
|
||||||
It works by wrapping the necessary tools in Python, which are called *f4pga modules*.
|
It works by wrapping the necessary tools in Python, which are called *f4pga modules*.
|
||||||
Modules are then referenced in *platform flow definition* files, together with configuration specific for a given
|
Modules are then referenced in *platform flow definition* files, together with configuration specific for a given
|
||||||
platform.
|
platform.
|
||||||
|
@ -55,7 +55,7 @@ _modules_ and f4pga _modules_) is a Python script that wraps a tool used within
|
||||||
The main purpose of the wrappers is to provide a unified interface for `f4pga` to use and to configure the tool,
|
The main purpose of the wrappers is to provide a unified interface for `f4pga` to use and to configure the tool,
|
||||||
as well as provide information about files required and produced by the tool.
|
as well as provide information about files required and produced by the tool.
|
||||||
|
|
||||||
### Dependecies
|
### Dependencies
|
||||||
|
|
||||||
A *dependency* is any file, directory or a list of such that a *module* takes as its input or produces on its output.
|
A *dependency* is any file, directory or a list of such that a *module* takes as its input or produces on its output.
|
||||||
|
|
||||||
|
@ -83,10 +83,10 @@ a stage, there's a `--nocache` option that treats the `.symbicache` file as if i
|
||||||
|
|
||||||
### Resolution
|
### Resolution
|
||||||
|
|
||||||
A *dependency* is said to be *resolved* if it meets one of the following critereia:
|
A *dependency* is said to be *resolved* if it meets one of the following criteria:
|
||||||
|
|
||||||
* it exists on persistent storage and its hash matches the one stored in .symbicache
|
* it exists on persistent storage and its hash matches the one stored in .symbicache
|
||||||
* there exists such *flow* that all of the dependieces of its modules are *resolved* and it produces the *dependency* in
|
* there exists such *flow* that all of the dependencies of its modules are *resolved* and it produces the *dependency* in
|
||||||
question.
|
question.
|
||||||
|
|
||||||
### Platform's flow definition
|
### Platform's flow definition
|
||||||
|
@ -99,12 +99,12 @@ the modules can reference.
|
||||||
In case of some modules it may also define a set of parameters used during their construction.
|
In case of some modules it may also define a set of parameters used during their construction.
|
||||||
`mkdirs` module uses that to allow production of of multiple directories as separate dependencies.
|
`mkdirs` module uses that to allow production of of multiple directories as separate dependencies.
|
||||||
This however is an experimental feature which possibly will be removed in favor of having multiple instances of the same
|
This however is an experimental feature which possibly will be removed in favor of having multiple instances of the same
|
||||||
module with renameable ouputs.
|
module with renameable outputs.
|
||||||
|
|
||||||
Not all *dependencies** have to be *resolved* at this stage, a *platform's flow definition* for example won't be able to
|
Not all *dependencies** have to be *resolved* at this stage, a *platform's flow definition* for example won't be able to
|
||||||
provide a list of source files needed in a *flow*.
|
provide a list of source files needed in a *flow*.
|
||||||
|
|
||||||
### Projects's flow configuration
|
### Project's flow configuration
|
||||||
|
|
||||||
Similarly to *platform flow definition*, *Projects flow configuration* is a _JSON_ that is used to configure *modules*. There are however a couple differences here and there.
|
Similarly to *platform flow definition*, *Projects flow configuration* is a _JSON_ that is used to configure *modules*. There are however a couple differences here and there.
|
||||||
|
|
||||||
|
@ -157,10 +157,10 @@ For example, let's consider the following *projects flow configuration (flow.jso
|
||||||
```
|
```
|
||||||
|
|
||||||
It specifies list of paths to Verilog source files as `sources` dependency.
|
It specifies list of paths to Verilog source files as `sources` dependency.
|
||||||
Similarily it also provides an `XDC` file with constrains (`xdc` dependency).
|
Similarly it also provides an `XDC` file with constrains (`xdc` dependency).
|
||||||
|
|
||||||
It also names a path for synthesis and logs (`synth_log`, `pack_log`).
|
It also names a path for synthesis and logs (`synth_log`, `pack_log`).
|
||||||
These two are optional on-demand outputs, meaning they won't be produces unless their paths are explicitely set.
|
These two are optional on-demand outputs, meaning they won't be produces unless their paths are explicitly set.
|
||||||
|
|
||||||
`top` value is set to in order to specify the name of top Verilog module, which is required during synthesis.
|
`top` value is set to in order to specify the name of top Verilog module, which is required during synthesis.
|
||||||
|
|
||||||
|
@ -208,20 +208,20 @@ as strings unless the follow one of the following format:
|
||||||
* `[item1,item2,item3,...]` - this is a list of strings
|
* `[item1,item2,item3,...]` - this is a list of strings
|
||||||
* `{key1:value1,key2:value2,key3:value3,...}` - this is a dictionary
|
* `{key1:value1,key2:value2,key3:value3,...}` - this is a dictionary
|
||||||
|
|
||||||
Nesting structures is curently unsupported in CLI.
|
Nesting structures is currently unsupported in CLI.
|
||||||
|
|
||||||
### Pretend mode
|
### Pretend mode
|
||||||
|
|
||||||
You can also add a `--pretend` (`-P`) option if you just want to see the results of dependency resolution for a
|
You can also add a `--pretend` (`-P`) option if you just want to see the results of dependency resolution for a
|
||||||
specified target without building it.
|
specified target without building it.
|
||||||
This is useful when you just want to know what files will be generated and where wilh they be stored.
|
This is useful when you just want to know what files will be generated and where will they be stored.
|
||||||
|
|
||||||
### Info mode
|
### Info mode
|
||||||
|
|
||||||
Modules have the ability to include description to the dependencies they produce.
|
Modules have the ability to include description to the dependencies they produce.
|
||||||
|
|
||||||
Running `f4pga` with `--info` (`-i`) flag allows youn to see descriptions of these dependencies.
|
Running `f4pga` with `--info` (`-i`) flag allows you to see descriptions of these dependencies.
|
||||||
This option doesn't require a target to be specified, but you still have to provuide a flow configuration and platform
|
This option doesn't require a target to be specified, but you still have to provide a flow configuration and platform
|
||||||
name.
|
name.
|
||||||
|
|
||||||
This is still an experimental option, most targets currently lack descriptions and no information whether the output is
|
This is still an experimental option, most targets currently lack descriptions and no information whether the output is
|
||||||
|
@ -258,23 +258,23 @@ This is only a snippet of the entire output.
|
||||||
|
|
||||||
| long | short | arguments | description |
|
| long | short | arguments | description |
|
||||||
|-----------|:-----:|--------------------------|----------------------------------------------------------------------------|
|
|-----------|:-----:|--------------------------|----------------------------------------------------------------------------|
|
||||||
| --verobse | -v | - | Constrol verbosity level. 0 for no verbose output. 2 for maximum verbisity |
|
| --verbose | -v | - | Control verbosity level. 0 for no verbose output. 2 for maximum verbosity |
|
||||||
| --silent | -s | - | Surpress any output |
|
| --silent | -s | - | Suppress any output |
|
||||||
|
|
||||||
### Summary of all available subcommands
|
### Summary of all available sub-commands
|
||||||
|
|
||||||
| name | description |
|
| name | description |
|
||||||
|---------|-----------------------------|
|
|---------|-----------------------------|
|
||||||
| build | Build a project |
|
| build | Build a project |
|
||||||
| showd | Print value of a dependency
|
| showd | Print value of a dependency
|
||||||
|
|
||||||
### Summary of all options available for `build` subcommand
|
### Summary of all options available for `build` sub-command
|
||||||
|
|
||||||
| long | short | arguments | description |
|
| long | short | arguments | description |
|
||||||
|-------------|:-----:|--------------------------|---------------------------------------------------------|
|
|-------------|:-----:|--------------------------|---------------------------------------------------------|
|
||||||
| --flow | -f | flow configuration file | Use flow configuration file |
|
| --flow | -f | flow configuration file | Use flow configuration file |
|
||||||
| --platform | | platform name | Specify target platform name (eg. x7a100t) |
|
| --platform | | platform name | Specify target platform name (eg. x7a100t) |
|
||||||
| --part | -p | part name | Speify target platform by part name |
|
| --part | -p | part name | Specify target platform by part name |
|
||||||
| --target | -t | target dependency name | Specify target to produce |
|
| --target | -t | target dependency name | Specify target to produce |
|
||||||
| --info | -i | - | Display information about available targets |
|
| --info | -i | - | Display information about available targets |
|
||||||
| --pretend | -P | - | Resolve dependencies without executing the flow |
|
| --pretend | -P | - | Resolve dependencies without executing the flow |
|
||||||
|
@ -283,7 +283,7 @@ This is only a snippet of the entire output.
|
||||||
| --dep | -D | dependency_name=pathexpr | Add a dependency to configuration |
|
| --dep | -D | dependency_name=pathexpr | Add a dependency to configuration |
|
||||||
| --val | -V | value_name=valueexpr | Add a value to configuration |
|
| --val | -V | value_name=valueexpr | Add a value to configuration |
|
||||||
|
|
||||||
### Summary of all options available for `showd` subcommand
|
### Summary of all options available for `showd` sub-command
|
||||||
|
|
||||||
| long | short | arguments | description |
|
| long | short | arguments | description |
|
||||||
|-------------|:-----:|--------------------------|--------------------------------------------------------------------------|
|
|-------------|:-----:|--------------------------|--------------------------------------------------------------------------|
|
||||||
|
@ -320,7 +320,7 @@ Project status:
|
||||||
f4pga: DONE
|
f4pga: DONE
|
||||||
```
|
```
|
||||||
|
|
||||||
The letters in the boxes describe the status of a dependency which's name is next to the box.
|
The letters in the boxes describe the status of a dependency whose name is next to the box.
|
||||||
|
|
||||||
* **X** - dependency unresolved.
|
* **X** - dependency unresolved.
|
||||||
Dependency is not present or cannot be produced.
|
Dependency is not present or cannot be produced.
|
||||||
|
@ -339,11 +339,11 @@ The letters in the boxes describe the status of a dependency which's name is nex
|
||||||
This should be fixed in the future.
|
This should be fixed in the future.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
* **S** - depenendency not present, resolved.
|
* **S** - dependency not present, resolved.
|
||||||
This dependency is not currently available on the persistent storage, however it will be produced within flow's
|
This dependency is not currently available on the persistent storage, however it will be produced within flow's
|
||||||
execution.
|
execution.
|
||||||
|
|
||||||
* **R** - depenendency present, resolved, requires rebuild.
|
* **R** - dependency present, resolved, requires rebuild.
|
||||||
This dependency is currently available on the persistent storage, however it has to be rebuilt due to the changes in
|
This dependency is currently available on the persistent storage, however it has to be rebuilt due to the changes in
|
||||||
the project.
|
the project.
|
||||||
|
|
||||||
|
@ -356,11 +356,11 @@ Additional info about a dependency will be displayed next to its name after a co
|
||||||
* In case of dependencies which do not require execution of any modules, only a path or list of paths to
|
* In case of dependencies which do not require execution of any modules, only a path or list of paths to
|
||||||
file(s)/directory(ies) that will be displayed.
|
file(s)/directory(ies) that will be displayed.
|
||||||
|
|
||||||
* In case of unresolved dependencies (**X**), which are never produced by any module, a text sying "`MISSING`" will be
|
* In case of unresolved dependencies (**X**), which are never produced by any module, a text saying "`MISSING`" will be
|
||||||
displayed.
|
displayed.
|
||||||
|
|
||||||
In the example above file `counter.v` has been modified and is now marked as "**N**".
|
In the example above file `counter.v` has been modified and is now marked as "**N**".
|
||||||
This causes a bunch of other dependencies to be reqbuilt ("**R**").
|
This causes a bunch of other dependencies to be rebuilt ("**R**").
|
||||||
`build_dir` and `xdc` were already present, so they are marked as "**O**".
|
`build_dir` and `xdc` were already present, so they are marked as "**O**".
|
||||||
|
|
||||||
## Common targets and values
|
## Common targets and values
|
||||||
|
@ -379,31 +379,31 @@ Below are lists of the target and value names along with their meanings.
|
||||||
|
|
||||||
### Available in most flows
|
### Available in most flows
|
||||||
|
|
||||||
| Target name | list | Description |
|
| Target name | list | Description |
|
||||||
|-------------|:----:|-------------|
|
|--------------|:----:|-----------------------------------------------------------------|
|
||||||
| `eblif` | no | Extended blif file |
|
| `eblif` | no | Extended blif file |
|
||||||
| `bitstream` | no | Bitstream |
|
| `bitstream` | no | Bitstream |
|
||||||
| `net` | no | Netlist |
|
| `net` | no | Netlist |
|
||||||
| `fasm` | no | Final FPGA Assembly |
|
| `fasm` | no | Final FPGA Assembly |
|
||||||
| `fasm_extra` | no | Additional FPGA assembly that may be generated during synthesis |
|
| `fasm_extra` | no | Additional FPGA assembly that may be generated during synthesis |
|
||||||
| `build_dir` | no | A directory to put the output files in |
|
| `build_dir` | no | A directory to put the output files in |
|
||||||
|
|
||||||
### Built-in values
|
### Built-in values
|
||||||
|
|
||||||
| Value name | type | Description |
|
| Value name | type | Description |
|
||||||
|------------|------|-------------|
|
|-----------------|----------|---------------------------------------------------|
|
||||||
| `shareDir` | `string` | Path to f4pga's installation "share" directory |
|
| `shareDir` | `string` | Path to f4pga's installation "share" directory |
|
||||||
| `python3` | `string` | Path to Python 3 executable |
|
| `python3` | `string` | Path to Python 3 executable |
|
||||||
| `noisyWarnings` | `string` | Path to noisy warnings log (should be deprecated) |
|
| `noisyWarnings` | `string` | Path to noisy warnings log (should be deprecated) |
|
||||||
| `prjxray_db` | `string` | Path to Project X-Ray database |
|
| `prjxray_db` | `string` | Path to Project X-Ray database |
|
||||||
|
|
||||||
### Used in flow definitions
|
### Used in flow definitions
|
||||||
|
|
||||||
| Value name | type | Description |
|
| Value name | type | Description |
|
||||||
|------------|------|-------------|
|
|---------------|------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
| `top` | `string` | Top module name |
|
| `top` | `string` | Top module name |
|
||||||
| `build_dir` | `string` | Path to build directory (should be optional) |
|
| `build_dir` | `string` | Path to build directory (should be optional) |
|
||||||
| `device` | `string` | Name of the device |
|
| `device` | `string` | Name of the device |
|
||||||
| `vpr_options` | `dict[string -> string \| number]` | Named ptions passed to VPR. No `--` prefix included. |
|
| `vpr_options` | `dict[string -> string \| number]` | Named options passed to VPR. No `--` prefix included. |
|
||||||
| `part_name` | `string` | Name of the chip used. The distinction between `device` and `part_name` is ambiguous at the moment and should be addressed in the future. |
|
| `part_name` | `string` | Name of the chip used. The distinction between `device` and `part_name` is ambiguous at the moment and should be addressed in the future. |
|
||||||
| `arch_def` | `string` | Path to an XML file containing architecture definition. |
|
| `arch_def` | `string` | Path to an XML file containing architecture definition. |
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# fasm
|
# fasm
|
||||||
|
|
||||||
The _fasm_ module generates FPGA assebly using `genfasm` (VPR-only).
|
The _fasm_ module generates FPGA assembly using `genfasm` (VPR-only).
|
||||||
|
|
||||||
The module should guarantee the following outputs:
|
The module should guarantee the following outputs:
|
||||||
* `fasm`
|
* `fasm`
|
||||||
|
@ -14,5 +14,5 @@ The setup of the synth module follows the following specifications:
|
||||||
|
|
||||||
The `fasm` module accepts the following values:
|
The `fasm` module accepts the following values:
|
||||||
|
|
||||||
* `pnr_corner` (string, optional): PnR conrenr to use. Relevant only for Quicklogic's
|
* `pnr_corner` (string, optional): PnR corner to use. Relevant only for Quicklogic's
|
||||||
eFPGAs.
|
eFPGAs.
|
|
@ -19,8 +19,8 @@ Parameters are everything when it comes to this module:
|
||||||
* `file` (string, required if `mode` is "file"): Name of the file generated by the
|
* `file` (string, required if `mode` is "file"): Name of the file generated by the
|
||||||
script.
|
script.
|
||||||
* `target` (string, required): Default name of the file of the generated
|
* `target` (string, required): Default name of the file of the generated
|
||||||
dependency. You can use all values available durng map_io stage. Each input
|
dependency. You can use all values available during map_io stage. Each input
|
||||||
dependency alsogets two extra values associated with it:
|
dependency also gets two extra values associated with it:
|
||||||
`:dependency_name[noext]`, which contains the path to the dependency the
|
`:dependency_name[noext]`, which contains the path to the dependency the
|
||||||
extension with anything after last "." removed and `:dependency_name[dir]` which
|
extension with anything after last "." removed and `:dependency_name[dir]` which
|
||||||
contains directory paths of the dependency. This is useful for deriving an output
|
contains directory paths of the dependency. This is useful for deriving an output
|
||||||
|
|
|
@ -8,7 +8,7 @@ modules.
|
||||||
|
|
||||||
### Configuration interface:
|
### Configuration interface:
|
||||||
|
|
||||||
Modules are configured through an internal API by _**sfbuf4pgaild**_.
|
Modules are configured through an internal API by _**f4pga**_.
|
||||||
The basic requirement for a module script is to expose a class with `Module`
|
The basic requirement for a module script is to expose a class with `Module`
|
||||||
interface.
|
interface.
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ _**f4pga**_ reads its configuration from two different sources:
|
||||||
and **project's flow configuration**, which is a set of configuration options provided by the user
|
and **project's flow configuration**, which is a set of configuration options provided by the user
|
||||||
through a JSON file or CLI interface.
|
through a JSON file or CLI interface.
|
||||||
|
|
||||||
Thosse sources contain snippets of _module configurations_.
|
Those sources contain snippets of _module configurations_.
|
||||||
|
|
||||||
A _module configuration_ is a structure with the following fields:
|
A _module configuration_ is a structure with the following fields:
|
||||||
|
|
||||||
|
@ -37,12 +37,12 @@ A _module configuration_ is a structure with the following fields:
|
||||||
In case of **platform's flow definition**, a `values` dictionary can be defined
|
In case of **platform's flow definition**, a `values` dictionary can be defined
|
||||||
globally and the values defined there will be passed to every module's config.
|
globally and the values defined there will be passed to every module's config.
|
||||||
|
|
||||||
Those values can be overriden per-module through `module_options` dictionary.
|
Those values can be overridden per-module through `module_options` dictionary.
|
||||||
|
|
||||||
Parameters used during module's construction can also be defined in `module_options`
|
Parameters used during module's construction can also be defined in `module_options`
|
||||||
as `params` (those are not a part of _module configuration_, instead they are used
|
as `params` (those are not a part of _module configuration_, instead they are used
|
||||||
during the actual construction of a module instance, before it declares any of its
|
during the actual construction of a module instance, before it declares any of its
|
||||||
input/outputs etc.. This is typically used to acieve some parametrization over module's
|
input/outputs etc.. This is typically used to achieve some parametrization over module's
|
||||||
I/O).
|
I/O).
|
||||||
|
|
||||||
Defining dictionaries for `takes` and `produces` is currently disallowed within
|
Defining dictionaries for `takes` and `produces` is currently disallowed within
|
||||||
|
@ -65,12 +65,12 @@ Unlike **platform's flow definition**, **project's flow configuration** may cont
|
||||||
names to actual paths. Most dependencies can have their paths resolved implicitly
|
names to actual paths. Most dependencies can have their paths resolved implicitly
|
||||||
without the need to provide explicit paths, which is a mechanism that is described
|
without the need to provide explicit paths, which is a mechanism that is described
|
||||||
in a later section of this document. However some dependencies must be provided
|
in a later section of this document. However some dependencies must be provided
|
||||||
explicitelly, eg. paths to project's verilog source files. It should be noted that
|
explicitly, eg. paths to project's Verilog source files. It should be noted that
|
||||||
depending on the flow definition and the dependency in question, the path does not
|
depending on the flow definition and the dependency in question, the path does not
|
||||||
necessarily have to point to an already existing file. If the dependency is a
|
necessarily have to point to an already existing file. If the dependency is a
|
||||||
product of a module within the flow, the path assigned to it will be used
|
product of a module within the flow, the path assigned to it will be used
|
||||||
by the module to build that dependency. This is also used to in case of _on-demand_
|
by the module to build that dependency. This is also used to in case of _on-demand_
|
||||||
dependencies, which won't be produced unless the user explicitelly provides a path
|
dependencies, which won't be produced unless the user explicitly provides a path
|
||||||
for them.
|
for them.
|
||||||
|
|
||||||
**project's flow configuration** cannot specify `params` for modules and does not
|
**project's flow configuration** cannot specify `params` for modules and does not
|
||||||
|
@ -85,11 +85,11 @@ overload the `dependecies` and `values` defined in a global scope of
|
||||||
is treated as a _stage-specific-configuration_. The key is a name of a stage within
|
is treated as a _stage-specific-configuration_. The key is a name of a stage within
|
||||||
a flow for the specified platform and the values are dicts which may contain
|
a flow for the specified platform and the values are dicts which may contain
|
||||||
`dependencies` and `values` fields that overload `dependencies` and `values`
|
`dependencies` and `values` fields that overload `dependencies` and `values`
|
||||||
repespectively, locally for the stage. Additionally a `default_target` field can be
|
respectively, locally for the stage. Additionally a `default_target` field can be
|
||||||
provided to specify a default target to built when the user does not specify it throgh
|
provided to specify a default target to built when the user does not specify it through
|
||||||
a CLI inteface.
|
a CLI interface.
|
||||||
|
|
||||||
The afromentioned _*exceptions_ are:
|
The aforementioned _*exceptions_ are:
|
||||||
|
|
||||||
* `dependencies` - dependencies shared by all platforms.
|
* `dependencies` - dependencies shared by all platforms.
|
||||||
* `values` - values shared by all platforms
|
* `values` - values shared by all platforms
|
||||||
|
@ -145,7 +145,7 @@ With the following values defined
|
||||||
```
|
```
|
||||||
|
|
||||||
Be careful when using this kind of resolution, as it's computational and memory
|
Be careful when using this kind of resolution, as it's computational and memory
|
||||||
complexity grows exponentially in ragards to the number of list variables being
|
complexity grows exponentially in regards to the number of list variables being
|
||||||
referenced, which is a rather obvious fact, but it's still worth mentioning.
|
referenced, which is a rather obvious fact, but it's still worth mentioning.
|
||||||
|
|
||||||
The variables that can be referenced within a definition/configuration fall into 3
|
The variables that can be referenced within a definition/configuration fall into 3
|
||||||
|
@ -171,7 +171,7 @@ categories:
|
||||||
|
|
||||||
### `Module` class
|
### `Module` class
|
||||||
|
|
||||||
Each nmodule is represented as a class derived from `Module` class.
|
Each module is represented as a class derived from `Module` class.
|
||||||
|
|
||||||
The class should implement the following methods:
|
The class should implement the following methods:
|
||||||
|
|
||||||
|
@ -187,7 +187,7 @@ when instantiating a module.
|
||||||
|
|
||||||
### Module's execution modes
|
### Module's execution modes
|
||||||
|
|
||||||
A module ahas essentially two execution modes:
|
A module has essentially two execution modes:
|
||||||
|
|
||||||
* _mapping_ mode
|
* _mapping_ mode
|
||||||
* _exec_ mode
|
* _exec_ mode
|
||||||
|
@ -196,7 +196,7 @@ A module ahas essentially two execution modes:
|
||||||
|
|
||||||
In _mapping_ mode the module is provided with an incomplete configuration which
|
In _mapping_ mode the module is provided with an incomplete configuration which
|
||||||
includes:
|
includes:
|
||||||
* `takes` namespace: this maps names of input dependecies to the paths of these
|
* `takes` namespace: this maps names of input dependencies to the paths of these
|
||||||
dependencies
|
dependencies
|
||||||
* `values` namespace: this maps names of variables to the values of those
|
* `values` namespace: this maps names of variables to the values of those
|
||||||
variables.
|
variables.
|
||||||
|
@ -218,7 +218,7 @@ In _exec_ mode the module does the actual work.
|
||||||
|
|
||||||
The configuration passed into this mode is full and it includes:
|
The configuration passed into this mode is full and it includes:
|
||||||
|
|
||||||
* `takes` namespace: this maps names of input dependecies to the paths of these
|
* `takes` namespace: this maps names of input dependencies to the paths of these
|
||||||
dependencies
|
dependencies
|
||||||
* `values` namespace: this maps names of variables to the values of those
|
* `values` namespace: this maps names of variables to the values of those
|
||||||
variables.
|
variables.
|
||||||
|
@ -235,7 +235,7 @@ described in `outputs` should be present.
|
||||||
In the the `__init__` method of module's class, the following fields should be
|
In the the `__init__` method of module's class, the following fields should be
|
||||||
set:
|
set:
|
||||||
|
|
||||||
* `takes` - a list of symbolic dependency names for dependencies used byb the module
|
* `takes` - a list of symbolic dependency names for dependencies used by the module
|
||||||
* `produces` - a list of symbolic dependencies names for dependencies produced
|
* `produces` - a list of symbolic dependencies names for dependencies produced
|
||||||
by the module.
|
by the module.
|
||||||
* `values` - a list of names given to the variables used withing the module
|
* `values` - a list of names given to the variables used withing the module
|
||||||
|
@ -251,9 +251,9 @@ ways:
|
||||||
|
|
||||||
* '`?`' _suffix_
|
* '`?`' _suffix_
|
||||||
* In `takes` - the dependency is not necessary for the module to execute
|
* In `takes` - the dependency is not necessary for the module to execute
|
||||||
* In `produces` - the dependency may be produceed, but it is not guaranteed.
|
* In `produces` - the dependency may be produced, but it is not guaranteed.
|
||||||
* In `values` the value is not required for the module to execute.
|
* In `values` the value is not required for the module to execute.
|
||||||
Refferreing to it through `ModuleContext.values.value_name` won't raise an
|
Referring to it through `ModuleContext.values.value_name` won't raise an
|
||||||
exception if the value is not present, instead `None` will be returned.
|
exception if the value is not present, instead `None` will be returned.
|
||||||
* '`!`' _suffix_
|
* '`!`' _suffix_
|
||||||
* In `produces` - the dependency is going to be produced only if the user
|
* In `produces` - the dependency is going to be produced only if the user
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# io_rename
|
# io_rename
|
||||||
|
|
||||||
This module provides a way to rename (ie. change) dependencies and values of an
|
This module provides a way to rename (ie. change) dependencies and values of an
|
||||||
instance of a different module. It wraps another, module whoose name is specified in `params.module` and changes the names of the dependencies and values it relies on.
|
instance of a different module. It wraps another, module whose name is specified in `params.module` and changes the names of the dependencies and values it relies on.
|
||||||
|
|
||||||
## Parameters
|
## Parameters
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ Not specifying a mapping for a given entry will leave it with its original name.
|
||||||
|
|
||||||
## Values
|
## Values
|
||||||
|
|
||||||
All values specified for this modules will be accessible by tyhe wrapped module.
|
All values specified for this modules will be accessible by the wrapped module.
|
||||||
|
|
||||||
## Extra notes
|
## Extra notes
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
# mkdirs
|
# mkdirs
|
||||||
|
|
||||||
This modules creates directiories specified by the author of flow definition
|
This modules creates directories specified by the author of flow definition
|
||||||
as its targets..
|
as its targets..
|
||||||
|
|
||||||
## Parameters
|
## Parameters
|
||||||
|
|
||||||
Each key serves as aname of a directory to becreated, while the value is the
|
Each key serves as a name of a directory to be created, while the value is the
|
||||||
path for that directory.
|
path for that directory.
|
|
@ -12,9 +12,9 @@ The module should guarantee the following outputs:
|
||||||
For detailed information about these targets, please refer to
|
For detailed information about these targets, please refer to
|
||||||
`docs/common targets and variables.md`
|
`docs/common targets and variables.md`
|
||||||
|
|
||||||
What files and how are they generated is dependendent on TCL scripts executed
|
What files and how are they generated is dependent on TCL scripts executed
|
||||||
withing YOSYS and the script vary depending on the target platform. Due to this
|
withing YOSYS and the script vary depending on the target platform. Due to this
|
||||||
design choice it is required for the author of the flow defnition to parametrize
|
design choice it is required for the author of the flow definition to parameterize
|
||||||
the `synth` module in a way that will **GUARANTEE** the targets mentioned above
|
the `synth` module in a way that will **GUARANTEE** the targets mentioned above
|
||||||
will be generated upon a successful YOSYS run.
|
will be generated upon a successful YOSYS run.
|
||||||
|
|
||||||
|
@ -31,11 +31,11 @@ The list should specify additional targets that will be generated
|
||||||
The `synth` module requires the following values:
|
The `synth` module requires the following values:
|
||||||
|
|
||||||
* `tcl_scripts` (string, required): A path to a directory containing `synth.tcl`
|
* `tcl_scripts` (string, required): A path to a directory containing `synth.tcl`
|
||||||
and `conv.tcl` scripts that wiull be used by YOSYS.
|
and `conv.tcl` scripts that will be used by YOSYS.
|
||||||
* `read_verilog_args` (list[string | number], optional) - If specified, the verilog
|
* `read_verilog_args` (list[string | number], optional) - If specified, the Verilog
|
||||||
sources will be read using the `read_verilog` procedure with options contained in
|
sources will be read using the `read_verilog` procedure with options contained in
|
||||||
this value.
|
this value.
|
||||||
* `yosys_tcl_env` (dict[string -> string | list[string], required) - A mapping that
|
* `yosys_tcl_env` (dict[string -> string | list[string], required) - A mapping that
|
||||||
defines environmental variables that will be used within the TCL scripts. This
|
defines environmental variables that will be used within the TCL scripts. This
|
||||||
should contain the references to module's inputs and outputs in order to gurantee
|
should contain the references to module's inputs and outputs in order to guarantee
|
||||||
the generation of the desired targets.
|
the generation of the desired targets.
|
||||||
|
|
Loading…
Reference in New Issue