Problem bei Flankenerkennung

Gast #918405
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
Gast #918470
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?
Gast #918596
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
#919151
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
Gast #920197
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren