This page is a compendium of short articles on the topic of hardware design, but intended for a more general audience than my scholarly publications.

The Art of TAing

This article is an overview of my insights into how to succeed as a tutorial teaching assistant (TA) in a university. I was a tutorial TA eight times for three different courses in electrical and computer engineering at the University of Toronto. I won three departmental TA awards, so I had some success. Although I TAed electrical engineering courses, I expect that this material is applicable to any problem-solving oriented tutorial in engineering or the sciences. Below, I use some examples from electronics. If you don't understand them, simply ignore them as they are not critical.

Why Teach?

I found two good reasons to teach tutorials. First, I enjoyed it. I liked imparting my knowledge to students and helping them learn. I am amazed at how quickly students absorb knowledge and I am often impressed with the depth and intelligence of their questions. The second reason to teach tutorials is to learn the material. Of course, you probably know the material, but if you really want to know it, then you should teach it. In fact, teaching is a good test of understanding. If you can teach it, you understand it. Sadly, it's not necessarily true that if you understand a topic, you can teach it. I'm sure many of you have seen this proved by seemingly intelligent professors who couldn't teach a kangaroo how to jump. It's takes sincere effort to construct a concept in a way that's understandable to others.

If you're still not convinced, don't listen to me, listen to Nobel-prize winning physicist Richard Feynman:

(Continue reading...)

Iterating Quine with Transient

A quine is a self-replicating program. A program that, when run, prints itself. Below is a quine-like program in C language that does something a little different than a standard self-replicating program. It prints another program that, when compiled, prints another program, and keeps going for 26 iterations after which it loops back and starts printing the 13th iteration through 26th iterations over and over. I call it an oscillating quine with initial transient.

(Continue reading...)

Introduction to Content-Addressable Memory

Content-addressable memories (CAMs) are hardware search engines that are much faster than algorithmic approaches for search-intensive applications. CAMs are composed of conventional semiconductor memory (usually SRAM) with added comparison circuitry that enable a search operation to complete in a single clock cycle. The two most common search-intensive tasks that use CAMs are packet forwarding and packet classification in Internet routers. Other applications where CAMs are used include processor caches, translation lookaside buffers (TLB), data compression applications, database accelerators, and neural networks.

(Continue reading...)

CAM References

This article is a listing of references in the field of content-addressable memory with a focus on circuit design. Some networking papers are included that explain the applications where CAM are used. Please email me at with omissions.

(Continue reading...)