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!
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.
@ 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
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 !
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...
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.
@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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.