Project
The course project provides a great opportunity to integrate the various skills learned from the course. Additionally, it exposes more stages of the design process (initial proposal, initial bootstrap, revision, and presentation/release) which were not covered by the homework or lab assignments.
In the project, students will propose, design, develop, test, optimize, revise, document, and present a Chisel generator. The project’s target application should contain some opportunities for parameterization and hardware generation as well as be of a reasonable scope. As a rough approximation, the generator’s final complexity should be akin to ~2x the complexity of the most recent homework assignments. Unlike the most recent homework assignments, for the project, groups will be starting nearly from scratch. Projects should be done groups of two (or individually with instructor approval), and the expectations will scale accordingly.
Proposal (due 5/12)
Find a project partner and pick an idea for the project. Reach out to the staff for idea suggestions if needed. Plan your project. Write a short proposal (<1 page PDF) to capture your plan to prepare the staff to discuss it with you. Be sure to cover the following in your proposal:
- Group member names
- What will the generator do? What application does it solve?
- What sorts of parameters will it have and how might one integrate the generator’s output into a system?
- How will you get started initially (bootstrap)? Is there a model or sample output you can use to develop your model and initial tests?
- After getting initial sample tests, how will you first “close the loop”? In other words, what is the simplest thing you can get running that is relevant?
- Plan a roadmap in terms of what features you will be adding. What features or optimizations can you defer?
Feedback (meet with staff 5/13 or 5/15)
Meet with the course staff during lecture time on the day assigned your group to get feedback on your project proposal. Be prepared to discuss the requested proposal contents and receive feedback.
Working Repo (share link with staff by 5/23)
Close the loop as soon as possible and get something working. Continue to add functionality onto it. To ensure intermediate progress, submit a link to a git repo containing at least some proof-of-concept of your project. It does not need to be optimized or even feature complete, but it should demonstrate some of the core functionality of the project. Also be sure to include instructions in a README so the staff knows how to run it.
External Code Review (6/1)
To both improve the quality of projects, and to learn from more exposure, project groups will perform a peer code review. Cancelled this term due to high quality code reviews from HW6
Presentation (6/3 or 6/5)
Prepare and present your project to the rest of the course. In the presentation, be sure to cover:
- What does your generator do and what is it for? (application)
- What sort of interfaces does it have?
- What parameters does it take?
- How does it work under the hood?
- How did you incrementally develop it?
- Project completeness (functionality, testing, documentation, etc…)
- Time permitting:
- Any interesting uses of inheritance or functional programming?
- Things you learned along the way
- Advice for future students of the course
Following the presentation, the staff will send a brief email feedback on things to explain in more detail or revise for the final version.
Final Repo & Presentation (due 6/9)
Submit a link of your completed repo and your revised presentation slides. Publicly releasing the project is encouraged but not required.
Tips
- For starting a new Chisel project with sbt, we recommend using the chisel-template
- Even if your target application seems fixed (e.g. a heavily specified hash function), you may find opportunities for parameterization with performance optimizations or interfacing options.
- Like we have done with the homework assignments, aim to incrementally add functionality and optimizations. Try to limit the size of any one development leap.
- Embracing the agile process, you will may to revise your plan as you go, but it is definitely good to at least have an initial plan to revise.
- Anticipate that you will need to probably do at least one major revision/rewrite along the way.
Public Projects from Spring 2021
- ZUC-128 3GPP LTE Stream Cipher - Priyanka Dutta & Sakshi Garg
- MiMC Hash Generator - Brandon Erickson
- Funnel Shifter - Bhawandeep Singh
- Chisel Neural Net - Reese Levine & Chris Liu
- Merkle Tree Generator using Poseidon Hash - Yuanpeng Liao & Amogh Lonkar
Public Projects from Winter 2022
- Base64 Encoder/Decoder - Farid Zakaria & Connor Masterson
- GPS - Jesse Cirimelli-Low & Saheed Adepoju
- Snake in Chisel - David Lung & James Quiaoit
- Bloom Filter - Haoyuan Wang
- Mandelbrot Set Generator - Ben Grant
Public Projects from Winter 2023
- SHA Hash Generator - Jessica Dagostini & TJ Banghart
- (Audio) Looper - Sam Crow
- Smith-Waterman - Calvin Keyes
- Network-On-Chip - Muhammad Hadir Khan
- (Image) Historgram Equalization - Bugra Onal
- FPGABoy - Game Boy & NES audio processing unit - Kai Tamkun
- TPU - John Yu & Alex Lee
Public Projects from Winter 2024
- FFT Generator - Andrew Barth-Yi & Omkar Lonkar
- Memory Controller (SDRAM) - Gary Mejia-Martinez & Joaquin Ortiz
- JPEG Encoder - Darren Lin & John Drab
- Image Processor - Eren Dogan & Po-Hao Chen
- Network Router with TCAM - Cheng-Wei Ching & Tongze Wang
- Register File with Renaming - Yinyuan Zhao & Yan Tong
- Fast Motion Search (for video encoding) - Neil Dangat
- Sequestered Encryption - Yiwei Yang & Mohammadamin Karbasforushan
- RSA - Sanath Radhakrishna Pai & Rohan Neeraj Pradhan
- Systolic Matrix Multiplication - Rian Borah & Jinsung Park
Public Projects from Spring 2025
- Sudoku Solver - Chadwick Baker
- Raptor ECC - Goutham Krishna Usha Gangadharan & Jayaraj Jayakumar
- Pattern-Aware Systolic Array Multiplier - Changyang Zeng & Zion Kang
- Needleman-Wunsch Aligner - Rithesh Kumar
- TPU - Ella Lehavi & Bradley Manzo
- CORDIC - Matthew Mosher
- N-Dimensional Torus - Prasiddh Pooskur
- DOT file to FSM - Arjun Vedantham
- Image Compression - Andy Vo & Ethan Cesario