Einfacher Clockdoubler im CPLD

#907494
Lesenswert?

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 ;-)
#907558
Lesenswert?

@ 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
#907606
Lesenswert?

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.
Gast #907778
Lesenswert?

> 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.
#908068
Lesenswert?

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
#908387
Lesenswert?

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?
Gast #908478
Lesenswert?

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
Gast #908530
Lesenswert?

> 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.
#908694
Lesenswert?

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.
#908946
Lesenswert?

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.
Gast #909128
Lesenswert?

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.
#909186
Lesenswert?

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.
#909283
Lesenswert?

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.
#909479
Lesenswert?

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 )
#909519
Lesenswert?

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.
#909527
Lesenswert?

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

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