Opens in a new tab

Final year electronics project – FPGA audio processor

Here's my final year university project for my electronic and electrical engineering degree. I explored the use of an FPGA for digitally processing audio in real time, as well as creating some common audio effects (in VHDL) – delay, reverb, filter, flanger etc. Scroll down to see it in action (video)... This project could be…

Here’s my final year university project for my electronic and electrical engineering degree.

I explored the use of an FPGA for digitally processing audio in real time, as well as creating some common audio effects (in VHDL) – delay, reverb, filter, flanger etc. Scroll down to see it in action (video)…

This project could be the basis, and framework, to create pretty much any audio effect.

Project title: The design and realisation of an FPGA based audio processor

This is a super low latency digital audio effects processor using an FPGA and the Altera DE2 development board. The audio (guitar, mic, whatever) is connected to the input of the DE2 board to be digitised and processed according to what effect is selected. Everything is written in VHDL using Quartus II V11.0. New effects can be written in VHDL then converted to a block symbol and routed in to the existing system at the top level.

I made a rotary control box that interfaces dynamically with each effect block, depending on what is currently selected. The LED bar on the control box shows the value of parameter currently being adjusted (or the last one to be adjusted).

The project took 6 months in total and got me a decent mark for my degree. You can download my scanned notebook (with every single note I wrote down as I developed this project) and my full report in PDF format at the bottom of the page.

Developing digital audio effects on an FPGA using the Altera DE2 board and Quartus software

Latency is super low at less than 1ms. If you want to know how to use the Wolfson WM8731 CODEC on the Altera DE2 board (or any other FPGA development board) then hopefully this report will give you a massive head start. This took a while to get my head around.

I made a rotary encoder control box to have full control over all the effects and parameters within the VHDL code.

Report abstract…

Quartus II v11.0 and SOPC Builder have been used to design and create the VHDL code to be synthesised. The implementation of the VHDL design uses the DE2 development board from the Altera which is based around a Cyclone EP2C25 FPGA device having 35000 logic elements.

Four audio effects were explored and implemented: echo, flanger, filter and reverb. External control to the FPGA was implemented using rotary encoders to change various effect parameters and visual feedback been given through an LCD. The final design utilises a NIOS II soft-core processor to form part of the user interface. The results show that the total system latency of the FPGA audio processor was considerably less than a computer software application; less than 1ms compared to 10ms.

The initial concept has been proven using a total of 11702 logic elements. There is much scope for development of the final project. Future work could focus on a more user-friendly system in terms of the user interface and also the creation of more advanced audio effects.

See the audio effects in action

Download my full report and design notebook

Here’s the final report (PDF)

Here’s the final report that I handed in for my final year project of my electronics engineering degree: https://gum.co/fpga-audio-effects-final-year-project-mike-hudson

My scanned notebook (PDF): 

I kept a notebook of all my design notes, ideas, sketches, problems and solutions: https://gum.co/fpga-audio-processor-final-year-notebook

17 comments
  • Jack Tranckle

    Hi Mike, would it be possible to get a copy of your report? the links seems to not be working. thanks!

  • Alexander Pruss

    This is just another request whether you would be able to release the code. Thanks!

  • Baran Öztürk

    Hey Mike,

    I’m trying to build some sort of “freeze” pedal (like sustain pedal but it loops endlessly) for my senior project, I don’t know if it would be so much to ask your code but at least can you share a link for your report? It would be very helpful.

    Thank you!

  • André Fonseca

    Hello there!
    I am currently in a project doing a “guitar pedal” with the FPGA, the concept is very much like what you have done. Is there any chance you can provide your report and code?

  • Where is the download link for your report?

  • Ahmad Abdullah

    hi mike, any chance i can get your codes? i have similiar project that include buffering, really need help on how to use memory for buffering. It would really help, thank you.
    ahmed.shalahuddin@gmail.com

  • Daniel Stelian Dobre

    Hello, its an interesting project. Can you share the code ? Thank you

  • Muhammad Shahab

    The abstract says that the latency of this FPGA system is 1ms. How did you measure the latency?

  • Hii mike..im priya..working with the concept of your project..can u send me ur project code?..as it gives some idea for me..if possible reply me soon..

  • Derek Charles Cabrera Judilla

    Hi mike! any chance you can send me your codes? i’m trying do make fpga implemented 5 band grahpic equalizer for my thesis the only difference from my equalizer is that the filters will be in the switches does can be manipulated when its logic 1 and push buttons will be my +/- gain..also in your line out does it go directly to the speaker or it passes through first in an amplifier? email me your codes and hopefully your techniques on verifying your design wheter you use spectrume analyzer and oscilloscope..derek_judilla@yahoo.com

  • Cristiano Lacerda

    Any chance relasing your vhdl code as open soruce?

    • Yeah I will do at some point but it wont be any time soon simply because I’m on the road travelling and that stuff is on a HD in England. Thanks for your interest though… How are you getting on?

  • hi
    i know you are too busy
    but could you please tell me if there is an analogue to expansion conneceter Adapter ???
    the purpose is to get an analogue audio and put it to the expansion connecter of the fpga

  • David Kester

    Hey mike,

    I am working on a project, were we want to make a digital MIDI synth, right now the system works fine, but after 20 secs the serial to parallel converter (uart) crashes. Do you have any tips in order to better implement this module?

    We would greatly appreciate it.

    David

  • Hi, i’ve pretty much already done it using a state variable filter – this gives LP, BP and HP. So that could be adapted. To answer your question, not hard. The hardest part of this was writing/reading to the RAM for long delays (long as in a few thousand samples – milliseconds)

  • Wink Wonder

    Greetings. How hard would it be to program this for a 3-band equalizer?

Leave your comment