Hallo Leute. Ich brauche in einem CPLD einen Clockdoubler. Also aus jeder Flanke (fallend/steigend) muss ein kompletter Takt generiert werden. (also auch mit steigender und fallender flanke) Ich habe einen CollRunner II CPLD und "programmiere" ihn mit der Xilinx - ISE. (male schaltplan - VHDL kann ich nicht) Er erzeugte Takt muss nicht 50%low/50%High sein.. er wird nur genutzt um interne Zähler zu resetten... Hat da jemand ne idee? Bevor jemand fragt: Der CPLD wird eingesetzt um aus einer 16bit-parallelen Schnittstele eine Serielle zu machen. Dabei soll WR/RD selbständig vom CLPD gesetzt werden. Dafür werden die Clocks gezählt und der Eingang auf die Ausgänge durchgeshiftet. Das ganze soll ein Reset beinhalten - dafür verwende ich den Pin, mit dem die Kommunikationsart bestimmt wird (lesen || schreiben) Lesen = low, schrieben = high. Bei jedem Wechsel (also einer beliebigen Flanke) sollen die internen counter resettet werden. ..ohne Reset befindet sich die WR-Flanke immer bei irgeneinem Takt.. und deswegen muss das sein.. keine Ahnung wieviele takte der CLPD beim einschalten empfängt.. das ist immer zufällig. => Reset. Hülfe ;-)
@ Der Albi (der-albi) >Ich brauche in einem CPLD einen Clockdoubler. Also aus jeder Flanke >(fallend/steigend) muss ein kompletter Takt generiert werden. (also auch >mit steigender und fallender flanke) Gibt da die berüchtigte Trickschaltung mit XOR. >Er erzeugte Takt muss nicht 50%low/50%High sein.. er wird nur genutzt um >interne Zähler zu resetten... ???? Ein Zähler wird mit einem Takt zurückgesetzt? Du machst komische Sachen. >Hat da jemand ne idee? Das macht man anders. Nimm einen soliden Takt, taste dein WR ab, und nutzt es dann zum Reset. MFG Falk
WR zum reset nutzen is keine gute Idee, da es ja grade um das reset
geht, das das WR-Timing wiederherstellt. Es geht ja darum, dass ich
definiert festlegen kann, dass die Shift-Register und counter resettet
werden. WR hängt ja sozusamen von den Elementen ab, die resettet werden.
>Ein Zähler wird mit einem Takt zurückgesetzt? Du machst komische Sachen.
Der Zähler hat einen CLR-Eingang, der bei Posiviem Signal den Zähler
resettet.
Ein Takt besteht aus Low|High|Low. Dabei entstünde also ein Reset.
Wie geht das mit den XORs? Das würde mich interessieren! Insofern der
Impuls lange genug dauert um einen Reset für die Zähler auszulösen.
Falls das interessiert: Im schaltplan heißt das Element CB4CE (Counter)
und SR16CE (Shifter)
"The (CLR) input, when High, overrides all other inputs and resets the
data outputs (Q) Low"
Ich hoffe das hilft weiter, eine Lösung zu finden.
> Wie geht das mit den XORs? Das würde mich interessieren! Insofern der > Impuls lange genug dauert um einen Reset für die Zähler auszulösen. Der Takt wird verzögert (durch Gatter oder R/C Tiefpass) und dann zusammen mit dem ursprünglichen Takt an ein XOR-Gatter verfüttert. Bei Taktflanken bekommt man so kurze Pulse.
Kann man zum Taktverdoppeln im CPLD nicht das Feature nutzen, dass ein FF auf beide Taktflanken arbeiten kann? Dann einfach den Ausgang über einen Inverter auf den Eingang legen und schon hat man 2*f ?
Ich habe leider keine Pins mehr frei. :-( Eine Verzögerung über RC-Glied ist zwar sinnvoll - daran hatte ich auch schon gedacht - aber es ist nicht möglich. Das muss alles intern passieren. Was hilft mir ein FlipFlop, der auf beide Flanken reagiert...? Damit kann man doch maximal den Taxt nachbilden, aber nicht verdoppeln, oder? MFG
Öhhm ich kann die Fragestellung auch umformulieren: wie resettet man die Counter, bei einem beliebigen Flankenwechsel eines Signals :-)
@ Der Albi (der-albi) >Öhhm ich kann die Fragestellung auch umformulieren: wie resettet man die >Counter, bei einem beliebigen Flankenwechsel eines Signals :-) Gar nicht. Derartige Lösungsansätze sind nicht sonderlich brauchbar. MfG Falk
Ich habe leider keinen Pin mehr frei, um ein Reset zu implementieren. Deswegen MUSS eine Leitung doppelt verwendet werden. Mir fällt leider keine andere möglichkeit ein.. ich hab ja nichtmal ein ChipSelect :-( Ich habe einen bidirektionalen Seriel-In-Out-Pin -> geht nicht Der Clock-Pin geht auch nicht. Nur der Pins der sagt, ob Lesen oder Schreiben dran ist, kann verwendet werden. Mir geht es nur darum, nach dem Anschlaten einen Definierten Zustand zu haben, egal, das wie µC-Pins beim anschalten tun. Ich denke dafür ist der Reset ok. Bloß wie?
Ich komme mit Deiner Erklärung nicht klar. Eine Freuqnzverdopplung erzeugt man mit zwei toggelnden FFs, die jeweils auf pos und neg arbeiten und am Ausgang ein XOR haben Takt 000000111111110000000111100000011111111100000111111111 FF1: 000000011111111111111100000000001111111111111100000000 FF2: 000000000000000111111111110000000000000001111111111111
> Ich komme mit Deiner Erklärung nicht klar. Eine Freuqnzverdopplung > erzeugt man mit zwei toggelnden FFs, die jeweils auf pos und neg > arbeiten und am Ausgang ein XOR haben > > Takt 000000111111110000000111100000011111111100000111111111 > FF1: 000000011111111111111100000000001111111111111100000000 > FF2: 000000000000000111111111110000000000000001111111111111 Das ist nicht so besonders brauchbar. Das Ergebnis sieht dann so aus: FF1 XOR FF2: 000000011111111000000011110000001111111110000011111111 Ähnelt irgendwie dem Takt... Die Variante mit den Gattern geht normalerweise so: Takt 000000111111110000000111100000011111111100000111111111 Takt2 111000000111111110000000111100000011111111100000111111 FF1 XOR FF2: 111000111000001110000111011100011100000011100111000000 Der zweite Takt entsteht wenn man den ersten Takt durch ein paar Gatter schickt. Allerdings muss man sein Synthesewerkzeug dazu überreden die hintereinander geschalteten Gatter nicht wegzuoptimieren.
Der Albi wrote: > Öhhm ich kann die Fragestellung auch umformulieren: wie resettet man die > Counter, bei einem beliebigen Flankenwechsel eines Signals :-) Nun ja, 2 FlipFlops mit je einem AND-gatter mit einem invertiertem Eingang zur Erkennung der Flanken. Danach die beiden Impulse mit OR-gatter zusammen fassen.
Zur Zeit habe ich es mit Invertern und And-Gattern gemacht. Siehe Anhang. Leider wird dadurch kein Signal generiert. Wie sagt man der Xilinx ISE, dass die Inverter zwecks Laufzeitverzögerung über den Chip verteilt werden sollen? MFG
Wie sieht es mit freien Makrozellen aus? Eventuell könnte man 2 Zähler mit nachgeschaltetem Mux verwenden. Auswahl über die RD/WR Leitung, der nicht benutzte Zähler wird zurückgesetzt. Gruß Jörg
Der Albi wrote: > Zur Zeit habe ich es mit Invertern und And-Gattern gemacht. Siehe > Anhang. > Leider wird dadurch kein Signal generiert. > Wie sagt man der Xilinx ISE, dass die Inverter zwecks > Laufzeitverzögerung über den Chip verteilt werden sollen? > > MFG Mit "NOREDUCE = 1" als Attribut.
Mench Leutz, ihr baut hier asynchrone Logik in Chips ein, die für synchrones Design gedacht sind. Wenn schon, dann richtig : Zwischen (eine!) Inverstufen FFs dazwischenschalten, um echte Verzögerung zu bekommen.
Wenn nur um den Reset für Zähler geht, kann man das machen, der ist eh meist asynchron. Aber dann bitte mit der Flankenerkennung wie ich das vorgeschlagen habe. Das ist dann auch von der Optimierung und Lage der Gatter unabhängig. Oder man nimmt gleich die Doppel-Flanken-FlipFlops im CoolRunner II.
>Mit "NOREDUCE = 1" als Attribut.
Wo eingeben?
Das mit den Flipflops verstehe ich leider nicht richtig... wollt ihr
damit die Inverter ersetzen, da Flipflops mehr "Durchlaufzeit" haben?
Doppelklcik auf die Leitungen am Buffer, dann über New.... Mit FlipFlop bleibt halt alles synchron, ich kenne ja deine Logik nicht, aber ich rate dir dringend, das ganze Design so synchron wie möglich zu bauen. Mit FF hast du dann genau 1 takt Verzögerung. Aber dein Problem lässt sich viel einfacher lösen: Mit der Doppel-Flankenerkennung mit 2 FlipFlips und 2 AND2B1-Gatter, wie ich das oben schon beschrieben habe.
Nee, Montag erst. Hab zu Hause keine ISE. Hast du denn einen Clock, zu dem alles synchron ist, oder machst du ein asynchrones Design? Aber Takt müsste ja da sein, weil du ja Shiftest....
Ja, ich hab nen Takt zu dem ich shifte.. aber dazu is quasi nur der Counter und das Shift-Register syncron. Resetten will ich asyncron. Der Takt liegt ja auch nur an, wenn ich was lesen/schreiben will. Ist also nicht immer da. Das reseten bei wäre aber Asyncron. -> Szizze auch gerne als handgemalte bmp (oder anderes Format ;-), falls das geht )
Also so ein Design würd ich nicht machen. Hast du keinen Clock, der immer anliegt? Wo kommt der für das Schieberegister denn her? Mach das mal lieber alles synchron. Ohne Takt klappt das mit der Flanken-Erkennung nicht. Mit Takt gehts noch einfacher ist mir gerade eingefallen. Ein FlipFlop und ein XOR-Gatter. Takt muss an das FlipFlip, dein Signal, auf dass der Reset kommen soll an den D-Eingang, und dann fasst du den Eingang und den Ausgang des FF mit dem XOR zusammen. Der Ausgang des XOR ist dann immer kurz High, wenn das Eingangssignal den Pegel wechselt. Reicht für einen asynchronen Zähler-Reset.
Schlauer Hans: Haha. Danke trotzdem. O_o Der Takt fürs schieberegister kommt vom SPI-Takt. Das funktioniert auch alles so, wies soll, nur ist der Anfangszustand undefiniert, wenn der µC mit den SPI-Beinchen wackelt beim PowerUp oder der anschließenden Inititialisierung... oder wenn der µC neu programmiert ist und vorher eine Übertragung im Gange war... es muss einfach ein asyncroner Reset her, damit definierte Zustände herrschen. Und das einzige, das sich abietet, sind die Flanken des Daten-Richtungs-Pins. Mir würde es auch reichen, wenn der Reset nur auf eine Flanke reagiert.. das is wurst.. Hauptsache ein Reset ist drinne. MFG
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.