extrem kurzen Impuls erzeugen und nutzen

#1993096
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!
Gast #1993105
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.
#1993108
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
#1993179
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...
#1994145
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
#1994243
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.

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