To get started with the guide, please begin here.
To just download the Debian or Arch Linux ARM (NEW) image for the DE10-Nano, please visit the releases page.
- Getting Started
- Building Embedded Linux - Full Custom
- Flashing the FPGA from SD Card
- HPS and FPGA communication
- My First SoC - Simple Hardware Adder
- FPGA - SDRAM Communication
- Appendix
- FAQ
- Getting further help
- Prerequisites
- The Basics
- Building the Universal Bootloader (U-Boot)
- Building the Kernel
- RootFS - Choose one:
- Creating the SD Card Image
- (Optional) Setting up WIFI
- Introduction
- Initial project setup
- Simple Adder
- Primer on Avalon MM
- Custom Avalon MM Components
- Wiring the Components
- Add the Simple Adder
- Writing the Software
- Introduction
- SDRAM Controller
- More on Avalon MM
- Avalon MM Agent/Slave - Trigger Component
- Avalon MM Host/Master - 1
- Avalon MM Host/Master - 2
- Avalon MM Host/Master - 3
- Not beginner friendly - There is a lot of documentation online, but they don't always explain everything.
- Comprehensive - The ultimate goal of this site is to be comprehensive so all the information needed is available and accessible easily.
- Focused - There are several boards by Terasic and Altera which use Cyclone V and all of them vary slightly. This guide only focuses on the DE10-Nano. If you are using a DE1 or any other Cyclone V board, a lot of the content will still be applicable. But I haven't tested it, so I don't know if it will work or not.
Sure, You can download the SD Card image from the releases page.
You are expected to be comfortable using the command line in Linux. All the shell commands you will need will be provided in the guide. But the commands themselves won't be explained, you will need to learn more about them yourself.
No, this guide does not cover general FPGAs. There is enough information online to learn HDL as well. Basic understanding of FPGAs and HDL is expected.
Please let me know! Either raise an issue or submit a pull request and I will greatly appreciate it!
If you have a question about something, feel free to raise it as an issue and I'll try and address it. But this is a hobby for me and I can't really guarantee being able to answer it, nor do I guarantee that I will have time to answer your question.
You can also reach out to the following communities for more help:
- FPGA Subreddit - Some of the nicest people online here. I have lost track of the number of times people have asked "Which board should I get?" and yet never has the post been taken down or rudely put down.
- ##FPGA on IRC Freenode - Excellent resource for general FPGA related questions. Ask a question and do lurk around, people are busy and may not reply immediately.
- Intel community forums - Not very active, but from time to time people do reply. Sometimes support engineers from Intel will come across your post and reply, but that usually takes time.
- Rocketboards forum - Similar to the intel forums, these are not very active. But there's a lot of helpful information on the forums, so searching there is also an option when you get stuck.
This document assumes no knowledge of SoCs. However, it requires a few things for you to be able to follow along:
- DE10-Nano: Obviously you need the DE10-Nano board. Most prominent electronics retailers stock it (digikey, mouser, element14) or you can purchase it directly from the Terasic website. Please don't purchase knock-offs or cheap alternatives. FPGA programming is hard enough and there are a million things that can go wrong.
- Beginner's knowledge of FPGAs - While there is some FPGA programming involved, this guide does not teach you the basics of FPGAs, HDLs etc. There are several resources available online.
- Intermediate knowledge of Linux: Linux will be the preferred OS for this guide. You should be able to navigate the terminal and know at least the basic commands of the shell.
- Serial UART: To see the bootloader commands, we will need to have a serial console like
PuTTy
orminicom
available and also connect our DE10-Nano using the USB port. - Connected to LAN: We will need the device connected to LAN so that we can ssh to it from our host computer.