Hallo!
Ich würde gern die Zeit messen, die mein FPGA für eine bestimmte Aktion
benötigt. Spontan würde mir einfallen, einen eigenen Prozess dafür zu
spendieren, der pro Takt einen Zähler inkrementiert und zusätzlich
sensitiv auf das Signal ist, das meine Aktion startet und auf das
Signal, das anzeigt, dass meine Aktion beendet ist. Durch den Zähler und
die Taktfrequenz, kann ich mir ja dann die benötigte Zeit errechnen,
oder?
Gibt es noch andere (bessere?) Möglichkeiten die Geschwindigkeit zu
messen, oder ist das wie oben beschrieben die sinnvollste Lösung?
du schreibst von einem prozess (ich kann noch nicht VHDL) aber wenn das
ein zeitilicher "ablauf" ist und du über ein oszilloskop verfügst,
kannst du anfang des prozesses ein portpin auf 'high' setzen und am
schluss au 'low'; und dann mit dem oszilloskop messen wie lange der pin
auf 'high' ist.
Ja, es gibt eine bessere Lösungen :
a) Deine Aktion ist getaktet :
Dann verwende eine Simulator um zu sehen, wieviele Takte benötigt
werden.
b) Deine Aktion ist kombinatorisch :
Dann verwende die Analysetools des FPGA-Herstellers zum Berechnen der
Durchlaufzeit. Diese hängen sehr stark von Temperatur,
Versorgungsspannung und Bauteiltolereanzen ab, sodass nur diese
berechneten (!) Werte garantiert sind. Eine Dimensionierung aufgrund
irgendwelcher Messwerte von Durchlaufzeiten ist unprofessionell und
höchst riskant.
@ Gast: Es geht um die Auswertung einer (großen) Matrix.
@ Klaus Falser: Ja, meine Aktion ist getaktet. Simuliert habe ich
bereits mit ModelSim. Aber es ist eben nur eine Simulation... Da ich mir
nicht sicher bin, wie verlässlich die Simulation ist, wollte ich die
Geschwindigkeit auch nochmal "live" messen.
> Ja, meine Aktion ist getaktet.> Da ich mir nicht sicher bin, wie verlässlich die Simulation ist...
Dann solltest du morgens aber auch kontrollieren,
ob die Erde noch rund ist ... ;-)
Die Simulation ist genauso verlässlich, wie du das, was du simuliert
haben willst, beschrieben hast. Wenn du natürlich die falschen Stimuli
auf die Simulation gibst, oder deine Schaltung falsch beschrieben hast
(Übergang zwischen Taktdomänen) dann verhält sich die Implementation
anders als die Simulation.
Allerdings hilft dir dann auch eine Laufzeitmessung nicht wirklich
weiter...
Also fuer ganz praezises Timing gibt's die Simulation nach der
Synthese, wie schon als "Timing Simulation" genannt. Besser als das
wirst du wohl auch nicht messen koennen. Allerdings kann die Simulation
von komplexen Ablaeufen (und dazu gehoeren Operationen mit "grossen"
Matrizen auf jeden Fall) quasi beliebig lange dauern....
Sebastian
Nur mal so nebenbei gefragt: Was ist denn der Unterschied zwischen einer
"Timing Simulation" und einer "normalen" Simulation?
Ich würde bei getakteten Prozessen einfach die Durchläufe "per Hand"
zählen. Sprich: Durch logisches Überlegen müsste man eigentlich auf die
Anzahl der Takte kommen, wenn man weiß was man programmiert hat.
Klaus Falser wrote:
> Blödsinn, man braucht wirklich keine Timing-Simulation um festzustellen> wieviel Takte eine "Aktion" braucht !!!
Richtig, man hat´s ja selber sequenziell beschrieben, dann weiß man,
wieviele Takte es benötigt, oder man hat eine kombinatorische Logik,
dann bekommt man durch die Timing-Simulation raus, wieviel Zeit
meinetwegen die Addition benötigt, bis alle Ausgänge ihren Pegel
angenommen haben. Aber ich glaub, den Unterschied hat der Fragesteller
noch nicht begriffen. Wahrscheinlich ein C-Programmierer....
Hansi wrote:
> Nur mal so nebenbei gefragt: Was ist denn der Unterschied zwischen einer> "Timing Simulation" und einer "normalen" Simulation?
Die "Timing Simulation" ist umgangsspachlich für die Post-Route
Simulation, damit kann man sehen, ob der wirkliche Chip mit dem fertig
gerouteten Design so funktioniert, wie man das beschrieben hat. Oder ob
eventuell durch Gatter-Laufzeiten o.ä. irgendwelche Timings
durcheinander kommen.
bei ner normalen simualtion werden die gatterlaufzeiten nicht beachtet.
sprich ein kombinatorischer pfad wird dort quasi sofort ohne meßbaren
zeitverlust durchlaufen.
bei einer timing simulation werden diese Gatterlaufzeiten jedoch mit
einberechnet, wodurch man so erkennen kann, ob z.b. ein kombinatorischer
Pfad zu lang ist um mit der restlichen synchronen schaltung
zusammenzuarbeiten. Wenn ein kombinatorischer Pfad nicht zu den
Taktflanken mit der abarbeitung fertig ist, dann werden falsche werte
für die weitere berechnung übernommen.
Eine Timing Simulation zu verwenden, um zu sehen, ob alle
Gatterlaufzeiten eingehalten werden, grenzt schon an Wahnsinn.
Man hätte bei tausende Pfade die man im Simulator graphisch
kontrollieren müßte.
Genau für diesen Zweck gibt es den Timing Analyzer, der die alle
angegebenen Pfade überprüft. Dies nennt man statische Timing-Analyse,
weil die Durchlaufzeiten nicht von den Signalverläufen abhängen.
Man sollte den Anfängern nicht noch auch unnötige Blödsinne beibringen,
VHDL ist für manche knifflig genug ...