forked from tanchou/Verilog
23 lines
2.4 KiB
Markdown
23 lines
2.4 KiB
Markdown
# Aim of the project
|
|
|
|
This project gives an example of the desired structure for a *Verilog* project. It is composed of the following folders:
|
|
|
|
- build : Contains (tcl) scripts to build a Vivado or other project out of this arborescence.
|
|
- constraints : Contains the constraints (if needed) for the project.
|
|
- ip : Contains external dependencies of the project. This folder is used for commodity only in order to simplify test and verification scripts. Its contents should be populated by a build script (or manually copied in some cases). Each subdirectory corresponds to a dependency in the same format as the current document. For old projects, at least *src* directory should be present. Normally, it should not be under version control.
|
|
- runs : Contains all temporary files built by the runs of different tools (e.g. simulation, verification etc.). It might have a substructure, depending on the tool. It **should not** be under version control.
|
|
- scripts : Contains different scripts related to the project. Typical examples - launch simulation or verification. The scripts might be in shell, makefile, tcl etc. A preference for tcl should be considered.
|
|
- src : Contains source files for the project. It has subdirectories corresponding to the HDL language used (Verilog, VHDL, Migen, Amaranth, etc)
|
|
- tests : Contains testbenches for the project. It has subdirectories corresponding to the used tool (cocotb, verilog, verilator, etc). For *python*-based tools, the corresponding structure should allow test discovery using pytest (file names containing *test* and functions containing *test*).
|
|
- verification : Contains scripts and files for formal verification.
|
|
- other folders that are related to the editor and that probably should not be under version control.
|
|
|
|
The project should be under version control (e.g. *git*) and have corresponding *.gitignore* specifications.
|
|
|
|
The root of the project shall only contain:
|
|
|
|
- a README.md file that gives the description of the project.
|
|
- *.gitignore* or similar files, related to the version control.
|
|
- a *Makefile* or a launcher script named *project* that have arguments allowing to run different tools. If present, it must contain at least the argument *clean* that will delete all elements from the *run* folder (maybe also all non-vcs tracked files).
|
|
- Editor-related files, e.g. *workspace.code-workspace* for VSCode. These files should not be under version control.
|