COUNT

Gast #457608
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;
Gast #457625
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.

Gast #457786
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.
#457862
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;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren