One of the ways major companies interview is to have a homework assignment for you to do. For trading firms, this is often a simple parser or data compression engine. For SpaceX, we came up with problems that would demonstrate clock domain crossing knowledge, packet forwarding and dropping cleanly.
When I first interviewed at SpaceX, the problem was relatively simple:
Design a UART with 13 data bits instead of 7 or 8 bits like a standard UART. Since this is no longer the HW problem, I have uploaded my solution to github: https://github.com/asicguy/spacex_uart
Why I think my solution worked ad got me the job:
1. I chose to base the UART on a standard 16550. If this uart were to be used in a system, it would be trivial to create a driver based upon open source drivers.
2. I point out the good and bad. I spend about 10 or so hours working the problem. I didn’t get to test everything and I hit some problems along the way. Demonstrating issues and how you solved them is important.
3. I chose a synchronous solution and analyzed and presented why I did this. This precluded the need for a CDC fifo. I included an example of one in the appendix.
4. I knew the implementation and the FIFO inside out. I was quizzed. I was grilled. I answered. In my implementation of the CDC FIFO, I could only store n-1 values. The question was presented why can’t you store n. I worked through the problem on the spot and came up with a solution.
Whether you are developing something for show and tell to a potential employer, or you are working on a homework problem, know it inside out. Demonstrate it. And have a clean presentation.