Forum: FPGA, VHDL & Co. PLL bzw. VCO Design Element von Xilinx


von unwissender_Neuling (Gast)


Lesenswert?

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


von unwissender_Neuling (Gast)


Lesenswert?

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.

von Rick Dangerus (Gast)


Lesenswert?

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

von unwissender_Neuling (Gast)


Lesenswert?

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

von VHDL_Mensch (Gast)


Lesenswert?

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.

von unwissender_Neuling (Gast)


Angehängte Dateien:

Lesenswert?

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.

von J. S. (engineer) Benutzerseite


Lesenswert?

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.

von VHDL_Mensch (Gast)


Lesenswert?

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.

von Rick Dangerus (Gast)


Lesenswert?

@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

von unwissender_Neuling (Gast)


Lesenswert?

@ 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

von unwissender_Neuling (Gast)


Lesenswert?

@ Rick Dangerus

Hast du das Buch eventuell als ebook, das Buch scheint nämlich ansonsten 
vergriffen und die Englische Version ist recht teuer.

von Falk (Gast)


Lesenswert?

@ 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

von unwissender_Neuling (Gast)


Lesenswert?

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.

von Fpgakuechle K. (Gast)


Lesenswert?

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

von unwissender_Neuling (Gast)


Lesenswert?

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

von Fpgakuechle K. (Gast)


Lesenswert?

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.

von Fpgakuechle K. (Gast)


Lesenswert?

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 .

von unwissender_Neuling (Gast)


Lesenswert?

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

von unwissender_Neuling (Gast)


Lesenswert?

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?


von Fpgakuechle K. (Gast)


Lesenswert?

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.

von Fpgakuechle K. (Gast)


Lesenswert?

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.

von unwissender_Neuling (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.