Este programa consta de varios archivos verilog, incluidos todos los archivos relacionados en la carpeta hdl y algunos núcleos IP necesarios.
Introducción a las funciones de archivos.
crc.v
: se utiliza principalmente al enviar UDP para calcular el valor CRC de paquetes UDP.
ethernet.v
: Encapsulación de archivos udp_send.v y udp_receive.v.
ethernet_top.v
: el archivo de nivel superior de muestra de todo el proyecto, que solo muestra cómo llamar al archivo y otros archivos principales de IP relacionados.
udp_receive.v
: Responsable del proceso de procesamiento de recepción de udp.
udp_send.v
: Responsable del proceso de envío de udp.
clk
: El reloj principal del módulo receptor.
rst_n
: Recibe la señal de reinicio global del módulo.
rx_data_len
: la longitud del paquete udp de datos recibidos, que es un parámetro del encabezado udp.
rx_total_len
: la longitud del paquete de datos IP recibido, que es el parámetro del encabezado de datos IP.
update
: cuando se recibe un nuevo paquete UDP, este valor aumentará durante un ciclo.
ip_header
: todo el encabezado del paquete de datos IP recibido, solo admite encabezados de datos IP de 160 bits.
udp_header
: todo el encabezado de datos UDP recibido, solo admite encabezados de datos UDP de 64 bits.
mac
: todo el paquete MAC recibido, incluida la MAC de destino, la MAC de origen y la identificación del tipo de paquete IP.
data_o
: datos válidos recibidos.
src_mac
: dirección MAC de origen del paquete.
src_addr
: dirección IP de origen del paquete de datos.
src_port
: dirección del puerto de origen del paquete de datos.
DF
: Parámetro del paquete de datos IP, 0 significa que el paquete de datos se puede fragmentar, 1 significa que no se puede fragmentar.
MF
: Parámetro del paquete IP, 1 significa que todavía hay fragmentos, 0 significa que este es el último fragmento.
e_rxdv
: Control IO de RTL8211 Cuando es alto, significa que los datos recibidos son válidos.
rxd
: recibe datos IO de RTL8211.
CAN_RECEIVE_BROADCAST
: si se admite la recepción de paquetes de datos de transmisión, es decir, paquetes de datos con dirección MAC FFFFFFFFFFFF.
DST_ADDR
: establece la dirección IP de la dirección de destino, que es la dirección de la tarjeta de red de RTL8211.
DST_PORT
: establece la dirección del puerto de la dirección de destino, que es el puerto de RTL8211.
DST_MAC
: establece la dirección MAC de la dirección de destino, que es la dirección MAC de RTL8211.
IDLE
: Estado inactivo, mientras se recibe el preámbulo, ingresa al estado R_PRE.
R_PRE
: Recibir preámbulo Después de recibir 7 preámbulos y un dato de bit de inicio, ingrese al estado R_MAC.
R_MAC
: recibe el estado de los datos MAC, ingresa al estado R_HEADER después de completar la recepción.
R_HEADER
: recibe el encabezado de datos IP y el encabezado de datos UDP, e ingresa al estado R_DATA después de recibirlos.
R_DATA
: Reciba datos UDP válidos, ingrese R_FINISH después de recibirlos.
R_FINISH
: Vuelve al estado INACTIVO.
clk
, rst_n
señales son las anteriores;
data_i
: Los datos que deben enviarse cuando tx_dv es alto, los datos que deben enviarse se transmiten al paquete de datos UDP a través de este puerto.
tx_data_len
: la longitud de los datos enviados, parámetros del paquete UDP.
crc
: Código de verificación CRC de todo el paquete de datos Ethernet, reservado para la verificación de datos.
crcen
: la señal de habilitación del módulo crc, que solo se puede calcular para el módulo de verificación crc alto.
crcrst
: La señal de reinicio del módulo crc, que reinicia el módulo de prueba crc alto.
start
: la señal de inicio del módulo de envío UDP, que es el inicio del envío de tramas para el módulo de alta velocidad.
busy
: La señal de ocupado del módulo de envío UDP. Esta señal se eleva cuando el módulo está en el proceso de encuadre y envío.
tx_dv
: Señal de instrucción del módulo de envío UDP, que informa al módulo UDP actual que los datos se pueden enviar; envíe los datos que deben enviarse.
dst_mac
: dirección MAC de la dirección de destino.
dst_addr
: dirección IP de la dirección de destino.
dst_port
: la dirección del puerto de la dirección de destino.
DF
, MF
son los anteriores.
tx_en
: La señal de habilitación de transmisión de RTL8211 cuando es alta, los datos de transmisión son válidos.
txer
: señal de error de envío de RTL8211.
txd
: E/S de envío de datos de RTL8211.
IP_HEADER_LEN
: La longitud del paquete de datos IP. El valor predeterminado está bien y no es necesario cambiarlo.
TTL
: Parámetros de los paquetes IP, tiempo de vida.
SRC_ADDR
: la dirección IP de la dirección de origen.
SRC_PORT
: El puerto de la dirección de origen.
SRC_MAC
: dirección MAC de la dirección de origen.
IDLE
: estado inactivo, el inicio es alto y entra en el estado MAKE_IP.
MAKE_IP
: Genera paquetes de datos IP e ingresa al estado MAKE_SUM.
MAKE_SUM
: Calcule la suma de verificación del encabezado del paquete IP e ingrese al estado SEND_PRE una vez completado el cálculo.
SEND_PRE
: envía 7 códigos de preámbulo y 1 código de inicio. Luego ingrese el estado SEND_MAC.
SEND_MAC
: envía la MAC de destino, la MAC de origen y el tipo de paquete IP, y luego ingresa al estado SEND_HEADER.
SEND_HEADER
: envía el encabezado de datos IP y el encabezado de datos UDP, y luego ingresa al estado SEND_DATA.
SEND_DATA
: envía datos válidos e ingresa al estado SEND_CRC después del envío.
SEND_CRC
: envía datos CRC e ingresa al estado IDLE_CODE después del envío.
IDLE_CODE
: envía 12 códigos inactivos, un requisito para los paquetes de datos Ethernet. Volver al estado IDLE después de enviar
Para cumplir con los requisitos de temporización de 125 MHz, los códigos de estas dos partes principales se han modificado tanto como sea posible. Por ejemplo, en udp_send, al enviar encabezados de datos y MAC, se utiliza una máquina de estado para enviar los datos de bits correspondientes. al valor del contador Lo he probado antes enviando directamente los ocho bits superiores y luego cambiando continuamente los datos no enviados a los ocho bits superiores, pero este método no puede cumplir con los requisitos de tiempo de 125 MHz, por lo que se cambió al actual. método. Otro ejemplo es calcular la suma de verificación del encabezado. El proceso de cálculo se divide en varios pasos para calcular, lo que también reduce efectivamente el número total de violaciones de tiempo.
Pero aun así, todavía hay algunas señales que no cumplen con los requisitos de tiempo, y el informe de tiempo producirá una ruta de tiempo de aproximadamente 1ns negativos.
Continuará, a la espera de rellenar los huecos. . .
Artículos para llenar pozos (Explorando la red Gigabit) 1. Comprender la estructura completa de la trama Ethernet (Explorando la red Gigabit) 2. Esfuerzos para garantizar el margen de tiempo de los circuitos digitales