Apio Project Structure¶
Directory structure¶
An Apio project consists of a directory that contains the required project file apio.ini
and the project files. Below is an example of a minimal ICE40 project (alhambra-ii/blinky
example) which contains the project file apio.ini
, a Verilog source file blinky.v
, and the pinout constraints file pinout.pcf
, which maps symbolic pin names to pin numbers.
my-project/
├── apio.ini
├── blinky.v
└── pinout.pcf
The next example (alhambra-ii/bcd-output) is more complex, with Verilog *.v
source files, their _tb.*
testbenches, and their *.gtkw
GTKWave state files organized in a directory tree.
my-project/
├── apio.ini
├── bcd
│ ├── bcd_digit_tb.gtkw
│ ├── bcd_digit_tb.v
│ └── bcd_digit.v
├── main_tb.gtkw
├── main_tb.v
├── main.v
├── pinout.pcf
├── testing
│ └── apio_testing.vh
└── util
├── reset_gen.v
├── ticker_tb.gtkw
├── ticker_tb.v
└── ticker.v
Directory structure rules
- The project file
apio.ini
and the pinout constraints file should reside in the top-level directory. - Source files and testbenches can reside in the root directory or in any subdirectory.
- Testbenches' GTKWave state files (
.gtkw
) should reside in the same directory as their respective testbenches.
Output files¶
Apio commands write their output to the directory _build/<env>
under the project root directory, where <env>
is the active environment name from apio.ini
. For example, when building for an environment called default
, the output directory is _build/default
. The example below shows the results of the apio build
command, including the ICE40 bitstream file hardware.bin
and intermediate files created during the build.
my-project/
├── _build
│ └── default
│ ├── hardware.asc
│ ├── hardware.bin
│ ├── hardware.json
│ ├── hardware.pnr
│ └── scons.params
├── apio.ini
├── blinky.v
└── pinout.pcf
The command
apio clean
can be used to delete all Apio-generated files and force a build from scratch.
Using Git¶
When working with Git, we recommend including the following in your .gitignore
file to avoid committing build artifacts and system files:
.gitignore
_build
.DS_Store