Department of Computer Science and Technology

Course pages 2018–19

ECAD and Architecture Practical Classes

Additional material and further reading

Relevant course notes

Computer Design lectures.

Part IB Unix Tools, a useful reference for those unfamiliar with the Unix command line.

Further reading

SignalTap tutorial: SignalTap is a logic analyser that Quartus can build inside your FPGA, that allows you to record signals at any point in your design and download waveforms to view on your PC. It is very handy for debugging when you can't tell what's going on inside your FPGA from the external pins or how it behaves.

Bluespec SystemVerilog (BSV), a higher level hardware description derived from Haskell and based on the principle of Guarded Atomic Actions. Can make writing hardware considerably quicker and less error-prone than writing SystemVerilog. See also the Cambridge Bluespec online tutor.

DE1-SoC resources

Shift register documentation for reading buttons and other inputs.

Manufacturer Terasic's product page for the DE1-SoC board.

Terasic's resources for the DE1-SoC (worth downloading the 'CD-ROM' which is really a zip of source code and documents for the board). Our boards are Rev F.

RocketBoards, Altera's software development site for the Cyclone V SoC platform. Includes a number of useful tutorials and other resources.

Intel University Program have a large number of guides and tutorials on how to use the FPGA tools and the DE1-SoC board.

Cambridge display board

Display board schematic

FPGA bitfile for testing display and switches

The LCD is an ER-TFT050-2 from EastRising (BuyDisplay.com). See their product page. We have also downloaded their collection of datasheets (in case their site goes away).

The touch panel is driven by the GSL1680 - see the minimalist datasheet. More information is given on the Linux-sunxi (which also describes Linux support), a blog post (Weatherhelge) and forum thread.

The LEDs are the Shenzhen Worldsemi WS2812B (datasheet), which have been nicknamed 'NeoPixels' by Adafruit - they also describe the protocol better than the datasheet.

Linux on the SoC ARM Core

It is fairly to straightforward to run Linux on the ARM core on the SoC. Many prebuilt images are available from Terasic here. Getting Linux on the board is explained between the readme file of whatever image you have downloaded, and the DE1-SoC user manual. You will need a microSD card 8GB or larger to carry the Linux image, and a mini-USB cable in order to connect to the board via USB JTAG. In order to get at the MSEL DIP switches on the board to configure the boot behaviour, you will need to use a Phillips-head screwdriver in order to remove the screen from the board.

The image we have used specifically is the Ubuntu image from Terasic. The steps we followed were:

  1. Download and unzip the image. The image unzips to de1soc_ubuntu_1604.img and a readme file into the present working directory.
  2. Write the image onto a micro SD card. We recommend that you use the tool Etcher. This has a GUI, does not carry the risk of trashing your hard disk, and verifies the file after writing.
  3. If you are using the recommended Ubuntu image, make sure that the DIP switches on the back of the board labelled MSEL are all in the '0' position. Other distros and images may require these switches to be set to different positions.
  4. Insert the micro SD card into the reader on the board, plug the mini-USB cable into the port on the board labelled 'UART to USB'.
  5. Connect a Serial client (eg minicom, PuTTY) to the board, with a baud rate of 115200, no partiy bit, 1 stop bit, and no flow control settings.
  6. Press the on-off button on the board.

With the Ubuntu image, you can also connect a VGA monitor and USB keyboard and mouse to the board, and use a graphical desktop.

Linux and the FPGA

The ARM core can be configured from Qsys. Optionally, bridges can be added to allow the ARM to access FPGA hardware, and the FPGA hardware to read and write ARM memory. Student projects have, for example, used these to implement GPUs and other accelerators in hardware.

A variety of guides from various places describe how to achieve some of these possibilities:

  • Intel University Program has tutorials and exercises, including 'DE1-SoC Computer with ARM', 'Developing Linux Programs that Communicate with the FPGA' and 'Accessing HPS devices from the FPGA'.
  • Cyclone V SoC examples has some tutorials and example projects. In particular the FPGA_OCR_256K project illustrates adding a simple Qsys memory component to the ARM.