A Hello World example of VGA output using the RZ-EasyFPGA A2.2 board.
Usually found on AliExpress for about US$ 40, the RZ-EasyFPGA board provides a relatively cheap way into the FPGA world.
The built-in chip is the Altera Cyclone IV EP4CE6E22C8N, which should serve well for smaller projects.
In this guide, we'll be using the built-in VGA interface and by the end we should have a working example flashed to the board.
Let's start talking about the VGA standard.
Although the connector has a lot of pins, for driving a display we only really need five signals:
- HSync: Horizontal Synchronization
- VSync: Vertical Synchronization
- R: Red channel (analog)
- G: Green channel (analog)
- B: Blue channel (analog)
The first thing to understand is how the information is transmitted to the display controller.
We won't go much in depth about the standard itself - you can take a look at some other resources like this one to understand it better - but besides the expected RGB signals, HSync and VSync play an important role.
As shown in the image above, timings are crucial in order to drive a VGA display and for that we'll need do make sure to have the appropriate signal frequencies generated.
For this guide, we'll output at 640x480 @ 60Hz so we'll use the timings/frequencies shown below:
Since each of the color channel signals are analog ones, we're going to also need some sort of DA conversion and for that the board already provides three resistors - one for each channel - ready to be used.
The unfortunate news is that we only really have two levels for each color channel, either turned on or turned off.
Some boards may include a resistive network, allowing the use of more than one bit per channel, but that's not our case unfortunately :(
We'll only have 8 colors (2^3) to work with but that should be enough for our purposes.
Source: Board documentation
Each of those resistors is connected to the pins shown below
Source: Board documentation
We'll use these pin numbers later on.
First we need to make sure we have the appropriate environment for working with the board.
For that, we're going to use the Intel Quartus Prime Lite software at version 20.1.1 - the latest version at the time of writing.
Make sure to install the Lite version since it supports the FPGA chip of our the board and to also install any drivers in order to get the USB Blaster working.
For Windows, the installation process should be straightforward but if you google it there's plenty of resources.
For GNU/Linux, I've attached some guides below that can help you:
- Arch Linux: https://wiki.archlinux.org/index.php/Altera_Design_Software
- Ubuntu: https://gist.github.com/peach-e/691a0b54b535d70313c97e0af6002aaa
For the rest of this guide, I'll be working on an Arch Linux system.
- Fetching the code If you're familiar with git, this should be a no brainer:
$ git clone https://github.com/fsmiamoto/EasyFPGA-VGA.git
$ cd EasyFPGA-VGA
$ quartus EasyFPGA-VGA.qpf
# If you don't have Quartus on your $PATH, just open the project on the Quartus UI.
- Compile the project
Now we need to build our project. For that you can click on the play icon on the toolbar or press Ctrl+L
- Open the programmer
Now we should be ready to program the board. Start by opening the Programmer tool:
You should see something like this:
Note that our USB Blaster should appear at the top like I've highlighted.
If you don't see your Blaster there, this is probably a driver issue.
- Connect the board
First, power on your board by connecting the USB cable to it.
You can also use the power jack built into the board with a 5V power supply.
With that, you can connected the block header cable to the board on the JTAG block.
It should look something like this:
- Flash the board
With everything connected, click on Start
on the Programmer tool:
If everything goes well, it should begin displaying something!
Yay!
20210412_222510.mp4
- Add section about the Project Setup including the Pin Planner
If you see any errors or have any questions regarding the project, feel free to open a PR or create an issue.