www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Problem bei Flankenerkennung


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute!

Ich soll mit einem FPGA eine Frequenz von 20KHZ auf 4KHZ runterteilen.

Die steigende Flanke kann für eine Erkennung nicht verwendet werden, 
weil sie zu langsam ansteigt.
Die fallende Flanke ist steil genug.

Dies ist dadurch erkennbar, wenn ich meinen Prozess auf eine fallende 
Flanke abfrage, dann passt die Ausgangsfrequenz von 4KHZ.
Wenn ich jedoch auf die steigende Flanke triggere, dann erkennt der FPGA 
so manche steigende Flanke nicht als Flanke. Das Ergebnis ist dann auf 
dem Oszi erkennbar.

Das Problem bei dem Ganzen ist, dass sich das heruntergeteilte 
Ausgangssignal von 4KHZ bei einer positiven Eingangsflanke ändern soll 
und nicht bei einer Negativen.
Der jetzige VHDL-Code fragt auf eine negative Flanke ab.
count: process(clk_sig,rst)
begin
if rst=ein then
counter<=0;
clk_out<='0';
led<='0';
elsif clk_sig'event and clk_sig='0' then
led<='1';
counter<=counter+1;
if counter=0 then
clk_out<='1';
end if;

if counter=2 then
clk_out<='0';
end if;

if counter=4 then
counter<=0;
end if;

end if;

end process count;

Ich hätte auch schon versucht das Clock-Eingangssignal über einen
Inverter laufen zu lassen, in der Hoffnung, dass die positve Flanke 
hierdurch wieder hergestellt wird.
clk_sig<=not clk_in;

Wie könnte man das Problem lösen?

Danke für eure Antworten.
Tschüss und schönen Tag noch.

Martin

Autor: Gäst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Darf zusätzliche Hardware verwendet werden? Wenn ja dann könnte ein 
Schmitt-Trigger Helfen

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zusätzliche Hardware ist nicht gewünscht.
Aber im FPGA selbst kann ich mich austoben.

Tschüss
Martin

Autor: Willy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein interessantes Lattice-Paper hierzu:

http://www.latticesemi.com/documents/TN1112.pdf

Gruß
Willy

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Martin,

ich würde einfach clk_out usw. nochmal durch ein Flip-Flop schieben, 
dass mit der steigenden Taktflanke getaktet wird. Wenn dieser halbe 
Clock Delay kein Problem ist dann sollte das doch helfen?!

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Mark!

Das habe ich schon probiert. Leider ist genau diese Halbierung ebenfalls 
ein Problem, weil ich dann von 20KHZ auf 10KHZ runterkomme und dann 
durch die Teilung nicht mehr auf die 4KHZ hinkomme.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es nicht im FPGA selbst einen Inverter oder ein ähnliches Element, 
welches mir das Signal säubern und die Flanken wieder herstellen kann?

Autor: lkmiller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine Aussage
>steigende Flanke kann für eine Erkennung nicht verwendet werden
und dein aus dieser Aussage erzeugter Code
>elsif clk_sig'event and clk_sig='0' then
sind maximal inkompatibel.

Wenn ich mich auf irgendeine Flanke eines Signals nicht verlassen kann, 
dann kann ich mich auf das ganze Signal nicht verlassen. Insbesondere, 
wenn die Signalform so schlecht ist, dass die Taktverteilung im FPGA 
nicht mehr darauf reagiert.

Was für ein FPGA verwendest du?
Wo ist dein Takt angeschlossen?

Deine Aufgabe
>Ich soll mit einem FPGA eine Frequenz von 20KHZ auf 4KHZ runterteilen.
führt zu einer Frage: Hast du noch einen anderen Takt (üblicherweise im 
MHz-Bereich) auf dem FPGA?

Wenn ja: dann mach das synchron zu diesem Mastertakt.
Wenn nein: wozu ein FPGA?

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ikmiller.

Danke für eure Antworten.

Ich weiß, ich habe im Code jetzt die negative Flanke eingebaut.
Um auf die positive zu reagieren, müsste ich die Null gegen eine Eins 
ersetzen.

Das Signal kommt von einem alten Frequenzgenerator.
Beim FPGA handelt es sich um einen XC4VFX12-12FF668  auf dem 
ML40x-Board.

Wie ich gesehen habe, benötigt die steigende Flanke an die 50ns, wobei 
sie im oberen Drittel eine Wurzel(X)-Funktion beschreibt.

Ich habe schon noch einen anderen Takt auf dem Board, nämlich den 
100MHZ-Quarz. Diesen könnte ich für eine Abtastung verwenden, nur habe 
ich dann durch die Abtastung eine Ausgangsverzögerung von +-10ns und 
meine Auftraggeberin möchte ein perfektes Signal am Ausgang.
Besser hätte wäre es, wenn die 20KHZ direkt die Prozesse schalten.

@Wenn ja: dann mach das synchron zu diesem Mastertakt.
@Wenn nein: wozu ein FPGA?
Ich verstehe die Frage nicht ganz. Der FPGA muss nicht immer mit einem 
Mastertakt versorgt werden. Es gibt auch Anwendungen, die asynchron 
laufen. Natürlich sind asynchrone Systeme exterm schwer in den Griff zu 
bekommen und zu testen, im Gegensatz zu Synchronen.
Aber mein System sollte einfach mit dem 20KHZ Takt synchron sein.

Gibt es noch eine andere Möglichkeit, als extern einen Smitt-Triger 
dranzukleben, so wie es Gäst vorgeschlagen hat?

Schönen Gruß
Martin

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ohne externe HW wird es nicht gehen. Du kannst eben nicht auf eine 
Taktflanke reagieren, die keine Taktflanke ist. Ganz einfach.
2 Widerstände und 1 Transistor würden reichen, aber wenn das nicht geht 
?!
Einen Schmitt-Trigger gibts leider nur beim CoolRunner II...

Autor: lkmiller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>+-10ns und meine Auftraggeberin möchte ein perfektes Signal am Ausgang
bei einem miserablen Eingangssignal??

Ist das nicht die Quadratur des Kreises?
Oder so ähnlich wie Gold machen?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Martin (Gast)

>Ich soll mit einem FPGA eine Frequenz von 20KHZ auf 4KHZ runterteilen.

Das schafft man ja fast mit Relais. ;-)

>Die steigende Flanke kann für eine Erkennung nicht verwendet werden,
>weil sie zu langsam ansteigt.
>Die fallende Flanke ist steil genug.

IRRTUM!

Wie bereits mehrfach gesagt, das Eingangssignal MUSS sauebr sein. Auf 
BEIDEN Flanken. Sonst sieht dein FPGA auf der unsauberen Flanke mehrere 
scheinbare Flanken. Man darf nicht vergessen, dieser Virtex 4 ist 
SAUSCHNELL. Dem machen 200 MHz gar nichts aus. Demenstsprechend 
empfindlich ist er für unsaubere Takte.

Du braucht einen Schmitt-trigger, ggf. davor noch ein kleiner RC-Filter.

MFG
Falk

Autor: Berater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann man das Signal nicht samplen und glätten und so seinen Schmitty 
hinbiegen?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Berater (Gast)

>Kann man das Signal nicht samplen und glätten und so seinen Schmitty
>hinbiegen?

Nimm  nen Schmitt-Trigger.

MFG
Falk

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay.

Danke Leute für eure zahlreichen Tipps.
Ich werde das Ganze doch mit einem Schmitt-Trigger lösen.

Tschüss
Martin

Autor: tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ich verstehe es ja nicht so ganz, was du - bzw. deine 
"auftraggeberin" - mit diesem ominösen aufbau machst.

ein "alter frequenzgenerator" dient als clock. bleibt das so?
mit einem sündhaft teuren fpga auf einem evalboard teilst du dann diese 
schlechte clock unsymmetrisch durch 5.

nimm doch nen 40khz oszillator, teile das durch mit einem billigen 32 
zellen CPLD durch 2 und 10 und du hast deine gewünschten clocks, und 
zwar sauber und symmetrisch.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.