JTAG is old, slow, and intrusive. It isn't the only way to debug embedded processors. Nexus 5001 (http://www.nexus5001.org/) defines several levels of debug support, including JTAG. For one implementation, see http://www.ip-extreme.com/IP/nexus_5001.shtml.
Right now I am experimenting with the Nexus debug in the openmsp430 core -- in this implementation the Debugger connects to GDB via Serial/I2C -- I am at the point where I am building a little debug stick from an ICEStick from Lattice to support this effort -- The openmsp430 is presently in a Spartan 6 LX-16 --