Portfolio
Here is a showcase of my highlighted projects. My full portfolio can be found at my github here.
Projects that are currently in progress can be found on the "Extra" page (login required).
Web Development
Hardware & Processor Design
MIPS Processor Chip
Description
Implemented an 8-bit microprocessor with onboard SRAM memory fabricated onto an (40-pin DIP) integrated circuit chip. Instruction set is loosely based on the MIPS architecture with some significant simplifications. Layouts and schematics were created and tested through Cadence Virtuoso Software. Submitted to the UNLV Engineering Senior Design Competition.
Team Members: Jared Hayes, Jason Silic, Nick Repetti. Faculty Advisor: Dr. R. Jacob Baker
Background
MIPS processors became a widely used processor for embedded systems design and has been implemented in many consumer electronics products, such as routers and Sony video game consoles. The project requires thorough knowledge of computer architecture and digital electronics. The processor is designed on the transistor level with CMOS design concepts using the C5 process.
In order to make the project more manageable for our time and resource contraints, we scaled down the processor to be 8-bits with a 16-bit instruction set instead of the usual 32-bits. We also ommitted pipelining hardware. In hindsight, if we had implemented the MIPS architecture directly, instead of a custom version, we may have been able to create the full 32-bit system in spite of our constraints.
The major steps taken in the development of this chip:
- Create a custom assembly language as a basis for the hardware design of the processor
- Construct gate-level schematics of major processor components in Cadence software
- Run simulations and testing of schematics
- Construct transistor-level layouts of all schematics
- Test layouts with DRC checks and LVS rule compliances for MOSIS C5 CMOS fabrication process. Submit designs for fabrication.
- Design a PCB with LEDs, 7-segment displays, and push-buttons for user-interaction
- Program assembly applications & games to be run on the processor (simon says, calculator app).
Future Improvements
- Implement MIPS architecture directly -> 32-bit system with pipelining
- Fix a sudden voltage spike that occured when outputting data, causing incompatibility with external components
- Implement processor using an ARM architecture
Project Links
Mobile Development
iOS Game App
Description
Dango Dodge is a simple iOS game where you take control of a Japanese dango while dodging hazards and collecting various power ups to achieve a high score. The game is intended to contain various difficulties, multiple characters and game modes.
Background
The app was developed in XCode using Swift, along with SpriteKit libraries tailored toward game development. As with many games, the app was implemented with an object-oriented approach. Most elements of the game are created as objects through the use of classes. OOP principals are utilized in order to efficiently instantiate various types of heroes, hazards and powerups through inheritance and polymorphism.
Future Improvements
- Clean up the class structure and refactor the code to make the project more readable and manageable.
- Make more effective use of inheritance and polymorphism to implement characters and powerups with modified attributes.
- Implement persistence in order to track and record high scores.
- Allow for the implementation of cosmetic items and modifications
Project Links
Embedded Systems
OpenCV Coin Detection
Description
A C++ application that takes in a picture or a video recording of various denominations of coins and identifies them from other objects. Once it identifies the coins, it creates a new duplicate image or video of the coins outlined with circular borders, confirming successful object detection. Then it distinguishes between the currency and outputs a list of the coins and the total monetary value present.
Background
The application was run on a Beaglebone Black (BBB) microcontroller which introduces the possibility of portability and consumer electronic application. I utilized OpenCV libraries, since they specialize in image processing. They provided functions that assisted in color contrasting and edge detection in order to identify circular objects. In order to distinguish between coins, I determined the diameter by enlarging the image and using a function that bounded the circles in rectangles. Then, I measured the length of one of the rectangle sides (effectively squares) in pixels.
The Beaglebone Black does not natively support C++ applications, so a lot of preparation was required to make this project possible.
- The Beaglebone needed to be manually bootloaded with a linux distribution of my choice. Luckily it comes preloaded with an Angstrom distribution that already contains the OpenCV libraries, so I could skip this step.
- I needed to setup an Eclipse IDE for C++ cross-compilation in order to compile C++ programs.
- Configure an ARM toolchain in Eclipse, so that it can communicate with the BBB.
- Update and build OpenCV libraries.
- Compile and load the program into the BBB through Eclipse on my host machine.
Future Improvements
- Refactor inefficient code
- Minimize the potential for inaccuracy when coins overlap
- Figure out a way to distinguish coins from other circular objects