Okay, so technically I already broke my only resolution (post once a week), but I’m fine with this because I did technically create something for my website, just not a blog post. If you’re curious, you can check it out here, but warning, it’s designed for external audiences!
Anyway, the topic of the day is pulse response. What that means is sending a pulse (to defined) into some system, and seeing what happens on the output. In simple systems, we like to think of it as whatever goes in should probably be the same as whatever comes out. While that’s eventually true, when it comes to sending lots of information, it better be true fast.
A pulse is simply a “box” signal we send into a system and observe the response. Start low, go high, come back down. Instead of just sending it into some transistors or resistors, we’re going to send it down a transmission line now. While I’ll have a post up later about transmission lines and how to derive them, for now all we need to know is that they’re a huge network of RLCs. We take the line (just a long wire), slice it up into very small pieces, and get the resulting schematic:
If we get $R=0$, and $G=\infty$, we have a lossless transmission line. No resistance means no power gets burnt up in the line, so whatever goes into the line comes out at the other end. Additionally, we can derive a characteristic impedance for the line $Z_0$, but that’s often given. A matched line is a transmission line where the impedance on both ends of the is the same as the characteristic impedance. Without a match, we get reflections that bounce back and forth on the line. If this is a bit confusing, no worries, just remember that it distorts our signal pretty badly (as we’ll soon see).
* Lossless Transmission Line Pulse testing .model TL1 LTRA(len=1 L=75n C=30p R=0) $ 50 Ohm line O1 tl_in 0 tl_out 0 TL1 $ lossy TL RL tl_out 0 50 $ load termination *RS source tl_in 50 $ source termination *CL tl_out 0 2p $ parasitic capacitance vl tl_in 0 pwl (0 -1 0.1n 1 1.9n 1 2n -1) .tran 1p 8n .options list node post .end
Above is the SPICE code a single pulse, don’t worry about the commented out $C_L$ or $R_S$, we’ll be bringing that in soon. We send it into $O1$ (our transmission line) and view the output.
Perfect! We get the same thing, just some stretch of time later. With a perfect match ($Z_0=R_L=50\Omega)$, we should have no problems. If we want, we can calculate the delay and compare it to a model, but for now we’ll just approximate it to 1.5ns. Now let’s try putting some small capacitors on the load end, and seeing what that does.
It’s not quite the perfect trapezoid we sent in, but it’s not that bad. There’s still some delay as it propagates down the wire, as well as a little low pass filtering taking place. We know it’s lowpass because our sharp pointed edges rounded out, as the high frequency signals that generated them were filtered by the capacitance on the line. Additionally, we have a couple ripples now. They seem pretty small and out of the way, so it shouldn’t be a problem right? Well, let’s look at what happens when we send a bit stream down the line!
Whoa, things got crazy there by the end! While it may not look like a problem at first, it’s always important to simulate and test these with long bitstreams, so we can see the effects of all ripples down the line (definitely not stressing this because of personally making an error like this, no way). With a small capacitance, it’s not the biggest deal. Sure the bits get ugly, but it’s not the end of the world, we can still faithfully make out 1’s and 0’s. As the load gets larger and larger however, we definitely lose clarity in between our signals. Next I’ll talk about some of the various ways we can categorize and remove these ripples.