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