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


von Guest (Gast)


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


von na (Gast)


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:
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.

von Guest (Gast)


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.

von Klaus F. (kfalser)


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

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.