mikrocontroller.net

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


Autor: unwissender_Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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


Autor: unwissender_Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: unwissender_Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
entity top_xapp250 (
  vco270M_p,      -- 270MHz VCO pos clk input
  vco270M_n,      -- 270MHz VCO neg clk input
  
  vcxo_27M_in,      -- 27MHz VCXO clock input used as ref osc only 
          -- (not VCXO)

  -- SDI Port  
  sdi_rxd_p,      -- SDI serial input bit stream 
  sdi_rxd_n,      -- SDI serial input bit stream
  
  sdi_txd_p,      -- SDI serial output for verification
  sdi_txd_n,       -- SDI serial output for verification

  dip_switches,      -- selects user options

  sdi_vco_up,      -- 270Mhz VCO faster control to loop filter
  sdi_vco_down,      -- 270Mhz VCO slower control to loop filter
  

  test_points      -- selected 10 bits of selected error counter 
);

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

Autor: VHDL_Mensch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: unwissender_Neuling (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: VHDL_Mensch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: unwissender_Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: unwissender_Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Rick Dangerus

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

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: unwissender_Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Fpga Kuechle (fpgakuechle) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: unwissender_Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Fpga Kuechle (fpgakuechle) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Fpga Kuechle (fpgakuechle) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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 .

Autor: unwissender_Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: unwissender_Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?


Autor: Fpga Kuechle (fpgakuechle) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Fpga Kuechle (fpgakuechle) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: unwissender_Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.