Hi everyone,
I want to develop a small FPGA based project in an effort to learn more about FPGA's and to get some extra experience in hardware design and development. I completed a Bachelor of Computer Engineering four years ago and so have some background in digital hardware engineering (though not using FPGA's), however I have been working mostly in desktop software development since university and so want to brush up on my hardware based skills.
The project is something I am going to call an “EDrum Buddy”. I own a set of electric drums and I want to make this device to perform some useful functions to help me out. I decided on this because I think I can start off creating a really simple project and then slowly add more complex components to the design as I go.
The first step for now is simply to create a digital mixer:
4x analogue inputs (2x stereo inputs) with independent volume controls to 2x analogue outputs (1x stereo) with volume control (and supporting a low impedance load such as headphones). This is so I can mix the sound from the electric drum kit and say a MP3 player together and listen to them through head-phones.
Following the first step, I have thoughts on many useful features I can add to this device with differing complexities (obviously adding additional hardware as necessary):
* Metronome
* Audio processing effects (E.g. Reverb)
* Beat monitor (Attempts to guess the BPM you are playing at)
* Built-in guitar tuner
* Internal MP3 player
I would start with a basic platform:
* 4x ADC's, 2x DAC's
* FPGA
* 3x Seven segment LED displays
* 3x Input buttons for select, up, down (Volume, line selection, metronome configuration)
* Other support hardware (Power supply, FPGA configuration, required amplifiers)
Future options I may extend to add the following hardware to help with extra features and to experiment with the hardware design:
* DSP
* Internal speaker and second audio line out
* Internal flash memory (MicroSD or similar)
* USB interface
* LCD
* Expansion bus of some kind. So can add daughter boards for additional functionality
Some questions
* What is the best way to test an FPGA integrated with the rest of its environment without having completed PCB's?
I was planning on purchasing the Xilinx(R) Spartan(R)-3A Evaluation Kit from Avnet and creating a cable to interface the IO pins to a breadboard. Is this a kind of standard method for evaluating integrated designs?
* What is the standard practise to move from a development board to a PCB where the configuration of the FPGA is no longer performed by the development board but by my design on the hardware? Is there anything I need to look out for?
I can imagine this is a fairly typical audio based application. As I understand it, standard audio output for line and headphone out is a +-1V pp signal or there abouts. With headphone output able to drive a low impedance load and the line out generally expecting a high impedance load.
* Should it be suitable to use any ADC capable of sampling +-1.5V pp (or 0 to 3v with me providing a +1.5v offset to the incoming signal) with a sampling rate of over 44k samples per second?
* Does anyone with experience in this know of any pitfalls I may have to contend with developing such an audio to digital system (like do you sometimes find equipment that has a much larger or smaller voltage range, how about DC offsets etc)?
* Additionally, with the ADC's, DAC's, would I be best looking at SPI based interfaces to reduce the number of pins used on the FPGA?
* Should I use some form of opto-isolator on the audio input to avoid ground loop and input voltage protection? If so and if so any suggested specs for such devices?
I have not used analogue opt-isolators before, and wonder if they will have too low an input impedance, or will change the characteristics of the input signal in any noticeable way?
* Should I put a pre-amp before the ADC or will digital amplification in FPGA be “good enough” for this application? If I do, I would like the pre-amp to be digitally controlled, any suggested devices for this (some kind of Automatic Gain Control)?
Finally, does anyone have advice before I start spending money on hardware?