Hallo,
Ich bin noch etwas unerfahren mit FPGAs und ich habe folgende Frage:
Ich möchte einen digitalen Datenrekorder (FPGA-basiert) entwickeln und
möchte einen externen ADC mit differentiellen Clk-Signalen takten, die
im FPGA generiert werden sollen. Die USERCLKs des J1-Connectors (siehe
Seite 1 des Anhangs) können nur als Single-Ended-Clks verwendet benutzt
werden. Der ADC benötigt allerdings differentielle Signale (z.B. LVDS).
Nun habe ich noch einen zweiten Connector (J2, siehe Seite 2 des
Anhangs) mit Multi-Gigabit-SerDes I/O.
Kann mir jemand sagen, wie ich damit differentielle Clk-signale (nClk
und pClk) an zwei Toplevel-Ports schicken kann? D.h. was für Instanzen
brauche ich und wie muss man die .ucf dafür anpassen?
Vielen Dank schon mal für eure Antworten!!
Viele Grüße,
Chris
Für die Ausgabe eine LVDS-Taktes kannst du ein beliebiges I/O Pärchen
nehmen, die GCLK usw. sind nur Takt-Eingänge relevant. Zur Ausgabe
(Clock forwarding) nimmt man dann ein ODDR FlipFlop, die Dateneingäge
fest verdrahtet, einmal 0 einmal 1 und den Ausgang an ein OBUFDS und
dann auf die Pins raus. Aber einen intern generierten Takt kann man
eigentlich für einen ADC nicht gebrauchen, der jittert viel zu sehr, da
bekommst du Rauschen in dein Signal.
Die MGT Sachen kannst du für sowas überhaupt nicht nehmen. REFCLK ist
nur ein Eingang und auch nur für die MGTs, damit kannst du PCIe oder
SATA oder sowas machen.
Hi,
Danke für die Antwort.
D.h. wenn ich ein z.B. 200MHz-Signal über den FPGA an den ADC schicke,
kommt da kein gutes Signal mehr an?
Was gibt es denn für andere Möglichkeiten?
Könnte man z.B. sowas benutzen?
http://www.eea.epson.com/portal/pls/portal/docs/1/1543634.PDF
oder
http://www.silabs.com/Support%20Documents/TechnicalDocs/Si5326.pdf
um den ADC mit ner Clock zu speisen.
Nichtsdestotrotz, wenn ich es direkt über den FPGA versuchen möchte habe
ich ein OBUFDS:
inst_CLK_OUT : OBUFDS
generic map (IOSTANDARD => "DEFAULT")
port map (O => USER_IO_P,
OB => USER_IO_N,
I => clkout );
--USER_IO_* sind die top-level-ports
--clkout ist ein internes std_logic-Signal
Wie genau mache ich das mit dem ODDR FlipFlop? Das versteh ich nicht so
ganz.
Danke schon mal!!
Wenn du das nicht machst, kann der Takt nicht auf den internen
Takt-Netzen geroutet werden, und das beeinflusst massiv dein ganzes
inneres Timing.
Aber 200MHz ADC sollte man schon aus einem eigenen Oszillator betreiben
und den Takt dann parallel an das FPGA führen. Bei Maxim gibts einen
Jitter Calculator auf der Homepage der errechnet dir den maximal
erlaubten Jitter ausgehend von Samplerate, Auflösung und Signalfrequenz.
Damit erhalte ich beim Mapping den folgenden Fehler:
Kann mir da jemand weiterhelfen?
ERROR:Pack:1107 - Pack was unable to combine the symbols listed below
into a
single IOBM component because the site type selected is not
compatible.
Further explanation:
The component type is determined by the types of logic and the
properties and
configuration of the logic it contains. In this case an IO component
of type
IOBM was chosen because the IO contains an true differential buffer
symbol.
Please double check that the types of logic elements and all of their
relevant properties and configuration options are compatible with the
physical site type of the constraint.
Summary:
Symbols involved:
PAD symbol "clkoutP" (Pad Signal = clkoutP)
BUFINV symbol "inst_CLK_OUT/OBUFDS" (Output Signal = clkoutP)
Component type involved: IOBM
Site Location involved: G21
Site Type involved: IOBS
Mapping completed.
See MAP report file "topmodule_map.mrp" for details.
Problem encountered during the packing phase.
Design Summary
--------------
Number of errors : 1
Number of warnings : 80
Process "Map" failed
WARNING:ProjectMgmt - File
Z:/FPGA_Entwicklung/FPGA_recorder/VHDL_Project/topmodule_map.ncd is
missing.