# Butterflies, Nullclines, and Arrows

In my last post, I began with three questions:

1. Each line of the butterfly curve is the DC transfer function of one inverter in the SRAM cell.  Why does it make sense to draw the DC transfer function of an isolated two transistor circuit on top of a plot that represents a closed loop six transistor circuit?
2. Why is SNM measured by fitting the largest box possible inside of the butterfly curve lobes?  Why not a line, or a circle?
3. When a cell is written to, do the cell node voltages follow the paths shown by the butterfly curve?

Question #2 was answered as we discovered that the butterfly curve of a 6T SRAM cell is really just the nullcline points of its state space, and that the ideal 6T SRAM cell has nullclines that form square boxes.  A perfect cell would have squares whose sides are Vdd/2 – so the closer our noise margin is to that, the better.

Now let’s turn our attention to answering questions #1 and #3.  First, recall the following figure showing how the cell nodes (represented by the orange ball) move through the state space from an arbitrary point to one of the stable solutions. At each point along the trajectory, there are two vectors “pushing” on the cell nodes.  In the last post, we drew the state space in 3D with different heights to visualize the forces being exerted on the cell.  In reality, for a 6T cell, these forces are currents being injected into the cell node capacitances by the cross coupled inverters.  Take a look at this schematic showing the 6T cross-coupled core.  To see why these vectors are important, I’ve added two DC voltage supplies to “force” the cell nodes to stay at various points in the trajectory above. Since inverter f is trying to moves the cell’s Vx voltage, then the DC supply must sink/source a current If to keep it from moving.  Similarly, inverter g is trying to move Vy, so it’s DC supply must sink/source a different amount of current Ig.  These currents are equivalent to the vectors in the trajectory plot above. Now, this is all well and good for positions (1,2,4,5) along the trajectory.  But what about position (3)?  At position (3), there is no red current component since it is a nullcline point (inflection point.) This means that inverter f is doing nothing! So whatever Vy and Vx are at position (3) must be a point on inverter f‘s DC voltage transfer curve.  To put this another way, all of the points on inverter f’s DC transfer curve are nullcline points. So to get a butterfly curve, all we need to do is simulate the transfer curve for the two inverters by themselves.  Then we can draw them on top of the SRAM cell state space and be confident that these points are nullcline points. This is the method described in Seevinck’s 1987 JSSC paper. He simply simulates the DC transfer curve of the inverter in isolation, and uses voltage controlled voltage sources to rotate this curve 45 degrees to make SNM calculation simpler.

Knowing this nullcline – butterfly equivalence answers question #1. We can also now answer question #3.  When a 6T SRAM cell is read / written to, the butterfly curve has nothing to do with the actual path of the cell nodes.  As we have shown, the butterfly curves only tells us the points of inflection in the cell node path, not the path itself.

Up to this point, we have only considered the 6T cell.  What about other cell types? 4T resistor load, 5T, Portless, 7T, 8T, 10T? For these cells, the situation can get more complex. Take a look at the next figure, which shows a Portless cell during a read operation. As you can see, there is an additional current Iaxs to account for.  This means that we can no longer simply plot the transfer curve of the inverters on the cell’s state space to find the nullclines.  If we did, then the AXS transistor would be unaccounted for.

So how do we find the nullclines for non-6T cells? My suggestion is to map out the vectors in the entire state space, and then look for the nullclines directly. Without getting into the gory details, you basically pick a bunch of points in the state space (quantize it) and then for each point, figure out the cell node currents.  These currents can be found using the method we’ve been talking about – inserting DC voltage supplies and measuring how much current is required to hold the cell nodes at one location in the state space.  Using the I = C(dV/dt) relation, we can quickly back calculate dV/dt for every I that we measure.  These dV/dt values describe the state space vectors and can be used to locate the nullclines.

In the next figure, you’ll see a vector field for a 6T cell.  For every point in the space, I ran a DC simulation using the described method to extract dV/dt for each dimension. The trends look exactly as expected with the vectors funneling the cell toward the stable nodes. If we want to figure out the butterfly curve and the SNM, we simply trace the nullclines by interpolating the vectors to locate points of inflection.  An example is shown in the next figure where the nullclines are traced and the SNM is calculated using the largest square method. This type of analysis is great since it allows us to analyze stability for ANY type of SRAM cell without doing anything special to the cell schematic.  In addition, by having the entire vector field mapped out, we can do a great deal more than simply finding nullclines and butterfly curves.  Such vector fields can be used for dynamic stability measurements, separatrix tracing, separatrix affinity measurements, and quasi-transient qualification, to name a few examples.  Unfortunately, generating the vector fields by hand or with PERL / SPICE scripts can be quite tedious.  To address this need, I’ve built a Python tool for automatically generating vector fields and analyzing them.  In fact, the examples above are direct outputs from this tool.  Feel free to read more about it and download it for your own use at: http://vlsitools.com/?req=arrows. 