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.

Oscillating (Iterating) Quine with Initial 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...)

How to Find Input Capacitance Using Spice

Spice is the circuit designer's Swiss Army knife. We use it whenever we need to precisely determine the properties of our circuits. This page shows how to find the input capacitance of a node (usually the input of a digital circuit, like an inverter) using Spice.

The First Rule of Using Spice is Don't Use Spice

You build a CMOS inverter for your boss and she asks you what the input capacitance is. You answer: “I'm not sure, but I will find out right away!” What you should have been able to say to her is: “Well, boss, the first thing I did was to familiarize myself with the 12nm CMOS process and I found that the input capacitance is 0.8 fF/μm, so of course my 7μm PMOS, 3μm NMOS inverter has about 8 fF of input capacitance. ” But you didn't say that, because you didn't know. You are a spice monkey.

(Continue reading...)

What is RAM?

This article is a description of the different types of RAM for the average (non-technical) person. If the terms SRAM, DRAM and flash memory conjure nothing but an alphabet kaleidoscope then this article will help you make some sense of these terms.

Why Memory?

One of the most important fundamental features of any computing system is the ability to store data to memory, recall the data, and overwrite the data. By memory, we mean the ability to store things, recall them and change them if necessary, referring by analogy to our concept of human memory.

(Continue reading...)

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...)

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...)