Hallo, ich habe ein Signal, das in etwa so aussieht: ____ ____ ___| |_____| |____ etc, also einen Takt, diesen möcht ich nach: _ _ _____| |________| |_____ ändern. Die Zeit, in der der Takt High ist, soll also verkürzt werden. Konkret geht es um folgendes: Ich muss Daten sehr schnell in ein SRAM schieben. Diese Daten liegen extern parallel an, und bei steigender Flanke müssen diese übernommen und in ein (parallel angesteuertes) SRAM geladen werden. Ich muss aber (vor oder danach, wie das sinnvoll ist, weiß ich nicht) den Adresscounter erhöhen, damit jedes Byte seinen eigenen Speicherplatz bekommt. Ich will mit der Verzögerung dafür sorgen, dass das Write am SRAM nicht triggert, bevor die gültige Adresse durchpropagiert ist. Der einzige Takt, der zur Verfügung steht, ist der takt, mit dem die Daten kommen, dieser ist ~12MHz. Das Ganze soll auf nem CPLD in VHDL passieren. Kann mir wer sagen, wie ich die Laufzeiten so hinbekomm, dass ich keinen Hazard bekomme? Grüße, Michele Blank
@uLuxx (Gast) Das mit diesen Taktverkürzungstricks ist wie mit dem Rauchen. Fang gar nicht erst damit an! >Ich muss Daten sehr schnell in ein SRAM schieben. Diese Daten liegen >extern parallel an, und bei steigender Flanke müssen diese übernommen >und in ein (parallel angesteuertes) SRAM geladen werden. >Ich muss aber (vor oder danach, wie das sinnvoll ist, weiß ich nicht) Eben, du weißt nicht was sinnvoll ist, willst aber mit Murks das Problem lösen. Ein schlechter Ansatz. >den Adresscounter erhöhen, damit jedes Byte seinen eigenen Speicherplatz >bekommt. >Ich will mit der Verzögerung dafür sorgen, dass das Write am SRAM nicht >triggert, bevor die gültige Adresse durchpropagiert ist. Macht das der Propagandaschaltkreis? >Der einzige Takt, der zur Verfügung steht, ist der takt, mit dem die >Daten kommen, dieser ist ~12MHz. Dann mach es RICHTIG!!! Nimm einen schnellen Takt, sagen wir mal 50 MHz. Der steuert den SRAM sauber mit einer voll synchronen State Machine (FSM) an. Deine Daten legst du mit den 12 MHz direkt an den SRAM. Die 50 MHz sorgen dafür, dass die Daten sauber in den SRAM geschrieben werden. Bei der Synchronisation zwischen den 12 MHz und den 50 MHz muss man natürlich aufpassen. Man tastet den 12 MHz Takt per 50 MHz ab und macht einen Vergleich mit dam alten Wert. Ist der alte Wert 0 und der neue 1 hat man eine neue Flanke, dann liegen neue Daten an und die FSM muss einen Schreibzyklus generieren. Wichtig ist, daß man die Daten durch ZWEI FlipFlops erstmal abtastet, wegen der Metastabilität etc. Nur den Ausgang des zweiten Registers nutzt man in der FSM. MFG Falk
Falk Brunner schrieb: > Macht das der Propagandaschaltkreis? http://www.dict.cc/?s=propagation >>Der einzige Takt, der zur Verfügung steht, ist der takt, mit dem die >>Daten kommen, dieser ist ~12MHz. > > Dann mach es RICHTIG!!! > > Nimm einen schnellen Takt, sagen wir mal 50 MHz. Wenn ich schreibe, dass ich nur die ~12MHz habe, woher bitteschön sollen auf einmal die 50MHz kommen? In diesem Forum wird immer groß gejammert wenn der Fragesteller nicht genau sagt was er will, aber sagt man es genau, hält sich eh keiner dran und postet irgendwelche Lösungen, die klar ausgeschlossen wurden...
@ uLuxx (Gast) >Wenn ich schreibe, dass ich nur die ~12MHz habe, woher bitteschön sollen >auf einmal die 50MHz kommen? Von einem anderen Oszillator? >und postet irgendwelche Lösungen, die klar ausgeschlossen wurden... Du bist aber recht vorschnell mit deinen Ausschlußkriterien. Läufst du gern im Handstand den Mt. Everest hoch? Fragende Grüße Falk
Mich würde es aber schon interessieren, wenn ich z.B. ein 100Mhz OSC habe, in ein CPLD, mit 40/60 Takt, also 4ns high und 6ns low. Wenn ich jedoch einen 50/50 clock haben möchte, dann könnte ich theoretisch das clk_div2 Signal um 5ns verzögern, und mit einem xor ein 50/50 Signal rausholen. Ein Clock Signal in die User logic zu holen, dort zu teilen, und dann als global clock signal zu verteilen, das geht. Dann müsste eigentlich das andere auch gehen, bzw auch, ein clock zu verdoppeln. Klar, mit einem 100Mhz bin ich dann auserhalb der Bandbreite des CLPD, um es zu verdoppeln, aber mit einem 80Mhz OSC könnte es gehen. Was spricht dagegen ? Das CPLD ist ein Xilinx mit CoolClock usw, ev. da der Port ja schon zwei Verzögerungsleitungen hätte, könnte das auch noch eleganter gemacht werden. Ein 50Mhz Quarz lässt sich mit 50/50 leichter sourcen als ein 100Mhz Quarz, und mit den 4ns habe ich leichte Zeitprobleme. Es geht um 0.2-0.4ns, diese Grösenordnung. Was spricht eigentlich dagegen? clk_in 1111000000111100000011110000001111000000 clk_div2 1111111111000000000011111111110000000000 clk_div2_d5n 0000011111111110000000000111111111100000 clk_xor_div2_d5n 1111100000111110000011111000001111100000
Falk Brunner schrieb: > Man tastet den 12 MHz Takt per 50 MHz ab und macht einen > Vergleich mit dam alten Wert. Ist der alte Wert 0 und der neue 1 hat man > eine neue Flanke, dann liegen neue Daten an und die FSM muss einen > Schreibzyklus generieren. Wichtig ist, daß man die Daten durch ZWEI > FlipFlops erstmal abtastet, wegen der Metastabilität etc. Nur den > Ausgang des zweiten Registers nutzt man in der FSM. Und was passiert wenn die daten nur 5 ns vor und nach der Taktflanke stabil sind??? Wenn man einen synchronen externen Datenbus in eine schnelle domain einsynchronisiert dann ist man mit folgendem Verfahren auf der sicheren seite: Die Daten werden synchron mit dem externen Takt in ein Eingangsregister gespeichert. An das Eingangsregister ist dann ein Synchronisationsregister in der Zielclockdomain angeschlossen. Das Synchronisationsregister wird durch eine Flankendetektion des externen Takts enabeled. Da die Flankendetektion immer 2-3 Takte durchlaufzeit hat ist garantiert das die Daten am Eingang des Synchronisationregister stabil sind wenn das enable kommt. Somit sind metastabilitäten auf dem Datenbus gänzlich ausgeschlossen und nicht nur durch doppesync reduziert. Entsprechendes constraining der Verbindung zwischen Eingangs- und Syncregister vorausgesetzt (maydelay < 1 cycle Zieldomain) Kein problem für eine Reg-Reg verbindung. Die Schnelle Zieldomain muss natürlich mehr als 4x schneller als die externe sein.
Chris schrieb: > Was spricht eigentlich > dagegen? Das du kein festes Delay von 5 ns hast. Die Durchlaufzeiten auf dem Halbleiter varieren um den Faktor zwei über die Temperatur.
Ein Schaltung für eine reaktion vor einer Flanke gibt es nicht. Also die verkürzung vor der fallenden Flanke ist nicht möglich. Dazu müsste man ja in die Zukunft schauen :-). Signal Einschaltverzögerung: S ___/ \___ S' _______/ \___ |<d>| S' = S AND S_delayed Positive Flanke zu Puls: S ___/ \___ S' ___/ \___ |<d>| S' = S AND NOT S_delayed Kleine Delays kann man mit internen Verzögerungen erzeugen. Teilweise gibt es dedizierte zellen mit delay. Große delays kann man erzeugen wenn man über output buffer geht. Das Signal muss glitch frei sein. Das ist bei einem Clock eigentlich gegeben sein, sonst hast du ganz andere probleme. !!! Das Arbeiten mit delays auf einem digitalen IC erfordert eine ganze genaue timing analyse bei minimaler und maximaler temperatur. !!! Alternative: Die meisten SRAM's benötigen das WE_n Signal nicht so lange wie die access time. Addressen und Daten werden einfach mit steigender Flanke ausgegeben. Wenn die Dauer der low phase des clocks für das WE_n signal ausreicht, wäre es also möglich einfach die low phase des clocks mit einem glitch freien (->register) internen WE zu verknüpfen. !Hold zeiten der Daten und Adressen für das SRAM beachten!
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.