3
\$\begingroup\$

We found a race condition in one of our production circuits.

A CPLD chip acting as address decoder plus a couple other functions, receives address and data signal over two buses. A peripheral device has only one bus, and latches the value on the bus as address on falling edge of the ALE line, then as data on rising edge.

The CPLD outputs the contents of the address bus on high level of the ALE line, contents of the data bus on low ALE line.

schematic

simulate this circuit – Schematic created using CircuitLab

Data sheets say the peripheral needs both the address and data state to be sustained for 2ns after receiving the ALE edge to latch them properly. Unfortunately, in some cases the decoder is faster, leading to the peripheral latching the lines when they are transitioning from address to data or vice versa.

Introducing a 2ns delay on the line to the decoder (while not affecting the signal to the peripheral) would resolve the issue.

The CPLD is filled to the brim so adding extra logic to it won't work, and since it's a part of a device already deployed, reworking everything is out of question (stuff like adding separate 'toggle' line from the CPU, driven separately from ALE) - we need a "hot fix", something small, simple and easy to add. So my question - how to easily introduce a delay of order of 2ns to a line like that? (specifically, not delaying it on the second branch, so that that the peripheral receives the signal 2ns before the decoder does.)

\$\endgroup\$
  • \$\begingroup\$ What's the range of delays needed? So if the tpd is 2 +/- x ns, what is x? \$\endgroup\$ – caveman Jan 15 '15 at 3:42
  • \$\begingroup\$ Cut the trace and add a series resistor and (if actually necessary) cap? A tinylogic buffer? But what if someone else substitutes a faster cpld next year? \$\endgroup\$ – Chris Stratton Jan 15 '15 at 3:47
  • \$\begingroup\$ Does your layout have space to patch in an RC filter? Or could you just use the parasitic trace inductance with a capacitor near the peripheral ALE input? \$\endgroup\$ – MarkU Jan 15 '15 at 3:48
  • \$\begingroup\$ @caveman: -0 +40ns - shouldn't be shorter but there's a plenty of wiggle room up. \$\endgroup\$ – SF. Jan 15 '15 at 4:08
  • 1
    \$\begingroup\$ Experiment. (Or look up the input capacitance and calculate RC). Consider twice what seems to make it work. But as previously stated, I don't like relying on Component performance limitation like that. \$\endgroup\$ – Chris Stratton Jan 15 '15 at 4:25
4
\$\begingroup\$

Find a spare non-inverting gate on the board and route the one signal through that first. Or use two inverting gate in series. Either of those methods should give a few nS of delay.

A small inductor delay line might work too, but you may inject some reflections.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.