Эта программа состоит из нескольких файлов verilog, включая все связанные файлы в папке hdl и некоторые необходимые IP-ядра.
Введение в файловые функции
crc.v
: в основном используется при отправке UDP для расчета значения CRC UDP-пакетов.
ethernet.v
: инкапсуляция файлов udp_send.v и udp_receive.v.
ethernet_top.v
: образец файла верхнего уровня всего проекта, который показывает только, как вызывать файл и другие связанные файлы ядра IP.
udp_receive.v
: отвечает за процесс обработки приема udp.
udp_send.v
: отвечает за процесс отправки udp.
clk
: основные часы принимающего модуля.
rst_n
: получает сигнал глобального сброса модуля.
rx_data_len
: длина udp-пакета полученных данных, которая является параметром udp-заголовка.
rx_total_len
: длина полученного IP-пакета данных, который является параметром заголовка IP-данных.
update
: при получении нового пакета UDP это значение будет повышено на один цикл.
ip_header
: весь полученный заголовок пакета IP-данных поддерживает только 160-битный заголовок IP-данных.
udp_header
: весь полученный заголовок данных UDP поддерживает только 64-битный заголовок данных UDP.
mac
: весь полученный MAC-пакет, включая MAC-адрес назначения, MAC-адрес источника и идентификацию типа IP-пакета.
data_o
: Получены действительные данные.
src_mac
: MAC-адрес источника пакета.
src_addr
: IP-адрес источника пакета данных.
src_port
: адрес исходного порта пакета данных.
DF
: параметр IP-пакета данных, 0 означает, что пакет данных может быть фрагментирован, 1 означает, что он не может быть фрагментирован.
MF
: параметр IP-пакета, 1 означает, что фрагменты еще есть, 0 означает, что это последний фрагмент.
e_rxdv
: управляющий ввод-вывод RTL8211. Когда он высокий, это означает, что полученные данные действительны.
rxd
: получение данных ввода-вывода RTL8211.
CAN_RECEIVE_BROADCAST
: поддерживать ли получение широковещательных пакетов данных, то есть пакетов данных с MAC-адресом FFFFFFFFFFFF.
DST_ADDR
: установите IP-адрес адреса назначения, который является адресом сетевой карты RTL8211.
DST_PORT
: установите адрес порта адреса назначения, который является портом RTL8211.
DST_MAC
: установите MAC-адрес адреса назначения, который является MAC-адресом RTL8211.
IDLE
: состояние ожидания, пока получена преамбула, он переходит в состояние R_PRE.
R_PRE
: Получить преамбулу. После получения семи преамбул и одного стартового бита войдите в состояние R_MAC.
R_MAC
: получение статуса данных MAC, вход в состояние R_HEADER после завершения приема.
R_HEADER
: Получите заголовок данных IP и заголовок данных UDP и войдите в состояние R_DATA после получения.
R_DATA
: получите действительные данные UDP, после получения введите R_FINISH.
R_FINISH
: Возврат в состояние IDLE.
clk
, сигналы rst_n
такие же, как указано выше;
data_i
: данные, которые необходимо отправить. Когда tx_dv высокий, данные, которые необходимо отправить, передаются в пакет данных UDP через этот порт.
tx_data_len
: длина отправляемых данных, параметры UDP-пакета.
crc
: код проверки CRC всего пакета данных Ethernet, зарезервированный для проверки данных.
crcen
: сигнал включения модуля crc, который можно рассчитать только для модуля проверки высокого crc.
crcrst
: сигнал сброса модуля crc, который сбрасывает тестовый модуль с высоким crc.
start
: Стартовый сигнал модуля отправки UDP, который является началом отправки кадра для модуля высокой скорости.
busy
: сигнал занятости модуля отправки UDP. Этот сигнал имеет высокий уровень, когда модуль находится в процессе формирования кадра и отправки.
tx_dv
: командный сигнал модуля отправки UDP, информирующий текущий модуль UDP о том, что данные могут быть отправлены, пожалуйста, отправьте данные, которые необходимо отправить.
dst_mac
: MAC-адрес адреса назначения.
dst_addr
: IP-адрес адреса назначения.
dst_port
: адрес порта адреса назначения.
DF
, MF
такие же, как указано выше.
tx_en
: сигнал разрешения передачи RTL8211. Когда он высокий, данные передачи действительны.
txer
: сигнал ошибки отправки RTL8211.
txd
: RTL8211 отправляет данные ввода-вывода.
IP_HEADER_LEN
: длина IP-пакета данных. Значение по умолчанию подходит и не требует изменения.
TTL
: Параметры IP-пакетов, время жизни.
SRC_ADDR
: IP-адрес исходного адреса.
SRC_PORT
: порт исходного адреса.
SRC_MAC
: MAC-адрес адреса источника.
IDLE
: состояние ожидания, начало высокого уровня и переход в состояние MAKE_IP.
MAKE_IP
: генерировать пакеты IP-данных и переходить в состояние MAKE_SUM.
MAKE_SUM
: вычисляет контрольную сумму заголовка IP-пакета и переходит в состояние SEND_PRE после завершения расчета.
SEND_PRE
: отправить 7 кодов преамбулы и 1 стартовый код. Затем войдите в состояние SEND_MAC.
SEND_MAC
: отправьте MAC-адрес назначения, MAC-адрес источника и тип IP-пакета, а затем войдите в состояние SEND_HEADER.
SEND_HEADER
: отправьте заголовок данных IP и заголовок данных UDP, а затем войдите в состояние SEND_DATA.
SEND_DATA
: отправьте действительные данные и войдите в состояние SEND_CRC после отправки.
SEND_CRC
: отправить данные CRC и войти в состояние IDLE_CODE после отправки.
IDLE_CODE
: отправьте 12 кодов простоя, что является требованием для пакетов данных Ethernet. Возврат в состояние IDLE после отправки
Чтобы соответствовать требованиям синхронизации 125 МГц, коды этих двух частей ядра были максимально изменены. Например, в udp_send при отправке заголовков MAC и данных используется конечный автомат для отправки соответствующих битовых данных. на значение счетчика. Я пробовал это раньше, отправляя старшие восемь бит напрямую, а затем непрерывно сдвигая неотправленные данные к старшим восьми битам, но этот метод не может соответствовать требованиям синхронизации 125 МГц, поэтому он был изменен на текущий. метод. Другой пример — вычисление контрольной суммы заголовка. Процесс расчета разделен на несколько этапов, что также эффективно снижает общее количество нарушений синхронизации.
Но даже в этом случае все еще существуют некоторые сигналы, которые не соответствуют требованиям синхронизации, и отчет о синхронизации будет отображать путь синхронизации около отрицательной 1 нс.
Продолжение следует, ждем заполнения дыр. . .
Статьи по заполнению ям (Изучение гигабитной сети) 1. Понимание всей структуры кадра Ethernet (Изучение гигабитной сети) 2. Усилия по обеспечению временного запаса цифровых цепей