www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Einbinden von LVDS Primitiven für PCIe bei Virtex4


Autor: Ralf Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich schreibe derzeit an einen PCIe Hostcontroller auf einer PCIe Karte 
mit einen Virtex4FX100

Nun habe ich das Problem, das ich ja die zwei eingaenge von der Lane 0 
(ich moechte erstmal nur 1x das ganze haben) in eine LVDS Primitive 
reinstopfen muss und dann den ausgang abgreifen muss.

verstanden hab ich das ja, aber irgendwie bekomm ich bei mir noch 
fehler.

Den Code hab ich leider jetzt nicht hier, wird aber noch nachgereicht.

Wäre schön, wenn man das mal erklären koennte wie das funktioniert.

Autor: Ralf Müller (cabal)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
so also hier der Code im anhang dazu

grob gesagt will ich zur zeit erstmal folgendes hinbekommen:

ich will mit jeden mhertz ein bit vom PCIe Bus abgreifen und das an den 
10 bit vector ranhaengen.

wenn ich 10 bits bekommen habe dann leg 8 bits davon auf die LEDS und 
gut.

Das Problem ist:

Ich bekomme folgenden Fehler beim mappen mit ISE 9.2i

INTERNAL_ERROR:Pack:pkibamendmaker.c:272:1.37 - Expected a valid output 
signal
   for block IBUFDS_inst_ML_IDELAY.
INTERNAL_ERROR:Pack:pkibamendmaker.c:1421:1.37 - Expected a valid output 
signal
   for bel block IBUFDS_inst_ML_IDELAY.
ERROR:PhysDesignRules:1083 - Dangling pins on
   block:<incomingbits<0>/IBUFDS_inst_ML_IDELAY>:<ILOGIC_DELAYCHAIN>. 
The input
   D and output OUT pins are always required.
ERROR:Pack:1642 - Errors in physical DRC.

den fehler bekomme ich nicht, wenn ich die Zeile
leds <= incomingbits (7 downto 0) when countincoming = "1010" else 
"00000000";
in
leds <= incomingbits (7 downto 0) when countincoming = "1010" else 
"ZZZZZZZZ";
abändere

das versteh ich irgendwie nicht.

Autor: Ralf Müller (cabal)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bevor ichs vergesse:

das UCF File sieht so aus:

NET  "CLK100"      LOC = "AD21" ;
NET  "leds[3]"    LOC = "AB8";     # Bank 12
NET  "leds[2]"    LOC = "AC7";     # Bank 12
NET  "leds[1]"    LOC = "AL5";     # Bank 12
NET  "leds[0]"    LOC = "AM5";     # Bank 12
NET  "leds[5]"    LOC = "AE3";     # Bank 12
NET  "leds[4]"    LOC = "AE4";     # Bank 12
NET  "leds[6]"    LOC = "AK3";     # Bank 12
NET  "leds[7]"    LOC = "AJ4";     # Bank 12
NET "pcie_rx0_n" IOSTANDARD = "LVDS_25";

NET "pcie_rx0_p" IOSTANDARD = "LVDS_25";
NET "pcie_rx0_p" IOBDelay = IBUF;
NET "pcie_rx0_n" IOBDelay = IBUF;
NET "pcie_rx0_p" LOC = BANK6;
NET "pcie_rx0_n" LOC = BANK6;

Autor: Artur Funk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast die LVDS IBUFDS Komponente nicht eingebunden.


component ibufds_lvds_25 port(i, iB: in std_logic; o: out std_logic); 
end component;

lvds_data : ibufds_lvds_25  port map (i => pcie_rx0_p,iB => pcie_rx0_n, 
o => tp);

Danach solltest du im UCF File die IO Beschreibung rausnehmen.

NET  "CLK100"     LOC = "AD21";

NET  "leds[3]"    LOC = "AB8";     # Bank 12
NET  "leds[2]"    LOC = "AC7";     # Bank 12
NET  "leds[1]"    LOC = "AL5";     # Bank 12
NET  "leds[0]"    LOC = "AM5";     # Bank 12
NET  "leds[5]"    LOC = "AE3";     # Bank 12
NET  "leds[4]"    LOC = "AE4";     # Bank 12
NET  "leds[6]"    LOC = "AK3";     # Bank 12
NET  "leds[7]"    LOC = "AJ4";     # Bank 12

NET "pcie_rx0_p" LOC = "PIN_NUMMER?";
NET "pcie_rx0_n" LOC = "PIN_NUMMER?";


Gruß

Artur

Autor: Ralf Müller (cabal)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm OK :-)

das funktioniert erstmal so grob.
Danke dafür :-)

Wenn ich allerdings die direkten PINs für die eingänge angebe:
NET "pcie_rx0_p" LOC = "AP18";
NET "pcie_rx0_n" LOC = "AP17";
bekomme ich fehlermeldungen der Art:
ERROR:Pack:1107 - Unable to combine the following symbols into a single 
IOB
   component:
     PAD symbol "pcie_rx0_n" (Pad Signal = pcie_rx0_n)
     SlaveBuffer symbol "lvds_data/SLAVEBUF.DIFFIN" (Output Signal =
   lvds_data/SLAVEBUF.DIFFIN)
   Each of the following constraints specifies an illegal physical site 
for a
   component of type IOB:
     Symbol "pcie_rx0_n" (LOC=AP17 [Physical Site Type = IPAD])

Wenn ich allerdings schreibe (wie es auch der Constrainteditor von ISE 
macht):
NET "pcie_rx0_p" LOC = BANK6;
NET "pcie_rx0_n" LOC = BANK6;

mapt ers.

Nu versteh ich nich wieso er nicht die richtigen PINS nimmt, sondern die 
gesamte Bank angegeben werden muss. (oder eben auch nicht wenn ich da 
was falsch gemacht habe)

Autor: Artur Funk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du auf der gleichen Bank irgendwelche Signale, die mit einer 
anderen Spannung getrieben werden?

Autor: Ralf Müller (cabal)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein,

meines wissens nicht, ich werd aber morgen mal schauen ob da nochwas 
liegt, was ne andere spannung haben moechte (hab heute leider keine zeit 
mehr dazu).

Autor: Ralf Müller (cabal)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm also ich hab nochmal nachgeschaut, und bemerkt das die Bank6 nichts 
mit meinen PCIe zu tun hat.
Wie ich darauf kam, hab ich auch keine Ahnung.

Auf alle Fälle:
die PINS AP18 und AP17 stimmen.

Und nun frag ich mich wo bei mir der Fehler liegt.
weil ich kann ja die 2 leitungen nur an eine IBUFDS_LVDS_25 Primitive 
anbinden. Oder geht das auch anders?

Autor: Artur Funk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm komisch, aber die Fehlermeldung sagt es doch schon:

ERROR:Pack:1107 - Unable to combine the following symbols into a single
IOB

Sieht so aus, als wenn die Primitive ignoriert wird.

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.