이 프로그램은 hdl 폴더의 모든 관련 파일과 일부 필요한 IP 코어를 포함하여 여러 Verilog 파일로 구성됩니다.
파일 기능 소개
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 및 IP 패킷 유형 식별을 포함하여 수신된 전체 MAC 패킷입니다.
data_o
: 유효한 데이터가 수신되었습니다.
src_mac
: 패킷의 소스 MAC 주소입니다.
src_addr
: 데이터 패킷의 소스 IP 주소입니다.
src_port
: 데이터 패킷의 소스 포트 주소입니다.
DF
: IP 데이터 패킷의 매개변수입니다. 0은 데이터 패킷이 조각화될 수 있음을 의미하고, 1은 조각화될 수 없음을 의미합니다.
MF
: IP 패킷의 매개변수입니다. 1은 아직 조각이 있음을 의미하고, 0은 이것이 마지막 조각임을 의미합니다.
e_rxdv
: RTL8211의 제어 IO가 높으면 수신된 데이터가 유효하다는 의미입니다.
rxd
: RTL8211의 데이터 IO를 수신합니다.
CAN_RECEIVE_BROADCAST
: 브로드캐스트 데이터 패킷, 즉 MAC 주소가 FFFFFFFFFFFF인 데이터 패킷 수신을 지원할지 여부입니다.
DST_ADDR
: 대상 주소의 IP 주소를 설정합니다. 이는 RTL8211의 네트워크 카드 주소입니다.
DST_PORT
: 목적지 주소의 포트 주소를 설정하는데, 이는 RTL8211의 포트입니다.
DST_MAC
: 대상 주소의 MAC 주소를 설정하는데, 이는 RTL8211의 MAC 주소입니다.
IDLE
: 유휴 상태, 프리앰블이 수신되는 한 R_PRE 상태로 들어갑니다.
R_PRE
: 프리앰블 7개와 시작 비트 데이터 1개를 수신한 후 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 검사 코드입니다.
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의 전송 데이터 IO입니다.
IP_HEADER_LEN
: IP 데이터 패킷의 길이는 기본값이며 변경할 필요가 없습니다.
TTL
: IP 패킷의 매개변수, TTL(Time to Live).
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개의 유휴 코드를 보냅니다. 전송 후 IDLE 상태로 복귀
125Mhz의 타이밍 요구 사항을 충족하기 위해 이 두 핵심 부분의 코드를 최대한 수정했습니다. 예를 들어 udp_send에서는 MAC 및 데이터 헤더를 보낼 때 상태 머신을 사용하여 그에 따라 해당 비트 데이터를 보냅니다. 이전에 상위 8비트를 직접 전송한 후 전송되지 않은 데이터를 상위 8비트로 계속 이동하는 방법을 시도했지만 이 방법은 125Mhz의 타이밍 요구 사항을 충족할 수 없어 현재로 변경되었습니다. 방법. 또 다른 예는 헤더 체크섬을 계산하는 것입니다. 계산 프로세스는 여러 단계로 나누어 계산되므로 총 타이밍 위반 횟수도 효과적으로 줄어듭니다.
그러나 그럼에도 불구하고 여전히 타이밍 요구 사항을 충족하지 않는 일부 신호가 있으며 타이밍 보고서는 약 -1ns의 타이밍 경로를 생성합니다.
계속해서 구멍을 메우기를 기다리고 있습니다. . .
구덩이 채우기 기사(기가비트 네트워크 탐구) 1. 이더넷 프레임의 전체 구조 이해(기가비트 네트워크 탐구) 2. 디지털 회로의 타이밍 마진 확보를 위한 노력