Hallo,
nach langem suchen in diesem forum melde ich mich mit dem folgenden
problem;
ich benutze spartan 3e board mit dem XC3S500E-4fg320 FPGA und SMSC
LAN83C185 PHY. ich moechte die daten von meinem pc an das board senden
und andersrum. bisher hatte ich leider keinen erfolg.
ich habe es erstmal mit dem tri state ethernet mac core von xilinx und
dazugehoerigen example_design versucht wobei ich wireshark als sniffer
benutze. es hat nicht geklappt, mittlerweile ist die evaluation licence
ausgelaufen und ich kann keinen bitstream mehr generieren.
jetzt will ich einfach ohne mac core feststellen ob ueberhaupt etwas an
FPGA ankommt. das LED an dem ethernet connector blinkt zwar, wenn ich es
vom pc pinge aber ich empfange gar nichts an den rxd ports. ich habe ein
einfaches vhdl modul geschrieben, in dem ich in kurzen zeitabstaenden
die aenderung an den data ports durch die LED anzeigen am board
beobachte. es passiert gar nichts! ich bekomme immerhin das rx_clk (25
MHz) signal an das board. ich habe alle speed optionen der netzwerkkarte
ausprobiert(10Mbps, 100Mbps, auto-negotiation).
ich habe auch versucht ein udp paket an pc zu senden, auch ohne erfolg.
ich moechte noch erwaehnen, dass ich auf jeden fall alle im datasheet
vorgegebenen anweisungen bezueglich der clocks, ports, timing, enables
usw beachte.
langsam werde ich verzweifelt. daher bitte ich alle, die auf diesem
board geschafft haben, auf die einfachste weise PHY zu testen, mir den
hilfreichen ratschlag zu geben.
danke im voraus
timscho
Stelle mal am FPGA alle Pins, dei mit dem PHY verbunden sind auf INPUT
oder Tristate.
Dann mal mit dem Oszi an das RX-DV-Singal ran und schauen, ob sich da
was tut.
Wenn nicht, könnte das sehr viel Ursachen haben.
Die meisten PHYs können in ihren Grundeinstellungen durch sogenannte
"Strapping-Options" eingestellt werden.
Das heisst, dass der PHY im Reset den Pegel an bestimmten Pins liest und
entsprechend ein paar Konfigurationen vornimmt.
Eine der Möglichen Konfigurationen wäre z.B. der "Isolate Mode", der
dieses Verhalten erklären könnte. Oder "Auto Negotiation" ist im PHY
deaktiviert oder, oder, oder.
Les dir das Datenblatt vom PHY genau durch und prüfe jede einzelne
Strapping Option, ob die vielleicht das Problem verursachen könnte.
Wenn ja, dann Pulle die Signale entsprechend. Wenn sie auf den PFGA
geführt sind, dann kannst das ja recht einfach durch konfiguration der
entsprechenden Pullups und Pulldowns an den FPGA-Pins machen.
Schrotty,
vielen Dank fuer deine Antwort. Es hat sich inzwischen erledigt.
Ich hab leider keinen Oszi zur Hand, sonst haette ich es direkt so
gemacht. Ich konnte eine Aenderung an den rx_data Pins feststellen, als
ich es mit dem doppelten clock (50 MHz) getaktet habe. Das war dann eine
Riesenfreude, da ich nun sicher war, dass HW-maessig alles in Ordung
war. Inzwischen hab ich auch ein Design implementiert, das die UDP
Paketten an PC schickt, was ich mit Wireshark beoabachten kann. Die
Netzwerkkarte ist dabei auf Full duplex eingestellt.
Ich moechte noch sagen, dass mich der Versuch die Kommunikation mit dem
Xilinx EMAC core und seinem example_design herzustellen zu viel Zeit
gekostet hat und letzendlich unnoetig war. Fuer solche simple ethernet
Kommunikation (UDP) wuerde ich allen raten, sich ein eigenes design zu
entwerfen (oder eins vonm net runterladen und anpassen), bevor man
kostbare Zeit auf Implementation von EMAC core und das ganze drumherum
verschwendet.
Timscho
Hallo Jan,
ich habe im Forum von www.xilinx.com ein vhdl UDP-Sender fuer Spartan 3e
gefunden, der in sich die EMAC Funktionalitaet beinhaltet. Mit
Platformspezifischen Aenderungen (MAC Adresse, Source- und Destination
IP) funktioniert das Design einwandfrei.
Probiers mal aus, wenn du Fragen hast, melde dich.
Timscho
Hallo Timscho,
bei dem Design ist sind ja maximal 10Mb/s möglich. Hast du es vielleicht
hinbekommen, dass auch 100Mb/s möglich sind? In der Beschreibung des IP
Stacks der dort verwendet wird steht, dass es nicht möglich ist. Aber
die verwendete Hardware ist ja auch eine andere soweit ich das
überblicken kann.
Jan
Nein, ich habe nicht versucht die 100Mb/s Geschwindigkeit zu erreichen.
Meine Netzwerkkarte habe ich auch auf 10Mb/s Full-Duplex eingestellt.
> "Aber die verwendete Hardware ist ja auch eine andere soweit ich das
überblicken kann."
Ich verstehe nicht, welche HW du hier vergleichst.
Das ist ne Page über das Projekt von den Autoren:
http://www.itee.uq.edu.au/~peters/xsvboard/stack/stack.htm#_Toc507573143
(...)The protocol stack was designed and built on an XSV-300 board
(version 1.0) from the XESS Corp
Ganz unten steht halt dass es nicht möglich wäre, das Design unter
100Mb7s zu betreiben.
Du benutzt ja das spartan 3e mit nem xc3s500e-.... Die phy, die bem
spartan integriert ist, kann ja auch 100Mb/s. Warum sollte es also nicht
möglich sein. Ich möchte nur Daten empfangen, ohne Rücksichtnahme auf
irgendein Protokoll. Auch das Ethernet Protokoll (mac source,
destination,...) soll zunächst nicht verarbeitet werden. Kannst dir
vorstellen ob das gehen würden? Das würd mich schon mal interessieren.
Du kannst das nicht vielleicht mal ausprobieren ob er das leistet:)? Hab
das Board selbst nicht.
Ja, die PHY auf meinem board koennte schon 100Mb/s bringen. Das habe ich
auch mit dieser FPGA Konfiguration versucht, indem ich die Netzwerkkarte
auf 100Mb/s eingestellt hatte, hat aber nicht funktioniert. Ich konnte
keine packets am Wireshark empfangen.
Ich habe auch nicht weiter erforscht, aus welchem Grund dieses Design
bei 100Mb/s nicht funktioniert. Ich nehme an, die benutzte
Taktgescwindigkeit kommt der PHY Geschwindigkeitsanforderung irgendwie
nicht nach. Ich habe das, wie gesagt, nicht ins Detail analysiert, die
10Mb/s reichen mir momentan schon.
Es gibt allerdings noch ein Design (beigefuegt), das fuer 100Mb/s
tauglich sein sollte. Das habe ich aber nicht getestet. Es wuerde mich
aber sehr interessieren, wie du es findest.
Gruss
Timscho
>"Ich möchte nur Daten empfangen, ohne Rücksichtnahme auf
irgendein Protokoll. Auch das Ethernet Protokoll (mac source,
destination,...) soll zunächst nicht verarbeitet werden. Kannst dir
vorstellen ob das gehen würden? Das würd mich schon mal interessieren."
Das Problem liegt ja auch darin, dass man im Wireshark keine Daten
empfaengt, solange das nicht in einem festen Format(Protokoll) gesendet
worden ist. Man kann nicht an PHY eine Reihe willkuerlicher Bits senden
und diese dann am anderen Ende der Ethernetverbindung empfangen.
Zum mehr als zum Testen taugt der udpSender aber auch nicht, hier im
Forum findet man übrigens auch den zugehörigen Empfänger.
Ist halt nur eine minimale MAC Teilmenge implementiert. Da fehlt alles
angefangen von der Kollisionserkennung bis zum hin zu den control frames
Ich habe auch am Anfang gesagt, dass ich nur eine einfache Ethernet
Kommunikation(UDP Protokoll) in einer Richtung (von FPGA zu PC)
herstellen moechte, und dafuer reicht dieses Design vollkomm.
Kollisionserkennung faellt da sowieso aus, da es nur einen Sender und
einen Empfaenger gibt, es kann ja nichts kollidieren. Kontrolmechanismen
wie control frames gibt es bei UDP in der Regel nicht, dafuer solltest
du vielleicht lieber TCP/IP verwenden.
Ja, die MAC-Hardware im Ethernet-Controler ignoriert immer alle
ungültigen Frames. Ich möchte mit dem fpga empfangen, nicht mit dem PC.
Schade, bevor ich mir das Board bestell würd ich schon gern genau wissen
ob er die Geschwindigkeit schafft..
Mit dem VHDL Schnippsel habe ich damals auch angefangen.
Ist aber schnell witzlos, wenn man nicht sicherstellen kann, dass die
Packete auch angekommen sind. Außerdem wollte ich das damals an einen
Switch hängen ;-)
Aber dann kann man auch einfach den Xilinx Core nutzen, der funktioniert
eigentlich ohne Probleme.
Hallo Jan,
egal ob du von FPGA zu PC sendest onder andersrum, es muessen schon die
gueltigen Frames sein, damit du was empfaengst.
Sowohl Spartan 3e als auch dazugehoerige PHY schaffen die 100Mb/s, man
muss nur die passende HW-Konfiguration haben ;)
Ja, dieser MAC würde ungültige Frames bei der Destination-MAC Prüfung
rausschmeißen..
"die passende Hardwarekonfiguration":) Ja, hast es denn jetzt
vielleichtschon mal ausprobiert:)?
Wo hast das Board eig bestellt?
Wie schon oben gesagt;
- "udpSender" laeuft nicht bei 100Mb/s
- "udpSender100" sollte laufen, aber ich habe es nicht ausprobiert
Mein board ist von Digilent; www.digilentinc.com
Timscho schrieb:>>"Ich möchte nur Daten empfangen, ohne Rücksichtnahme auf> irgendein Protokoll. Auch das Ethernet Protokoll (mac source,> destination,...) soll zunächst nicht verarbeitet werden. Kannst dir> vorstellen ob das gehen würden? Das würd mich schon mal interessieren.">> Das Problem liegt ja auch darin, dass man im Wireshark keine Daten> empfaengt, solange das nicht in einem festen Format(Protokoll) gesendet> worden ist. Man kann nicht an PHY eine Reihe willkuerlicher Bits senden> und diese dann am anderen Ende der Ethernetverbindung empfangen.
Das entsprechende Format ist doch das Ethernet Packet.
Es geht mit dem Preamble los. Dann Start,Destination Address und dann
Source Address ....
Das ist doch im Source code enthalten.
Ich meine Wireshark müsste es anzeigen.
Der Quellcode udpSender100 ist fehlerhaft. Der eingehende Takt ist nicht
verdrahtet. Tiefer bin ich nicht eingestiegen.
>Das entsprechende Format ist doch das Ethernet Packet.>Es geht mit dem Preamble los. Dann Start,Destination Address und dann>Source Address ....> Das ist doch im Source code enthalten.
Ja aber du hast es doch durch deine platformspezifischen Daten
ersetzt..?
> Der eingehende Takt ist nicht verdrahtet.
Was meinst du jetzt genau damit? 50Hz board clock..?
Timscho schrieb:> ich hoffe du hast auch die source-IP und destination-IP i "UDPSender"> geaendert bzw durch eigene IPs ersetzt?
Ich habe nichts weiter geändert.
Ich habe das Spartan 3AN Board mit der PHY LAN8700.
Wenn ich auf der seriellen Konfigurationsschnittstelle was hinein
schiebe, geht die Phy in Autodetect und LED für Link geht am PC und an
der Phy am FPGA an. Danach will der PC herausfinden welches neuer
Netzwerkteilnehmer verbunden ist. Diese Pakete sehe ich im Wireshark.
Genauer habe ich es noch nicht untersucht.
Wie muss TX_EN zum Signal verschoben sein?
Ist diese Signal einen Takt vor den Datenleitungen bereits aktiv?
Hallo Timscho,
ich habe nochmal eine Frage zu der Ethernet PHY auf deinem Board.
Welche Einstellungen musstest du vornehmen, um mit der PHY zu arbeiten?
Wenn ich z.B. das Board (Spartan 3A) mit meinem PC verbinde, steht bei
meinen Netzwerkeinstellungen: "Netzerkkabel wurde entfernt." Außerdem
leuchtet auch keine "Link-LED" oder ähnliches.
Viele Grüße
Jan
Das ist es nicht. Wie initialisierst du den PHY Baustein konkret?
Im Datenblatt steht ja, dass nRST für 100us auf low gezogen werden muss.
Das mach ich auch.
Autonegotiation wird defaultmäßig ja auch durchgeführt.
Das mit dem reset konnte ich ja gar nicht durchfuehren, da auf dem
Spartan 3e board kein reset signal vom FPGA zu PHY geleitet ist. Das
macht das board selbst, denke ich.
Was bekomst du eigentlcih wenn du "ipconfig" eingibst?
Ok es liegt am reset. Habe eine timing vorgabe im Datenblatt
missverstanden.
Wenn die PHY läuft, und das Kabel erkannt wurde zeigt mir ipconfig bzw.
ipconfig /all alle möglichen Infos an. MAC, IP, ...
Wenn die PHY nicht läuft, dann nur die MAC und Beschreibung etc.
Ja, danke auf jeden Fall!
Gut, dass hier auch Leute sind, die auch was konstruktives schreiben
anstatt sofort "kuck ins Datenblatt". Das Xilinx Forum kannst du
vergessen!
Es freut mich sehr, wenn ich dir helfen konnte.
Aus eigener erfahrung kann ich sagen, dass man hier die loesungen fuer
typische fragen aus dem gebiet recht schnell findet, und fuer die
anwendungsspezifischen probleme gibt es meistens einige hilfsbereite und
kompetente nutzer.
Angesichts der xilinx-forum und thema fpga - ethernet kann ich dich auf
einen nutzer namens "alexgiul" hinweisen. Er hat schon viel erfahrung
auf diesem gebiet, die er in seinen zahlreichen beitraegen weiter
vermittelt.
Timscho
Hallo zusammen,
ich bin sehr sehr neu in der fpga Welt und daher im Voraus bitte
entschuldigt meine eher dummen Fragen.
Ich bin auf den Thread gestoßen, weil Ich eine möglichst einfache Lösung
brauche, um Daten von dem FPGA zum PC zu übertragen. Ich habe
mittlerweile viel darüber gelesen, aber kapiere leider immer noch nict
alles. Ist der UdpSender ne Art Alternative zu dem Xilinx IP Core TEMAC?
Der TEMAC ist doch nur MAC Implementierung, oder? D.h. man müsste noch
selber MII Implementieren, PHY (mein Chip ist Broadcom BCM5221),
Datenaufbereitung (Frame encapsulation, checksum, usw), FIFO zum Frames
puffern. Stimmt das so? Ich habe eine Virtex4. Kann ich den UdpSender
trotzdem hernehmen oder ist er nur für Spartan Boards? Benötige Ich
unbedingt auch eine MicroBlaze bzw. Powerpc Implementierung? Habe bis
jetzt gar nicht damit gearbeitet und wäre mir lieber wenn ich vorerst
darauf verzichten könnte. Kennt einer von Euch diese Lösung
http://www.fpga4fun.com/10BASE-T0.html und kann sie mir evtl empfehlen
oder abraten? Gibt es evtl eine vorhandene Lösung bei der Ich direkt
meine Rohdaten übergebe und der rest wird erledigt? Ist wahrscheinlich
zu viel verlangt aber da die Datenübertragung nicht der Fokus meiner
Arbeit ist, würde Ich gerne keine Monate lang darin investieren.
Danke im Voraus und nochmals entschuldigt meine super Anfängerfragen,
Rone
Hallo rone!
Ein neuer Thread wäre ganz gut gewesen, anyway.
> Kennt einer von Euch diese Lösung> http://www.fpga4fun.com/10BASE-T0.html und kann sie mir evtl empfehlen> oder abraten?
Ich hab das mal kurz überflogen. Sieht nicht schlecht aus. Die Lösung
braucht immerhin keinen Microblaze oder sonstigen Prozessor.
Allerdings habe ich bei solchen komplexen Sachen wie Ethernet gern einen
Prozessor zur Verfügung. Das macht das Entwickeln einfacher.
Zum TEMAC:
Wenn ich das richtig sehe, ist da ein MII-Interface mit dabei.
Duke
Hallo Ihr!
Ich versuche eine ethernet-Verbindung zwischen den PC und eine Espartan
3E herzustellen. Ich bin so verzweifelt wie Timscho am Anfang. So wenn
einer mir helfen koennte, waere Euch wirklich sehr dankbar!
Ich habe Probleme mit der Angaben der IP und der MAC-Adressen.So weit
ich weiss, die IP Adresse kann man selber vergeben aber nicht die
MAC-Adresse.Stimmt das? Wie kann ich erfahren, wo diese MAC-Adresse bei
meiner Espartan3E ist?
Ausserdem haette ich eine weitere Frage: Ist es noetig irdgeneinen
router zwischen PC und Espartan3E zu haben, oder kann man sie einfach
direkt mit dem Kabel verbinden?
Viele Gruesse!
Artur
Artur schrieb:> Ich habe Probleme mit der Angaben der IP und der MAC-Adressen.So weit> ich weiss, die IP Adresse kann man selber vergeben aber nicht die> MAC-Adresse.Stimmt das?
Nein. Auch die MAC-Adresse ist konfigurierbar.
> Wie kann ich erfahren, wo diese MAC-Adresse bei> meiner Espartan3E ist?
Welchen Ethernet-Core verwendest Du? Einen von OpenCores oder den aus
dem EDK? Gaisler hat in der GRLib auch einen drin. Dort kann man die MAC
über Register setzen.
> Ausserdem haette ich eine weitere Frage: Ist es noetig irdgeneinen> router zwischen PC und Espartan3E zu haben, oder kann man sie einfach> direkt mit dem Kabel verbinden?
Ich habe hier eine Direktverbindung mit einem Crossoverkabel.
Duke
Hallo,
und danke schon mal für die Antwot. Ich hätte noch eine was zum fragen.
Duke, wenn die MII Schnittstelle schon dabei ist, was müsste man noch
selber implementieren? PHY tut man nur konfigurieren, oder? Bietet die
GRLib eine komplette Lösung? Sprich mit Frame Erstellung, MII und allem
drum dran? Kann Ich GRLib und udpsender auch für Virtex4 hernehmen?
Vielen Dank und Grüße,
Rone
rone schrieb:> was müsste man noch> selber implementieren?
Ich hab da nichts weiter dran implementiert. Hardwaremäßig war
grlib/greth ready to go. Der Zugriff vom Prozessor aus erfolgt über den
AMBA-Bus.
> PHY tut man nur konfigurieren, oder?
Ja. Denke schon.
> Bietet die> GRLib eine komplette Lösung? Sprich mit Frame Erstellung, MII und allem> drum dran?
Hmm. Da hab ich nicht geguckt. Das Frame wird ja quasi in Software
zusammengebaut. Es ist ein Beispiel dabei, um die
Ethernetgeschwindigkeit zu testen.
Mit dem MII mußt Du nicht wirklich was machen. Mal kurz einen Reset zur
Sicherheit und dann kann man dort ein paar Parameter auslesen.
> Kann Ich GRLib und udpsender auch für Virtex4 hernehmen?
Ich denke schon.
Duke
Guten Tag!
Die Ethernet-Crossover-Kabel und hatte versucht, aber selbst ich
erkenne, dass ein Gerät, und der Port nicht leuchtet LED.
Das Programm ich benutze, ist der Xilinx ISE, ich UdpSender Datei
versuchte, war die einzige Veränderung, machte ich die IP-Adresse und
MAC-Adresse, nicht der UCF-Datei nicht ändern, weil die Karte die ich
habe ist der Spartan 3E und passt gut.
Keine Notwendigkeit zu ergänzen, oder was ist falsch mache.
Vielen Dank im Voraus für Ihre Hilfe!
Artur
Ich habe mal die UPD100 Version überflogen. Da ist mir aufgefallen das
es eine gigantische State Machine mit wenn ich das richtig in Erinnerung
habe 57 States.
Dies würde ich ganze einfach machen, indem ich die ganze Initialisierung
in einen ROM oder BlockRAM schreibe. Bei Xilinx kann man dies einfach
mit einem Texteditor machen und dann die Initialisierungsdatei in den
BlockRAM kopieren.
Dadurch kann man sich die Masse an Multiplexern einsparren die alle
Durchlaufzeit benötigen und somit das ganze recht langsam wird.