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


von Ralf Müller (Gast)


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.

von Ralf M. (cabal)


Angehängte Dateien:

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.

von Ralf M. (cabal)


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;

von Artur Funk (Gast)


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

von Ralf M. (cabal)


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)

von Artur Funk (Gast)


Lesenswert?

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

von Ralf M. (cabal)


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

von Ralf M. (cabal)


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?

von Artur Funk (Gast)


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.

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.