Saturday, September 27, 2014

So... What do you do in your free time?

This is a pretty awkward question that I never know how to answer. Especially at work. Recently my time has been going into a personal/hobby/electronics project.

I am doing a hardware implementation of Auto tune. This is not a novel concept and it would be much better implemented in a DSP. The purpose of the project is to sharpen a select set of skills. In order of priority:

  1. UVM testbench development 
  2. Hardware design
  3. Signal processing 
  4. FPGA validation -- I have a DE0 nano development kit for this
I took inspiration from an undergrad project where we implemented pitch correction in MATLAB. The algorithm uses a phase vocoder. I am still wrapping my head around many of the low level details. In general the algorithm processes overlapping time windows of the audio signal. The time windows are converted to the frequency domain for manipulation then converted back to the time domain to listen to.

I've started a functional decomposition for the RTL and I gave a general idea about how the blocks will communicate with each other. 

The flowchart should give a general idea of what I am trying to accomplish

High level block diagram for how I will separate the logic

I've also been making many mistakes and learning a lot as I go.
  1. Drive an interface you didn't instantiate? Code compiles fine, simulator crashes :) fun
  2. Driver bugs: not checking chip select before sending a transaction to the DUT
  3. Zero time loops. Oops!
  4. RTL issues. My implementation for the most basic block already has a flaw. Samples needs to be pulled from the ADC at 200 ksps. Unfortunately my current design has no parallelism so it doesn't meet the timing requirements. Not sure if adjusting clock frequencies will help or if a RTL redesign is needed.
  5. The sample driven into the DUT (adc) is not the same as the sample passed to the next block (trying to debug)


No comments:

Post a Comment