Inspiration
Ross, a leader in video communication systems, challenged us to push our creativity by crafting animations with just Verilog and our understanding of Boolean algebra, blanking areas, and signal timing. It’s all about using the fundamentals of hardware design to bring visuals to life!
What it does
Our project features two continuously moving bouncing squares that navigate the screen, with dynamic color blending as they move. As the squares travel, their colors gradually blend with the background, creating a smooth, visually appealing effect. When the squares overlap, their colors blend together, further enhancing the visual experience.
Additionally, we implemented control probes that allow the user to interact with the system in real-time. These probes can:
- Switch between two background modes: a solid single color or a bar test pattern
- Adjust the size of both squares
- Change the speed of both squares, allowing for customization of the animation's pacing and visual dynamics.
- Modifying the color properties of the squares, including their luminance (luma), and chrominance (chroma blue and chroma red)
How we built it
We developed our solution by writing extensive Verilog code, often working late into the night. Key to our success was utilizing blanking areas and color manipulation techniques, as outlined in the Ross challenge document, with guidance from Ross mentors. We also implemented substantial conditional logic to refine and control the video output effectively.
Challenges we ran into
We initially struggled to understand how to effectively use and manipulate the probes for our desired effects, which was a major learning curve. This challenge was compounded by the long compile times—around 3 minutes per iteration—turning each trial into a test of patience. Verilog itself presented another hurdle; despite familiarity with other programming languages, its unique syntax and concepts were tough to master without prior experience. Finally, fine-tuning signal timing required a lot of trial and error, adding yet another layer of complexity to our journey.
Accomplishments that we're proud of
Hardware programming is notoriously challenging—it's tough to master the syntax, there's limited documentation, trial and error are often necessary, and even a small mistake can disrupt the entire system. Despite these obstacles, we persevered. We're proud of not only learning the intricacies of Verilog syntax and clock management but also successfully navigating complex concepts like signal timing and color manipulation. We overcame steep learning curves around probe use, long compile times, and the unique challenges of video signal processing. Ultimately, we managed to create a functional, tangible display—proof of our persistence, creativity, and growth throughout this project.
What we learned
We gained a deeper understanding of Verilog syntax and clock management, which was crucial for our project. Beyond the technical skills, we learned some fascinating facts about the hardware we were using—it turns out each team's setup costs around $20,000. We also explored intriguing aspects of video processing, like different color formats and methods for aligning video horizontally and vertically. One particularly interesting insight was how the industry optimizes bandwidth by reducing color usage without noticeably affecting visual quality, as the human eye perceives black-and-white detail about 20 times better than color. This led to the YUV model, which converts RGB into a luminance (Y) and two color difference signals (U and V), effectively using less bandwidth for color data while maintaining perceived quality.
What's next for Ross Challenge: 2 bouncing squares
Our next step is to build on the success of the bouncing squares by turning our project into a fully functional Pong game. We plan to leverage the skills we've acquired in Verilog, such as timing control, blanking areas, and conditional logic, to create paddles, ball movement, and collision detection. This will involve additional complexity in terms of input handling for paddle movement, more intricate signal timing, and refining the visuals to ensure smooth gameplay.
Built With
- fpga
- quartus
- systemverilog
- verilog
Log in or sign up for Devpost to join the conversation.