Forum: FPGA, VHDL & Co. Counter Overflow erkennung


von MARK (Gast)


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

von Christian P. (kron)


Lesenswert?

Meinst du etwa so?
1
if (counter = x"FFF") then
2
  overflow <= '1';
3
elsif (overflow_reset = '1') then
4
  overflow <= '0';
5
end if;

von GPS (Gast)


Lesenswert?

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

von MARK (Gast)


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....

von Christian P. (kron)


Lesenswert?

Du musst den Process doch nicht takten.

von MARK (Gast)


Lesenswert?

Ich habe den Prozess auch nicht getaktet. Es funktioniert soweit ok... 
Nur bei höhren Taktraten erkennt er nicht mehr jeden Overflow.
1
tCtrMax<=(others=>'1');
2
  
3
  pOverflow: process(iCtr, iOverflowEnable, tCtrMax)--tCtrOld) 
4
  begin
5
    
6
    if (iOverflowEnable='1' and (iCtr=tCtrMax)) then
7
      tOverflow<='1';
8
    else
9
      tOverflow<='0';
10
    end if;
11
  end process pOverflow;
12
  
13
  tFlipflop: component FD1S3DX
14
    port map (
15
      CD=>iRES_Overflow,
16
      CK=>tOverflow,
17
      D=>'1',
18
      Q=>oOverflow
19
   );

von Christian P. (kron)


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...

von Andreas S. (andreas) (Admin) Benutzerseite


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.

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.