www.mikrocontroller.net

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


Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Frank Buss (foobar)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hans-Georg Lehnard (h-g-l)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ralph H. (guru)
Datum:

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

Autor: arnonym (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
23 oder 42

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...  :-/

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht 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 !!

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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 . . .

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was soll denn der Puls überhaupt machen?

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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"

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Frank Buss (foobar)
Datum:

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

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hans-Georg Lehnard (h-g-l)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht 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..

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bego (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm ein JK-FF am Ausgang.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.