www.mikrocontroller.net

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


Autor: René (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
process(clk)
begin
   rising_edge(clk) or falling_edge(clk)
   ...

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:
  -- Prozess für Impulswandlung von sw0 zu start
  flankendetektor:process(clk)
  begin
    if(clk'event and clk='0') then
      fflanke   <= '1';
      sflanke   <= '0';
    end if;
    
    if(clk'event and clk='1') then
      sflanke    <= '1';
      fflanke    <= '0';
    end if;
  end process flankendetektor;
  
  sw0_impdet:process(fflanke,sflanke)
  begin  
    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

Autor: SuperWilly (Gast)
Datum:

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

Nein

Autor: René (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm es ist also generell nicht möglich?

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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-Flan...

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ramon F. (tronixx)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Ramon F. (tronixx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
will eig nur ein enable-Signal schalten.
also:
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;


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

Autor: Achim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Josef G. (bome) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

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.