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.
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.
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.
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.