This project was done as a part of our Digital Design Laboratory course, which I later became a TA for (eventually becoming a Lead TA). The project was to design a robot self-test, to test as many features as possible on the AmigoBot. The course was a joint venture between the technical and the technical-writing faculty. Therefore, in addition to the assembly/VHDL code we had to write to make the self-test operational, we had to also write a manual for the usage of the self-test.
Very few restrictions were in place as far as this project was concerned. The difficulty is making tests independant. For example, if the robot fails a test of moving, the question then becomes “where did the problem lie?” Was the battery power too low? Did the robot actually move, but the sensors failed? Did the motor enablers fail? Even more complicated, there are 8 IR emitters/receivers. If we don’t receive something, how can we be certain which IR failed, and was it the emitter or receiver? Coming up with a proper chain of tests proved challenging, as we were supposed to not rely on any external tools (the robot should be able to diagnose itself).
Complicating matters even further, the FPGA only had enough space for a program about 2KB in size after we loaded the simple computer hardware design we created.