Este programa consiste em vários arquivos verilog, incluindo todos os arquivos relacionados na pasta hdl e alguns núcleos IP necessários.
Introdução às funções de arquivo
crc.v
: usado principalmente ao enviar UDP para calcular o valor CRC de pacotes UDP.
ethernet.v
: encapsulamento de arquivos udp_send.v e udp_receive.v.
ethernet_top.v
: O arquivo de amostra de nível superior de todo o projeto, que mostra apenas como chamar o arquivo e outros arquivos principais IP relacionados.
udp_receive.v
: Responsável pelo processo de processamento de recebimento do udp.
udp_send.v
: Responsável pelo processo de envio do udp.
clk
: O relógio principal do módulo receptor.
rst_n
: Recebe o sinal de reset global do módulo.
rx_data_len
: O comprimento do pacote udp de dados recebidos, que é um parâmetro do cabeçalho udp.
rx_total_len
: O comprimento do pacote de dados IP recebido, que é o parâmetro do cabeçalho de dados IP.
update
: quando um novo pacote UDP é recebido, esse valor será elevado por um ciclo.
ip_header
: Todo o cabeçalho do pacote de dados IP recebido suporta apenas cabeçalho de dados IP de 160 bits.
udp_header
: Todo o cabeçalho de dados UDP recebido suporta apenas cabeçalho de dados UDP de 64 bits.
mac
: Todo o pacote MAC recebido, incluindo MAC de destino, MAC de origem e identificação do tipo de pacote IP.
data_o
: dados válidos recebidos.
src_mac
: Endereço MAC de origem do pacote.
src_addr
: Endereço IP de origem do pacote de dados.
src_port
: Endereço da porta de origem do pacote de dados.
DF
: Parâmetro do pacote de dados IP, 0 significa que o pacote de dados pode ser fragmentado, 1 significa que não pode ser fragmentado.
MF
: Parâmetro do pacote IP, 1 significa que ainda existem fragmentos, 0 significa que este é o último fragmento.
e_rxdv
: Controle IO de RTL8211 Quando está alto, significa que os dados recebidos são válidos.
rxd
: Recebe dados IO de RTL8211.
CAN_RECEIVE_BROADCAST
: Suporta o recebimento de pacotes de dados de transmissão, ou seja, pacotes de dados com endereço MAC FFFFFFFFFFFF.
DST_ADDR
: Defina o endereço IP do endereço de destino, que é o endereço da placa de rede RTL8211.
DST_PORT
: Defina o endereço da porta do endereço de destino, que é a porta do RTL8211.
DST_MAC
: Defina o endereço MAC do endereço de destino, que é o endereço MAC do RTL8211.
IDLE
: Estado inativo, desde que o preâmbulo seja recebido, ele entra no estado R_PRE.
R_PRE
: Recebe preâmbulo Depois de receber 7 preâmbulos e um dado de bit inicial, entre no estado R_MAC.
R_MAC
: Recebe o status dos dados MAC, entra no estado R_HEADER após a conclusão da recepção.
R_HEADER
: Recebe cabeçalho de dados IP e cabeçalho de dados UDP e entra no estado R_DATA após o recebimento.
R_DATA
: Receba dados UDP válidos, insira R_FINISH após o recebimento.
R_FINISH
: Retorna ao status IDLE.
clk
, os sinais rst_n
são como acima;
data_i
: Os dados que precisam ser enviados Quando tx_dv está alto, os dados que precisam ser enviados são transmitidos para o pacote de dados UDP por meio desta porta.
tx_data_len
: O comprimento dos dados enviados, parâmetros do pacote UDP.
crc
: Código de verificação CRC de todo o pacote de dados Ethernet, reservado para verificação de dados.
crcen
: O sinal de habilitação do módulo CRC, que só pode ser calculado para o módulo de verificação de CRC alto.
crcrst
: O sinal de reinicialização do módulo CRC, que reinicia o módulo de teste de CRC alto.
start
: O sinal de início do módulo de envio UDP, que é o início do envio de quadros para o módulo de alto acionamento.
busy
: O sinal de ocupado do módulo de envio UDP. Este sinal é elevado quando o módulo está em processo de enquadramento e envio.
tx_dv
: Sinal de instrução do módulo emissor UDP, informando ao módulo UDP atual que os dados podem ser enviados, envie os dados que precisam ser enviados.
dst_mac
: endereço MAC do endereço de destino.
dst_addr
: endereço IP do endereço de destino.
dst_port
: O endereço da porta do endereço de destino.
DF
, MF
são como acima.
tx_en
: O sinal de habilitação de transmissão do RTL8211 quando está alto, os dados de transmissão são válidos.
txer
: sinal de erro de envio do RTL8211.
txd
: IO de envio de dados do RTL8211.
IP_HEADER_LEN
: O comprimento do pacote de dados IP. O padrão é bom e não precisa ser alterado.
TTL
: Parâmetros de pacotes IP, tempo de vida.
SRC_ADDR
: O endereço IP do endereço de origem.
SRC_PORT
: A porta do endereço de origem.
SRC_MAC
: endereço MAC do endereço de origem.
IDLE
: estado inativo, início é alto e entra no estado MAKE_IP.
MAKE_IP
: Gere pacotes de dados IP e entre no estado MAKE_SUM.
MAKE_SUM
: Calcule a soma de verificação do cabeçalho do pacote IP e insira o estado SEND_PRE após a conclusão do cálculo.
SEND_PRE
: Envie 7 códigos de preâmbulo e 1 código de início. Em seguida, insira o estado SEND_MAC.
SEND_MAC
: Envie o MAC de destino, o MAC de origem e o tipo de pacote IP e, em seguida, insira o estado SEND_HEADER.
SEND_HEADER
: envia o cabeçalho de dados IP e o cabeçalho de dados UDP e, em seguida, entra no estado SEND_DATA.
SEND_DATA
: Envie dados válidos e insira o estado SEND_CRC após o envio.
SEND_CRC
: envia dados CRC e entra no estado IDLE_CODE após o envio.
IDLE_CODE
: Envia 12 códigos inativos, um requisito para pacotes de dados Ethernet. Retornar ao estado IDLE após o envio
Para atender aos requisitos de tempo de 125 MHz, os códigos dessas duas partes principais foram modificados tanto quanto possível. Por exemplo, em udp_send, ao enviar cabeçalhos MAC e de dados, uma máquina de estado é usada para enviar os dados de bits correspondentes de acordo. para o valor do contador, eu tentei antes, enviando diretamente os oito bits superiores e, em seguida, mudando continuamente os dados não enviados para os oito bits superiores, mas este método não pode atender aos requisitos de tempo de 125 MHz, então foi alterado para o atual. método. Outro exemplo é o cálculo da soma de verificação do cabeçalho. O processo de cálculo é dividido em várias etapas de cálculo, o que também reduz efetivamente o número total de violações de tempo.
Mas mesmo assim, ainda existem alguns sinais que não atendem aos requisitos de tempo, e o relatório de tempo produzirá um caminho de tempo de cerca de 1ns negativo.
Continua, esperando para preencher os buracos. . .
Artigos de preenchimento de poços (Explorando a Rede Gigabit) 1. Compreender toda a estrutura do quadro Ethernet (Explorando a Rede Gigabit) 2. Esforços para garantir a margem de temporização dos circuitos digitais