mikrocontroller.net

Forum: FPGA, VHDL & Co. [VHDL] Process IF abfragen, läuft das parallel oder seriell


Autor: Guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hab folgendes Problem, ich will mehrer Zähler verschachteln und weiß 
nicht ob man das so schreiben kann:


if(clk`EVENT AND clk=`1`)THEN

    if(reset`EVENT AND reset=`1`)THEN --Reset ist auch ein Taktsignal
    counter := 0;
    end if;

    if(clk1`EVENT AND clk1=`1`)THEN
    counter := counter + 1;
    end if;

    if counter = 10 THEN
    counter = 0;
    counter1= counter1 = 0;
    end if;

    usw. bis counter weiß der geier was

    counterout <= counter;
    counter1out <= counter1;
    usw.


die Funktion soll sein das counter von 0 bis 9 zählt, dann wieder auf 
null gesetzt wird und gleichzeit counter1 um eins erhöt wird.

MFG Guest


Autor: na (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So geht das nicht. Du kannst nicht eine Flanke auf eine andere Flanke 
abfragen, dann müssten die beiden ja genau gleichzeitig auftreten und 
selbst wenn das theoretisch so wäre, würde das in den seltensten Fällen 
detektiert werden. Außerdem ist nur ein Takt auf diese Weise ('event) 
erlaubt.
Ein Möglichkeit mit einem einfachen reset wäre diese, außerdem mit 
Signalen statt Variablen:
process(clk, reset)
begin
  if (reset = '1') then
    counter <= 0;
    counter1 <= 0;
  elsif(clk'event and clk = '1') then
    if (counter = 10) then
       counter <= 0;
       counter1 <= counter1 + 1;
    else
      counter <= counter + 1;
    end if;
end process;

Wenn du unbedingt die Flanke des reset brauchst, musst du reset in einem 
process mit clk abtasten und die Flanke detektieren. Dazu muss der 
"reset-Takt" aber langsamer sein als clk.

Autor: Guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Reset Takt( 1Takt/Min) ist auf jeden fall langsamer als der 
clk(50MHz).
Es kommen auch noch mehr zähler dazu, vom Prinzip her ist es eigentlich 
wie ein Abakus(wenn einer voll zehner erhöhen usw.)
Variablen müssen unbedingt sein weil ich später noch eine fall 
Unterscheidung brauche ob der interne Zählerstand benutzt wird, oder ein 
extern Gegebener.

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> die Funktion soll sein das counter von 0 bis 9 zählt, dann wieder auf
> null gesetzt wird und gleichzeit counter1 um eins erhöt wird.

Du solltest eine Unit mit einem Zähler schreiben, der zählt wenn am 
Eingang ein Puls anliegt, bis 10 zählt und beim Überlauf einen Puls 
ausgibt.
Dann kannst Du beliebig vieles solcher Zähler hintereinanderschalten.

Klaus

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.