Program ini terdiri dari beberapa file Verilog, termasuk semua file terkait di folder hdl dan beberapa inti IP yang diperlukan.
Pengenalan fungsi file
crc.v
: Terutama digunakan saat mengirim UDP untuk menghitung nilai CRC paket UDP.
ethernet.v
: Enkapsulasi file udp_send.v dan udp_receive.v.
ethernet_top.v
: Contoh file tingkat atas dari keseluruhan proyek, yang hanya menunjukkan cara memanggil file dan file inti ip terkait lainnya.
udp_receive.v
: Bertanggung jawab atas proses pemrosesan penerimaan udp.
udp_send.v
: Bertanggung jawab atas proses pengiriman udp.
clk
: Jam utama modul penerima.
rst_n
: Menerima sinyal reset global modul.
rx_data_len
: Panjang paket udp dari data yang diterima, yang merupakan parameter header udp.
rx_total_len
: Panjang paket data ip yang diterima, yang merupakan parameter header data ip.
update
: Ketika paket UDP baru diterima, nilai ini akan ditarik tinggi selama satu siklus.
ip_header
: Seluruh header paket data IP yang diterima, hanya mendukung header data IP 160-bit.
udp_header
: Seluruh header data UDP yang diterima, hanya mendukung header data UDP 64-bit.
mac
: Seluruh paket MAC yang diterima, termasuk MAC tujuan, MAC sumber, dan identifikasi jenis paket IP.
data_o
: Data valid yang diterima.
src_mac
: Alamat MAC sumber paket.
src_addr
: Alamat IP sumber paket data.
src_port
: Alamat port sumber paket data.
DF
: Parameter paket data IP, 0 berarti paket data dapat terfragmentasi, 1 berarti tidak dapat terfragmentasi.
MF
: Parameter paket IP, 1 berarti masih ada fragmen, 0 berarti ini adalah fragmen terakhir.
e_rxdv
: Kontrol IO RTL8211. Jika high berarti data yang diterima valid.
rxd
: Menerima data IO dari RTL8211.
CAN_RECEIVE_BROADCAST
: Apakah mendukung penerimaan paket data siaran, yaitu paket data dengan alamat MAC FFFFFFFFFFFF.
DST_ADDR
: Tetapkan alamat IP dari alamat tujuan, yaitu alamat kartu jaringan RTL8211.
DST_PORT
: Tetapkan alamat port dari alamat tujuan, yaitu port RTL8211.
DST_MAC
: Tetapkan alamat MAC dari alamat tujuan, yaitu alamat MAC RTL8211.
IDLE
: Keadaan idle, selama pembukaan diterima maka masuk ke keadaan R_PRE.
R_PRE
: Menerima pembukaan. Setelah menerima 7 pembukaan dan satu data bit awal, masukkan status R_MAC.
R_MAC
: Terima status data MAC, masukkan status R_HEADER setelah penerimaan selesai.
R_HEADER
: Terima header data IP dan header data UDP, dan masukkan status R_DATA setelah menerima.
R_DATA
: Terima data valid UDP, masukkan R_FINISH setelah menerima.
R_FINISH
: Kembali ke status IDLE.
clk
, sinyal rst_n
seperti di atas;
data_i
: Data yang perlu dikirim keluar. Ketika tx_dv tinggi, data yang perlu dikirim dikirimkan ke paket data UDP melalui port ini.
tx_data_len
: Panjang data yang dikirim, parameter paket UDP.
crc
: Kode pemeriksaan CRC dari seluruh paket data Ethernet, dicadangkan untuk verifikasi data.
crcen
: Sinyal pengaktifan modul crc, yang hanya dapat dihitung untuk modul pemeriksaan crc tinggi.
crcrst
: Sinyal reset modul crc, yang mengatur ulang modul pengujian crc tinggi.
start
: Sinyal awal modul pengiriman UDP, yang merupakan awal pengiriman frame untuk modul high-drive.
busy
: Sinyal sibuk dari modul pengirim UDP. Sinyal ini ditarik tinggi ketika modul sedang dalam proses pembingkaian dan pengiriman.
tx_dv
: Sinyal instruksi modul pengiriman UDP, menginformasikan modul UDP saat ini bahwa data dapat dikirim, silakan kirimkan data yang perlu dikirim.
dst_mac
: Alamat MAC dari alamat tujuan.
dst_addr
: Alamat IP dari alamat tujuan.
dst_port
: Alamat port dari alamat tujuan.
DF
, MF
seperti di atas.
tx_en
: Sinyal pengaktifan transmisi RTL8211. Jika tinggi, data transmisi valid.
txer
: Sinyal kesalahan pengiriman RTL8211.
txd
: RTL8211 mengirimkan data IO.
IP_HEADER_LEN
: Panjang paket data ip. Defaultnya baik-baik saja dan tidak perlu diubah.
TTL
: Parameter paket IP, waktu aktif.
SRC_ADDR
: Alamat IP dari alamat sumber.
SRC_PORT
: Port alamat sumber.
SRC_MAC
: Alamat MAC dari alamat sumber.
IDLE
: status idle, start tinggi dan memasuki status MAKE_IP.
MAKE_IP
: Hasilkan paket data IP dan masukkan status MAKE_SUM.
MAKE_SUM
: Hitung checksum header paket IP, dan masukkan status SEND_PRE setelah penghitungan selesai.
SEND_PRE
: Kirim 7 kode pembukaan dan 1 kode awal. Kemudian masukkan status SEND_MAC.
SEND_MAC
: Kirim MAC tujuan, MAC sumber, dan jenis paket IP, lalu masukkan status SEND_HEADER.
SEND_HEADER
: Kirim header data IP dan header data UDP, lalu masukkan status SEND_DATA.
SEND_DATA
: Kirim data yang valid dan masukkan status SEND_CRC setelah pengiriman.
SEND_CRC
: Kirim data CRC dan masukkan status IDLE_CODE setelah pengiriman.
IDLE_CODE
: Kirim 12 kode idle, yang merupakan persyaratan untuk paket data Ethernet. Kembali ke status IDLE setelah pengiriman
Untuk memenuhi persyaratan waktu 125Mhz, kode dari kedua bagian inti ini telah dimodifikasi sebanyak mungkin, misalnya di udp_send, saat mengirim MAC dan header data, mesin negara digunakan untuk mengirim data bit yang sesuai. ke nilai counter. Saya sudah mencobanya sebelumnya. Dengan langsung mengirimkan delapan bit teratas, lalu terus menerus menggeser data yang belum terkirim ke delapan bit teratas, namun cara ini tidak dapat memenuhi persyaratan timing 125Mhz, sehingga diubah ke yang sekarang. metode. Contoh lainnya adalah menghitung checksum header. Proses perhitungan dibagi menjadi beberapa langkah untuk menghitung, yang juga secara efektif mengurangi jumlah pelanggaran waktu.
Namun demikian, masih ada beberapa sinyal yang tidak memenuhi persyaratan waktu, dan laporan waktu akan menghasilkan jalur waktu sekitar negatif 1ns.
Dilanjutkan menunggu pengisian lubang. . .
Artikel pengisian lubang (Menjelajahi Jaringan Gigabit) 1. Memahami keseluruhan struktur frame Ethernet (Menjelajahi Jaringan Gigabit) 2. Upaya memastikan timing margin rangkaian digital