Hallo zusammen, für die Kombination des USB Moduls FT601 und des ADCs LTC 1405 suche ich nach einer passenden Logikschaltung. Es geht darum, mit dem FT601 die ADC Werte über USB zu übertragen. Zum Einlesen der Werte gibt das FT601 eine Frequenz von 66 MHz aus, wobei bei jeder High-Flanke die Werte eingelesen werden, falls ein "enable"-Pin auf Low liegt. Der ADC läuft allerdings "nur" mit 5 MHz, d.h. die "enable" Leitung darf nur kurzzeitig auf Low liegen und muss dann nach jedem Einlesevorgang wieder auf High gesetzt werden. Zuerst dachte ich an ein D-Flipflop mit RS-Eingängen. D auf Low, Clock des ADC (5 MHz) an den Clock Eingang des Flipflop. Damit fällt bei jedem ADC Takt das Flipflop auf Low. Der 66 MHz Takt liegt am Set-Eingang des Flipflop, und beim Einlesen der ADC Werte wird der Pin wieder auf High gesetzt. Soweit so gut, allerdings funktioniert das ganze nicht, falls der 66 MHz Takt gerade auf High liegt, während der 5 MHz Takt eine High Flanke bekommt. Dann bleibt das Flipflop logischerweise auf High... Gibt es da irgendeine intelligente, einfache und kostengünstige (also vermutlich kein FPGA?!) Möglichkeit? Viele Grüße, Markus
Du brauchst einen Frequenzteiler, der dir das ADC CLK Signal und das (read?)Enable Signal erzeugt. Und zwar synchron zur 66 MHz Clk. 66 MHz : 14 = 4.71 MHz Das ist die Frequenz, mit der du dann samplen kannst. Ein CPLD wäre evtl. die einfachste Lösung. Wenn du ans Limit möchtest, und eine externe 5 MHz Clk für den ADC hast, musst du beide Clock Domains über einen Buffer synchronisieren. Auch hier würde sich ein CPLD anbieten, er buffert ein Datenwort vom ADC zwischen, bis die nächste CLK vom FT601 kommt.
:
Bearbeitet durch User
Joe F. schrieb: > Du brauchst einen Frequenzteiler, der dir das ADC CLK Signal und > das > (read?)Enable Signal erzeugt. Und zwar synchron zur 66 MHz Clk. > > 66 MHz : 14 = 4.71 MHz > Das ist die Frequenz, mit der du dann samplen kannst. Die Frequenz für den ADC kann leider nicht von den 66 MHz erzeugt werden, da der ADC zu festen Zeiten (relativ zu anderen Modulen) getriggert werden muss. Das heißt die 5 MHz (eventuell auch weniger und variabel) kommen von extern. Müssen die Takte zwingend synchron sein? Ich kann ja auch ein paar Takte der 66 MHz "überspringen", ist ja eigentlich immer genug Zeit da um die Daten einlesen zu können. Mit CPLDs habe ich noch nie gearbeitet, keine Ahnung wie man die programmiert (Hardware und Software) und damit arbeitet... Bei Reichelt gibts welche für 2€, würde sowas reichen?^^ Sollte auf jeden Fall unter 10€ pro Stück bleiben.
Keine Antwort, nur eine weitere Frage: Wo hast Du den FT600/ das FT60x Modul herbekommen?
Zweite Idee: 2 Flipflops, siehe Anhang. Bei jeder High Flanke des 5 MHz Taktes wird der Ausgang auf Low gesetzt, das invertiert als D-Eingang beim zweiten Flipflop. Sollte der Ausgang auf Low sein und eine 60 MHz High Flanke auftreten, wird das erste Flipflop gesetzt und der Ausgang geht wieder auf High. Sollte passen oder?^^
Uwe Bonnes schrieb: > Keine Antwort, nur eine weitere Frage: > Wo hast Du den FT600/ das FT60x Modul herbekommen? Noch habe ich es garnicht, aber ich würde es dann bei RS-Online kaufen ;)
Markus schrieb: > Sollte passen oder?^^ Ja, so ungefähr würde man es auch in einem CPLD machen. Man "sampelt" quasi die 5 MHz Clock-Änderung mit der 66 MHz CLK. Dadurch wird es dann wieder mit der 66 MHz Domain synchron. Wie die Signale genau aussehen müssen (auf welcher Clockflanke sind die Daten bereit, wie muss sich die Enable Leitung genau verhalten) muss man sich dann nochmal genau durchdenken, und die Propagation Times der Gatter berücksichtigen. 66 MHz ist kein Scheiss... Machbar ist das in jedem Fall. CPLD hätte halt den Vorteil, man ist flexibel. Braucht natürlich etwas Einarbeitungszeit.
Guck dir mal die CoolRunner Familie von Xilinx an. Mit einem 32 Zellen CPLD kann man schon viel reissen, und früher gab es mal ein Tool, mit dem man sich die Logik grafisch zusammenklickern konnte, ohne Verilog oder VHDL können zu müssen. Das gibt's bestimmt immer noch.
Also, basierend auf der Idee von Markus: Mit 2 schnellen Flip-Flops und einem Inverter könnte es gehen. Meine Simulation arbeitet mit 6.6MHz FIFO und 500KHz ADC Clk, da ich nur Modelle für die HCT Serie habe. Du brauchst natürlich für alle Bauteile (auch den Inverter) schnellere Teile mit 2-3ns propagation time. z.B. NC7SV74 als Flip-Flop. Wenn ich es richtig sehe, will FT601 eine Änderung der enable Leitung immer nach einer fallenden CLK, so dass enable bei steigender CLK Flanke gültig ist, und die Daten mit steigender FIFO CLK übernommen werden. Daher der Inverter vor dem 2. Flip-Flop. Die propagation time von Inverter und einem Flip-Flop darf nicht länger als 6ns sein, sonst kommt enable auf die falsche FIFO CLK Flanke... Die Daten des ADC sollten für die High-Phase der ADC-CLK gültig sein, du übernimmst sie also durch die wesentlich schnellere FIFO CLK zu einem günstigen Zeitpunkt.
:
Bearbeitet durch User
Wow, danke für deine Mühen :) Bei der Geschwindigkeit habe ich auch schon drüber nachgedacht, war aber der Meinung, dass es egal ist wann die enable Leitung auf Low sinkt. Wenn die Änderung bei jeder High Flanke auftritt, werden die Werte halt erst bei der nächsten High Flanke eingelesen. Und durch die Verzögerung der Flipflops ist es dann ja vielleicht sowieso wieder "fast" bei der Low-Flanke.
Markus schrieb: > war aber > der Meinung, dass es egal ist wann die enable Leitung auf Low sinkt. > Wenn die Änderung bei jeder High Flanke auftritt, werden die Werte halt > erst bei der nächsten High Flanke eingelesen. So einfach ist es leider nicht. Unsauberes Timing ist der häufigste Grund für heftige Probleme. Wenn das enable Signal sich an der High-Flanke der Clock ändert, wird alles instabil. Durch Clockjitter und Jitter im enable Signal, Kapazitäten der Leitungen, Signalreflexionen etc. kommt es dann vor, dass der FT601 manchmal gar kein enable sieht, und manchmal für 2 hintereinaner folgende CLK Zyklen. Dies gilt es unbedingt zu verhindern. Daher solltest du das Timing auch mit einem Oszilloskop oder Logikanalyzer überprüfen, wenn du alles aufgebaut hast. Die Signale steigen und sinken ja nicht unendlich schnell, daher sind 2 gleichzeitig ändernde Signale nie wirklich "gleichzeitig". Signale, die bei steigenden Clock-Flanken übernommen werden sollen, werden daher sinnvollerweise bei fallender Clock-Flanke geändert, so dass sie bei der steigenden Flanke zuverlässig den gewünschen Level erreicht haben. Mit den propagation delays kannst du auch nur bedingt arbeiten, du kannst dich nicht darauf verlassen, dass wenn du genügend Gatter hintereinanderschaltest das Signal um genau einen halben Clock-Zyklus verschoben zu haben. Die Delays können sich abhängig von Temperatur und Spannung stark ändern. Daher gilt: die Gatter müssen schnell genug sein, um für den gesamten Signalweg möglichst nicht mehr als 1/4 des Clockzykluses zu verzögern.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.