Die schnellsten Prototyping-Plattformen basieren auf Baugruppen, die mehrere feldprogrammierbare Gate Arrays (FPGAS) enthalten, die zusammen als virtuelles SoC funktionieren. Die höhere Leistung hat aber auch ihren Preis. Erstens benötigt es mehr Zeit, das virtuelle Ziel in die FPGA-Fabric zu integrieren, als ein Hardware-Design benötigt, die Emulation zu kompilieren. Zweitens schränken die FPGA-basierten Prototypensysteme die Anzahl der internen Logiksignale ein, die nach außen gesendet werden können. Der Programmierer kann zuverlässig nur auf die
Signale zugreifen, die auch vom endgültigen SoC verwendet werden.
FPGA-Prototyp-Plattformen ermöglichen, bis zu einem gewissen Grad, das Erfassen von interner Logik. Aber das Einfügen von internen Probe-Punkten, um Logiksignale aus dem Baustein herauszuführen, hat häufig eine negative Auswirkung auf die Leistung. Dies kann die Ausführung um den Faktor zehn und mehr verlangsamen, was den Vorteil, einen FPGA-Prototypen anstatt eines Emulators einzusetzen, wieder zunichte macht. Die größte Leistung bezüglich der Ausführungsgeschwindigkeit ist verfügbar, wenn das SoC aus der Halbleiterfabrik kommt, seine ersten Qualifikationstests bestanden hat und auf einer Prototypenbaugruppe läuft. Aber zu diesem Zeitpunkt ist die Einsicht in die internen Abläufe extrem eingeschränkt.
Bis ins Jahr 2000 wurde die Einsicht in interne Abläufe eines eingebetteten Prozessors vorwiegend durch ein Bondout-Gehäuse erzielt, unterstützt von Logikanalysatoren die helfen, Probleme mit der Kommunikation zur externen Peripherie zu erkennen. Dies ebnete den Weg für weitere Debugging-Techniken und steigende Integration – mit dem Effekt, dass weniger Tastspitzen von Logikanalysatoren eingesetzt werden konnten.
Die Einführung des Joint-Task-
Action-Group-Teststandards (JTAG) entschärfte das Problem der hohen Kosten und schwierigen Entwicklung von Bondout-Gehäusen für embedded Systeme. Ursprünglich war dieser dazu gedacht, nur für den Produktionstest und die Qualifikation auf spezielle Testlogik innerhalb des Bausteins zugreifen zu können. Die JTAG-Schnittstelle fand jedoch weitere Anwendungen im Debugging und dem Programmieren von Flash-Speicher auf dem Chip.
Der JTAG-Port bietet einen vergleichsweise langsamen Zugang, kann aber von Software-Debuggern genutzt werden, um die Prozessoren in einem SoC zu starten und zu stoppen. Zusätzlich ermöglicht er den Zugriff auf die Register auf dem Chip, auch wenn die Ausführung unterbrochen ist. Prozessorarchitekten nutzen diesen Exploit aus, um Debugging-Register und unterstützende Logik einzubauen. Die Intel-x86-Prozessorfamilie war unter den ersten, die eine Debugging-Unterstützung wie z.B. Breakpoint-Register auf dem Chip installierten. Einmal angehalten, konnte der Software-Debugger JTAG-Befehle nutzen, den Inhalt der internen Register überprüfen und die Inhalte des Speichers lesen und bearbeiten.
Das Debugging über JTAG hat aber einen großen Nachteil: die Geschwindigkeit. Ausführungsdaten in Echtzeit zu streamen, ist damit unmöglich. Eine Option wäre, auf dem Chip einen kleinen Ringspeicher einzubauen, der Änderungen, die durch Verzweigungen in Echtzeit verursacht werden, erfassen kann. Diese können dann in der Ablaufverfolgung des Prozessors angezeigt werden.
Wenn ein Prozessor einen bedingten Programmstopp erreicht, bleibt die Ausführung stehen und der Entwickler kann dann die Sequenz oder die Ereignisse, die ihn interessieren und unmittelbar vor dem Breakpoint eintraten, über den JTAG-Port auslesen sowie in einen Debugger einspielen. Obwohl der Buffer nicht den vollen Satz an Ereignissen enthält, kann die Debug-Software durch Korrelieren der Verzweigungsentscheidungen mit der Kopie des Codes die Sequenz der Ereignisse anzeigen, die bis zum Breakpoint geführt hat.