Andrew and Omkar's CSE228 Final Project
In this project, we aim to make a chisel generator for a hardware digital signal processing audio filter that allows for audio frequency spectrum analysis. Our entire signal processing pipeline will consist of hardware implementations of a fast fourier transform (to convert a analog signal to digital), weighted audio filters(to apply weights/filters to the binned analog signals) and an inverse fast fourier transform (to convert the edited digital signal back to a digital form). We will be using the Cooley-Tukey algorithm, more specifically the radix-2 method to give us a fast performing implementation of an FFT. At the very least, we aim to provide CD quality audio using our audio filter, i.e. 44.1 kHZ/16-bit audio resolution with a 1024 point FFT (simulating a 1024 point FFT and IFFT chews up many gb of RAM and crashes, but testing up to 256 does work). Furthermore, we also aim to provide parameterizable FFT block lengths to resize the transformation resolution as well as to provide parameterizable bit depth for the input audio.
Make sure you have sbt installed on the machine you are planning to use.
If you haven't installed it before, follow the directions from this link
Clone the repo to your machine, and run the following commands in order:
cd CSE228Project
sbt
compile
After following these steps you will have compiled the project
- Complex Multiplier and Tester
- Butterfly Unit and Tester
- Twiddle Factor ROM and Tester
- Bit Reverse model (for use to test the AGU) and Tester
- Memory and Tester
- Address Generation Unit and Tester
- Forward FFT blocks and Tester (Works for real signals, currently has a bug in loading both real and imaginary values together)
- Filters (Hardcoded low-pass, high-pass, band-pass and band-stop) and Tester
- Inverse FFT blocks and Tester (Works for real signals, currently has a bug in loading both real and imaginary values together)
- DSPPipeline (Top module encapsulating the pipeline, connecting stages together)
- Debugging issues with loading real and imaginary values together for forward FFT and inverse FFT
- Parameterized butterfly units for parallelism
- More complicated filters
Once the sbt kernel is opened up (Done by step 2 of Getting Started), you can test all of the created tests by running the test
command.
If you want to test individual components you can do so by running the testOnly *testClass
command in the sbt kernel instead.
The test classes that are currently supported are:
BitReversalTester
ButterflyUnitTester
ComplexMulModelTester
TwiddleFactorTester
RAMTester
AddressGenerationTester
FFTTester
FilterTester
IFFTTester
DSPPipelineTester