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