Taktsignal starten - FPGA - VHDL

Hallo,

ich habe folgendes Problem:

Ich entwickle gerade einen Feldbuslogger auf einem FPGA (mit VHDL). Hierf=FCr taste ich (50MHz) die Datenleitung auf einen positiven Flankenwechsel ab. Wenn ein solcher Wechsel auftritt, soll ein neues Taktsignal (15MHz) gestartet werden, mit dem die Datenleitung dann weiter abgetastet wird.

Auf der Karte stehen mir verschiedene Frequenzen von 100kHz bis 50MHz.

Meine Frage: Ist es =FCberhaupt m=F6glich, ein Taktsignal durch ein solches "event" zu starten?

Bin f=FCr jeden Ratschlag dankbar.

Gru=DF Nils

Reply to
Nils
Loading thread data ...

Das ist exakt die Funktionsweise eines UART, wie er z.B. seit zig Jahren im PC verbaut wird. Allerdings ist die "Abtastfrequenz" da ein ganzzahliges Vielfaches der Symbolrate, weil man dann nämlich, sobald man den Framebeginn erkannt hat, einfach nur jedes n-te Sample zu verwerten braucht. Diese Funktionalität ist dann auch ziemlich einfach mit Zustandsdiagrammen zu erschlagen.

Man kann es gaten, aber das ist i.A. keine gute Idee, weil das ganze dann asynchron wird.

Gruß Henning

Reply to
Henning Paul

Henning Paul schrieb:

Yep.

Yep.

Yep.

tstststst. Pfui. Schäm dich.

Eben. Im FPGA lässt man einfach seine State Machines mit dem 50 MHz Takt laufen und generiert ein 15 MHz Clock enable, welche die langsameren State machines eben als solches verwenden. Keine Probleme mit Clock-Gating, skew etc.

MfG Falk

Reply to
Falk Brunner

Falk Brunner schrieb:

Das hei=DFt, ich mach das mit nem Counter, der mir, wenn ich eine Flanken=E4nderung hab einfach bis 3300 z=E4hlt und dann das Clock enable auf high setzt und nach 750 z=E4hlschritten wieder auf low...

Reply to
Nils

Nils schrieb:

ren

ld

Falsch nicht 750 sondern 1650... :)

Reply to
Nils

Du solltest Dir überlegen, dass das, was Du da machst, irgendwann in realer Hardware zum Laufen kommen muss.

Bei den hier schon erwähnten UART's wird deshalb typischerweise die 16fache Taktfrequenz für die Abtastschaltung hergenommen, die Schaltung startet/synchronisiert dann den /16 Teiler mit der fallenden Flanke des Startbits oder legt z.B. per nachgeschaltetem Addierer einfach synchron einen Offset zum Zählerstand fest.

In Deinem Fall hängt es davon ab, wie genau die Abtastung ablaufen soll, wenn Du nicht eine wilde Phasenakku- oder Fractional/Modulo- Konstruktion aufbauen willst, sollte der Abtasttakt ein ganzzahliges Vielfaches der gewünschten Abtastrate betragen.

Die ist in Deinem Beispiel für einen "UART" schon sehr hoch, allerdings haben moderne FPGA's interne Clock-PLL's, die man ggf. zum internen Hochsetzen der Abtastfrequenz nutzen könnte. Zur Not kann man auch noch sowohl mit der positiven wie negative Flanke des Takts parallel abtasten und sich dann einen Datenstrom aussuchen.

Das alles ist aber nichts, was per VHDL Event Sprachtrick 17 gemacht werden kann, sondern wirklich Entwurfsarbeit. Soweit, dass der Compiler sagt: "Ich ahne, dass der Nils einen hohen Takt und eine PLL sowie einen synchronisierten Teiler will, und baue das passend zusammen", sind die VHDL Compiler leider oder gottseidank noch nicht ...

Gruß Oliver

--
Oliver Bartels + Erding, Germany + obartels@bartels.de
http://www.bartels.de + Phone: +49-8122-9729-0 Fax: -10
Reply to
Oliver Bartels

Nils schrieb:

So ähnlich. Versuche ein synchrones Design hinzubekommen, mit zentralem Takt, auch die Verwendung beider Taktflanken ist sinnvoll. In der Praxis würdest Du bei Erkennung der Flanke (auch über den Takt synchronisiert) ein FF setzen, dessen Ausgang den Takt für den Synchronzähler freigibt.

Als Tipp: Versuche, soweit es die Signalfrequenzen erlauben, immer erst ein synchrones Design, ansonsten wirst Du ne Menge Arbeit haben, im Falle des Nichtfunktionierens eine Laufzeitanalyse deiner Signale durchzuführen. Nicht ohne Grund sind die Taktleitungen bei den meisten FPGAs mit niedrigen skew-Werten entworfen.

GRuss Udo

Reply to
Udo Piechottka

"Nils" schrieb im Newsbeitrag news: snipped-for-privacy@c74g2000cwc.googlegroups.com...

50MHz / 15 MHz sind bei mir 3.33, also Mal 3, jedes 4te mal 4 Takte zaehlen, oder waren es doch nur 15kHz ?

-- Manfred Winterhoff, reply-to invalid, use mawin at gmx dot net homepage:

formatting link
de.sci.electronics FAQ:
formatting link
Read 'Art of Electronics' Horowitz/Hill before you ask. Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.

Reply to
MaWin

Hallo Nils,

Du muesstest noch hinzuschreiben, wie praezise dieses Taktsignal zur Phase des 50MHz Signals sein soll. Ein paar Ideen:

Mit einem 450MHz Oszillator erreicht man die 50MHz Abtastpulse, indem man 450MHz durch 9 teilt. Die 15MHz sind 450MHz geteilt durch 30. Nun waeren beide Takte synchron. Bei Ausnutzung beider Flanken sollte auch ein "Master" von 225MHz reichen.

Ist das aus irgendeinem Grund nicht opportun, geht es eventuell noch mit Delay Lines und einem Oszillator, der dann relativ rasch in einer Art PLL "gefangen wird", um synchron zu bleiben. Ist aber mehr Aufwand.

--
Gruesse, Joerg

http://www.analogconsultants.com
Reply to
Joerg

Joerg schrieb:

Alles schön und gut, aber ich denke hier ist weniger Phantasie in der Deutung der Problemlösung gefragt, sondern erstmal noch solide Analyse des Problems.

A) Welche Bitrate läuft auf dem Feldbus? B) Datenformat? C) etc.

MfG Falk

Reply to
Falk Brunner

Nils schrieb:

Wolltest du nicht was mit 15 MHz machen? 50 MHz / 3300 ~ 15 kHz

Die Clock enables sind Pulse, die für einen (50 MHz) Takt aktiv sind, sonst inaktiv. Also 3299 Pulse Low, 1 mal High.

MfG Falk

Reply to
Falk Brunner

Hallo, Nils,

Habe andere Postings gelesen, unten sind meine Ueberlegungen.

Ich verstand es so, dass deine 50 bzw. 15MHz Frequenzen dem FPGA quasi "von Aussen" zur Verfuegung gestellt werden. In dem Fall soll man grundsaetzlich davon ausgehen, dass die beiden Frequenzen nicht unbedingt synchron sind.

Die 15MHz nur durch ein Gate zu "enable"en ist nicht empfehlenswert: du bekommst keinen sauberen Taktanfang sondern kommen da sehr wahrscheinlich ganz kurze Spikes aus. Das kann zu unvorhergesehbaren Effekten fuehren. Die einzige Moeglichkeit: das "Start" Signal, das die 50MHz-Abtastschaltung erzeugt, nochmals mit 15MHz zu synchronisieren und erst das Ergebnis als Gate zu nehmen:

signal Start, GateEnable: std_logic;

begin ...

--
    Start
Reply to
Igor "Knight" Ivanov

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.