Forum: FPGA, VHDL & Co. PHY auf spartan 3e board testen


von timscho (Gast)


Lesenswert?

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

von Schrotty (Gast)


Lesenswert?

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.

von timscho (Gast)


Lesenswert?

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

von Jan (Gast)


Lesenswert?

Welches Design anstelle eines EMAC cores von Xilinx kannst du denn z.B. 
empfehlen?

von Timscho (Gast)


Angehängte Dateien:

Lesenswert?

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

von Jan (Gast)


Lesenswert?

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

von Timscho (Gast)


Lesenswert?

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.

von Jan (Gast)


Lesenswert?

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.

von Timscho (Gast)


Angehängte Dateien:

Lesenswert?

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

von Timscho (Gast)


Lesenswert?

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

von Jens (Gast)


Lesenswert?

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

von Timscho (Gast)


Lesenswert?

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.

von Jan (Gast)


Lesenswert?

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

von Zuken (Gast)


Lesenswert?

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.

von Timscho (Gast)


Lesenswert?

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

von Jan (Gast)


Lesenswert?

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?

von Timscho (Gast)


Lesenswert?

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

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

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.

von Timscho (Gast)


Lesenswert?

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

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Das UCF file habe ich angepasst.

50MHz ist mein Takt.

von Timscho (Gast)


Lesenswert?

Hallo Rene,

ich hoffe du hast auch die source-IP und destination-IP i "UDPSender" 
geaendert bzw durch eigene IPs ersetzt?

von Dose (Gast)


Lesenswert?

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?

von Timscho (Gast)


Lesenswert?

TX_EN soll nicht high gehen bevor die TX_DATA gesetzt ist.

von Jan (Gast)


Lesenswert?

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

von Timscho (Gast)


Lesenswert?

Eigentlich solltest du nur die netzwerkkarte auf full-duplex 10Mbps 
einstellen.

von Jan (Gast)


Lesenswert?

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.

von Timscho (Gast)


Lesenswert?

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?

von jan0385 (Gast)


Lesenswert?

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.

von Timscho (Gast)


Lesenswert?

Yo, dann hast du es! Das freut mich. :)
Jetzt nur noch den UDPSender/Empfaenger schnell implementieren und dann 
hast du deine paketten am laufen :)

von jan0385 (Gast)


Lesenswert?

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!

von Timscho (Gast)


Lesenswert?

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

von rone (Gast)


Lesenswert?

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

von Duke Scarring (Gast)


Lesenswert?

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

von Artur (Gast)


Lesenswert?

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

von Duke Scarring (Gast)


Lesenswert?

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

von rone (Gast)


Lesenswert?

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

von Duke Scarring (Gast)


Lesenswert?

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

von Artur (Gast)


Lesenswert?

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

von Johann (Gast)


Lesenswert?

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.

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.