Dr. Johnson, Is there a way one can terminate a line, like a data line, which can be driven by multiple devices on the line? The line has various impedances as it is routed on different layers on a multi layer board. The driver and receivers in any given combination are not equally spaced due to placement and routing. From the simulation using the IBIS models on BoardSim by HyperLynx I am getting tremendous overshoot and undershoot for almost every driver.
There are a number of band-aid solutions that may help if you are having only mild difficulties with overshoot and ringing. These solutions include adding an "AC" terminator at one or both ends of the line, and adding a diode terminator at one or both ends.
The AC terminator comprises a resistor and capacitor in series, connected between the PCB trace and its associated reference plane. The resistor is set equal in value to the characteristic impedance of the line. To be most effective, the product of C*Z0 (where Z0 is the line impedance and C0 is the capacitance) must be made larger than the round-trip delay of the transmission structure (not merely larger than the signal risetime--it must actually be larger than the roundtrip delay of the whole structure, perhaps twice as large). The AC terminator will help damp the ringing at the expense of requiring additional Iout from the drivers (which may not meet V(OH) or V(OL) on the first edge as a result).
The diode terminator comprises one diode from the PCB trace to Vcc (to limit overshoot) and a second diode from the PCB trace to Gnd (to limit undershoot). If the diodes are sufficiently speedy, and sufficiently beefy, and sufficiently well laid out, they will clamp the overshoot and undershoot. On a short bus with only a mild ringing problem the diodes help. On a severely long bus you will find that the diodes, while they provide the correct VOLTAGE termination, do nothing to help dissipate CURRENT on the line. Funny behavior, including unusual glitches after one round-trip time, may result.
From your description of the severity of the overshoot problem, neither of the above approaches will help.
What you have built is a "hair-ball net", meaning that it has no regular structure that may be exploited to gain signaling advantage. Your only recourse is to the three overriding principles of hair-ball design, namely:
- There always exists some impedance sufficiently large that, if placed in series with the driver, will damp out the ringing.
- There always exists a driver sufficiently slow that it will not ring.
The trick with using idea (1) is to use a resistor large enough to damp the ringing but yet not unduly exacerbate your settling-time problems.
The trick with using idea (2) is to locate drivers that guarantee a minimum risetime. I suggest (2) not so much because I think you will do it, but to REMIND you to simulate your net with drivers even faster than the ones you have today, because that is undoubtedly how your board will be stuffed at some point in the future.
(3) The last general principle of hairball design is that capacitance always hurts. No matter where it is placed on a hairball net, it always increases the difficulty of obtaining good signals. Specifying drivers with a smaller value of Cout (in the tri-state condition) will help.
I hope these comments are helpful to you.
Dr. Howard Johnson