Here is a quick step-by-step tutorial for creating a NiosII soft processor on the
Altera DE0-Nano board and uploading it to the configuration device so it will run independently without a PC.
I am writing this because I am new to the whole FPGA world and got stuck several times doing this myself. All the necessary information needed to do this is out there on the web, mostly on the Altera homepage / forums but it is widespread and can be confusing at times.
I am heavily borrowing from the tutorials provided in the DE0-Nano user manual. Specifically chapter 7, Creating a Nios II Project.
So if you find my steps a bit too rushed and need more detail and screen shots have a look there. (There is a link at the bottom of this page)
Prerequisites for this tutorial (Other software versions will work just as well but the steps might be slightly different):
- Altera Quartus II 11.0sp1
- Altera Nios II EDS 11.0sp1
This is what we are going to build:
Building the processor
- start quartus11.0sp1
- file>new project wizard
1/5: create new folder NiosTut, select as project dir
name of project: mynios2
3/5: select Family: CycloneIV E
select device EP4CE22F17C6
- select Tools>SOPC Builder
- Name system: DE0_NANO_SOPC
- rename clk_0 to clk_50
- add NiosII processor (Procesors>Nios II Processor)
select NiosII/E variant and click Finish
- rename cpu_0 to cpu
- add a JTAG-UART (Interface Protocols>Serial>JTAG UART)
all defaults, click Finish
- rename jtag_uart_0 to jtag_uart
- add on-chip ram (Memories and Memory Controllers>On-Chip>On-Chip Memory RAM or ROM)
set total memory size to 26000
- rename onchip_memory2_0 to onchip_memory2
- add EPCS Serial Flash Controller (Memories and Memory Controllers>External Memory Interfaces>Flash>EPCS Serial Flash Controller)
click Finish (defaults)
- rename epcs_flash_controller_0 to epcs_flash_controller
- right-click cpu and select edit...
set reset vector to epcs_flash_controller, offset 0x0
set exception vector to
onchip_memory2, offset 0x20
- add an output port (Peripherals>Microcontroller Peripherals>PIO (Parallel IO) )
click Finish (Defaults)
- rename pio_0 to pio_led
- Select System > Assign Base Addresses
- Select File>Refresh System
- click Generate
and save the file as DE0_NANO_SOPC.sopc
>> Info: System generation was successful.
Instanciating the hardware
- File > New...
create a new Block Diagram/Schematic file (.bdf)
- in the schematic view right click > Insert > Insert Symbol
- under Project select the DE0_NANO_SOPC component
- click Ok and place the Nios symbol on the schematic
- right click the newly created DE0_NANO_SOPC symbol and select > Generate Pins For Symbol Ports
- save the file as mynios2.bdf
- it will show up in the project navigator under Files
- select Processing > Start Compilation
>> Full compilation was successful (78 warnings)
- select Assignments > Pin Planner
and connect the following signals to these pins
- Now, the next steps depend on tools that talk to a Nios core over the JTAG cable. For this reason we need to upload our core to the board at least once (even though it won't do much without a program).
- If for some reason you already got a Nios running on it you can skip right to Software setup.
- select from the menu Tools>Programmer
- If there are already files loaded from a previous session, remove them by selecting File>New
- Add the mynios2.sof file you just built.
- Press Start to upload it. (If the Start button is greyed out you might have to select the USB-Blaster cable in the Hardware Setup Dialog)
Hello World (Blinking Led)
- Open NiosII EDS 11.0sp1 Software Build Tools For Eclipse
choose your project folder as the workspace
when Eclipse opens up the workspace should be empty
- File > New > Nios II Application and Bsp From Template
SOPC Information File ... browse to your project folder and select the file DE0_NANO_SOPC.sopcinfo
the cpu name should be auto selected for you
Select the Hello World template
call the Project "hello_world"
- 2 new projects are created, the hello_world project containing your code and the hello_world_BSP, a support library for your custom hardware
- before hitting compile, right click the hello_world_BSP project and select NiosII > BSP Editor
on the Main tab under hal check enable_small_c_library (otherwise our little program won't fit into our even smaller ram)
hit Generate and then Exit
- Right click the hello_world project and select Build Project
- Right click the hello_world project and select Run as Hardware
It will upload the program and print "Hello From Nios II!"
- Note, if at this point the Run Configurations window pops up, you either don't have a nios core currently running on the board or something is wrong with it. Go back to the Hardware setup section above that describes how to initially upload the nios core using the Quartus II programmer.
- Now this following part is optional but we are going to blink an LED on the board. To truely prove that our board runs standalone (not connected to a computer) it would be great to just connect a battery to it. Without a JTag debug console, the easiest way to see if the program is running is to successfully blink an LED. If you don't care skip to Making it stick.
- add the following lines to the generated file hello_world.c.
printf("Hello from Nios II!\n");
IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, count & 0x01);
delay = 0;
- save the file and rebuild the project. Then run it again as hardware. LED0 on the board should now blink.
Making it stick!
- If this all works it's time to push the whole thing into the flash to make it independent from the PC.
- From the Eclipse menu select NiosII > Flash Programmer
- Select File > New
Use the default: Get flash programmer system details from BSP Settings file
Browse to the settings.bsp file (it's in the hello_world_bsp folder)
everything else will be auto-detected for you.
- You'll get an error message in the Problems tab
- click on Connections
tick Ignore mismatched system ID
tick Ignore mismatched system timestamp
(if you have some patience left later you should add a SystemID ip core to the nios!)
- click add File, browse to your NiosTut hardware folder and select the file myfirst_niosii.sof
- click add again and select the file hello_world.elf in your hello_world folder
- click Start
If everything is okay the Nios system and your program will be uploaded to the EPCS flash.
Once this is done, unplug and re-plug the board. The LED should start to blink.
The program will be uploaded and started on power up.
Please let me know if something in this tutorial is horribly wrong or I am missing something important.
Some of the steps above can be taken care of by the DE0-Nano project builder which comes with the board but I found it helpful to click around inside Quartus and navigate through the various dialogs to get a quicker understanding of it's inner workings.
Useful links regarding this tutorial
DE0-Nano User Manual:
Embedded Peripherals IP User Guide:
Other projects you might like