Hallo Gute Menschen :D Ich sitze schon seit Tagen an meinen Kleinen Projekt, eine Kommunikation zwischen meinem FPGA Board und PC aufzubauen.(Daten zu verschicken und zu Empfangen egal welche Geschwindigkeit) Das ist mein Board: https://www.xilinx.com/products/boards-and-kits/1-4pilqh.html Auf ihm sitzt ein PHY: http://www.ti.com/lit/ds/symlink/dp83630.pdf PHY ist schon Konfiguriert worden das er mit der RMII Schnittstelle Arbeitet(Weniger Pins Zwischen FPGA und PHY). Ich hab ein Fertigen Projekt gefunden mit Hilfe Google : https://github.com/nimazad/Ethernet-communication-VHDL Ich hab seinen Code genutzt weil er schon den RMII Nutzt im Anhang ist mein Projekt, kurze Beschreibung: Top.vhd - Top File mit den Haupt Instanzen für RMII und MDIO und neben bei steuer ich paar LEDS Communication.vhd - Hier liegt die Logik für den RMII Senden und Empfangen PHY_Manager.vhd - Hier ist die Logik für den MDIO Mit Hilfe Wikipedia hab ich den IP Header und den UDP Header "Richtig" Konfiguriert , hoffe ich mal. MAC Dest: "Von meinen PC" aber im Code derzeit x"FFFFFFFFFFFF" MAC SOurce: x"010101010101" IP Source: x"C0A80A20" 192.168.10.32 IP Dest. : "Von meinem PC für Ethernet" aber derzeit im Code x"FFFFFFFF" Port Source und Dest. : x"1000" - 4096 Die Hex Reihenfolge zwischen MAC source und IP source ist : x"450000440000000080110000" --- Länge IP Header ist IPHeader + UDP Header + Data = 20 + 8 + 40 = 68Bytes UDP länge : UDP Header + Data = 48Bytes Ich hab noch Preamble und Checksum aber die hab ich nicht geändert. Das sind die Daten für Senden, beim Empfangen habe ich keine Bedingungen außer das der Protokol Gültig ist. Beim MDIO schicke ich ein BitFolge die ich aus dem File: http://www.ti.com/lit/ds/symlink/dp83630.pdf genommen habe. Meine PHY_Adresse sollte 0x01(Siehe Bild2) sein und der Register 0x00 (Basic Mode Control Register). Leider Passiert hier nichts, Loopback oder Powerdown kann ich nicht einstellen anscheinend liegt das Problem hier aber ich verstehe nicht warum. Es gibt nicht viel Info über mein Board für den PHY (Siehe Bild1 und BILD2) deshalb hab ich die Konfiguration Info aus der /dp83630.pdf für den MDIO geholt. Am PC lese ich den Ethernet Zugang aber ich sehe keine Ankommenden Pakete von der IP vom Board oder dem Port 4096, die IP habe ich Manuel den ARP hinzugefügt am PC. Das einzige Positive ist das ich eine LED mit dem RX verbunden und es blinkt ab und zu wenn ich die Ethernet Verbindung herstelle, ich nehme mal an vom PC zum FPGA. Hat jemand ein Vorschlag was ich als nächstes tun soll, wie ich bei der Fehlersuche vorgehen soll. Ich vermutte das die PHY nicht richtig eingestellt ist und ich es nicht hinbekommen mit dem MDIO es einzustellen. Aber ich dachte wenn ich es Default lasse sollte es trotzdem funktionieren wenigstens die langsamste Geschwindigkeit. Ich bedanke mich im Voraus für jede Hilfe oder Hinweiß :D
Jasko M. schrieb: > anscheinend liegt das Problem hier aber ich verstehe nicht > warum. Bekommt der PHY vor der Verwendung ein gültiges Reset-Signal? Einige laufen nicht los, wenn der Resetpegel sich nicht ändert, sondern statisch ist. Ist die Polarität vom Resetsignal richtig? Ich hatte schon einen PHY permanent im Resetzustand, weil der Hersteller zu doof war den lowaktiven-Reset auch als solchen zu kennzeichen... Duke
Duke Scarring schrieb: > Jasko M. schrieb: >> anscheinend liegt das Problem hier aber ich verstehe nicht >> warum. > Bekommt der PHY vor der Verwendung ein gültiges Reset-Signal? > Einige laufen nicht los, wenn der Resetpegel sich nicht ändert, sondern > statisch ist. > > Ist die Polarität vom Resetsignal richtig? > Ich hatte schon einen PHY permanent im Resetzustand, weil der Hersteller > zu doof war den lowaktiven-Reset auch als solchen zu kennzeichen... > > Duke Danke für die Antwort, leider stimmt die Polarität aber die war Fix auf 1 Gesetzt. Ich hab es versucht es mit Low Pegel die ersten 100ms und danach auf High Pegel aber das Ergebnis ist gleich.
Das ist eine direkt Verbindung zwischen PC und meinem Board. Ich denke Schon weil Wireshark zeigt an das mein PC verschiedene Anfragen versendet und Pakete verschickt sobald ich es mit meinem Board PHY verbinde. Was mich wundert das so viele es sind. Aber kein UDP Pakete das von dem Board kommt das sind alle die mein PC selber verschickt warum auch immer.(Destination Broadcast)
Normalerweise funktionieren die PHYs auch ohne Konfiguration. Aber zur Sicherheit würde ich einen kleinen Softcore nehmen und schauen ob ich über MDIO mit dem PHY reden kann und ob was sinnvolles in den Registern steht. Duke
Kenne leider deinen Phy nicht, aber wenn beim Einstecken des Kabels was passiert, ist der Phy typischerweise 'live'. Also dass dein PC irgendwelchen Discoverykram schickt, ist ansich gut. Ansonsten mein Latein: - Simulieren, simulieren (Phy loopback in der Testbench) - MDIO-Register/Phy status zurücklesen - Sich nicht mit illegalen Gruppenadressen (MAC) ins Knie schiessen (aber da würdest du bei Wireshark eigtl. was sehen) Manchmal kommt man auch schneller voran, indem man einfach die ganzen Config-Pins wie Lowpower und Reset auf irgend ein Register legt und per JTAG oder CPU ansteuert - falls ein Plug'n'play Referenzsystem vorliegt.
Danke. Ich versuch mal ein Register zu lesen. @ Duke Scarring wie meinst du mit einem Softcore. Ich sende schon im über eine Vhdl Implementierung ein mdio bitfolge damit ich den Register Basic Mode Control Register (BMCR) anpasse. @Martin S Phy loopback würde ich gerne machen wenn er auf mich hören würde xD Also war meine Vermutung richtig das es wahrscheinlich Funktionieren sollte auch ohne das ich über den MDIO Konfiguriere, aber was mach ich dann falsch bei dem Protokol :/ Ich hab es auch ohne meine MDIO instance versuch also mit Default Einstellungen und es hat nicht geklappt. Ich würde mich nicht mal mit dem MAC selber basteln anlegen wenn ich nicht vorher mit dem Fertig design des Webservers auf ein Softcore versucht hätte. Aber leider gibt es da noch mehr Probleme, man kann den HW block design nicht ändern bevor man die IP Cores Updatet(die aus 2014 stammen), dann kommen viele Critc Warnings von den Einzelnen Cores beim Implementieren. Auch wenn man den Orginal hw design aus 2014 über SDK Öffnen kann ich dort kein Application Projekt anlegen mit dem LwIP Ethernet Apps template ohne das ein Error kommt. Finde es nicht lustig das eine Bsp nach 2 Jahren nicht mit neuer Vivado / SDK version nicht funktioniert. Deshalb wollte ich wieder zurück auf die reine VHDL ebene und hab angefangen selber nachzulesen wie die Protokole sind usw für Ethernet usw. Daher hab ich in dem Gebiet nicht viel Erfahrung mit dem PHY.
Hi Jasko, Jasko M. schrieb: > @Martin S Phy loopback würde ich gerne machen wenn er auf mich hören > würde xD Ich meinte einen Loopback in der Simulation. Da siehst du schon mal, ob du alles richtig verdrahtet hast. > Finde es nicht lustig das eine Bsp > nach 2 Jahren nicht mit neuer Vivado / SDK version nicht funktioniert. Das finden offenbar viele nicht. Dazu sind diese fertigen Refdesigns oft echte Mogelpackungen, erst mal läuft schnell was, und dann steckt der Teufel im Detail und es zieht sich hin. Dann lieber gleich mit ner simulierbaren (quelloffenen) Referenz anfangen. > > Deshalb wollte ich wieder zurück auf die reine VHDL ebene und hab > angefangen selber nachzulesen wie die Protokole sind usw für Ethernet > usw. Daher hab ich in dem Gebiet nicht viel Erfahrung mit dem PHY. Ich auch nicht, viele Phys sind (teils hinter NDA verbarrikadierte) Black Boxen, ist immer bisschen ein Ratespiel, bis du mal einen brauchbaren "Line Status" zurückliest. Hab mir oft Code ausm Linux Kernel geborgt..
könnte es sein, dass dein Interface noch Constraints benötigt? Ich sehe nur den definierten Systemtakt.
Genau meine Fall, da investiert man Zeit in einem Fremden Design der sehr Komplex ist und dann passieren unvorgesehene probleme. Ja ich versuche morgen den Loopback fall um noch einmal sicher zu gehen. danke :D Jasko M. schrieb: > Danke. Ich versuch mal ein Register zu lesen. > @ Duke Scarring wie meinst du mit einem Softcore. Ich sende schon im > über eine Vhdl Implementierung ein mdio bitfolge damit ich den Register > Basic Mode Control Register (BMCR) anpasse. > > @Martin S Phy loopback würde ich gerne machen wenn er auf mich hören > würde xD > > Also war meine Vermutung richtig das es wahrscheinlich Funktionieren > sollte auch ohne das ich über den MDIO Konfiguriere, aber was mach ich > dann falsch bei dem Protokol :/ Ich hab es auch ohne meine MDIO instance > versuch also mit Default Einstellungen und es hat nicht geklappt. > > > > Ich würde mich nicht mal mit dem MAC selber basteln anlegen wenn ich > nicht vorher mit dem Fertig design des Webservers auf ein Softcore > versucht hätte. > Aber leider gibt es da noch mehr Probleme, man kann den HW block design > nicht ändern bevor man die IP Cores Updatet(die aus 2014 stammen), dann > kommen viele Critc Warnings von den Einzelnen Cores beim Implementieren. > Auch wenn man den Orginal hw design aus 2014 über SDK Öffnen kann ich > dort kein Application Projekt anlegen mit dem LwIP Ethernet Apps > template ohne das ein Error kommt. Finde es nicht lustig das eine Bsp > nach 2 Jahren nicht mit neuer Vivado / SDK version nicht funktioniert. > > Deshalb wollte ich wieder zurück auf die reine VHDL ebene und hab > angefangen selber nachzulesen wie die Protokole sind usw für Ethernet > usw. Daher hab ich in dem Gebiet nicht viel Erfahrung mit dem PHY.
Klakx schrieb: > könnte es sein, dass dein Interface noch Constraints benötigt? Ich sehe > nur den definierten Systemtakt. Das ist der orginal Constrain vom Board, fast alles ist auskommentiert wenn du nach unten scrollst siehst du den Rest. Ich muss betonnen ich nutze diese Pins nicht im Code: PHY1_LED_LINK PHY1_RX_ERR Ist es Relevant ?
Duke Scarring schrieb: > Normalerweise funktionieren die PHYs auch ohne Konfiguration. Aber zur > Sicherheit würde ich einen kleinen Softcore nehmen und schauen ob ich > über MDIO mit dem PHY reden kann und ob was sinnvolles in den Registern > steht. Ähh - Moment: Selbstverständlich braucht der PHY eine dedizierte Konfiguration. Er kann sie sich teilweise selber ziehen, wenn er mit der Gegenstelle kommuniziert. Das geht per elektronischer Beschaltung des PHYs. Wenn der resettet wird, handelt er die Kommunikation gemäss der gewählten Voreinstellung aus. Ansonsten muss er manuell programmiert und nochmal getriggert werden. Manche PHYs haben einen packet generator, den kann man antriggern. Der sendet dann automatisch gültige Pakete. Leider gibt es da manchmal Probleme. Ich habe mal versucht den PG bei einem Marvel Alaska anzuwerfen und im Nachhinein erfahren dass der im GB Mode nicht läuft.
Guten Morgen, Ich hab mal intern ein Loopback gemacht im FPGA also TX-> RX Hier ist das erste Packet das mein RX Empfangen hat 50 55 55 55 55 55 55 55 A0 2B B5 32 78 0C 01 01 01 01 01 01 08 00 45 00 00 44 00 00 00 00 80 11 00 00 C0 A8 02 20 A9 FE 6E FE 10 00 10 0000 30 0000 1A1A1B1B 36x00 FF 60 B8 99 der Preamble ist falsch aber egal weil die nächsten Gesendeten Pakete so aussehen: 55 55 55 55 55 55 55 D5 A0 2B B5 32 78 0C 01 01 01 01 01 01 08 00 45 00 00 44 00 00 00 00 80 11 00 00 C0 A8 02 20 A9 FE 6E FE 10 00 10 0000 30 0000 1A1A1B1B 36x00 FF 60 B8 99 Wahrscheinlich Initalisiert er irgendwas falsch am Anfang, aber das zweite und die nächsten Packete sehen Gültig aus. Ich würde wirklich gerne den PHY ansprechen, könnt ihr mir da Helfen. Im Referenz Beispiel hat er einen MDIO Handler eingebaut er sprach ihn auch an. Ich hab diesen Nach dem Angaben aus den Datenblat vom PHY geändert aber was ich auch schicke er Reagiert nicht(Power Down als Test). PHY Addresse kenn ich aus dem BILD2 im Anhang, aber beim Register Addresse bin ich mir nicht sicher im PHY datensheet gibt er an es 00000 als adresse für Basic Mode Control Register (BMCR) und dort hat man die Optionen Geschwindigkeit, Reset, Loopback usw. http://www.ti.com/lit/ds/symlink/dp83630.pdf
Ich bin jetzt am Oszi um zu bestätigen was in der Simulation läuft für die MDIO Kommunikation mit dem Phy. Beim Oszi bekomme ich genau das angezeigt was in der Simulation läuft(Siehe Bild3 teil 1 und teil 2). 32x"1" 01 01 10001 00000 10 001010010000000 Genau diese Bit Folge wollte ich auch als Test und ich hallte mich an die 10ns Setup zeit
Moin, Präambel is in der Tat kaputt, schau dir doch mal die RGMII-Signale direkt an. Hab mal n Bild angehängt, wie's im simulierten Loopback aussehen sollte.
Servus :D Ja aber wie gesagt Prämbel sieht gut aus nach dem ersten packet, die Restlichen Pakete die jede Sekunde verschickt werden, sollten durchkommen. Na ja jetzt hab ich mal versuch die Register aus dem Phy zu lesen, leider kommt da nichts raus voraus ich schließen kann das er meine Befehle nicht wahrnimmt. Ich lese mir nochmal Gründlich das Datenblatt durch vom Phy vielleicht muss man ihn vorher initialisieren oder sowas ähnliches
Gestern hab ich ein kleinen Schritt nach vorne gemacht. Also was in dem User Guide vom Board steht das die PHY Adresse 0x11 und 0x01 ist stimmt nicht :D Für den Artix 750T Eval Kit sind die PHY Adressen PHY1 0x13 und PHY2 0x12. Das hab ich irgendwo in einer Schema vom Board gefunden ganz am Rande und anders Beschrieben als rmii slave adresse. Ich verstehe nicht wie können Sie in dem User Guide so eine falsche Information veröffentlichen ? (Und Avnet finde ich schon seriös als eine Firma) Leider kann ich noch nicht die Register Lesen warum auch immer... lesen geht nicht. Aber schreiben Funktioniert, weil ich auf dem Register PowerDown auf 1 gesetzt habe und das hat wirklich Funktioniert, und Speed(10 oder 100) auch und Reset. WIe gesagt ein kleiner schritt weil meine Pakete immer noch nicht durchkommen. Und auch was ich vom Pc aus "Packet Sender" sende kommt nicht an oder Zumindest erkennt mein MAC es nicht obwohl es im Loop back betrieb funktioniert hat. Muss zugeben ich hab die TX0 und TX1 nicht am Oszi überprüft ob wirklich die Reihenfolge kommt die Ich schon oben geschrieben hab. Hat jemand noch Ideen wie ich vorgehen soll? Ich will ungern wieder mich geschlagen geben und auf Uart wechseln(Bin auch dort Neuling) Kann man im Wireshark auch nicht Valide Pakete erkennen ? Also die Pakete die weggeworfen werden weil iwas nicht stimmt? Danke
:
Bearbeitet durch User
Jasko M. schrieb: > Kann man im Wireshark auch nicht Valide Pakete erkennen ? Also die > Pakete die weggeworfen werden weil iwas nicht stimmt? Das sollte im 'Promiscuous Mode' funktionieren. Dafür braucht man root bzw. Administratorrechte und Unterstützung von der Netzwerkkarte. Duke
Hallo, Immer noch kein Erfolg, aber neue Erkenntnisse. Wenn ich den PC und meinen Board mit dem Cat5 verbinde dann empfange ich definitiv was vom PC auf dem FPGA!!! Das hab ich eben auch über Oszi überprüft und dazu ist die SrcIP mein PC daher definitiv kommt es vom meinem Rechner. Was ich immer noch nicht verstehe, ok meine Pakete kommen nicht aber ich empfange etwas am Anfang der Verbindung von PC-> BOARD aber wenn ich dann den "Packetsender" oder "UDP Test Tool 3.0" benutze um Pakete zu versenden kommt NICHTS an. Es kommt nichts an der RX leitung wenn ich es über die oben genannten Programme schicke WIESO???? Danke @Duke ich werde mal nachschauen. Wahrscheinlich gebe ich es auf und sollte langsam nachdenken über eine Alternative zB UART.
:DDDDD Mein letzter zufälliger versuch hat den richtigen schritt nach vorne gemacht :D Ich weiß nicht wieso aber ich hab einfach mal über Packetsender einen Packet verschickt aber mit der IP 255.255.255.255 Broadcast. Und mein MAC auf dem Board erkennt es und mein Led leuchtet auf das der richtige wert im Packet war(eine Bitfolge im data). Kann mir bitte einer erklären warum es mit Broadcast Klappt beim versenden und nicht mit irgendeiner anderen IP, es handelt sich hier um eine Direkt Verbindung zwischen PC und Board daher es liegt nichts dazwischen. Ist auch egal, wenn es nur so Funktioniert bin ich auch glücklich. Da es sich bei einer Direktverbindung zwischen PC und Board handelt ist es mir Egal ob es Broadcast ist, na ja schön wäre es wenn es auch Netzwerk fähig wäre :D Das Problem bleibt das die Packete vom Board nicht am PC ankommen und nach dieser Erkenntnis vermute ich es liegt am PC ?
:
Bearbeitet durch User
ARP! ARP! Nochmal ARP. Such mal hier die Ethernet-MAC-Threads durch nach diesem Klassiker...
Strubi schrieb: > ARP! > ARP! > > Nochmal ARP. > > Such mal hier die Ethernet-MAC-Threads durch nach diesem Klassiker... ok ich schau nacht aber diesen Punkt hab ich schon am Anfang bearbeitet mit diesen link: https://superuser.com/questions/391108/how-can-i-add-an-active-arp-entry-on-win-7 also ich hab manuel mein IP und MAC adresse des Board in der ARP tabelle eingefügt
Strubi schrieb: > ARP! > ARP! > > Nochmal ARP. > > Such mal hier die Ethernet-MAC-Threads durch nach diesem Klassiker... Hatte hier mal angefangen und der Klasiker ist immer noch der Thread: Beitrag "Ethernet GMII"
Na gut, obwohl ich die Adresse im ARP Cache habe ! Implementiere ich einen ARP Antwort auf den Request.
Ich meinte eigentlich eher was wie den Thread hier: Beitrag "Ethernet Pakete empfangen(MII)" Du siehst ansich sofort in Wireshark, ob ARP richtig tut oder die Manipulation Erfolg hat. Unter Windows passieren je nach OS-Version die lustigsten Sachen, darum, keine Gewähr dort. Wenn dein Core z.B. nicht "promiscuous" arbeitet, filtert er ev. schon auf MAC-Ebene alle andern MACs ausser seine und du siehst nur die Broadcasts am FPGA-Board. Ansonsten solltest du in Wireshark unter Linux typischerweise alle noch so kaputten Ethernet-Pakete von FPGA-Seite sehen.
Hallo, habe selbst einen ARP in VHDL Implementiert. Mein MAC sendet nichts bis er einen ARP Request bekommt, dann liest er ihn und nimmt die Infos MAC Adresse und IP und sendet Sie zurück als ARP Antwort. In der Simulation sieht es gut aus. Meine Antwort sieht so aus: 55555555555555D5 FFFFFFFFFFFF <MAC_vomBoard> 0806 0001 0800 06 04 0002 <MAC_PC> <IP_PC> <MAC_vomBoard> <IP_vomBoard> <Checksum> Leider Passiert nichts, der PC schickt weiter ARP so als ob er gar keine Antwort vom Board bekommt. Ist meine Antwort auch Richtig, kann mir einer Bestätigen ?
Jasko M. schrieb: > Ist meine Antwort auch Richtig, kann mir einer Bestätigen ? Was sagt denn Wireshark auf dem Host? Ggf. muß noch umkonfiguriert werden (Netzwerkkarte + Wireshark), damit fehlerhafte Paket bis zur Software kommen. Duke
Wireshark zeigt an das er immer wieder ARP verschickt. Hab mir VM Virtualbox runtergeladen ich versuch mal auf Ubuntu und mein ethernet zum VM weiterzuleiten um dort im promiscuous mode es zu überprüfen was alles ankommt, da auf dem Windows Wireshark nichts anzeigt ?
Duke Scarring schrieb: > Jasko M. schrieb: >> Ist meine Antwort auch Richtig, kann mir einer Bestätigen ? > Was sagt denn Wireshark auf dem Host? > Ggf. muß noch umkonfiguriert werden (Netzwerkkarte + Wireshark), damit > fehlerhafte Paket bis zur Software kommen. > > Duke weißt du wie man es umkonfigurieren kann ?
Im Wireshark auf der VM im Ubuntu bekomme ich mehr Packete angezeigt auch mit Roter Hintergrund farbe aber keine Packete vom Board *EDIT: Warum auch immer jetzt funktioniert nicht mehr Broadcast senden vom PC, vllt hat es mit dem VM etwas zu tun. Aber wenn ich jetzt manuel die ARP mit der IP und MAC vom Board befülle kommen dann die Packete am Board an die mein PC an die IP vom Board schickt. Leider kommen andersrum immer noch keine Packete am PC an. Entweder spinnt mein PHY oder die Packete sind kaputt
:
Bearbeitet durch User
Uh, das mit der VM ist beliebig "gefährlich", was Irreführung betreffend "What you see is what you get" angeht. Kannst du nicht Ubuntu auf einer alten Laptopleiche installieren? So oder so klingt es so, als ob TX (Board)->(PC) erst debuggen musst, wenn ein rot markierter Eintrag im Wireshark ist, klingts schwer nach 'bad packet'.
Jasko M. schrieb: > weißt du wie man es umkonfigurieren kann ? Das höngt von Deimen Betriebssystem ab. Testweise würde ich die ganzen 'Checksum offloading' Sachen deaktivieren. Duke
Hallo, hab es aufgegeben, ich hab es nochmals versucht mit einem anderen CRC vhdl code und auch mit einem Code der Funktionieren sollte von ArtyEthernet - Hamsterworks aber leider kein Erfolg und ohne das ich die Kaputten Packete(vermute ich mal kaputt) sehen kann ist es schwer es zu verbessern. Bin ausgewichen auf Uart Schnittstelle und bin in 1 Tag fertig geworden. Danke für die Vorschläge nochmals :D
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.