Engr 100 at UM is a team project based course for freshmen.

Each team has to research their idea, create their project, and present it to the class. This requires systems thinking, creativity, communication, persistence, and teamwork.

My course topic was Microprocessors and Toys, and each team programmed an Altera DE-2 FPGA board in verilog and assembly to make a new toy.

My group made 3-D Connect 4. Unfortunately the COVID-19 pandemic partially halted production, but our team continued to simulate the DE-2 and build a virtual toy.

Our team’s initial design involved using a 3-D LED array to simulate a 3-D version of the original Connect 4.

Since we moved to virtual simulation, we added VGA monitor support complete with a graphical simulation of the game.

Each team member worked on a separate part of the project. Everyone wrote a device driver in verilog, and a piece of code in assembly. Git was a much needed skill, since each code file was separate but still depended on functions from other pieces of code. This separation of code is a great skill for programmers and makes teamwork much more effective. To make the code separation work, the team still collaborated on documentation for functions such that team members did not need to look at other members’ code to figure out how it works.

Because the code was separated, only the graphics code file would need to be modified if we were to incorporate the 3-D light array as originally intended.

My part of the project was the VGA monitor and graphics, as seen in the image. The Altera board is normally very slow in updating images pixel by pixel, so my code uses concepts from Calculus to efficiently draw filled-in ellipses with a series of overlaid rectangles. This allows the runtime of the graphics functions to be based on ellipse circumference and not area, and my code got so efficient that the naked eye cannot see the program draw each ellipse.