mikrocontroller.net

Forum: FPGA, VHDL & Co. COUNT


Autor: Karl (Anfänger) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.


Autor: Karl (Anfänger) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jannulis Tembridis (tembridis)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.