If there’s a point in your test where toggling a particular pin stops the JTAG chain working, or causes a sudden increase in current consumption, then XJDeveloper’s Debug Connection Test screen can help with debugging.
Running the debug test will step through all the nets that can be driven from a JTAG device, except for those that are:
- connected directly to a power/ground net, or
- held constant by entries in the Constant Pins screen or by a Disable Value in a test device’s Busses definitions.
The nets will be set to a specified initial state (driven high, driven low, or undriven), and will then be set high or low one at a time as specified in the Debug Connection Test Settings dialog box (accessed from the Settings cog in XJDeveloper’s Debug Connection Test screen).
Figure 1 – Settings for the Connection Test Debug Options
Wait for Keypress
Debug mode has a Wait for keypress option that allows you to use key presses to manually advance through the level changes one net at a time. This can be useful if you want to monitor current consumption for each combination of levels.
Test All Driver Pins
If a net can be driven by more than one JTAG device (or by a JTAG device and an XJLink pin), adding a tick to the Test all driver pins checkbox will test the net multiple times, using a different driver each time.
Forward/Reverse and Random Net Order
There can be times when the problem only occurs when nets are changed in a particular order (e.g., step B to A causes a problem but A to B doesn’t). If you have been unable to locate the source of the problem, reversing the sequence direction may be helpful. This is done by changing the Direction setting.
If none of the above tests have identified the cause, you may find a soak test beneficial. This can be done by ticking the Use random setting algorithm checkbox. The test will start with all nets set to their defined initial state and then repeatedly select a net at random and set it to a random value. This will continue until the “q” key is pressed to terminate testing.
A value can be provided to seed the pseudorandom sequence being used. This can be useful because it allows this test to be reproduced.
Example
To debug a broken-chain error, the following process can be a useful one to follow.
- Try setting all the pins low to see if that recreates the problem:
- Set State all nets will be set into at the start of the test to “Input” so that the test will commence with them all in a high-impedance state.
- From the State the nets will be switched to menu, select “Low” and run the debug test. The first net will be driven low and the value read back to check for conflicts. This process repeats for the other nets in turn until they are all held low. If a conflict is found, the system will disable all nets and return the JTAG devices to a BYPASS state.
- If the test stopped because it detected the conflict, check where it halted to see the combination of pin values that caused the issue.
- If no problem was found by setting nets low, repeat the test, this time switching the pins from inputs to high:
- Set State all nets will be set into at the start of the test to “Input” so that the test will start with them all in a high-impedance state.
- From the State the nets will be switched to menu, select “High” and rerun the debug test. The first net will be set high and the value read back to check for conflicts. This process is then repeated for the other nets in turn until all nets are held high. If a conflict is found, the system will disable all nets and return the JTAG devices to a BYPASS state.
- If the test stopped because it detected the conflict, check where it halted to see the combination of pin values that caused the issue.
- It can often be a combination of highs and lows that produce the error, so the next step is to start with all nets set high and then gradually set each one low, or vice versa. You can reverse the order in which the nets are set—this is useful if the conflict only occurs under a specific set of other conditions.
- Set State all nets will be set into at the start of the test to “High”
- From the State the nets will be switched to menu, select “Low” and run the debug test.
- If this doesn’t exhibit a problem, repeat with the “Backwards” Direction radio button selected.
- If this has still not located the problem, repeat the process for the remaining combinations until the problematic sequence of values is found:
- Start with all nets “Low” and run a test with them being changed to “High.” Repeat with the sequence direction reversed.
- Repeat the original test where nets start at “Input” and are changed to “Low”, but with the sequence running in reverse.
- Repeat the original test where nets start at “Input” and are changed to “High”, but with the sequence running in reverse.
- If none of the above reproduces the error, run a soak test by placing a tick in the Use random setting algorithm This selects the nets in random order and sets them to random values until you stop the test (by pressing the ‘q’ key).