Forum: FPGA, VHDL & Co. Problem bei Flankenerkennung


von Martin (Gast)


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.
1
count: process(clk_sig,rst)
2
begin
3
if rst=ein then
4
counter<=0;
5
clk_out<='0';
6
led<='0';
7
elsif clk_sig'event and clk_sig='0' then
8
led<='1';
9
counter<=counter+1;
10
if counter=0 then
11
clk_out<='1';
12
end if;
13
14
if counter=2 then
15
clk_out<='0';
16
end if;
17
18
if counter=4 then
19
counter<=0;
20
end if;
21
22
end if;
23
24
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.
1
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

von Gäst (Gast)


Lesenswert?

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

von Martin (Gast)


Lesenswert?

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

Tschüss
Martin

von Willy (Gast)


Lesenswert?

Ein interessantes Lattice-Paper hierzu:

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

Gruß
Willy

von Mark (Gast)


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

von Martin (Gast)


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.

von Martin (Gast)


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?

von lkmiller (Gast)


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?

von Martin (Gast)


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

von Mark (Gast)


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

von lkmiller (Gast)


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?

von Falk B. (falk)


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

von Berater (Gast)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@  Berater (Gast)

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

Nimm  nen Schmitt-Trigger.

MFG
Falk

von Martin (Gast)


Lesenswert?

Okay.

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

Tschüss
Martin

von tim (Gast)


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.

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.