Hallo, ich versuche mich gerade an den Projekt "xapp250" von Xilinx. Es geht dabei um Taktrückgewinnung mittels einer PLL, Tiefpass usw. Nun dachte ich es wären daher Design Elemente und ich würde im "Libraries Guide" finden wie die einzelnen Module funktionieren bzw. angesteuert werden. Aber egal nach welchen Modul oder einzelnen Eingang oder Ausgang ich gesucht habe ich fand nix. Daher meine Frage. Gibt es noch andere Dokumente in denen Design Elemente von Xilinx stehen. Wenn ja könnte mir jemand den Link nennen. Gruss unwissender_Neuling
Da leider noch keiner meine Frage beantworten hat oderkonnte, möchte ich sie vielleicht etwas anderst formulieren. Warum kann man in den Xilinx Dokumenten nichts über PLL`s, VCO`s und Tiefpasse finden. z.B. wie sie Bauelemente mässig aufgebaut sind und wie welcher Eingang angesteuert werden muss.
Hast Du Dir mal die Verilog-Dateien zu der XAPP angeschaut? Da werden m.E. keine speziellen Designelemente verwendet. Hast Du wie angegeben einen Virtex-II (o.ä.)? PLL, VCO und Tiefpass sind (meist) analoge Bauelemente. In der Appnote werden diese extern angeschlossen und gehören daher nicht in die FPGA-Dokumentation. P.S.: Für das Verständnis von PLLs ist das gleichnamige Buch von Roland Best recht zu empfehlen, auch wenn es schon etwas älter ist. Rick
Nein, ich bräuchte es für ein Spartan 3. Die Verilog Dateien hab ich mir angeschaut und da werden halt verschiedene Module benutzt Z.B. steht da
1 | entity top_xapp250 ( |
2 | vco270M_p, -- 270MHz VCO pos clk input |
3 | vco270M_n, -- 270MHz VCO neg clk input |
4 | |
5 | vcxo_27M_in, -- 27MHz VCXO clock input used as ref osc only |
6 | -- (not VCXO)
|
7 | |
8 | -- SDI Port
|
9 | sdi_rxd_p, -- SDI serial input bit stream |
10 | sdi_rxd_n, -- SDI serial input bit stream |
11 | |
12 | sdi_txd_p, -- SDI serial output for verification |
13 | sdi_txd_n, -- SDI serial output for verification |
14 | |
15 | dip_switches, -- selects user options |
16 | |
17 | sdi_vco_up, -- 270Mhz VCO faster control to loop filter |
18 | sdi_vco_down, -- 270Mhz VCO slower control to loop filter |
19 | |
20 | |
21 | test_points -- selected 10 bits of selected error counter |
22 | );
|
23 | |
24 | usw. |
Wenn ich nun in den PDF- Dateien von Xilinx ( spezell im "Libaries Guide") nachschaue finde ich nix zu diesen Modul. Ich möchte halt verstehen, wie die Module die in den gegebenen Programmen verwendet werden funktionieren
Wofür benötigst du die Taktregenerierung, wie hoch ist der Takt? Evtl. benötigst du keine externe analoge Beschaltung, sondern es läßt sich mittels DPLL erschlagen. Wenn du ein wenig über deine Anwendung verrätst kann man dir evtl. helfen.
Diese ist die grobe Aufgabenstellung, "Serielle Datenübertragung erfordert auf der Empfängerseite die Rückgewinnung des Taktsignales aus den eingehenden Daten. Ein bevorzugtes Prinzip für die Taktrückgewinnung ist die Anwendung einer Phasenregelschleife (PLL). " Es soll halt für beliebiges Signal eine Schaltung entwickelt werden mit deren Hilfe der Takt aus dem Signal gewonnen wird. (Grober Aufbau im Anhang) Im Prinzip soll es so gemacht werden, wie es in dem Projekt "xapp250" in Verilog gemacht wurde nur halt in VHDL und für Spartan3. Ich hatte mich auch schon mit dem Projekt "xapp224" beschäftig, da wird das ja auf eine ähnliche Weise gemacht und um die einzelnen Programm-Module zu verstehen hab ich in den "Libraries Guide" geschaut wie die Module verwendet werden, welche Ein- und Ausgänge es gibt und wie diese beschaltet werden. Ich hab z.B. dabei rausgefunden das ein DCM im Prinzip grob gesehen das "selbe" mach wie ein PLL. Nun wollte ich halt schauen wie das VCO welches in den Projekt "xapp250" verwendet wurde funktioniert bzw. benutzt werden kann oder welche Einschränkungen es gibt. Aber egal nach welchen Teil ich in den Unterlagen schaue, es wird nicht gefunden. Ich dachte halt, nach der Aufgaben Stellung: "In dieser Arbeit sollen die auf FPGA-Bausteinen der Fa. Xilinx implementierbaren Realisierungsprinzipien digitaler PLL�s und deren Leistungsfähigkeit untersucht werden." Das wenn es um digitale PLL´s geht diese in den Xilinx Dateien dabei wären und ich sie nur noch einbinden muss. Anscheinend ist dem aber nicht so? Daher wollte ich wissen ob vielleicht in anderen Dokumentationen von Xilinx steht wie die Ein- und Ausgänge benutzt werden.
Mit einer Standard-PLL wird das kaum zu machen sein, da diese mit einer deterministischen Eigangsfrequenz endlicher Varianz angesteuert werden (Müssen). Die Synthese und die letzliche Elektronik sind darauf ausgelegt, daß dieser CLock so kommt oder eben nicht. Serielle Daten toggeln ja beliebig. Bei meinem letzten Desgin hatte ich sogar das Problem, daß die PLL nicht mal auf die einigermassen konstante Eingangsfrequenz loggen wollte, da das d.c. nicht im validen Bereich lag, (<60:40). Du musst also die PLL-Funktionalität händisch bauen, fürchte ich. Das ist aber nicht schlimm wie es sich anhört: Du taktest alle Datenleitungen ab und merkst Dir mit dem Systemtaktraster von sagen wir 100Mhz einen Flankenwechsel in einem Speicherflipflop. Parallel lässt Du einen schnellen Zähler bis zu einem Referenzwert laufen, der indirekt der Periode das Datensignals entspricht, z.B. 2MHz und siehst dann jeweils nach, ob schon Flankenwechsel aufgetreten sind. Wenn ja, ist die Phase Deines Nachschautaktes hinterher und Du verringerst den Referenzwert, sodaß beim nächsten mal früher nachgesehen wird. Sollte kein Flankenwechsel sattgefunden haben, muss man den Datenfklanken etwas Zeit geben, aufzutauchen: Man sieht noch einige male nach und löscht dann die Flankeregister. Sollte während des weiteren Nachsehens eine Flanke auftauchen, erhöht man den Referenzwert. Wenn nicht, gab es keine Flanken, auf die man sich zentrieren konnte man ändert nichts. Somit läuft der "Nachsehtakt" automatisch rückwärts in die Flanken rein und pendelt immer um die reale Datenfrequenz. Das sollte schon genau genug sein. Wenn nicht kann innerhalb des Nachsehfenster eine Flankenanalyse gemacht werden und der daruas resultierende Offset als Taktverzögerung für den Ausgabetakt verwendet werden. Ansonsten ist der Ausgabetakt gleich dem Nachsehtakt. Zur Interpration der Daten in Deiner Schaltung muss gfs noch ein künstlicher Offset hinzuaddiert werden, damit die setup-holdtime-Relationen eingehalten werden können.
Das wäre ein rein digitaler DPLL. Meines Wissens sollte die Abtastfrequenz dafür 16x höher sein als das Eingangssignal. Was tun wenn das nicht möglich ist? Weiterhin muss man die Periode des zurückzugewinnenden Taktes kennen. Das ist auch nicht immer der Fall.
@unwissender_Neuling: Schau Dir das Buch von Best an. Speziell die Grundlagen und das Kapitel über Software/Digitale PLL. In den verilog-Dateien von XAPP250 werden den Leitungen schönen Namen gegeben (das was Du oben geschrieben hast). Es ist eine Version für externen VCO und Phasendetektor(PFD) und auch eine für einen internen PFD dabei. Die externen Bauteile sind logischerweise nicht im Library-Guide beschrieben. Versuch doch das ganze mal zu synthetisieren, da siehst Du, welche Ressourcen verwendet werden. Rick
@ Rick Dangerus > Es ist eine Version für externen VCO und Phasendetektor(PFD) und auch > eine für einen internen PFD dabei. Meinst du damit in dem Buch oder in verilog-Dateien
@ Rick Dangerus Hast du das Buch eventuell als ebook, das Buch scheint nämlich ansonsten vergriffen und die Englische Version ist recht teuer.
@ VHDL_Mensch Für ein rein digitale PLL (plus Takt-und Datenrückgewinnung, neudeutsch CDR, clock data recovery) reichen meist ein 4fach schnellerer Takt. USB FUll-Speed (12 Mbit/s) arbeitet so (48 MHz Abtastrate). Das mit 16facher Überabtastung ist in den RS232 UARTS so gelöst, weniger geht prinzipiell aber auch. MFG Falk
Hi, ich wollte jetzt mal das Projekt (xapp250) simulieren lassen. Da kommt dann aber dieser Fehler: ERROR:Xst:1848 - The instantiated LUT2 <phasedet/pdvco2ref/pdrst_and2_0> does not have a valid INIT property in unit <top_xapp250>. Weiss vielleicht jemand was der Fehler aussagt, laut Xilinx sollte das Projekt eigentlich so wie es ist funktionieren.
naja du hast eine LUT ,eine "Nachschau- tabelle" ohne Inhalt. Da weiss keiner ob diese LUT nun NAND,AND,OR,XOR oder was auch immer sein soll. Dieser LUT fehlt bei der Instanziierung das Generic INIT. Oder der Tabelleninhalt - der INIT Wert - wird über ein VHDL Attribut festgelegt, der fehlt! wahrscheinlich ersteres , schau mal im Code nach der Stelle pdrst_and2_0: LUT2 GENERIC MAP( .... PORT MAP( und ergänze die Generic map. Wie und womit das steht im Library guide. oder du ersetzt das LUT2 mit NAND2 (falls es das gibt).
@ Fpga Kuechle Das Problem ist, das es ein fertiges Projekt von Xilinx ist und in Verilog geschrieben wurde. Ich habe denn entsprechenden Abschnitt in einen eingebundenen Unterprogramm gefunden und nicht im Hauptprogramm.
Also ich ir mal das xapp250.zip angeschaut, Ich finde im Paket zwei LUT2: pd_27to270.v:LUT2 pdrst_and2_0 (.I0(vcoisfast), .I1(vcoisslow), .O(pd_rst)); pd_54to270.v:LUT2 pdrst_and2_0 (.I0(vcoisfast), .I1(vcoisslow), .O(pd_rst)); Laut Library guide wird in Verilog eine LUT2 wie folgt eingebunden (kopiert aus dem pdf) LUT2 LUT2_instance_name (.O (user_O), .I0 (user_I0), .I1 (user_I1)); defparam LUT2_instance_name.INIT = hex_value; Dir fehlt also die Zeile defparam. Für ein AND wäre der Initwert 8, also müsste man ein defparam LUT2_pdrst_and2_0.INIT = 8; oder auch defparam LUT2_pdrst_and2_0.INIT = 4b'1000; hinzufügen, ich bin allerdings nicht im Verilog syntax geübt. Warum diese Zeile fehlt oder ob du noch eine weiter datei brauchst die nicht im Zip paket ist kann ich dir nicht sagen. Ob die LUT als AND genutzt wird weiss ich auch nicht mit Sicherheit. Füge mal die zeile in den beiden files ein, vielleicht direkt unterhalb der oben genannten Zeilen.
unwissender_Neuling wrote: > Da leider noch keiner meine Frage beantworten hat oderkonnte, möchte ich > sie vielleicht etwas anderst formulieren. > > Warum kann man in den Xilinx Dokumenten nichts über PLL`s, VCO`s und > Tiefpasse > finden. > > z.B. wie sie Bauelemente mässig aufgebaut sind und wie welcher Eingang > angesteuert werden muss. Doch die Ansteuerung wird von Xilin beschrieben, allerdings nennt sich das bei Xilinx DCM und wie diese exakt aufgebaut ist (VCO?), verrät Xilinx nicht. DCM heisst diegital clock manager und besteht aus einer dll (delay locked loop) und einer DFS (digital frequency synthesizer. Schau mal in die XAPP462 .
>Dir fehlt also die Zeile defparam. Für ein AND wäre der Initwert 8, also >müsste man ein >defparam LUT2_pdrst_and2_0.INIT = 8; >oder auch >defparam LUT2_pdrst_and2_0.INIT = 4b'1000; Hab die Zeilen gefunden, standen gleich darunter waren nur "herauskommentiert" nachdem ich sie eingebunden habe, kommt allerdings der selbe Fehler. Daran kann es anscheinend auch nicht liegen.
Ahhhhhhhhh...... hab jetzt den folgenden Teil aus der Datei "pd_27to270.v" in die "top_xapp250.v" kopiert und es kommt erstmal kein Fehler mehr: >LUT2 pdrst_and2_0 (.I0(vcoisfast), .I1(vcoisslow), .O(pd_rst)); >//(OLD ISE) synthesis_attribute init of pdrst_and2_0 is 4'h8 ; >//synthesis attribute INIT of pdrst_and2_0 is 8 ; >defparam pdrst_and2_0.INIT = 4'b1000; //pdetfast & pdetslow In Verilog scheint man keine Testbench erzeugen zu müssen oder?
Sicher das die zeilen passen (instanzename)? Verilog ist wohl Case sensetive, also gross- und Kleinbuchstaben nicht verwechseln. IMHO kann nicht die selbe Fehlermeldung kommen, wenn der INIT Wert definiert wird. Schau mal in die *.syr datei nach Datum der synthese. Nicht das es eine alte logdatei ist, oder ein anderes File compiliert wird. Schreibe doch mal defpram statt defparam, provoziere also eine Syntax Fehlermeldung... Irgendwie mag ich nicht glauben das sich nichts an der Synthese geändert hat, aber wie bereits erwähnt, Verilog ist nicht meine Beschreibungssprache. Also zweite Möglichkeit kann man die LUT2 durch AND2 ersetzten (wobei ich ob der LUT2 Funktion als AND nicht sicher bin.) Also statt LUT2 pdrst_and2_0 (.I0(vcoisfast), .I1(vcoisslow), .O(pd_rst)) versuche AND2 pdrst_and2_0 (.I0(vcoisfast), .I1(vcoisslow), .O(pd_rst)) Dann kann der defparam entfallen.
Da war ich etwas spät mit Antwort tippern ... Testbench erstellen ist nicht speziell an VHDL oder verilog gebunden. Testbenches erstellt man wenn man den FPGA simulieren (modelsim) will, egal ob das design in Verilog oder VHDL geschrieben ist. Testbenches kann man in Verilog,VHDL,TCL, etc schreiben, ebann grad was der simulator versteht.
Danke, mich wundert es halt nur das keine Testbench im Projekt dabei ist, daher dachte ich es wird unter Verilog keine benötigt. Wenn ich es ohne Testbench simulieren lasse sind fast alle Ein- und Ausgämge NULL oder undefiniert, also muss ich erst mal schauen wie ich was beschalten muss. Toll wenn unfertige Projekte ins Netz gestellt werden ;-)
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.