mikrocontroller.net

Forum: FPGA, VHDL & Co. Frequenzverdoppler in VHDL?


Autor: Peterchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist es möglich, z.B. ein Taktsignal durch ein HDL-Design zu verdoppeln?
Danke im Voraus,
  Peterchen

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

Bewertung
0 lesenswert
nicht lesenswert
Ja, und nein.
Allein durch eine HDL-Beschreibung wird dir das kaum gelingen. Du mußt 
die Komponenten selber instantiieren und verdrahten.


Du kannst auf einem FPGA z.B. entsprechende Hardwarekomponenten nutzen 
(DLL, DCM, PLL und wie sie immer heißen). Diese Bauelemente haben u.U. 
Einschränkungen bezüglich der Eingangstaktfrequenz (min-max) und des 
Tastverhältnisses. Das wäre der korrekte und reproduzierbare Weg.

Du kannst aber auch die traditionellen 
XOR-Gatterlaufzeit-Frequenzverdoppler einbauen. Das ist aber ein recht 
übler und kaum nachvollziehbarer Weg, denn schon bei der nächsten 
Maskenrevision verdoppelt das Ding dann u.U. nicht mehr.

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Du kannst aber auch die traditionellen XOR-Gatterlaufzeit-
>Frequenzverdoppler einbauen.

War bei mir mal aus der Not geboren und in einem XC95xxx umgesetzt.
Funktioniert aber schon lange ganz prächtig in der Serie.

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

Bewertung
0 lesenswert
nicht lesenswert
ARM-Fan wrote:
>>Du kannst aber auch die traditionellen XOR-Gatterlaufzeit-
>>Frequenzverdoppler einbauen.
> War bei mir mal aus der Not geboren und in einem XC95xxx umgesetzt.
> Funktioniert aber schon lange ganz prächtig in der Serie.
Hatte ich mal in einem kleinen Test-Design in einem Spartan II drin. 
Beim Wechsel auf den Spartan3 gings dann erst mal nicht mehr. Ich musste 
da nochmal Hand anlegen.   :-/
Fazit: ja, die XOR-Geschichte geht.
Aber nicht einfach so mit einer HDL-Beschreibung.

Autor: Peterchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Fazit: ja, die XOR-Geschichte geht.
> Aber nicht einfach so mit einer HDL-Beschreibung.

Wie das geht würde mich aber trotzdem interessieren. Habt ihr vielleicht 
einen Tip/Link/etc. ?

Autor: Peterchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

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

Bewertung
0 lesenswert
nicht lesenswert
Und aufpassen:
however the duty cycle is very assymmetrical ...
Es werden praktisch nur Glitches (im ns-Bereich) ausgegeben.

Autor: Schrotty (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du könntest auch ne Kette von Invertern verwenden, druch die du den 
Quelltakt schiebst. und dann verknüpfst du den Eingang der Kette mit 
z.B. dem Ausgang des 6. Inverters XOR. dann erhältst du bei jedem 
Flankenwechsel des ursprünglichen Signals einen Puls, der so lange ist, 
wie die Laufzeit durch z.B. 6 Inverter.
Nachteil: Pulsbreite ist natürlich abhängig von der Technologie, aber 
durch die Anzahl der Inverter kannst dir ja die Impulsbreite ein wenig 
"anpassen"

Okay, schön ist das nicht, aber es funktioniert.
Musst nur bei der Synthese drauf achten, dass die die nicht die 
Inverterkette wegoptimiert

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

Bewertung
0 lesenswert
nicht lesenswert
Schrotty wrote:
> du könntest auch ne Kette von Invertern verwenden, druch die du den
> Quelltakt schiebst. ...
> Musst nur bei der Synthese drauf achten, dass die die nicht die
> Inverterkette wegoptimiert
Das wird nicht sooo einfach sein, da ist Handarbeit gefragt (manuelle 
Instantiierung der Inverten). Und gerade bei CPLDs geht dann für einen 
simplen Inverter gleich ein ganzer Produktterm flöten   :-/

Autor: Nephilim (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
ich hatte mal in irgend nem alten xilinx dokument die schaltung wie im 
anhang gefunden. die funktioniert auch ganz gut, macht aber auch ein 
sehr asymmetrischen takt hat aber den vorteil dass sie nicht 
wegoptimiert wird. hatte im S3A aber das problem, dass ich es noch 
negieren musste um negative spikes zu erzeugen, damit ich auch die 
rising_edge nutzen konnte. ansonsten wollten die verwendeten FFs nicht 
immer reagieren.

Autor: Schrotty (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Lothar:
Na ja, schwer ist es nicht gerade. muss halt nen Sack voller Inverter 
spendieren und in einem PCLD sind die natürlich rar ;-)
Das würde in etwa so aussehen:
signal delay  : std_logic_vector(6 downto 0);
attribute syn_keep : boolean;
attribute syn_keep of delay : signal is true;
attribute NOMERGE : string;
attribute NOMERGE of delay : signal is "TRUE";
...
fOut <= delay(6) XOR fIn;
delay(0) <= fIn;
delay(1) <= not delay(0);
delay(2) <= not delay(1);
delay(3) <= not delay(2);
delay(4) <= not delay(3);
delay(5) <= not delay(4);
delay(6) <= not delay(5);
... 

Unter der Annahme, dass pro Inverter ca 500ps draufgehen, bekommst hier 
schon nen Impuls von 3ns. Damit kann man zumindest im FPGA intern schon 
was anfangen.

Autor: SuperWilly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Schrotty:

Im Prinzip funktioniert soetwas, das Problem hierbei ist jedoch, dass
man dafür sorgen muss, dass der Placer die LUTs immer an den gleichen 
Stellen
platziert. Hierzu benögtigt man weitergehende "LOCATE"-Constraints 
(heißen
bei A und X wahrscheinlich anders).

Gruß,
SuperWilly

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

Bewertung
0 lesenswert
nicht lesenswert
> dass man dafür sorgen muss, dass der Placer die LUTs immer an den
> gleichen Stellen platziert.
Nein, man muß seine Anforderungen einfach so stellen, dass einem 
irgendein wie auch immer gearteter Puls ausreicht   ;-)

Und auch mit Plazierungsrichtlinien wird das Design nicht wesentlich 
portabler. Nicht von X nach A und genausowenig von S2 nach V4.

Autor: Schrotty (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja klar, über die delays des Routings kann man nix sagen. Aber 
genausowenig kann man das bei der Schaltung mit dem FF. Die funktioiert 
ja auch nur über Laufzeiten und Routings. Also etwa gleich bescheiden. 
Nur mit dem Unterschied, dass die Synthese sowas nicht wegoptimiert. Der 
Unterschied bei dem Vorschlag mit der Inverterkette ist halt der, dass 
ich ein wenig an der Impulsbreite "drehen" kann. Was jetzt nicht heisst, 
dass das ordentlich reproduzierbar ist. Oder hab ich da was falsch 
erkannt?
Ich denke, der einzige "saubere" Weg geht über eine PLL. Alles andere 
ist Krampf ;-)

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.