يتكون هذا البرنامج من ملفات 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 المستلمة بالكامل، يدعم فقط رأس بيانات IP 160 بت.
udp_header
: رأس بيانات UDP المستلم بالكامل، يدعم فقط رأس بيانات UDP 64 بت.
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
: التحكم في IO لـ 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
: تلقي التمهيد بعد تلقي 7 تمهيدات وبيانات بتة بداية واحدة، أدخل حالة R_MAC.
R_MAC
: تلقي حالة بيانات MAC، أدخل حالة R_HEADER بعد الانتهاء من الاستقبال.
R_HEADER
: تلقي رأس بيانات IP ورأس بيانات UDP، ثم أدخل حالة R_DATA بعد الاستلام.
R_DATA
: تلقي بيانات UDP صالحة، أدخل R_FINISH بعد الاستلام.
R_FINISH
: العودة إلى حالة الخمول.
إشارات 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 بإرسال البيانات IO.
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 رموز تمهيدية ورمز بدء واحد. ثم أدخل حالة 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. العودة إلى حالة الخمول بعد الإرسال
من أجل تلبية متطلبات التوقيت البالغة 125 ميجا هرتز، تم تعديل رموز هذين الجزأين الأساسيين قدر الإمكان، على سبيل المثال، في udp_send، عند إرسال MAC ورؤوس البيانات، يتم استخدام آلة الحالة لإرسال بيانات البت المقابلة وفقًا لذلك. لقد قمت بتجربتها من قبل عن طريق إرسال البتات الثمانية العليا مباشرة، ثم تحويل البيانات غير المرسلة بشكل مستمر إلى البتات الثمانية العليا، لكن هذه الطريقة لا يمكنها تلبية متطلبات التوقيت البالغة 125 ميجا هرتز، لذلك تم تغييرها إلى القيمة الحالية. طريقة. مثال آخر هو حساب المجموع الاختباري للرأس. تنقسم عملية الحساب إلى عدة خطوات للحساب، مما يقلل أيضًا بشكل فعال من إجمالي عدد انتهاكات التوقيت.
ولكن على الرغم من ذلك، لا تزال هناك بعض الإشارات التي لا تلبي متطلبات التوقيت، وسينتج تقرير التوقيت مسار توقيت يبلغ حوالي سالب 1ns.
للمتابعة، في انتظار ملء الثقوب. . .
مقالات ملء الحفرة (استكشاف شبكة جيجابت) 1. فهم البنية الكاملة لإطار Ethernet (استكشاف شبكة جيجابت) 2. الجهود المبذولة لضمان هامش توقيت الدوائر الرقمية