Hallo zusammen,
ich habe vor einiger Zeit angefangen einen LVDS Transmitter für ein
10.1" TFT zu bauen. Da ich bisher nur kleinere FPGA Projekte geschrieben
habe, habe ich mich hauptsächlich auf die Application Note von Xilinx
(XAPP486) gehalten. Hier wird einen FPD-Link mittels LVDS für TFTs
implementiert. Ich habe diesen dann versucht zu erweitern, aber es hackt
schon wenn ich meinen, aus dem CDM erzeugten, Pixeltakt weitergeben
möchte. Im RTL Schema erkennt man das zwei DCMs hintereinander
geschalten sind und hier scheint auch der Hund für mein Problem begraben
zu sein, den ich bekomme folgenden Fehler:
ERROR:NgdBuild:770 - IBUFG 'Inst_top4_tx/clk_ibuf' and BUFG
'pxclock_BUFG' on
net 'pxclock1' are lined up in series. Buffers of the same direction
cannot
be placed in series.
Ich verstehe den Fehler nicht ganz, denn ich habe keinen Buffer
'pxclock_BUFG' angelegt, geschweige denn das dieser im RTL Schema
vorkommt.
Hat da jemand von euch eine Idee?
Wäre toll wenn mir jemand eine Tipp geben könnte, habe meine bisherigen
Daten angehängt!
Vielen Dank schon mal im Voraus.
Jürgen
Jürgen Dürrwang schrieb:> Ich verstehe den Fehler nicht ganz, denn ich habe keinen Buffer> 'pxclock_BUFG' angelegt, geschweige denn das dieser im RTL Schema> vorkommt.
Hast Du die DCMs mit dem Clock Wizard erstellt?
Duke
Hallo Jürgen.
Wir hatten ja schon per E-Mail geschrieben nehme ich gerade an.
Die Buffer werden meist in der DCM aktiviert. Das kann dort auch
abgeschaltet werden meiner Meinung nach.
Wenn du 2 DCMs verwendest um den negierten Takt zu erzeugen,
dann ist das nicht notwendig. Eine DCM kann dir den normalen und den um
180 Grad verschobenen Takt generieren.
Hallo John,
richtig wir hatten per E-Mail geschrieben. Also den zweiten DCM benutze
ich um den Takt (70MHz) für das TFT zu erzeugen, der geht ja dann in den
anderen DCM und wird mit 3,5 multipliziert und anschließend im DDR
verdoppelt um den Gesamtfaktor von 7 für den Serialisierer zu bekommen.
In der XAPP486 ist ja der DCM für den Faktor 3,5 und das DDR schon
implementiert. Ich habe dann meinen DCM, für die 70 MHz davor
geschalten. Ich bekomme dann aber diesen Bufferfehler. Ich habe meinen
DCM mit dem Clock Wizard erstellt und bei CLKFX den Buffer auf Local
Routing gestellt, sodass er da keinen erzeugen sollte. Ich bekomme dann
aber trotzdem:
ERROR:NgdBuild:770 - IBUFG 'Inst_top4_tx/clk_ibuf' and BUFG
'pxclock_BUFG' on
net 'pxclock1' are lined up in series. Buffers of the same direction
cannot
be placed in series.
Im RTL Schema ist da nichts von einem BUFG 'pxclock_BUFG' zu
erkennen....
Ich habe mal gegoogelt und bin auf folgendes gestoßen:
http://forums.xilinx.com/t5/Archived-ISE-issues/Error-message-Buffers-of-the-same-direction-cannot-be-placed-in/td-p/9731>It's mostly likely that when you generated the DCMs, you selected "External">for "CLKIN Source" and the tool then inserted the global clock input buffer>(IBUFG) in the generated DCM code for the both DCMs. The error message>basically tells you that a single input can't drive two IBUFGs. You should>go back to CoreGen and regenerate the DCM files with "Internal" for "CLKIN">Source.
;-)
Den Eintrag habe ich schon gelesen und auf Internal umgestellt. Wenn ich
dann Translate mache, bekomme ich:
ERROR:NgdBuild:770 - IBUFG 'Inst_top4_tx/clk_ibuf' and BUFG
'pxclock_BUFG' on
net 'pxclock1' are lined up in series. Buffers of the same direction
cannot
be placed in series.
:-) Irgendwie steckt da der Teufel drin...
Ich instanziiere die DCMs per Hand. Da weiß ich, was für Buffer drin
sind.
Die Teilerfaktoren etc. kann man sich ja vom Clocking-Wizard ausrechnen
lassen. Wenn man das drei Mal gemacht hat, kommt man auch ohne aus.
Duke
Leider habe ich immer noch den Bufferfehler:
ERROR:NgdBuild:770 - IBUFG 'Inst_top4_tx/clk_ibuf' and BUFG
'pxclock_BUFG' on
net 'pxclock1' are lined up in series. Buffers of the same direction
cannot
be placed in series.
Hallo Jürgen,
das ist mein Projekt von damals.
Ich hatte eine DCM verwendet.
Es ist alles in VHDL geschrieben.
Die Monitoransteuerung kann leicht für die ersten Tests an ein anderes
Display angepasst werden.
Viel Spaß damit.
Jürgen Dürrwang schrieb:
Alles, was man nicht braucht, schmeiße ich der Übersichtlichkeit halber
raus:
1
DCM_SP_inst:DCM_SP
2
genericmap(
3
CLKDV_DIVIDE=>2.0,
4
CLKFX_DIVIDE=>5,
5
CLKFX_MULTIPLY=>7,
6
CLKIN_DIVIDE_BY_2=>FALSE,
7
CLKIN_PERIOD=>20.000,
8
CLK_FEEDBACK=>"1X",
9
DESKEW_ADJUST=>"SYSTEM_SYNCHRONOUS",
10
STARTUP_WAIT=>TRUE
11
)
12
portmap(
13
CLK0=>open,
14
CLKFX=>CLKFX_BUF,-- DCM CLK synthesis out (M/D)
15
LOCKED=>LOCKED_OUT,-- DCM LOCK status output
16
CLKFB=>'0',-- DCM clock feedback
17
CLKIN=>CLKIN_IBUFG,
18
PSCLK=>'0',
19
PSEN=>'0',
20
PSINCDEC=>'0',
21
RST=>RST_IN-- DCM asynchronous reset input
22
);
Du hast bei CLK_FEEDBACK "1X" angegeben. Daher mußt Du moch eine Leitung
von CLK0 zu CLKFB ziehen.
Jürgen Dürrwang schrieb:> ERROR:NgdBuild:770 - IBUFG 'Inst_top4_tx/clk_ibuf' and BUFG> 'pxclock_BUFG'
Das passt nicht zu Deinem Code. Dort heißt es
1
CLKIN_IBUFG_INST : IBUFG
und
1
DCM_SP_inst : DCM_SP
Bist Du sicher, das Deine neue Datei richtig im Projekt eingebunden ist?
Ggf. auch mal ein "Cleanup Project" durchführen.
Duke
Erst mal danke für eure Hilfe!
John-eric: Ich danke dir vielmals für deine Implementierung, ich werde
mich gleich mal daran machen und versuchen einen Testbench zum Laufen zu
bekommen.
Duke: Also ich habe den DCM genauso wie du ihn gepostet hast. Um weitere
Fehler aus zuschließen habe ich einfach eines ISE Projekt erstellt und
nur die VHDL Daten reinkopiert, aber das bringt diesen Bufferfehler.
Habe dann in allen Dateien nach diesem ominösen Buffer gesucht aber
nichts zu finden. Der wird wohl durch ISE erzeugt, obwohl ich das
eigentlich abgestellt hatte...