Hallo,
ich arbeite momentan an einem PC-Oszilloskop.
Hier ist mein Hardware:
- Flaschy Board
- Xylo-L USB Board
Der ADC läuft mit 125Mhz und der FIFO (FX2) mit 50Mhz.
Ich werde für das Zwischenspeichern einen Block-RAM verwenden.
Meine Vermutung ist, der RAM wird sehr schnell gefüllt als gelesen was
zu Daten Verluste führen kann.
Liege ich hier Falsh? Wenn ja, gibt es eine andere Möglichkeit die Daten
fast Verlustfrei zu senden?
Gruß
Ming Lee
Joge schrieb:> Meine Vermutung ist, der RAM wird sehr schnell gefüllt als gelesen was> zu Daten Verluste führen kann. Liege ich hier Falsh?
Nein.
> Wenn ja, gibt es eine andere Möglichkeit die Daten> fast Verlustfrei zu senden?
Der einzige Weg: du mußt die Daten schneller zum PC senden als sie
eingelesen werden. Wenn du das nicht kannst, wird dein Puffer irgendwann
gefüllt sein und du hast einen Datenverlust.
In der Praxis wird das dann ganz einfach so gemacht, dass ein Speicher
ab einem Triggerzeitpunkt gefüllt wird. Und wenn er dann voll ist, wird
das weitere Einlesen von Daten angehalten.
Danke für die Antwort^^
> In der Praxis wird das dann ganz einfach so gemacht, dass ein Speicher> ab einem Triggerzeitpunkt gefüllt wird. Und wenn er dann voll ist, wird> das weitere Einlesen von Daten angehalten.
Das Einlesen der Daten soll nicht eingehalten werden. Deswegen habe ich
mir gedacht, wenn die RAM voll ist, sollen die hinkommenden Daten
irgendwie zwischengespeichert. Aber ich weiß nicht wie ich das
bewerkstelligen kann?
Joge schrieb:> Das Einlesen der Daten soll nicht eingehalten werden.
Wenn du "angehalten" meinst, geht das nur, wenn die Datenverbindung zum
PC incl. Abspeichern oder was der PC sonst noch damit anstellen soll,
immer und garantiert im Mittel schneller ist als die Aufnahme.
Kurzzeitige Einbrüche lassen sich durch große FIFOs umgehen, aber wenn
die Datenverbindung im Mittel langsamer ist als die Aufnahme kannst du
nichts machen. Wenn ich da allerdings 125MS/s lese und dann den Cypress
FX2. Tja, dann passt das nicht zusammen. Der FX2 schafft maximal 40MB/s,
und das nur bei guter Pufferung und nur im Mittel. Damit kannst du
niemals die Daten in Echtzeit zum PC streamen. Dafür bräuchte es schon
PCIe, damit könnte es klappen, wenn die Puffer groß genug sind und du
einen schnellen PC mit schnellen Festplatten hast. Denn irgendwo müssen
die Daten ja hin. Außerdem wirst du mit dem S3E500 auf dem Board keinen
Blumentopf gewinnen, der hat kaum BRAM.
Danke für die Antwort ^^
Lothar Miller schrieb:> In der Praxis wird das dann ganz einfach so gemacht, dass ein Speicher> ab einem Triggerzeitpunkt gefüllt wird. Und wenn er dann voll ist, wird> das weitere Einlesen von Daten angehalten.
Ich habe versucht deinen Ansatz zu implementieren, aber bin leider
gescheitert.Bei mir war das USB (CyAPI) Empfang einen Problem.
Kannst du mir dienen Ansatz detaillierter erklären?
Für Vorschläge und Tutorials-Links bin ich sehr dankbar.
Gruß
Lee