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


von Peterchen (Gast)


Lesenswert?

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

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


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.

von ARM-Fan (Gast)


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.

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


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.

von Peterchen (Gast)


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

von Peterchen (Gast)


Lesenswert?


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


Lesenswert?

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

von Schrotty (Gast)


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

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


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   :-/

von Nephilim (Gast)


Angehängte Dateien:

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.

von Schrotty (Gast)


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:
1
signal delay  : std_logic_vector(6 downto 0);
2
attribute syn_keep : boolean;
3
attribute syn_keep of delay : signal is true;
4
attribute NOMERGE : string;
5
attribute NOMERGE of delay : signal is "TRUE";
6
...
7
fOut <= delay(6) XOR fIn;
8
delay(0) <= fIn;
9
delay(1) <= not delay(0);
10
delay(2) <= not delay(1);
11
delay(3) <= not delay(2);
12
delay(4) <= not delay(3);
13
delay(5) <= not delay(4);
14
delay(6) <= not delay(5);
15
...

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.

von SuperWilly (Gast)


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

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


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.

von Schrotty (Gast)


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 ;-)

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.