Ce programme se compose de plusieurs fichiers Verilog, y compris tous les fichiers associés dans le dossier hdl et certains cœurs IP nécessaires.
Introduction aux fonctions de fichiers
crc.v
: Principalement utilisé lors de l'envoi d'UDP pour calculer la valeur CRC des paquets UDP.
ethernet.v
: Encapsulation des fichiers udp_send.v et udp_receive.v.
ethernet_top.v
: l'exemple de fichier de niveau supérieur de l'ensemble du projet, qui montre uniquement comment appeler le fichier et les autres fichiers de base IP associés.
udp_receive.v
: Responsable du processus de traitement de réception d'udp.
udp_send.v
: Responsable du processus d'envoi d'udp.
clk
: L'horloge principale du module de réception.
rst_n
: Reçoit le signal de réinitialisation globale du module.
rx_data_len
: La longueur du paquet udp de données reçues, qui est un paramètre de l'en-tête udp.
rx_total_len
: La longueur du paquet de données IP reçu, qui est le paramètre de l'en-tête de données IP.
update
: lorsqu'un nouveau paquet UDP est reçu, cette valeur sera élevée pendant un cycle.
ip_header
: L’intégralité de l’en-tête du paquet de données IP reçu ne prend en charge que l’en-tête de données IP de 160 bits.
udp_header
: l'intégralité de l'en-tête de données UDP reçu ne prend en charge que l'en-tête de données UDP 64 bits.
mac
: l'intégralité du paquet MAC reçu, y compris le MAC de destination, le MAC source et l'identification du type de paquet IP.
data_o
: données valides reçues.
src_mac
: Adresse MAC source du paquet.
src_addr
: Adresse IP source du paquet de données.
src_port
: Adresse du port source du paquet de données.
DF
: Paramètre du paquet de données IP, 0 signifie que le paquet de données peut être fragmenté, 1 signifie qu'il ne peut pas être fragmenté.
MF
: Paramètre du paquet IP, 1 signifie qu'il reste des fragments, 0 signifie que c'est le dernier fragment.
e_rxdv
: Contrôle IO du RTL8211 Lorsqu'il est haut, cela signifie que les données reçues sont valides.
rxd
: recevoir les données IO du RTL8211.
CAN_RECEIVE_BROADCAST
: s'il faut prendre en charge la réception de paquets de données de diffusion, c'est-à-dire des paquets de données avec l'adresse MAC FFFFFFFFFFFF.
DST_ADDR
: définissez l'adresse IP de l'adresse de destination, qui est l'adresse de la carte réseau du RTL8211.
DST_PORT
: définissez l'adresse du port de l'adresse de destination, qui est le port de RTL8211.
DST_MAC
: définissez l'adresse MAC de l'adresse de destination, qui est l'adresse MAC du RTL8211.
IDLE
: État inactif, tant que le préambule est reçu, il entre dans l'état R_PRE.
R_PRE
: Réception du préambule. Après avoir reçu 7 préambules et un bit de démarrage, entrez dans l'état R_MAC.
R_MAC
: recevez l'état des données MAC, entrez dans l'état R_HEADER une fois la réception terminée.
R_HEADER
: recevez l'en-tête de données IP et l'en-tête de données UDP, et entrez dans l'état R_DATA après la réception.
R_DATA
: recevez des données UDP valides, entrez R_FINISH après réception.
R_FINISH
: Retour à l'état IDLE.
clk
, les signaux rst_n
sont comme ci-dessus ;
data_i
: les données qui doivent être envoyées lorsque tx_dv est élevé, les données qui doivent être envoyées sont transmises au paquet de données UDP via ce port.
tx_data_len
: La longueur des données envoyées, paramètres du paquet UDP.
crc
: Code de contrôle CRC de l'ensemble du paquet de données Ethernet, réservé à la vérification des données.
crcen
: Le signal d'activation du module crc, qui ne peut être calculé que pour le module de contrôle crc élevé.
crcrst
: Le signal de réinitialisation du module crc, qui réinitialise le module de test crc élevé.
start
: Le signal de début du module d'envoi UDP, qui est le début de l'envoi de trame pour le module à haut niveau d'entraînement.
busy
: Le signal occupé du module d'envoi UDP. Ce signal est élevé lorsque le module est en train de tramer et d'envoyer.
tx_dv
: signal d'instruction du module d'envoi UDP, informant le module UDP actuel que les données peuvent être envoyées, veuillez envoyer les données qui doivent être envoyées.
dst_mac
: Adresse MAC de l'adresse de destination.
dst_addr
: adresse IP de l'adresse de destination.
dst_port
: L'adresse du port de l'adresse de destination.
DF
, MF
sont comme ci-dessus.
tx_en
: Le signal d'activation de transmission du RTL8211 Lorsqu'il est haut, les données de transmission sont valides.
txer
: signal d'erreur d'envoi du RTL8211.
txd
: envoi de données IO par RTL8211.
IP_HEADER_LEN
: La longueur du paquet de données IP. La valeur par défaut est correcte et n'a pas besoin d'être modifiée.
TTL
: Paramètres des paquets IP, durée de vie.
SRC_ADDR
: L'adresse IP de l'adresse source.
SRC_PORT
: Le port de l'adresse source.
SRC_MAC
: Adresse MAC de l'adresse source.
IDLE
: état inactif, le démarrage est élevé et entre dans l'état MAKE_IP.
MAKE_IP
: Générez des paquets de données IP et entrez dans l'état MAKE_SUM.
MAKE_SUM
: calculez la somme de contrôle d'en-tête du paquet IP et entrez dans l'état SEND_PRE une fois le calcul terminé.
SEND_PRE
: Envoie 7 codes de préambule et 1 code de démarrage. Entrez ensuite l'état SEND_MAC.
SEND_MAC
: envoyez le MAC de destination, le MAC source et le type de paquet IP, puis entrez l'état SEND_HEADER.
SEND_HEADER
: envoyez l'en-tête de données IP et l'en-tête de données UDP, puis entrez dans l'état SEND_DATA.
SEND_DATA
: envoyez des données valides et entrez dans l'état SEND_CRC après l'envoi.
SEND_CRC
: envoyez les données CRC et entrez dans l'état IDLE_CODE après l'envoi.
IDLE_CODE
: Envoyez 12 codes inactifs, une condition requise pour les paquets de données Ethernet. Revenir à l'état IDLE après l'envoi
Afin de répondre aux exigences de synchronisation de 125 MHz, les codes de ces deux parties principales ont été modifiés autant que possible. Par exemple, dans udp_send, lors de l'envoi d'en-têtes MAC et de données, une machine à états est utilisée pour envoyer les données binaires correspondantes en fonction. à la valeur du compteur. Je l'ai déjà essayé. En envoyant directement les huit bits supérieurs, puis en déplaçant continuellement les données non envoyées vers les huit bits supérieurs, mais cette méthode ne peut pas répondre aux exigences de synchronisation de 125 MHz, elle a donc été remplacée par la valeur actuelle. méthode. Un autre exemple est le calcul de la somme de contrôle de l'en-tête. Le processus de calcul est divisé en plusieurs étapes de calcul, ce qui réduit également efficacement le nombre total de violations de timing.
Mais même ainsi, certains signaux ne répondent pas aux exigences de synchronisation, et le rapport de synchronisation produira un chemin de synchronisation d'environ 1 ns négatif.
A suivre, en attendant de combler les trous. . .
Articles de remplissage (Exploration du réseau Gigabit) 1. Comprendre toute la structure de la trame Ethernet (Exploration du réseau Gigabit) 2. Efforts pour assurer la marge de synchronisation des circuits numériques