Forum: FPGA, VHDL & Co. Impuls kürzer als Takt erzeugen


von Ralph H. (guru)


Lesenswert?

Hallo.. kann ich im VHDL in einem CPLD einen Impuls erzeugen, der 
deutlich kürzer als das schnellste Taktsignal ist ?
Konkret habe ich einen (leider nicht änderbaren Takt) von Impulsbreite 
62.5ns =16Mhz und benötige einen 10ns schmalen Impuls.
Wie geht das wenn es überhaupt realisierbar ist?

von Frank B. (foobar)


Lesenswert?

Du könntest eine Reihe von Invertern oder anderen Elementen als 
Verzögerung verwenden und dann ver"und"en mit einem nichtverzögerten 
Signal. Musst du aber die herstellerspezifischen Entities direkt 
verwenden, damit der VHDL-Compiler das nicht wegoptimiert, oder 
vielleicht auch per Schematic Entry. Ist aber nur zum experimentieren 
gedacht, da sich das von Charge zu Charge des CPLDs ändern kann, oder 
auch mit Betriebsspannung oder Temperatur, also nichts für ein Produkt.

von Hans-Georg L. (h-g-l)


Lesenswert?

Damit nix weg optimiert wird, oder wenn die Laufzeit zu kurz ist, kannst 
du auch das Verzögerungsignal aus dem CPLD heraus führen und über einen 
2. Eingang wieder rein.

von Ralph H. (guru)


Lesenswert?

Danke.. habt ihr ne Ahnung wieviele Inverter ich brauch, um in etwa 10ns 
hinzubekommen ?

von arnonym (Gast)


Lesenswert?

23 oder 42

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ralph H. schrieb:
> Danke.. habt ihr ne Ahnung wieviele Inverter ich brauch, um in etwa 10ns
> hinzubekommen ?
Wie schnell ist dein CPLD?

Frank Buss schrieb:
> Musst du aber die herstellerspezifischen Entities direkt
> verwenden, damit der VHDL-Compiler das nicht wegoptimiert, oder
> vielleicht auch per Schematic Entry.
In VHDL gibt es dafür bestimmte Attribute. Auf Anhieb fällt mir KEEP 
ein. So etwas in der Art habe ich beim Ringoszillator auch gemacht:
http://www.lothar-miller.de/s9y/categories/29-Ringoszillator

Aber: weil ein simpler Inverter in einem CPLD auch schon einen 
Produktterm braucht, wird das Ganze ziemlich ressourcenhungrig.
Und vor allem: der CPLD-Hersteller garantiert nur eine maximale 
Durchlaufzeit von Pin-zu-Pin. Wenn du Glück (oder in deinem Fall Pech) 
hast, dann ist das CPLD wesentlich schneller...  :-/

von Ralph H. (guru)


Lesenswert?

Ich benutze einen XC9572-15 und habe nicht ein Pin mehr übrig :-(
Mal gucken ob die Lösung ein Ansatz ist.. aber leider erst heute abend.

Danke Euch !!

von Falk B. (falk)


Lesenswert?

@  Ralph H. (guru)

>Ich benutze einen XC9572-15 und habe nicht ein Pin mehr übrig :-(
>Mal gucken ob die Lösung ein Ansatz ist.. aber leider erst heute abend.

Ich wette mal, dass dein Problem locker ohne einen solchen unsinnigen 
Puls auskommt . . .

von Christian R. (supachris)


Lesenswert?

Was soll denn der Puls überhaupt machen?

von Ralph H. (guru)


Lesenswert?

@Falk... hm schön wäre es ja :), wobei die Frage auch prinzipieller 
Natur ist, denn ich glaub jeder hat mal das Problem irgendwann.

von Falk B. (falk)


Lesenswert?

@  Ralph H. (guru)

>@Falk... hm schön wäre es ja :), wobei die Frage auch prinzipieller
>Natur ist,

> denn ich glaub jeder hat mal das Problem irgendwann.

Nö, nur du, der du immer noch nicht die Grundlagen SYNCHRONER 
Schaltungen kapiert hast. Genausowenig wie Netiquette. Beschreibe 
dein Vorhaben, nicht deinen vermeintlichen Lösungsansatz.

MFG
Falk

P S Zum Thema kurze Pulse erzeugen nur soviel, siehe Glitch, Absatz 
"Das Problem"

von Ralph H. (guru)


Lesenswert?

@Falk... Danke das Du schreibst, aber nimms mir nicht übel, ich habe 
sehr konkret beschrieben was ich will ! und denk auch die Netiquette 
eingehalten zu haben. Ich wüsste nicht das ich einen Lösungsansatz 
beschrieben habe, sondern ein Problem, bzw. einen konkret Frage gestellt 
!

Konkret hab ich ein Taktsignal von 62.5ns Impulsbreite und will aus der 
steigenden Flanke (also rising_edge) NACHEINANDER im Abstand von ca. 
20ns 2 kurze '1' Pulse von 10ns Breite erzeugen die EXTERNE RAMS 
dazubewegt die Adressen zu übernehmen. der 1.Impuls kommt mit dem 
rising_edge Ereignis.. danach 30ns später der 2. Impuls. Das Ganze muss 
sich innerhalb der 62.5ns und dem '1' Pegel dieses Taktes abspielen !!
Nun hab ich die ganze Aufgabenstellung dargelegt, obgleich meine 
Reduktion auf das Kernproblem (1.Beitrag) das Gleiche fragt.

Aber Du hast in Sachen "synchron" Recht ! Das hat sich mir tatsächlich 
noch nicht richtig erschlossen !

Ich hoffe nett genug geschrieben zu haben, um eine nette Antwort zu 
erhalten ! Viele Grüße :-)

von Falk B. (falk)


Lesenswert?

@  Ralph H. (guru)

>Konkret hab ich ein Taktsignal von 62.5ns Impulsbreite

16 MHz sind zwar 62.5ns PERIODENDAUER, über die PULSBREITE sagt das aber 
nocht nciht soo viel aus. Bei idealem Tastverhältnis von 50% sind das 
31,2ns.

> und will aus der
>steigenden Flanke (also rising_edge) NACHEINANDER im Abstand von ca.
>20ns 2 kurze '1' Pulse von 10ns Breite erzeugen die EXTERNE RAMS
>dazubewegt die Adressen zu übernehmen.

Tja, sieht eher schlecht aus. Es gibt zwar diverse Tricks dafür, die 
sind aber meistens nicht sonderlich gut und stabil.

> der 1.Impuls kommt mit dem
>rising_edge Ereignis.. danach 30ns später der 2. Impuls. Das Ganze muss
>sich innerhalb der 62.5ns und dem '1' Pegel dieses Taktes abspielen !!

Hier sind wir schon mal im Widerspruch. Dein Takt hat nur ~31,2ns einen 
HIGH Pegel.

>Nun hab ich die ganze Aufgabenstellung dargelegt,

Was sinnvoll und nötig ist.

> obgleich meine
>Reduktion auf das Kernproblem (1.Beitrag) das Gleiche fragt.

Das ist nicht der Punkt. Die Frage ist, wie man das Gesamtproblem 
sinnvoll löst, sprich deine RAM-Ansteuerung, und NICHT wie man komische 
Pulse erzeugt.

Sinnvollerweise brauchst du einen schnelleren Takt. Dort kann man dann 
was machen, mit invertierten Takt und so. Das ist schon mehr als genug 
getrickst. Und warum brauchst du  ZWEI Pulse inerhalb EINES Taktes?

MFG
Falk

von Ralph H. (guru)


Lesenswert?

Falk Brunner schrieb:
> 16 MHz sind zwar 62.5ns PERIODENDAUER, über die PULSBREITE sagt das aber
> nocht nciht soo viel aus. Bei idealem Tastverhältnis von 50% sind das
> 31,2ns.
upps... na dann wirds noch schwieriger, denn Du hast Recht ! Mein 
Tastverh. ist aber 1:1

> Tja, sieht eher schlecht aus. Es gibt zwar diverse Tricks dafür, die
> sind aber meistens nicht sonderlich gut und stabil.
Hab ich mir beim lesen auch schon so gedacht, aber gehofft, dennoch ne 
Lösung zu finden. Ich werd wohl den Taktgenerator ändern müssen.

> Hier sind wir schon mal im Widerspruch. Dein Takt hat nur ~31,2ns einen
> HIGH Pegel.
Ja da wird es eng mit dem Timing, also die Ladeimpulse kürzer machen.

> ..Und warum brauchst du  ZWEI Pulse inerhalb EINES Taktes?
Die 2 Impulse kommen in der realen Hardware die ich im CPLD nachbilde 
definitiv nacheinander. Aber es sollte ansich auch 1 Impuls genügen. Das 
wäre zu testen.

Aber ums mal zusammenzufassen, es ist ohne Tricks und "instabile" 
Lösungen nicht möglich einen stabilen und zeitlich exakt definierbaren 
Impuls einer deutlich kürzeren Dauer als kürzeste Taktsignal zu 
erzeugen, richtig ?

Die sinnvolle Lösung ist nur eine kürzere Taktperiode!?

LG Ralph

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ralph H. schrieb:
> Die sinnvolle Lösung ist nur eine kürzere Taktperiode!?
Die sinnvollere Lösung ist ein FPGA statt des CPLDs. Darauf gibt es 
Taktmanager, mit denen du den externen Takt vervielfachen und in 
einzelne Zeitschlitze aufteilen kannst. Das wäre reproduzierbar.

von Ralph H. (guru)


Lesenswert?

@Lothar.. Jo das klingt besser, aber ich lern ja grad erst mal CPLD 
:D..und bau nun auch nicht mehr um... ich werd versuchen nen schnelleren 
Takt zu implementieren.
FPGA kommt später mal dran :-)

von Frank B. (foobar)


Lesenswert?

Gibt es denn eine untere Grenze für das RAM, oder musst du das wegen 
deiner Anwendung so schnell ansteuern?

von Ralph H. (guru)


Lesenswert?

Nein das RAM-Latch müsste auch schneller können. Wobei das ja auch eher 
noch mit eine gundsätzliche Frage nach dem kürzeren Impuls war.
Mein reales Problem war nicht ganz so wichtig, weil ich das nun mit mehr 
Takt lösen werde.

von Hans-Georg L. (h-g-l)


Lesenswert?

Wie wärs mit einem Quarz der vierfach so schnell wie dein bisheriger 
Takt schwingt dann kanst deinen Takt und die Impulse mit dem  Cpld 
locker generieren. Deine Schaltung wird dann halt vom Cpld getaktet.

von Ralph H. (guru)


Lesenswert?

Ja so in etwa schwebt mir das auch vor, aber ich muss mal gucken was der 
74HCT14 der den Takt erzeugt, kann... müsste ja mind. 32 Mhz (2x) 
sein.64 Mhz wird der nicht schaffen..

von Falk B. (falk)


Lesenswert?

@  Ralph H. (guru)

>upps... na dann wirds noch schwieriger, denn Du hast Recht ! Mein
>Tastverh. ist aber 1:1

1:1 ist ein Fußballergebnis. Ein Tastverhältnis ist immer eine Zahl 
zwuschen 0 und 1 bzw. 0 und 100%. Damit wird es vor allem mathematisch 
deutlich einfacher handhabar.

>Lösung zu finden. Ich werd wohl den Taktgenerator ändern müssen.

Ja. Nimm einen fertigen Quarzoszillator, dort kommt ein schöner, 
fertiger Takt raus.

>Aber ums mal zusammenzufassen, es ist ohne Tricks und "instabile"
>Lösungen nicht möglich einen stabilen und zeitlich exakt definierbaren
>Impuls einer deutlich kürzeren Dauer als kürzeste Taktsignal zu
>erzeugen, richtig ?

Nein.

>Die sinnvolle Lösung ist nur eine kürzere Taktperiode!?

Ja.

MfG
Falk

von Bego (Gast)


Lesenswert?

Nimm ein JK-FF am Ausgang.

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.