Need Some Feedback/Advice For a Verilog Synthesizer Project

Thread Starter


Joined Jun 1, 2018
Hi everyone,

I'm working on designing a synthesizer for my Verilog class final project. I am using a Nexys4 DDR FPGA board and I am writing the code in Verilog using Vivado 2018.2. I made a PowerPoint to list the requirements of the project, so I've attached it in case it helps give an idea of what I'm going for. I also included the datasheets of some of the parts I might use.

The synth will have the following features:
  • Two oscillators that can be controlled with the buttons on the board and output their sum to 8 digital pins (using 8 bits to define the wave). It will have options for a sine wave, square wave, and sawtooth.
  • An amplifier that will control attack and release (might add sustain and delay later if I have time). This will take an input from the digital pins and output to another set of digital pins
  • A filter that will have options for a Low-pass or High-pass filter, as well as a control for cutoff frequency. Again, it will have 8 pins for digital input and output to 8 digital pins
  • The output will be sent to a small speaker ( this one to be exact, part no. WSP-5708, datasheet attached) through the digital pins
The front-end is being developed by my lab partner, so I don't have to worry about designing that. I'm just focusing on the internal stuff.

I want to prioritize certain features before doing anything else. The order of development will be as follows:
  1. Generate an 8-bit sine wave with variable frequency (changed via parameters for now, eventually controlled by buttons) to output to the board's LEDs for testing purposes. I will use a lookup table that I made to accomplish this. The wave will consist of 1024 points containing values from 0 to 255.
  2. Generate a second wave with an independently controlled frequency and add it to the first wave
  3. Add an amplifier that outputs the wave when a key is pressed, and stops outputting when the key is released
  4. Use the bottom 2 rows of keys (more details in the PPT) on my USB keyboard to control the amplifier and function as a sort of MIDI device (not actually MIDI; the board takes a USB signal and converts it to PS2). The keys will play different pitches through one octave.
  5. Add a low-pass filter and high-pass filter
The first 4 are the ones I'd like to complete for this project, only implementing the filter if I have the time to do so.

The part I'm having trouble designing is the output. It is a digital wave, so I will need to convert it to analog if I want a true sine wave sound. If I output to a speaker, then I would like to use a DAC to generate a sine wave approximation instead of just PDM/PWM. I recently bought some MX7224KN+ DAC's for this purpose (datasheet attached). I also bought a dozen LM358N op-amps (datasheet also attached).

I own a TAS-475 oscilloscope and a cheap multi-meter, so debugging should be a lot easier with these.

Anyway, I guess my specific questions are:
  1. How do I add the waves to produce more complex tones? I want the same effect as a synthesizer with two oscillators. Would it be easier to have 2 separate outputs, 1 for each speaker, and have them simply add naturally? Or would this defeat the purpose of having a filter, as it wouldn't filter out the beat frequencies produced from the 2 oscillators?
  2. How do I remove the DC offset from the output? Is it even necessary? The output is from digital pins, and even if it is sent through a DAC it will have a minimum of 0 volts. From my understanding, speakers can be burnt out with DC-biased inputs.
  3. The speakers are rated for 3.0 watts (max of 4.0), so should I use an op-amp to amplify the signal using another power source?

My apologies for the wall of text :eek:. I'm still rather new to electronics, so I'm sorry if these are really basic questions with obvious answers. I really appreciate you guys taking time out of your day to read this and help a newbie :p