This project is based on the hello_world_small design example for the Intel Cyclone 10 LP development board kit that can be found here.
The main purpose of this project is to demonstrate a possible structure and workflow with 2 main advantages:
- All build products of all components are ignored by git. This includes:
- Quartus project and outputs
- QSys outputs
- NIOS project and outputs
- In order to build everything from scratch, one has to only type
makeinto his terminal. This is also sensitive to source code changes and is done in an incremental fashion.
The environment used in the development of this project is as follows:
- Lubuntu 17.10
- Over Windows 10 VirtualBox 5.2.0
- Note: This might not work out of the box on Windows, since some Quartus command line tools didn't work as expected.
- Quartus 18.0 Lite
- The PATH variable was updated with the following directories:
{QUATUS_INSTALLATION_PATH}/quartus/bin{QUATUS_INSTALLATION_PATH}/quartus/sopc_builder/bin{QUATUS_INSTALLATION_PATH}/nios2eds/bin{QUATUS_INSTALLATION_PATH}/nios2eds/sdk2/bin
- For burning the FPGA the USB blaster drivers have to be installed as well. This could be done following the instructions here.
- The PATH variable was updated with the following directories:
- GNU Make 4.1
- python 2.7.14
The project is built in the following tree:
|-- build - Non Version Controlled Files (Generated)
|-- nios - NIOS Projects (BSP + APP)
|-- pnr - Quartus Project
|-- qsys - QSys Generated Files
|-- src - Version Controlled Files (Sources)
|-- nios - C Source Code
|-- pnr - Quartus Project Management
|-- burning - FPGA Burning Capability via Makefile
|-- project - TCL and python for project creation
|-- qsys - QSys Source
|-- rtl - RTL Source Files
|-- .gitignore - .gitignore of the repository
|-- Makefile - Main Makefile
|-- README.md - This File
In order to build the project, use the main Makefile in the root directory of the project. make, make all or make compile build everything from scratch, but don't burn to the FPGA. make burn makes sure the compilation is up to date and then burns the.sof file. make burn_only assumes the .sof file exists and is up to date.
Given below is the full list of targets. Some of them such as qsys_gen are "partial" targets, meaning they only preform part of the compilation process.
all: Same as compile.burn_only: Burns the existing.sof.burn: Callscompileand burns the.sof.compile: Compiles the Quartus project.quartus_proj: Builds the Quartus project.mem_init_generate: Creates and compiles the NIOShello_world_smalldesign example.qsys_gen: Generates the QSys output files.clean: Cleans output files of all processes.clean_all: Removes the build directory.
Every folder under the src folder (except for rtl) has a Makefile of its own that is responsible for building its outputs. In this subsection a more extensive description of each Makefile action is given:
- NIOS Makefile:
- Checks that QSys
.sopcinfofile is up to date and calls QSys Makefile if not. - Creates the
hello_world_smallsoftware example design BSP and APP projects. - Updates the APP project's Makefile to look for sources in the
src/niosdirectory recursively. - Compiles the code and generates an
.elffile that can be injected into the FPGA. - Compiles the code and generates a
.qipfile that can be compiled along with the RTL in the Quartus project.- Note: The project currently compiles the software with the RTL, and changing that reqires changing the QSys.
- Checks that QSys
- QSys Makefile:
- Generates QSys output files including the
.sopcinfoand.qipfiles.
- Generates QSys output files including the
- PNR/Project Makefile:
- Gathers RTL source files into a
.tclfile. - Creates a Quartus project.
- Imports settings using the
main.tclscript.- Global settings
- Pinout
- Source files
- Checks that QSys
.qipfile is up to date and calls QSys Makefile if not. - Checks that NIOS
.qipfile is up to date and calls NIOS Makefile if not. - Compiles the project.
- Gathers RTL source files into a
- PNR/Burning Makefile:
- Checks that the
.soffile is up to date and calls PNR/Project Makefile if not. - Burns the
.soffile to the FPGA.- There is a target called
fast_burnthat burns the image w/o rebuilding the.sof.
- There is a target called
- Note: This Makefile contains the explicit name of the cable as shown by running
jtagconfigin the variablePGM_FLAGS. This value may change depending on the environment, and so the makefile should be updated accordingly.
- Checks that the
jtagconfig
1) Cyclone 10 LP Evaluation Kit [1-1]
020F30DD 10CL025(Y|Z)/EP3C25/EP4CE22
020D10DD VTAP10