Forum: FPGA, VHDL & Co. steigende und fallende flanken


von René (Gast)


Lesenswert?

Guten Tag,
ich hab ein kleines Problemchen hinsichtlich steigender und fallender 
Taktflanken.

man kann ja für prozesse den Takt clk in die sensitivity-Liste legen und 
am anfang des Prozesses clk'event and clk='1' bzw gleich 
rising_endge(clk) schreiben. Analog verhält sich das für fallende 
Flanken -> falling_edge.
Aber wie kann man denn Synthetisierbaren VHDL-Code schreiben, bei dem im 
Prozess sowohl steigende und fallende Flanken erzeugt.

ich kann natürlich nicht schreiben:
1
process(clk)
2
begin
3
   rising_edge(clk) or falling_edge(clk)
4
   ...

Was unweigerlich ur Fehlermeldung führt:
"Cant implement register  for two clock edges combined with binary 
operator"

...

nun ich hab auch probiert mit was zu basteln, aber folgender code wird 
auch auf die gleiche fehermeldung reduziert:
1
  -- Prozess für Impulswandlung von sw0 zu start
2
  flankendetektor:process(clk)
3
  begin
4
    if(clk'event and clk='0') then
5
      fflanke   <= '1';
6
      sflanke   <= '0';
7
    end if;
8
    
9
    if(clk'event and clk='1') then
10
      sflanke    <= '1';
11
      fflanke    <= '0';
12
    end if;
13
  end process flankendetektor;
14
  
15
  sw0_impdet:process(fflanke,sflanke)
16
  begin  
17
    if((fflanke'event and fflanke='1') or (sflanke'event and sflanke='1')) then

Bitte sagt mir nicht, das quartus und andere Synthesetools, es nicht 
hinbekommen, FF´s zu erzeugen, welche mal auf beide taktflanken 
reagieren.


MFG

von SuperWilly (Gast)


Lesenswert?

>Bitte sagt mir nicht, das quartus und andere Synthesetools, es nicht
>hinbekommen, FF´s zu erzeugen, welche mal auf beide taktflanken
>reagieren.

Nein

von René (Gast)


Lesenswert?

hmm es ist also generell nicht möglich?

von Christian R. (supachris)


Lesenswert?

Ich kenne nur die Dual-Flanken-FF im CoolRunner II, und die muss man 
meines Wissens auch instanziieren. Ansonsten gibts weder in FPGAs noch 
in CPLDs FF, die auf beide Flanken reagieren können. Von den 
DDR-IO-FlipFlops mal abgesehen. Aber das sind ja auch 2 IO_FF dann.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Bitte sagt mir nicht, das quartus und andere Synthesetools, es nicht
> hinbekommen, FF´s zu erzeugen, welche mal auf beide taktflanken
> reagieren.
Gegenfrage: Hast du schon mal so ein Bauteil gesehen?

> -- Prozess für Impulswandlung von sw0 zu start
Du willst also offenbar laut Kommentar die Flanke(n) eines Tasters in 
ein Start-Signal ummünzen? Das geht grundlegend anders: du tastet mit 
einem schnellen Systemtakt (Zitat: es kann nur Einen geben) das Signal 
in eine Registerkette und frägst dann ab, ob die letzten beiden Register 
ungleich sind. Das ist dann eine Flanke. Ich mache das so:
http://www.lothar-miller.de/s9y/categories/18-Flankenerkennung

von Harald (Gast)


Lesenswert?

Lothar hat völlig recht. Das Eingangssignal sollte mit the one and only 
Systemtakt abgetastet werden, vielleicht noch eine Entprellung 
vorgesehen werden, und aus der Diffezenz der letzten beiden Stufen 
erzeugt man ein Enable-Signal für die eigentliche Schaltung, die dann 
ebenfalls mit dem einzigen Systemtakt läuft. Das ist der richtige Weg, 
so machen das die Profis. Für alle anderen Entwickler gibt es nur noch 
einen Ausweg. Wie hieß es doch gleich im ersten Post? "Bitte sagt mir 
nicht, das quartus und andere Synthesetools, es nicht hinbekommen, FF´s 
zu erzeugen, welche mal auf beide taktflanken reagieren." Ein FF kann 
das nicht, aber zwei. Eines mit der steigenden Flanke takten, das andere 
mit der fallenden. Es ist nur fraglich, wie du die beiden Flipflops 
wieder löscht und die Ausgänge verknüpfst. Also lass lieber die Finger 
davon.

von Ramon F. (tronixx)


Lesenswert?

Hi zu dem Thema stigende und fallende Flanke hab ich da auch noch mal ne 
Frage:

ist es nicht aber auch möglich 2 Prozesse zu erstellen, in dem einen auf 
die steigende, dem anderen auf die fallende Flanke des selben Signals zu 
reagieren?

MfG

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ramon F. schrieb:
> ist es nicht aber auch möglich 2 Prozesse zu erstellen, in dem einen auf
> die steigende, dem anderen auf die fallende Flanke des selben Signals zu
> reagieren?
Doch, klar. Aber es ist keine gute Idee. Was willst du damit erreichen?

von Ramon F. (tronixx)


Lesenswert?

will eig nur ein enable-Signal schalten.
also:
1
DE_High: process (DE_WQVGA)
2
begin
3
4
  if rising_edge (DE_WQVGA)
5
    then
6
      DE_status <= 1;
7
    end if;
8
end process DE_High;
9
10
DE_Low: process (DE_WQVGA)
11
begin
12
13
  if rising_edge (DE_WQVGA)
14
    then
15
      DE_status <= 0;
16
    end if;
17
end process DE_Low;


Problem: ISIM wills iwie nicht simulieren,verstehs nich so ganz.

von Achim (Gast)


Lesenswert?

> DE_High: process (DE_WQVGA)
> begin
>
>   if rising_edge (DE_WQVGA)
>     then
>       DE_status <= 1;
>     end if;
> end process DE_High;
>
> DE_Low: process (DE_WQVGA)
> begin
>
>   if rising_edge (DE_WQVGA)
>     then
>       DE_status <= 0;
>     end if;
> end process DE_Low;

Erstens reagieren beide Prozesse auf die steigende Taktflanke und 
zweitens sollen beide Prozesse das selbe Signal treiben. Das 
funktioniert nicht - während der eine das Signal auf 1 setzt, setzt der 
zweite das Signal auf 0. Du könntest in einem Prozess die steigende und 
fallende Flanke erkennen und davon abhängig das Statusbit setzen.

Gruß, Achim

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ramon F. schrieb:
> Problem: ISIM wills iwie nicht simulieren,verstehs nich so ganz.
Zweimal eine steigende Flanke. Einmal wird 0 zugewiesen und einmal 1... 
:-o

Aber auch nach der "Korrektur" auf falling_edge() wird das so nicht 
gehen, denn es gibt in einem FPGA kein Flipflop, das einen 
Dual-Edge-Clock Eingang hat.

Da fehlt aber sicher noch was, denn diese Beschreibung könnte ich 
eigentliche so abkürzen:
  DE_WQVGA <=  DE_status;

> rising_edge (DE_WQVGA)
Wieviele Takte hast du in deinem Design?

von Josef G. (bome) Benutzerseite


Lesenswert?

Bei einem DDR-Flipflop liegt der Dateneingang gleichzeitig an einem
positiv getriggerten FF und an einem negativ getriggerten FF. Die
Ausgänge der FFs gelangen auf einen Multiplexer, dessen Selekt-
Eingang der Takt ist. Es wird jenes FF, welches gerade seinen
Ausgang aktualisiert hat, am Multiplexer durchgestelt. Problem,
wenn man so etwas selber bastelt, dürfte sein: Glitche.

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.