mikrocontroller.net

Forum: FPGA, VHDL & Co. Counter Overflow erkennung


Autor: MARK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo...
Wie programmiere ich am besten eine Overflowerkennung für einen Counter?
Der Overflow soll zwischen gespeichert werden, bis er Resetet wird.
Als Eingang dient der Zählerwert.

Danke

Autor: Christian Peters (kron)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meinst du etwa so?
if (counter = x"FFF") then
  overflow <= '1';
elsif (overflow_reset = '1') then
  overflow <= '0';
end if;

Autor: GPS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein up counter macht einen Carry, ein down counter macht einen Borrow, 
diesen gibt man auf ein Flipflop, fertig.

Autor: MARK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist es möglich diesen ausdruck (counter = x"FFF") direkt an eine 
set-eingang zu legen?
Ich bekomme dann immer den fehler (iOverflowEnable='1' and 
(iCtr=tCtrMax))...
Oder muss ich das zwangweise als Process implementieren.

Das Problem beim Process ist, das die Overflows nicht konsequent erkannt 
werden. (Ich denke es liegt an den Taktraten von dem Zähler 
(100MHz-400MHz)...

Grüße und danke für die Hilfen....

Autor: Christian Peters (kron)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst den Process doch nicht takten.

Autor: MARK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe den Prozess auch nicht getaktet. Es funktioniert soweit ok... 
Nur bei höhren Taktraten erkennt er nicht mehr jeden Overflow.
tCtrMax<=(others=>'1');
  
  pOverflow: process(iCtr, iOverflowEnable, tCtrMax)--tCtrOld) 
  begin
    
    if (iOverflowEnable='1' and (iCtr=tCtrMax)) then
      tOverflow<='1';
    else
      tOverflow<='0';
    end if;
  end process pOverflow;
  
  tFlipflop: component FD1S3DX
    port map (
      CD=>iRES_Overflow,
      CK=>tOverflow,
      D=>'1',
      Q=>oOverflow
   );

Autor: Christian Peters (kron)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist denn das überhaupt für ein Zähler,
der mit 400 MHz zählt? Läuft der im FPGA?

Ansonsten hüpft bei dir das tOverflow
immer nur ganz kurz auf 1,
das Halten soll dann wohl in dem tFlipflop passieren?
Bei 400 MHz ist der Impuls natürlich ziemlich kurz...

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MARK wrote:
>   tFlipflop: component FD1S3DX
>     port map (
>       CD=>iRES_Overflow,
>       CK=>tOverflow,
>       D=>'1',
>       Q=>oOverflow
>    );

Sehe ich das richtig dass du tOverflow als Clock verwendest? Das ist 
nicht die feine Art. Leg das doch an einen Set-Eingang von einem 
getakteten Flipflop. Oder schreib das ganze erst mal als 
Verhaltensbeschreibung, ein Gemisch aus Netzliste und Prozessen ist der 
Übersichtlichkeit ja nicht unbedingt zuträglich.

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.