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.
 |