| title | De0 Nano |
|---|---|
| layout | page |
| parent | FuseSoC |
- An x86 Linux workstation
- The
curlcommand line utilities - OpenOCD
- The quartus FPGA design software
fusesoc- The FuseSoC build system.or1k-elf-Toolchain as installed in our newlib tutorial.
- hello.c - A Hello World test program.
- timer.c - A baremetal example using the OpenRISC timer api's provided by newlib.
To confirm you have all of the required tools installed check with the following:
To run the demo you need:
-
quartus_pgmin yourPATH, check withwhich quartus_pgm -
openocdin yourPATHandOPENOCDset, check withopenocd --version echo $OPENOCD -
or1k-elf-gdbin yourPATH, check withor1k-elf-gdb --version
First you need to setup the board, by connecting the USB cable to your computer. If you want to use UART, an extra dongle is needed. Any USB-UART adapter can be used. You need to connect it to the header on the bottom of the board as depicted below.
To get started we will want to have a directory with all of our build files in one place.
mkdir /tmp/or1k-de0nano
cd /tmp/or1k-de0nano
curl -L -O https://openrisc.io/tutorials/sw/hello/hello.c
curl -L -O https://openrisc.io/tutorials/sw/timer/timer.c
CFLAGS="-mboard=de0_nano -DDE0_NANO"
or1k-elf-gcc -g -Og $CFLAGS -o hello.elf hello.c
or1k-elf-gcc -g -Og $CFLAGS -o timer.elf timer.c
# Add IP cores to the environment
fusesoc library add fusesoc-cores https://github.com/fusesoc/fusesoc-cores
fusesoc library add elf-loader https://github.com/fusesoc/elf-loader.git
fusesoc library add openrisc-cores https://github.com/openrisc/openrisc-cores
fusesoc library add de0_nano https://github.com/olofk/de0_nano.git
# Check the SoC is available
fusesoc core show de0_nanofusesoc run de0_nanoThe FuseSoC run command will run the default target, for de0_nano this is
synthesis using the tool quartus. You could also specify this using fusesoc run --target synth --tool quartus de0_nano. The run command has 3 phases:
- setup - Creates the project directories and project files
- build - Builds the artifacts, for quartus this means the FPGA bitstream.
- run - Runs the SoC, this will perform programming, but by default this is disabled.
Once the board is setup and built, you can download the FPGA bitstream by running the following:
fusesoc run --run de0_nano --pgm quartusPassing the --run argument allows only the run stage to be run. This is useful
as we do not want to build the entire project again. Passing --pgm quartus
enables the run stage to use quartus_pgm to program the bitstream to fpga
board.
In one terminal execute the following command:
openocd -s ${OPENOCD}/share/openocd/scripts/ -f interface/altera-usb-blaster.cfg -f ../or1k-dev.tcl
From a second terminal you can now run gdb, for example to run the timer example:
or1k-elf-gdb timer.elf
In gdb execute the following steps:
target remote :50001
load
set $npc=0x100
continue
You should see the LEDs counting and UART output once a second.
