Forum: Mikrocontroller und Digitale Elektronik Logikschaltung


von Markus (Gast)


Lesenswert?

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

von Joe F. (easylife)


Lesenswert?

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
von Markus (Gast)


Lesenswert?

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.

von Uwe Bonnes (Gast)


Lesenswert?

Keine Antwort, nur eine weitere Frage:
Wo hast Du den FT600/ das FT60x Modul herbekommen?

von Markus (Gast)


Angehängte Dateien:

Lesenswert?

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?^^

von Markus (Gast)


Lesenswert?

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 
;)

von Joe F. (easylife)


Lesenswert?

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.

von Joe F. (easylife)


Lesenswert?

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.

von Joe F. (easylife)


Angehängte Dateien:

Lesenswert?

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
von Markus (Gast)


Lesenswert?

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.

von Joe F. (easylife)


Lesenswert?

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
Noch kein Account? Hier anmelden.