Forum: FPGA, VHDL & Co. COUNT


von Karl (Anfänger) (Gast)


Lesenswert?

Hallo

Ich habe diesen Counter im Internet gefunden. Ich möchte wissen, ob nach 
erreichen von Q = "1111111" der Ausgang UEB ständig auf High bleibt, 
oder sich dieser auch mal wieder ändern kann. Was passiert mit Q danach? 
Geht es etwa auf 0000000 zurück oder was genau passiet da?



library IEEE;
use IEEE.std_logic_1164.all;
use work.std_arith.all;

entity COUNT is
  port( CLK, ENA : in std_logic;
        Q        : buffer std_logic_vector(6 downto 0);
        UEB      : out std_logic);
end COUNT;

architecture A1 of COUNT is
begin
   P1: process( CLK )
   begin
      if( CLK'event and CLK = '1' ) then
         if( ENA = '1' ) then
            Q <= Q + 1;
         end if;
      end if;
   end process;
   UEB <= '1' when Q = "1111111" else '0';
end A1;

von Dirk (Gast)


Lesenswert?

>Ich möchte wissen, ob nach erreichen von Q = "1111111" der Ausgang UEB
>ständig auf High bleibt, oder sich dieser auch mal wieder ändern kann.

>UEB <= '1' when Q = "1111111" else '0';

Bei einem Überlauf von Q wird UEB auf "1" gesetzt und sonst auf "0"

>Geht es etwa auf 0000000 zurück oder was genau passiet da?

Richtig, Q laeuft ueber und faengt bei 0 wieder an.


von Karl (Anfänger) (Gast)


Lesenswert?

>>Geht es etwa auf 0000000 zurück oder was genau passiet da?

>Richtig, Q laeuft ueber und faengt bei 0 wieder an.

Wie bringe ich den Counter dazu, nicht mehr weiterzuzählen? Ich möchte 
nur eine einzige steigende Flanke erhalten.

von Jannulis T. (tembridis)


Lesenswert?

Indem du neben dem Enable ENA noch in die Signatur der if-Abfrage 
Q<"1111111" einfügst (oder wahlweise im inneren Scope eine weitere 
if-Abfrage einbaust). Also

architecture A1 of COUNT is
begin
   P1: process( CLK )
   begin
      if( CLK'event and CLK = '1' ) then
         if( ENA = '1' and Q<"1111111") then
            Q <= Q + 1;
         end if;
      end if;
   end process;
   UEB <= '1' when Q = "1111111" else '0';
end A1;

oder

architecture A1 of COUNT is
begin
   P1: process( CLK )
   begin
      if( CLK'event and CLK = '1' ) then
         if( ENA = '1' ) then
            if (Q<"1111111") then
              Q <= Q + 1;
            end if;
         end if;
      end if;
   end process;
   UEB <= '1' when Q = "1111111" else '0';
end A1;

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.