[VHDL] Process IF abfragen, läuft das parallel oder seriell

Gast #527008
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

Gast #527059
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:
1
process(clk, reset)
2
begin
3
  if (reset = '1') then
4
    counter <= 0;
5
    counter1 <= 0;
6
  elsif(clk'event and clk = '1') then
7
    if (counter = 10) then
8
       counter <= 0;
9
       counter1 <= counter1 + 1;
10
    else
11
      counter <= counter + 1;
12
    end if;
13
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.
Gast #527096
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.
#527312
> 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

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.