All Projects → IA-C-Lab-Fudan → Chisel-FFT-generator

IA-C-Lab-Fudan / Chisel-FFT-generator

Licence: other
FFT generator using Chisel

Programming Languages

Verilog
626 projects
SystemVerilog
227 projects
scala
5932 projects
tcl
693 projects
VHDL
269 projects

Projects that are alternatives of or similar to Chisel-FFT-generator

ModularMusicVisualizer
Project in Hiatus, unmaintained, being rewritten privately. Will Open Source when stuff is ready. Project will be Renamed.
Stars: ✭ 81 (+211.54%)
Mutual labels:  fft
real-time-audio-fft
iOS library for analysing/visualising audio data at real-time
Stars: ✭ 21 (-19.23%)
Mutual labels:  fft
fftpack
Double precision version of fftpack
Stars: ✭ 44 (+69.23%)
Mutual labels:  fft
gqrx
Software defined radio receiver powered by GNU Radio and Qt.
Stars: ✭ 2,345 (+8919.23%)
Mutual labels:  fft
BurstFFT
FFT implementation in C# optimized for Unity's Burst compiler
Stars: ✭ 90 (+246.15%)
Mutual labels:  fft
unicorn-fft
Audio visualization on the Unicorn Hat using FFTW
Stars: ✭ 36 (+38.46%)
Mutual labels:  fft
susa
High Performance Computing (HPC) and Signal Processing Framework
Stars: ✭ 55 (+111.54%)
Mutual labels:  fft
AbstractFFTs.jl
A Julia framework for implementing FFTs
Stars: ✭ 72 (+176.92%)
Mutual labels:  fft
drop
A LÖVE visualizer and music player
Stars: ✭ 17 (-34.62%)
Mutual labels:  fft
gpyfft
python wrapper for the OpenCL FFT library clFFT
Stars: ✭ 52 (+100%)
Mutual labels:  fft
tree-core-cpu
A series of RISC-V soft core processor written from scratch. Now, we're using all open-source toolchain( chisel, mill, verilator, NEMU, AM and difftest framework, etc) to design and verify.
Stars: ✭ 22 (-15.38%)
Mutual labels:  chisel
rfsoc sam
RFSoC Spectrum Analyser Module on PYNQ.
Stars: ✭ 44 (+69.23%)
Mutual labels:  fft
fmcw-RADAR
[mmWave based fmcw radar design files] based on AWR1843 chip operating at 76-GHz to 81-GHz.
Stars: ✭ 41 (+57.69%)
Mutual labels:  fft
osm
Open sound meter. FFT based application for tuning sound systems.
Stars: ✭ 122 (+369.23%)
Mutual labels:  fft
intel-mkl-src
Redistribute Intel MKL as a crate
Stars: ✭ 52 (+100%)
Mutual labels:  fft
tinyspec-cling
tiny spectral synthesizer with livecoding support
Stars: ✭ 31 (+19.23%)
Mutual labels:  fft
dsp
DSP and filtering library
Stars: ✭ 36 (+38.46%)
Mutual labels:  fft
mkl fft
NumPy-based Python interface to Intel (R) MKL FFT functionality
Stars: ✭ 52 (+100%)
Mutual labels:  fft
fftWater
Ocean simulation based on the paper of Jerry Tessendorf: Simulating Ocean Water
Stars: ✭ 20 (-23.08%)
Mutual labels:  fft
unity-music-visualizer
Basic music visualization project for Unity.
Stars: ✭ 39 (+50%)
Mutual labels:  fft

Chisel-FFT

NOTE:
The branch BRAM contains codes using BRAM explicitely in FPGA flow.
The branch STFT contains a Chisel-STFT project applied to Short-time Fourier transform.
The branch FFT-Generator contains a project supporting more configurations for the flexiblity of construction and datafromat.This is the latest and most complete version.For more details, please refer to this branch's README.md

This Chisel project implements a R2MDC (Radix-2 Multipath Delay Commutator) FFT hardware design, and the source and test files are organized as follows.

src/
  main/
    scala/
      FFT/ <Chisel的源代码文件>
        Butterfly.scala
        Config.scala
        FFT.scala
        VerilogEmitter.scala
  test/
    scala/
      FFT/ <Chisel的测试代码文件>
        FFTTest.scala

The FPGA folder contains the tcl script and other necessary files for the FPGA flow running on Vivado 2019.2

How to generate Verilog ?

We designed VerilogEmitter.scala to handle all the generations of Verilog code.

In IntelliJ, you can click the green button near the elaborateFFT object defined in VerilogEmitter.scala to run this object and generate Verilog codes.

The object elaborateFFT is defined as follows, and some arguments (like the destination directory, etc) could be configured in this process.

object elaborateFFT extends App {
  (new chisel3.stage.ChiselStage).execute(
    Array("-X", "verilog", "--full-stacktrace"),
    Seq(ChiselGeneratorAnnotation(() => new FFT()),
      TargetDirAnnotation("Verilog"))
  )
}

Or you can run the following command in your terminal.

 sbt 'test:runMain FFT.elaborateFFT'

How to run the test ?

The testbench is defined in FFTTest.scala, and you could run the object FFTTestMain like what we did before to get the simulation results (like the error rate and the overflow rate, etc).

The object FFTTestMain is defined as follows.

object FFTTestMain extends App {
  iotesters.Driver.execute(args, () => new FFT) {
    c => new FFTTest(c)
  }
}

Or you can run the following command in your terminal.

sbt 'test:runMain FFT.FFTTestMain'

How to run the FPGA flow ?

We have already generated three Verilog files FFT128, FFT256 and FFT512 for the FPGA project, which adopts 128, 256 and 512 as the length of FFT. You can import the tcl script directly in the Vivado to run the FPGA implementation and evaluation.

For more information, please see our article published on https://zhuanlan.zhihu.com/p/137260660

Optimization1: Chisel-FFT with reorder buffer

For the complete process of FFT, a reorder buffer hardware is attached to the FFT module, which can be found in

src/
  main/
    scala/
      FFT/ <Chisel的源代码文件>
        Butterfly.scala
        Config.scala
        FFT.scala
        Reorder.scala
        VerilogEmitter.scala

The reorder buffer change the sequences with bit-reversed order to the sequences with normal order. And a new top module is got by connecting the two modules.

How to generater verilog

We designed VerilogEmitter.scala to handle all the generations of Verilog code.

In IntelliJ, you can click the green button near the elaborateFFTReorder object defined in VerilogEmitter.scala to run this object and generate Verilog codes.

The object elaborateFFTReorder is defined as follows, and some arguments (like the destination directory, etc) could be configured in this process.

object elaborateFFTReorder extends App {
  (new chisel3.stage.ChiselStage).execute(
    Array("-X", "verilog", "--full-stacktrace"),
    Seq(ChiselGeneratorAnnotation(() => new FFTReorder()),
      TargetDirAnnotation("Verilog"))
  )
}

Or you can run the following command in your terminal.

 sbt 'test:runMain FFT.elaborateFFTReorder'

How to run the test ?

The testbench is defined in FFTTest3.scala, and you could run the object FFTTestMain3 like what we did before to get the simulation results (like the error rate and the overflow rate, etc).

The object FFTTestMain3 is defined as follows.

object FFTTestMain3 extends App {
  iotesters.Driver.execute(Array("--backend-name", "verilator"), () => new FFTReorder) {
    c => new FFTTest3(c)
  }
}

Or you can run the following command in your terminal.

sbt 'test:runMain FFT.FFTTestMain'

Moreover, we can view the wave of the simualation of the generated verilog by the file with an extension .vcd.

How to run the FPGA flow ?

You need to generate the verilog file for the FPGA project and run the the FPGA implementation and evaluation by yourself

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].