Dieses Programm besteht aus mehreren Verilog-Dateien, einschließlich aller zugehörigen Dateien im HDL-Ordner und einigen erforderlichen IP-Kernen.
Einführung in Dateifunktionen
crc.v
: Wird hauptsächlich beim Senden von UDP verwendet, um den CRC-Wert von UDP-Paketen zu berechnen.
ethernet.v
: Kapselung der Dateien udp_send.v und udp_receive.v.
ethernet_top.v
: Die Beispieldatei der obersten Ebene des gesamten Projekts, die nur zeigt, wie die Datei und andere zugehörige IP-Kerndateien aufgerufen werden.
udp_receive.v
: Verantwortlich für den Empfangsverarbeitungsprozess von udp.
udp_send.v
: Verantwortlich für den Sendevorgang von udp.
clk
: Die Hauptuhr des Empfangsmoduls.
rst_n
: Empfängt das globale Reset-Signal des Moduls.
rx_data_len
: Die Länge des UDP-Pakets der empfangenen Daten, ein Parameter des UDP-Headers.
rx_total_len
: Die Länge des empfangenen IP-Datenpakets, die der Parameter des IP-Datenheaders ist.
update
: Wenn ein neues UDP-Paket empfangen wird, wird dieser Wert für einen Zyklus hochgezogen.
ip_header
: Der gesamte empfangene IP-Datenpaket-Header unterstützt nur 160-Bit-IP-Datenheader.
udp_header
: Der gesamte empfangene UDP-Datenheader unterstützt nur den 64-Bit-UDP-Datenheader.
mac
: Das gesamte empfangene MAC-Paket, einschließlich Ziel-MAC, Quell-MAC und Identifizierung des IP-Pakettyps.
data_o
: Gültige Daten empfangen.
src_mac
: Quell-MAC-Adresse des Pakets.
src_addr
: Quell-IP-Adresse des Datenpakets.
src_port
: Quellportadresse des Datenpakets.
DF
: Parameter des IP-Datenpakets. 0 bedeutet, dass das Datenpaket fragmentiert werden kann, 1 bedeutet, dass es nicht fragmentiert werden kann.
MF
: Parameter des IP-Pakets, 1 bedeutet, dass noch Fragmente vorhanden sind, 0 bedeutet, dass dies das letzte Fragment ist.
e_rxdv
: Steuer-E/A von RTL8211. Wenn es hoch ist, bedeutet dies, dass die empfangenen Daten gültig sind.
rxd
: Daten-E/A von RTL8211 empfangen.
CAN_RECEIVE_BROADCAST
: Ob der Empfang von Broadcast-Datenpaketen unterstützt werden soll, also Datenpakete mit der MAC-Adresse FFFFFFFFFFFF.
DST_ADDR
: Legen Sie die IP-Adresse der Zieladresse fest, bei der es sich um die Netzwerkkartenadresse von RTL8211 handelt.
DST_PORT
: Legen Sie die Portadresse der Zieladresse fest, bei der es sich um den Port von RTL8211 handelt.
DST_MAC
: Legen Sie die MAC-Adresse der Zieladresse fest, bei der es sich um die MAC-Adresse von RTL8211 handelt.
IDLE
: Leerlaufzustand. Solange die Präambel empfangen wird, wechselt es in den R_PRE-Zustand.
R_PRE
: Präambel empfangen. Nachdem Sie 7 Präambeln und ein Startbit empfangen haben, wechseln Sie in den R_MAC-Status.
R_MAC
: MAC-Datenstatus empfangen, nach Abschluss des Empfangs in den R_HEADER-Status wechseln.
R_HEADER
: IP-Datenheader und UDP-Datenheader empfangen und nach dem Empfang in den R_DATA-Status wechseln.
R_DATA
: Empfangen Sie gültige UDP-Daten und geben Sie nach dem Empfang R_FINISH ein.
R_FINISH
: Rückkehr zum IDLE-Status.
clk
und rst_n
Signale sind wie oben;
data_i
: Die zu sendenden Daten. Wenn tx_dv hoch ist, werden die zu sendenden Daten über diesen Port an das UDP-Datenpaket übertragen.
tx_data_len
: Die Länge der gesendeten Daten, Parameter des UDP-Pakets.
crc
: CRC-Prüfcode des gesamten Ethernet-Datenpakets, reserviert für die Datenüberprüfung.
crcen
: Das Aktivierungssignal des CRC-Moduls, das nur für das High-CRC-Prüfmodul berechnet werden kann.
crcrst
: Das Reset-Signal des CRC-Moduls, das das High-CRC-Testmodul zurücksetzt.
start
: Das Startsignal des UDP-Sendemoduls, das den Beginn des Frame-Sendens für das High-Drive-Modul darstellt.
busy
: Das Busy-Signal des UDP-Sendemoduls. Dieses Signal wird auf High gesetzt, wenn das Modul gerade Frames erstellt und sendet.
tx_dv
: Anweisungssignal des UDP-Sendemoduls, das das aktuelle UDP-Modul darüber informiert, dass die Daten gesendet werden können. Bitte senden Sie die Daten, die gesendet werden müssen.
dst_mac
: MAC-Adresse der Zieladresse.
dst_addr
: IP-Adresse der Zieladresse.
dst_port
: Die Portadresse der Zieladresse.
DF
, MF
sind wie oben.
tx_en
: Das Übertragungsfreigabesignal von RTL8211. Wenn es hoch ist, sind die Übertragungsdaten gültig.
txer
: RTL8211 sendet ein Fehlersignal.
txd
: RTL8211 sendet Daten-E/A.
IP_HEADER_LEN
: Die Länge des IP-Datenpakets. Die Standardeinstellung ist in Ordnung und muss nicht geändert werden.
TTL
: Parameter von IP-Paketen, Lebensdauer.
SRC_ADDR
: Die IP-Adresse der Quelladresse.
SRC_PORT
: Der Port der Quelladresse.
SRC_MAC
: MAC-Adresse der Quelladresse.
IDLE
: Ruhezustand, Start ist hoch und wechselt in den MAKE_IP-Zustand.
MAKE_IP
: IP-Datenpakete generieren und in den Status MAKE_SUM wechseln.
MAKE_SUM
: Berechnen Sie die Header-Prüfsumme des IP-Pakets und geben Sie nach Abschluss der Berechnung den Status SEND_PRE ein.
SEND_PRE
: 7 Präambelcodes und 1 Startcode senden. Geben Sie dann den Status SEND_MAC ein.
SEND_MAC
: Senden Sie den Ziel-MAC, den Quell-MAC und den IP-Pakettyp und geben Sie dann den Status SEND_HEADER ein.
SEND_HEADER
: IP-Datenheader und UDP-Datenheader senden und dann in den SEND_DATA-Status wechseln.
SEND_DATA
: Gültige Daten senden und nach dem Senden in den SEND_CRC-Status wechseln.
SEND_CRC
: CRC-Daten senden und nach dem Senden in den Status IDLE_CODE wechseln.
IDLE_CODE
: Senden Sie 12 Leerlaufcodes, eine Anforderung für Ethernet-Datenpakete. Kehren Sie nach dem Senden in den Ruhezustand zurück
Um den Timing-Anforderungen von 125 MHz gerecht zu werden, wurden die Codes dieser beiden Kernteile so weit wie möglich geändert. Beispielsweise wird in udp_send beim Senden von MAC- und Datenheadern eine Zustandsmaschine verwendet, um die entsprechenden Bitdaten entsprechend zu senden Ich habe es bereits versucht, indem ich die oberen acht Bits direkt gesendet und dann die nicht gesendeten Daten kontinuierlich auf die oberen acht Bits verschoben habe, aber diese Methode kann die Timing-Anforderungen von 125 MHz nicht erfüllen, daher wurde sie auf den aktuellen Wert geändert Verfahren. Ein weiteres Beispiel ist die Berechnung der Header-Prüfsumme. Der Berechnungsprozess ist in mehrere Berechnungsschritte unterteilt, wodurch auch die Gesamtzahl der Zeitverstöße effektiv reduziert wird.
Dennoch gibt es immer noch einige Signale, die die Timing-Anforderungen nicht erfüllen, und der Timing-Bericht wird einen Timing-Pfad von etwa minus 1 ns ergeben.
Fortsetzung folgt, ich warte darauf, die Löcher zu füllen. . .
Grubenfüllende Artikel (Erkundung des Gigabit-Netzwerks) 1. Verstehen Sie die gesamte Struktur des Ethernet-Frames (Erkundung des Gigabit-Netzwerks) 2. Bemühungen, den Zeitspielraum digitaler Schaltkreise sicherzustellen