Forum: FPGA, VHDL & Co. Taktsignal verkürzen


von uLuxx (Gast)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@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

von uLuxx (Gast)


Lesenswert?

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...

von Ottmar (Gast)


Lesenswert?

Welche access time hat dein SRAM?

von Falk B. (falk)


Lesenswert?

@  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

von Chris (Gast)


Lesenswert?

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

von Ottmar (Gast)


Lesenswert?

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.

von Ottmar (Gast)


Lesenswert?

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.

von uLuxx (Gast)


Lesenswert?

das SRAM hat 55ns Accesstime.

uLuxx

von Ottmar (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.