Doing an internship at a small company is significantly different that doing it at a multinational firm! This is my seventh week here at AESTE and I can honestly say that the experience you will find here is like no other. Let me rewind back to the start of this week to see what I mean. Before this week, we were generally doing programming. It was fun, and challenging, and we definitely learned so many things. Then we got an email from our supervisor telling us that a customer needs an embedded system device and gave us the specifications. We were thrilled! Finally we could do some hardware work. Until we had a meeting with our SV!
The device we were to design was not simple at all! It contains a CPU, RAM, SD Card, Wifi, GSM, Camera, battery, alarm and LED light! We basically were building a mobile phone! The customer is a software guy and doesn’t know what hardware he wants, and just provided us with very blurry guidelines. For us (me and my co-worker Sumaia) it was very vague what we needed to do. As student, we have always been given the exact specification that are required and we would come up with a design that meets this specs. However, here we had very limited boundaries and our job first was to come up with the rest! In our meeting with Dr. Shawn (our SV), we came up with the specifications for most of the devices, and some guesses and estimations for the ones that we don’t have enough information about. The meeting was mostly one-sided where Dr. Shawn did almost all the work! For us it was an opportunity to learn how to do this (crucial) step.
Next task for us was to come up with the design for this system. To design this, is to come up with specific modules to use, make sure that they are compatible with each other, determine what protocols they are using and how to interface with them, calculate their power consumption, and make sure that they are within the limitations of size and power. To make the job even harder, each one of us was asked to come up with three designs, and we were given 2 days to do it. Fun, huh? Take my word for it, it was tiring, but it deserved it! What I have learned in these 2 days, I wouldn’t have learned it in 2 semester! As we learned later, in big companies, typically this step is done by senior engineers, and then junior engineers – such as us – are given a list of components and specs and are asked to (assemble) it.
There is no point of listing all the components we considered, and Sumia did a great job explaining most of them here, but I’ll give a brief explanation of some of the stuff I did. We started with the camera, as it is the sole input device we have in this design. Its output is an 800*600px video at 25fps. Though it is not high, the output is not compressed, giving us a datarate of 288Mbit/s. Before deciding what camera to use, we had to learn about the different protocols that are used in embedded systems, including SPI (Serial Peripheral Interface), I²C, USART (Universal asynchronous receiver/transmitter), UART, RS232, CSI (Camera Serial Interface) and also some brief description of high speed protocols, such as USB. Also, our device will live stream the video captured by the camera. Hence, we needed to use a protocol that is capable of such high speed. So, automatically we excluded low speed protocols (I²C, USART, UART, RS232.. etc) and then chose the modules accordingly. For some of these protocols (such as CSI), we had to even take a look at the timing diagram to determine if we can use it or not.
One interesting part of the design was the CPU. It was required to use an FPGA instead of ASIC. This wasn’t my first encounter with FPGA. I knew what an FPGA is, and what they are used for, but I have never actually used them before or decided on using them for a design. So, there was a lot for me to learn so I can choose a proper one. I learned about configurable Logic Blocks (CLBs), Lookup Tables (LUTs), logic cells and logic elements, pure FPGAs, and FPGAs with an SoC, how to interface an FPGA with different modules and how to estimate power consumption using Xilinx or Altera estimating tools. I know now all these are still basics, and I will learn a whole lot more when I use it, but given that I learned all that in two days and I was able to get a rough idea on which one is suitable and which is not, I think it is OK!
If you are reading this, and you are an EE student, who is looking to get some real world experience, and to learn something new everyday of the week, I encourage you to apply for an internship here. If you cannot, then do it at a successful small company. You will be doing very interesting stuff and not just paper work!