Forum: FPGA, VHDL & Co. extrem kurzen Impuls erzeugen und nutzen


von Ralph H. (guru)


Lesenswert?

Wie kann ich folgende Aufgabenstellung lösen ?

Ich brauche einen kurzen H/L Impuls zum Laden eines Latches, der beim
Erreichen des Höchstzählerstandes erzeugt werden soll.

Dazu hab ich in der realen Hardware (Digitaluhr) z.B. einen 4 bit 
Zähler, dessen Ausgang 3 und 1 über ein AND Gatter auf den L-aktiven 
Reseteingang des Zählers geht und den Zähler beim Erreichen des 
Höchstzählerstandes (10)rücksetzt. Den dabei entstehenden schmalen H/L 
Impuls hab ich zum weiterzählen und Laden genutzt. Das wird ja im CPLD 
so nicht gehen oder?
Wie kann ich sowas in VHDL machen ? Haken der Sache ist, der Impuls 
MUSSS!!! am Ende !!! der Taktflanke kommen, der den Höchstzähler standen 
erzeugt.

PS: mit nem 2.Takt geht das, aber den hab ich nicht zur Verfügung!

von asdf (Gast)


Lesenswert?

Stichwort synchrones Design! Solche Spielchen mit Latches und Pulsen 
sind gefährlich und werden zwangsläufig zu Problemen führen. Besser 
verwendet man flankengesteuerte D-Flipflops. Anstelle des Pulses wie 
beim Latch kriegen die einen Enable-Eingang. Dieses Signal muss genau 
dann auf High sein, wenn eben die Bedingung (in deinem Fall ein 
Zählerstand) erreicht ist.

von Falk B. (falk)


Lesenswert?

@  Ralph H. (guru)

>Ich brauche einen kurzen H/L Impuls zum Laden eines Latches, der beim
>Erreichen des Höchstzählerstandes erzeugt werden soll.

Was ist an diesem Puls exterm kurz? Warum Latches? Nimm FlipFlops.

>Impuls hab ich zum weiterzählen und Laden genutzt. Das wird ja im CPLD
>so nicht gehen oder?

Nö, diesen Murks aus der TTL-Ära sollte man schnell vergessen, siehe 
Glitch.

>Wie kann ich sowas in VHDL machen ? Haken der Sache ist, der Impuls
>MUSSS!!! am Ende !!! der Taktflanke kommen, der den Höchstzähler standen
>erzeugt.

Bleib mal locker, für dein bissel Gemüse muss man GAR NICHTS groß 
schreiben.

Siehe Taktung FPGA/CPLD.

>PS: mit nem 2.Takt geht das, aber den hab ich nicht zur Verfügung!

Käse. Beschäftige dich mal mit den Grundlagen synchroner 
Schaltungstechnik. Da läuft alles ganz easy mit EINEM Takt.

MFG
Falk

von Ralph H. (guru)


Lesenswert?

Falk Brunner schrieb:
> Was ist an diesem Puls exterm kurz? Warum Latches? Nimm FlipFlops.
Weil er nur so kurz wie die Gatterlaufzeit des AND und die Rücksetzzeit 
des Zählers ist !

von Christian R. (supachris)


Lesenswert?

So einen Murks macht man in CPLDs/FPGAs nicht. Du kannst doch einen 
synchronen Zähler bauen, und bei Zählerstand 9 erzeugst du den 
reset-Impuls. Bei der nächsten Flanke wird der Zähler zurückgesetzt. 
Völlig glitchfrei von 0 bis 9 gezählt. Den Selben Impuls nimmst du zum 
Weiterzählen der nächsten Zählerstufen. Fertig ist der Lack.
1
Signal Counter, Counter_2 : unsigned(3 downto 0) := (others => '0');
2
Signal Reset : std_logic := '0';
3
 
4
Process(CLK)
5
Begin
6
  if rising_edge(CLK)then
7
    if Reset = '1' then Counter <= (others => '0');
8
    else Counter <= Counter + 1;
9
    end if;
10
  end if;
11
end Process;
12
13
Reset <= '1' when Counter = 9 else '0';
14
15
Process(CLK)
16
Begin
17
  if rising_edge(CLK)then
18
    if Reset = '1' then Counter_2 <= Counter_2 + 1;
19
    end if;
20
  end if;
21
end Process;

Mal schnell 2 kaskadierte 4-Bit Zähler...

von Silvia A. (silvia)


Lesenswert?

Ralph H. schrieb:
> Haken der Sache ist, der Impuls
> MUSSS!!! am Ende !!! der Taktflanke kommen, der den Höchstzähler standen
> erzeugt.

1) Bitte was ?
2) Satzzeichen sind keine Rudeltiere
3) Eine Flanke hat per Definition die Dauer 0.

von 5f (Gast)


Lesenswert?

man,man, man

Und solche äußerungen von einer frau

Tzz

von Ralph H. (guru)


Lesenswert?

@silvia... Vielen Dank für Deinen konstruktiven Beitrag ;-)

@supachris.. Danke für Deinen Beitrag, ich will ja eben diesen 
DigitalMurks nicht machen und hab hier gefragt :-) Aber, müsste der 
Zähler nicht erst bis 10 zählen, ehe Reset aktiv wird? ist ja ein 
Dezimalzähler.

LG Ralph

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ralph H. schrieb:
> Aber, müsste der Zähler nicht erst bis 10 zählen, ehe Reset aktiv wird?
> ist ja ein Dezimalzähler.
Ein Dezimalzähler zählt von 0...9 und dann wieder von 0..9  und dann 
wieder von vorn...
Idealerweise erreicht er niemals die 10.
Denn 0, 1, 2, 3, 4, 5, 6, 7, 8 und 9 sind bereits 10 Zählschritte.

von Christian R. (supachris)


Lesenswert?

Der "Trick" ist ja, dass der Reset beim 10. Zählerschritt aktiv wird. 
Beim synchronen Design passiert immer alles zum nächsten Taktschritt. 
Daher wird der Reset nach der 9 aktiv und setzt den Zähler auf 0 zurück. 
Was ja bei einer Digitaluhr sinnvoll ist, denn die 10 kannst du auf 
einer Stelle ja nicht mehr darstellen. Der Impuls ist dann genau einen 
Takt lang und kann einwandfrei und sauber zum Weiterzählen der nächsten 
Stelle genommen werden. Wie im Beispiel oben.

von Ralph H. (guru)


Lesenswert?

Super Leute.. Danke für Eure Hinweise. Es funktioniert :-)

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.