Forum: FPGA, VHDL & Co. Verzögerung mit Reset


von Tim (Gast)


Lesenswert?

Hallo miteinander,

ich habe diesen Counter gefunden und mich gefragt, ob ich dort auch 
einen RESET einfügen kann, sodass ich den Counter mit einem anderen 
Prozess aktivieren bzw. deaktivieren kann, um eine Verzögerung zu 
bekommen.
1
   process begin  
2
      wait until rising_edge(clk); -- warten bis zum nächsten Takt 
3
      if (c<24999999) then         -- 0…24999999 = 25000000 Takte = 1/2 Sekunde bei 50MHz 
4
          c <= c+1;                -- wenn kleiner: weiterzählen 
5
      else                         -- wenn Zählerende erreicht: 
6
          c <= 0;                  -- Zähler zurücksetzen 
7
          x <= not x;              -- und Signal x togglen 
8
      end if; 
9
   end process;
Der Code kommt von Lothar:
http://www.lothar-miller.de/s9y/archives/80-Hello-World!.html

Beste Grüße
Tim

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


Lesenswert?

Tim schrieb:
> ob ich dort auch einen RESET einfügen kann
Weil in einem Prozess immer die letzte Zuweisung an eine signal 
"gewinnt", würde das im einfachsten Fall so aussehen:
1
   process begin  
2
      wait until rising_edge(clk); -- warten bis zum nächsten Takt 
3
      if c<24999999 then           -- 0…24999999 = 25000000 Takte = 1/2 Sekunde bei 50MHz 
4
          c <= c+1;                -- wenn kleiner: weiterzählen 
5
      else                         -- wenn Zählerende erreicht: 
6
          c <= 0;                  -- Zähler zurücksetzen 
7
          x <= not x;              -- und Signal x togglen 
8
      end if; 
9
      if RESET = '1' then          -- Zählerreset behandeln
10
         c <= 0;
11
         x <= '0';
12
      end if;
13
   end process;

Oder so:
1
   process begin  
2
      wait until rising_edge(clk);  -- warten bis zum nächsten Takt 
3
      if RESET = '1' then           -- Reset aktiv? 
4
         c <= 0;                    -- ja -> zurücksetzen
5
         x <= '0';
6
      else                          -- nein -> zählen
7
         if c<24999999 then         -- 0…24999999 = 25000000 Takte = 1/2 Sekunde bei 50MHz 
8
            c <= c+1;               -- wenn kleiner: weiterzählen 
9
         else                       -- wenn Zählerende erreicht: 
10
            c <= 0;                 -- Zähler zurücksetzen 
11
            x <= not x;             -- und Signal x togglen 
12
         end if; 
13
      end if;
14
   end process;

> mit einem anderen Prozess aktivieren bzw. deaktivieren kann,
> um eine Verzögerung zu bekommen.
Warum machst du diesen Zähler nicht gleich in dem "anderen" Prozess?

: Bearbeitet durch Moderator
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.