MIPS 16 Processor Design in Verilog

processorMIPS is a 32-bit RISC instruction set. As part of the undergraduate capstone project, we (a team of 4 people) designed a reduced version of MIPS instruction set with 32 instructions operating on registers of 16 bits ( 16-bit operations). The design was done in Verilog and could perform mathematical operations, logical operations, DMA, subroutine linkage, branching and 8 vectored interrupts. In order to facilitate testing, I implemented a 2 pass assembler in Java that would generate machine code for an assembly code which supported labels. The whole project report can be downloaded from here. Read more

FreeStyle – Virtual Canvas

freestyleFreeStyle – A Virtual Canvas is an interface that provides accessibility to computers through gestures captured by a webcam. The initial idea was to build an interactive teaching tool for teaching concepts in Physics, Mechanics etc by providing an interface which uses live webcam feed, detect gestures and create a virtual canvas where concepts can be shown as animations. Color markers were used for better detection. Initial implementation was done in MATLAB and then later on in OpenCV for better performance. A embedded prototype of the same was implemented using a Beagleboard and OpenCV. Optical character recognition was also added as an enhancement for scanning text/text input. Read more


TYSM is short for Thank You So Much. Birthdays are wonderful. If you are an active person in social media, you have a lot of “friends”. You get a lot of birthday wishes on Facebook which feels really great. Wouldn’t it be nice if could we thank everyone personally. But the sheer number of wishes makes it a daunting task. So the coding geek that I am, thought of automating this. The idea was actually inspired by a post in Quora and I thought Cool!! lets try implementing this. So I ended up writing a python script that responds with different types of Thank you messages chosen randomly from a pool of such messages. Posts that are replied to are not replied again on every run of the script. The source code and instructions can be found here.


Navigate was an IIT-Bombay Nexus Robotics competition held in October 2010. The problem statement was to design an autonomous robot which could follow grids in the form of white lines on a black background, carry boxes of given dimension from its original location to fixed destination. Correct type of box had to be picked. This was implemented using a ATMega128 AVR board as the controller with DC motor control using PWM, Line and Obstacle detection using IR Sensor Pairs and a clamping mechanism for dragging the block around. Unfortunately the sensors failed during the competition and we couldn’t compete, but I got some good procedural Embedded coding experience in AVR C.

Other Projects

RFID based mail sorting system: RFID based mail sorting system is a system (only electrical/signalling module) which basically sorted mail according to the zipcode with RFID as ZIP/PIN code indicators of the mail. A radix sort like algorithm was implemented on an ATMega 128 board.
PS2 keyboard controller: Interface a PS2 keyboard with a ATMega 16 board along with a 16X2 LCD for displaying text typed on keyboard.
Wall-E : A line follower autonomous bot using ATMega 16 chip as the controller.
Roll Of Die : Image Processing project using MATLAB to detect the number on the dice.
Parbot: First robotics project. Use parallel port of a computer to actuate simple DC motors.