Ist es möglich, z.B. ein Taktsignal durch ein HDL-Design zu verdoppeln? Danke im Voraus, Peterchen
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.
>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.
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.
> 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. ?
Schon was gefunden: http://www.velocityreviews.com/forums/t21919-frequency-doubler-in-vhdl-with-symmetric-duty-cycle.html
Und aufpassen:
1 | however the duty cycle is very assymmetrical ... |
Es werden praktisch nur Glitches (im ns-Bereich) ausgegeben.
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
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 :-/
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.
@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.
@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
> 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.