PCI Express في سلسلة FPGA من Intel V: أساسيات الواجهة والميزات الأساسية للأجهزة

المقدمة


واجهة PCI Express أو PCIe ، المألوفة للكثيرين ، كانت متاحة لمطوري نظام FPGA حتى عندما كانت في بداية انتشارها في التكنولوجيا الرقمية. في هذا الوقت ، كان هناك حل يتم فيه توصيل نواة البرمجيات بدائرة خارجية دقيقة على المستوى المادي [ 5 ]. وقد جعل هذا من الممكن إنشاء خط PCIe أحادي المسار بسرعة 2.5 غيغابايت في الثانية. علاوة على ذلك ، وبفضل تطوير التقنيات ، انتقلت الطبقة المادية للواجهة إلى مجموعات أجهزة PCIe داخل FPGAs نفسها ؛ ارتفع عدد القنوات الممكنة إلى 8 ، وفي عدد من الدوائر المصغرة الجديدة - إلى 16 ؛ باتباع المعايير الحديثة ، نمت معدلات نقل البيانات المحتملة.

في الوقت نفسه ، لا يزال من الصعب العثور على مواد مساعدة للعمل مع نوى الأجهزة من FPGAs الحديثة في مصادر باللغة الروسية ؛ لا يتوفر الكثير من المعلومات على واجهة PCIe نفسها. يشير دليل نوى PCI Express للأجهزة إلى أن المطور أصبح بالفعل على دراية بالمعيار ويفهم أساسيات نقل البيانات بين الجهاز والكمبيوتر الشخصي (PC). ومع ذلك ، فإن وفرة المعلومات في معيار PCIe نفسه لا تفهم على الفور الخطوات التي يجب اتخاذها لنقل البيانات بنجاح من الجهاز إلى ذاكرة الكمبيوتر أو العكس. للحصول على صورة أكثر اكتمالاً ، يجب جمع جزء كبير من المعلومات شيئًا فشيئًا من مصادر مختلفة. بالنسبة لمطوري أنظمة Intel FPGA ، تكون الصعوبة أيضًاأن معظم المواد والمقالات المتاحة تصف العمل مع نوى أجهزة Xilinx FPGA.

في هذه المقالة ، سيحاول المؤلف التحدث عما يحتاج مصمم نظام FPGA إلى معرفته للعمل مع واجهة PCI Express ؛ ستدرس ميزات العمل مع نوى الأجهزة PCI Express FPGAs من V-series من Intel في إصدار Avalon-ST.

مستويات PCIe وأنواع الحزم


على الرغم من حقيقة أن PCI Express غالبًا ما يطلق عليه ناقل ، في الواقع ، هذه الواجهة عبارة عن شبكة من الأجهزة المتصلة بمجموعات من القنوات المزدوجة التسلسلية. تتكون شبكة PCI Express نفسها من عدة عقد رئيسية: الجذر (الجذر) ونقطة النهاية (نقطة النهاية) والموجه (التبديل) (الشكل 1). لنقل البيانات بين جهازين فقط ، يكفي أن يكون لديك الجذر ونقطة النهاية. في حالة أجهزة الكمبيوتر الحديثة ، يقع جذر الشبكة على ركيزة واحدة مع نوى المعالج المركزي. بغض النظر عن مكان وجود جذر PCIe ، فإنه يرتبط بذاكرة النظام.


الشكل 1 - شبكة PCIe

ينقسم بروتوكول نقل البيانات PCIe إلى ثلاث طبقات: طبقة المعاملات ، وطبقة ارتباط البيانات ، والطبقة المادية. يتم إرسال بيانات الواجهة في شكل حزم. يظهر الشكل المعمم للحزم في الشكل 2.


الشكل 2 - نظرة عامة عن حزم PCIe

على مستوى المعاملة ، تتكون أي حزمة (TLP) من رأس على الأقل. اعتمادًا على نوع الحزمة ، قد يتبع الرأس بيانات - المحتويات المفيدة للحزمة. يمكن أيضًا إضافة المجموع الاختباري الإضافي في نهاية الحزمة. توجد الأنواع الرئيسية التالية من الحزم على مستوى المعاملة (الجدول 1):

الجدول 1 - أنواع الحزم على مستوى المعاملة
رقم ص.عرض الحزمةاسم نوع العبوة حسب المواصفات
1طلب قراءة الذاكرةطلب قراءة الذاكرة
2طلب كتابة الذاكرةطلب كتابة الذاكرة
3طلب قراءة مساحة الإدخال / الإخراجطلب قراءة I / O
4طلب كتابة مسافة الإدخال / الإخراجطلب كتابة I / O
5اقرأ طلب التكوينطلب قراءة التكوين
6اكتب طلب التكوينطلب كتابة التكوين
7استجابة القراءةإكمال
8رسالةرسالة

في طبقة الوصلة ، تتم إضافة رقم تسلسل الحزمة ومجموع المجموع الاختباري للوصلة إلى كل حزمة على مستوى المعاملة. تشكل طبقة ارتباط البيانات أيضًا أنواع الحزم الخاصة بها (DLLP) ، والتي تتضمن (الجدول 2):

الجدول 2 - أنواع حزم ارتباط البيانات
رقم ص.عرض الحزمةاسم نوع العبوة حسب المواصفات
1تأكيد حزمة مستوى المعاملةTLP Ack
2رفض حزمة مستوى المعاملةTLP Nack
3إدارة الطاقةإدارة الطاقة
4التحكم في تدفق البياناتالتحكم في التدفق

وأخيرًا ، تكمل الطبقة المادية الحزم برموز بداية ونهاية الحزم ، والتي يتم استعارتها من معيار IEEE 802.3. بالنسبة للرزم على مستوى المعاملة ، يُستخدم الرمزان K27.7 و K29.7 على التوالي ؛ لحزم وصلة البيانات ، والرموز K28.2 و K29.7.
عند العمل مع نوى أجهزة FPGA ، يحتاج المطور إلى تكوين حزم على مستوى المعاملة فقط ؛ تتكون حزم القناة والطبقة المادية من كتل النواة.

توجيه الحزمة على مستوى المعاملة


في المجموع ، يمكن أن تصل أنواع مختلفة من الحزم من المرسل إلى المتلقي بثلاث طرق:

  • التوجيه إلى العنوان ؛
  • توجيه الهوية
  • التوجيه غير المباشر.

ترد العلاقة بين طريقة التوجيه ونوع رزمة مستوى المعاملة في الجدول 3.

الجدول 3 - المراسلات بين طريقة التوجيه ونوع الرزمة
ص
1.
I/O I/O
2.
ID.

3ID

.


تحتوي كل نقطة نهاية على مساحة التكوين الخاصة بها ، حيث توجد سجلات تعليمات وحالة مختلفة. من بينها سجل العنوان الأساسي أو BAR. عند تهيئة نقاط النهاية ، يقوم BIOS أو نظام التشغيل بمسح شريط نقاط النهاية لتحديد حجم الذاكرة وتحت أي مساحة مطلوبة لكل نقطة نهاية. ثم ، في كل BAR نشط ، تتم كتابة عنوان البداية للجزء المخصص من ذاكرة النظام. ونتيجة لذلك ، تكتسب نقطة النهاية عنوانًا حيث يمكن إرسال الطلبات المناسبة. عادة ، عند نقطة النهاية ، يتم تشكيل خريطة تسجيل ، ترتبط بمناطق الذاكرة المخصصة.

أيضًا ، تحصل كل نقطة نهاية ، أو بالأحرى ، الجهاز المنطقي بالداخل ، على معرفها الفريد ، والذي يتكون من ثلاثة أجزاء: رقم الناقل ورقم الجهاز ورقم الجهاز المنطقي (الوظيفة).

بهذه الطريقة ، لدى النظام معلومات كافية للتواصل مع نقطة النهاية. ومع ذلك ، فإن إرسال البيانات باستخدام الاستعلامات في BAR له أداء ضعيف. أولاً ، بالنسبة لـ BAR بعرض 32 بت ، يقتصر طول الطلب القابل للاستخدام على كلمة مزدوجة واحدة (DWORD) ؛ لبار 64 بت ، كلمتين مزدوجتين. ثانياً ، يحدث كل طلب بمشاركة المعالج المركزي. لتقليل الحمل على المعالج المركزي ، بالإضافة إلى زيادة حجم كل حزمة ، من الضروري أن تقوم نقطة النهاية بنقل البيانات بشكل مستقل إلى ذاكرة النظام أو منها. للقيام بذلك ، يجب أن تعرف نقطة النهاية في أي عناوين ذاكرة النظام يمكنها كتابة أو قراءة البيانات.

بالنظر إلى ما سبق ، يمكن تمثيل مخطط نقل البيانات العام بين نقطة النهاية وذاكرة النظام على النحو التالي:

  1. يخصص برنامج تشغيل نقطة النهاية المخازن المؤقتة في ذاكرة النظام لكتابة البيانات ؛
  2. يشكل برنامج التشغيل في ذاكرة النظام مجموعة من العناوين وأحجام المخزن المؤقت - واصفات المخزن المؤقت لكتابة البيانات ؛
  3. يكتب برنامج تشغيل نقطة النهاية عنوان مجموعة الواصفات إلى سجلات الجهاز المرتبطة بمناطق BAR ؛
  4. سجلات التحكم في نقل البيانات لبرامج نقطة النهاية المرتبطة بمناطق BAR ؛
  5. ترسل نقطة النهاية طلبًا لقراءة ذاكرة النظام للحصول على مجموعة من الواصفات للكتابة على ذاكرة النظام ؛
  6. ترسل نقطة النهاية طلبات الكتابة إلى ذاكرة النظام وتملأ مخازن التخزين المؤقت ؛
  7. / , , , ;
  8. PCIe.


في المرحلة التي يقوم فيها برنامج التشغيل بتكوين تسجيلات نقطة النهاية ، اعتمادًا على نوع مساحة العنوان المرتبطة بـ BAR ، ستتلقى نقطة النهاية طلب كتابة إلى الذاكرة (الشكل 3) أو طلب كتابة إلى مساحة الإدخال / الإخراج. إذا قام السائق بقراءة سجل أثناء تكوين السجل ، فإن نقطة النهاية تتلقى أيضًا طلبات القراءة المقابلة (الشكل 4).

صورة
الشكل 3 - مثال على طلب للكتابة إلى الذاكرة 1 DW long


الشكل 4 - مثال على طلب القراءة من الذاكرة 1 DW long

على عكس طلبات الكتابة أو القراءة ، فإن طلبات الإدخال / الإخراج لها عدد من القيود. أولاً ، تتطلب كل من طلبات الكتابة والقراءة استجابة من المستلم. هذا يؤدي إلى حقيقة أن معدل نقل البيانات باستخدام الطلبات إلى مساحة الإدخال / الإخراج يصبح أقل بكثير مما يسمح به النطاق الترددي النظري لـ PCIe. ثانيًا ، يقتصر عنوان طلبات مساحة الإدخال / الإخراج على 32 بت ، مما لا يسمح بالوصول إلى أجزاء من ذاكرة النظام تتجاوز 4 غيغابايت. ثالثًا ، لا يمكن أن تتجاوز طلبات مساحة الإدخال / الإخراج كلمة مزدوجة واحدة ولا يمكنها استخدام قنوات افتراضية متعددة للنقل. لهذه الأسباب ، لن يتم النظر في طلبات الكتابة والقراءة إلى مساحة الإدخال / الإخراج. ومع ذلك،تختلف محتويات الرؤوس الخاصة بكتابة / قراءة الذاكرة ومساحة الإدخال / الإخراج في عدد من الحقول فقط ، وبالتالي ، فإن هياكل الحزم الموضحة في الأشكال 3 ، 4 تنطبق أيضًا على الطلبات في مساحة الإدخال / الإخراج.

عندما تتلقى نقطة نهاية أو جذر PCIe طلبًا لقراءة الذاكرة أو مساحة الإدخال / الإخراج ، يجب أن يرسل الجهاز استجابة. إذا لم يتلق مرسل الطلب ردًا في غضون فترة زمنية معينة ، فسيؤدي ذلك إلى حدوث خطأ في انتظار الرد. إذا لم يتمكن الجهاز لسبب ما من إرسال البيانات المطلوبة ، فيجب عليه إنشاء استجابة خطأ. قد تكون الأسباب المحتملة: لا يدعم المستلم هذا الطلب (طلب غير مدعوم) ؛ المستلم غير جاهز لقبول طلب التكوين وطلبات تكراره لاحقًا (حالة إعادة محاولة طلب التكوين) ، حدث خطأ داخلي ، بسبب عدم قدرة المستلم على الاستجابة للطلب ورفضه (إكمال المحذوف).

يتم عرض تنسيقات استجابة ناجحة لطلب قراءة واستجابة خطأ لطلب غير مدعوم في الأشكال 5 ، 6.


الشكل 5 - مثال على استجابة ناجحة للقراءة


الشكل 6 - مثال على إجابة حول طلب غير مدعوم

بينما تصل نقطة النهاية إلى منطقة ذاكرة ضمن 4 جيجابايت ، لا يختلف تنسيق رؤوس الحزم عن الرؤوس الموضحة في الأشكال 3 ، 4. أو قراءة ذاكرة أكبر من 4 غيغابايت ، يتم استخدام كلمة مزدوجة إضافية مع بتات عالية الترتيب لعنوان الوجهة في الرأس (الشكل 7).


الشكل 7 - مثال لرأس طلب كتابة 128 بايت

، ويعرض في الجدول 4. شرح الأسماء المختصرة لحقول رؤوس الرزم.

الجدول 4 - قائمة الاختصارات لحقول الرؤوس
رقم ص.التعيين الميدانياسم الحقلموعد
1TCفئة المرور - فئة المروريحدد عضوية القناة الافتراضية
2Atrالسمات: , , ID, ID.
3TH‒ TLP Processing Hint, [1..0] .
4TD‒ TLP Digest, .
5EP, .
6AT‒ Address Translation, : , ,
7BE‒ Byte Enable
8PHتلميح معالجة الحزمة - تلميح المعالجةقم بإرشاد مستلم الحزمة حول كيفية استخدام الحزمة ، بالإضافة إلى بنية البيانات
9BCMوجود تغيير في عدد البايتاتيشير إلى ما إذا كان عدد البايتات في الحزمة قد تغير. يمكن فقط للمرسل في وجه جهاز PCI-X تعيين علامة

إذا كانت نقطة النهاية تستخدم المقاطعات للإبلاغ عن حدث ، فيجب أيضًا أن تشكل حزمة مناسبة. في المجموع ، يمكن لـ PCIe استخدام ثلاثة أنواع من المقاطعات:

  • المقاطعات القديمة (المقاطعات القديمة أو INT) ؛
  • الانقطاعات في شكل رسائل (المقاطعات ذات الرسائل المرسلة أو MSI) ؛
  • مقاطعات الرسائل الممتدة (مقاطعة المقاطعات ذات الرسائل الموسعة أو MSI-X).

تُستخدم مقاطعات INT الموروثة للتوافق مع الأنظمة التي لا تدعم مقاطعات الرسائل. في الواقع ، هذا النوع من المقاطعة هو رسالة (حزمة من نوع الرسالة) تحاكي تشغيل خط المقاطعة الفعلي. عند حدث معين ، ترسل نقطة النهاية رسالة إلى جذر PCIe مفادها أنه تم تنشيط مقاطعة INT ، ثم تنتظر الإجراء من معالج المقاطعة. حتى يقوم معالج المقاطعة بالإجراء المحدد ، تكون مقاطعة INT في حالة التنشيط. لا تسمح لك المقاطعات الموروثة بتحديد مصدر الحدث ، مما يجبر معالج المقاطعة على فحص جميع نقاط النهاية بالتسلسل في شجرة PCIe لخدمة هذه المقاطعة. عندما تتم صيانة المقاطعة ، ترسل نقطة النهاية رسالة تفيد بذلكأن مقاطعة INT غير نشطة أكثر. تقوم نوى أجهزة FPGA ، بناء على إشارة من منطق المستخدم ، بإنشاء الرسائل اللازمة لمقاطعات INT بشكل مستقل ، لذلك لن يتم النظر في بنية الحزمة.

إن مقاطعات الرسائل مع نسختها الموسعة هي النوع الأساسي والإلزامي للمقاطعة في PCIe. كلا النوعين من المقاطعات ، في الواقع ، طلب للكتابة إلى ذاكرة النظام بطول كلمة مزدوجة واحدة. الاختلاف عن الطلب العادي هو تخصيص عنوان التسجيل ومحتويات الحزمة لكل جهاز في مرحلة تكوين النظام. في هذه الحالة ، تصبح وحدة تحكم المقاطعة القابلة للبرمجة المتقدمة المحلية (LAPIC) داخل المعالج المركزي هي الوجهة. عند استخدام هذا النوع من المقاطعة ، ليس من الضروري إجراء استطلاع تسلسلي لجميع الأجهزة في شجرة PCIe. علاوة على ذلك ، إذا سمح النظام للجهاز باستخدام العديد من ناقلات المقاطعة ، يمكن أن يرتبط كل ناقل بالحدث الخاص به.يعمل هذا معًا على تقليل وقت المعالج لمعالجة المقاطعات وزيادة الأداء العام للنظام.

تسمح مقاطعات MSI بتكوين ما يصل إلى 32 متجهًا منفصلاً. يعتمد الرقم الدقيق على قدرات نقطة النهاية. في هذه الحالة ، قد يسمح النظام باستخدام جزء فقط من المتجهات. في مرحلة التكوين ، يكتب النظام عنوان المقاطعة والبيانات الأولية للكتابة إلى السجلات الخاصة لمساحة التكوين لنقطة النهاية. تستخدم جميع المقاطعات النشطة نفس العنوان. ولكن لكل متجه ، تغير نقطة النهاية بتات البيانات الأولية. على سبيل المثال ، دع نقطة النهاية تدعم 4 ناقلات متقاطعة كحد أقصى ، ويسمح بجميع المتجهات الأربعة في النظام ، والبيانات الأولية للكتابة هي 0x4970. ثم ، لتكوين المتجه الأول ، تمرر نقطة النهاية البيانات الأولية دون تغيير. بالنسبة للمتجه الثاني ، يقوم الجهاز بتغيير البت الأول وإرسال الرقم 0x4971.بالنسبة إلى المتجهات الثالثة والرابعة ، سيرسل الجهاز الرقمين 0x4972 و 0x4973 على التوالي.

تشكل نوى أجهزة FPGA بشكل مستقل حزمة مع مقاطعة MSI بواسطة إشارة من منطق المستخدم. ومع ذلك ، قبل أن يأمر النواة بإرسال مقاطعة ، يجب أن يوفر منطق المستخدم أيضًا محتويات الحزمة للمتجه المطلوب إلى واجهة kernel خاصة.

تسمح مقاطعات MSI-X بتكوين ما يصل إلى 2048 متجهًا فرديًا. في السجلات المقابلة لمساحة التكوين ، تشير نقطة النهاية إلى أي من مساحات عنوان BAR ومع أي إزاحة من العنوان الأساسي ، يوجد جدول المقاطعة (الشكل 8) وجدول إشارات المقاطعة المعلقة (Pray Bit Array - PBA ، الشكل 9) ، بالإضافة إلى أحجام كل من الجداول. يكتب النظام عنوانًا وبيانات منفصلة للكتابة في كل سطر من جدول المقاطعة ، كما يسمح أو يمنع استخدام ناقلات معينة من خلال الجزء الأول من حقل التحكم في المتجه. بالنسبة لحدث معين ، تقوم نقطة النهاية بتعيين علامة في جدول العلم للمقاطعات المعلقة. إذا لم يتم تعيين قناع لهذا المقاطعة في حقل التحكم في المتجه ، فإن نقطة النهاية ترسل مقاطعة إلى العنوان من جدول المقاطعة بالمحتويات المحددة للرزمة.


الشكل 8 - جدول نواقل المقاطعة MSI-X


الشكل 9 - جدول الإشارات للمقاطعات المعلقة

لا تحتوي نوى أجهزة FPGA على واجهة متخصصة لمقاطعات MSI-X. يجب على المطور نفسه إنشاء جدول مقاطعة في منطق المستخدم وجدول علامات المقاطعات المعلقة. يتم أيضًا إنشاء حزمة مقاطعة بالكامل من قبل المستخدم ويتم نقلها من خلال واجهة kernel العامة جنبًا إلى جنب مع أنواع أخرى من الحزم. يتوافق تنسيق الحزمة في هذه الحالة ، كما سبق ذكره أعلاه ، مع طلب للكتابة على ذاكرة النظام بطول كلمة واحدة مزدوجة.

ميزات نوى الأجهزة PCI Express FPGA V-series من Intel في إصدار Avalon-ST


على الرغم من حقيقة أن نوى أجهزة PCI Express FPGAs من الشركات المصنعة المختلفة تطبق وظائف مماثلة ، فقد تختلف الواجهات الأساسية الفردية أو ترتيب تشغيلها.
تتوفر نوى أجهزة Intel V-Series PCI Express FPGA بنسختين: مع Avalon-MM و Avalon-ST. هذا الأخير ، على الرغم من أنه يتطلب المزيد من الجهد من المطور ، يسمح لك بالحصول على أكبر قدر من النطاق الترددي. لهذا السبب ، لن يتم النظر في نواة بواجهة Avalon-MM.

تصف وثائق PCI Express الأساسية مع واجهة Avalon-ST بتفاصيل كافية معلمات kernel وإشارات الإدخال والإخراج. ومع ذلك ، فإن النواة تحتوي على عدد من الميزات التي يجب على المطور الانتباه إليها.

تتعلق المجموعة الأولى من الميزات بالطرق التي تتيح لك تكوين FPGA في غضون 100 مللي ثانية وفقًا لمتطلبات PCIe. بالإضافة إلى التحميل الموازي لنوع FPP ، يتم تقديم المطور لطرق مثل التكوين عبر البروتوكول (CvP) والوضع المستقل للنواة (الوضع المستقل). يجب أن يتأكد المطور من أن التكوين عبر البروتوكول أو وضع kernel المستقل مدعوم لسرعة PCIe المحددة (معلمة "معدل المسار"). للتكوين عن طريق البروتوكول ، يمكن العثور على المعلومات ذات الصلة في وثائق النواة. في حالة وضع عدم الاتصال ، لا توجد مثل هذه المعلومات ، لذلك تحتاج إلى تجميع المشروع. إذا لم يتم دعم وضع kernel المستقل لسرعة kernel الحالية ، فسينتج Quartus خطأً مناظرًا (الشكل 10).


الشكل 10 - خطأ في تجميع نواة PCIe لوضع غير متصل بالشبكة

إذا كان المطور يخطط لاستخدام التكوين عبر بروتوكول ، فينبغي عليه أيضًا الانتباه إلى نواة FPGA التي يتصل بها موصل PCIe. هذا صحيح بشكل خاص إذا كان المطور لا يستخدم لوحة منتهية ، ولكن جهازه الخاص. في FPGAs مع نوى أجهزة PCIe متعددة ، يسمح نواة واحدة فقط بتمكين CvP. يشار إلى موقع الأساسية مع دعم CvP في وثائق FPGA.
تتعلق المجموعة الثانية من الميزات بواجهة نقل البيانات Avalon-ST نفسها. وهي الواجهة التي يتم استخدامها لنقل الحزم على مستوى المعاملة بين منطق المستخدم والنواة.

على جانب الاستقبال ، تحتوي النواة على إشارتين تسمح للمستخدم بإيقاف استلام الحزم المستلمة مؤقتًا: إشارة rx_st_mask وإشارة rx_st_ready.
باستخدام إشارة rx_st_ready ، يمكن للمطور إيقاف إخراج جميع أنواع الحزم مؤقتًا. ومع ذلك ، إذا قمت بتنشيط هذه الإشارة ، فستوقف النواة إخراج الحزم بعد دورتين فقط من تردد التشغيل. لذلك ، أثناء تنشيط الإشارة ، يجب أن يكون منطق المستخدم جاهزًا لاستقبال كمية إضافية من البيانات. على سبيل المثال ، إذا كان المطور يستخدم مخزنًا مؤقتًا على شكل FIFO ، فعليه تجنب تجاوزات المخزن المؤقت. خلاف ذلك ، سيتم فقدان بعض محتويات الحزمة.

باستخدام الإشارة "rx_st_mask" ، يقوم المطور بتعليق إصدار الطلبات التي يجب إرسال إجابات لها. لا توقف هذه الإشارة أيضًا على الفور إخراج الحزم. وفقًا للوثائق ، بعد تنشيط الإشارة ، يمكن للنواة إصدار ما يصل إلى 10 طلبات. إذا قام منطق المستخدم بتنشيط "rx_st_mask" ، ولم تكن هناك مساحة كافية في المخزن المؤقت لمعالجة الحزم المستلمة ، فقد يؤدي ذلك أيضًا إلى تنشيط إشارة "rx_st_ready". في هذه الحالة ، يتوقف منطق المستخدم عن قراءة أية حزم من المخزن المؤقت kernel للأجهزة الداخلية. لا يقتصر الأمر على تجاوز مخازن نواة الأجهزة فحسب ، بل ينتهك أيضًا متطلبات ترتيب الحزم. يجب أن يتخطى الجهاز الطلبات التي لا تتطلب استجابة وقراءة الردود. خلاف ذلك ، سيتم حظر قناة البيانات بإحكام.لهذا السبب ، يجب على المطور استخدام مخزن مؤقت إضافي لمعالجة الطلبات بإجابات وعدم السماح للمنطق بحظر الحزم ذات الأولوية الأعلى.

على جانب الإرسال ، يمكن أن تسبب الإشارات tx_st_valid و tx_st_ready مشاكل. إذا كانت إشارة tx_st_ready نشطة ، يُحظر على منطق المستخدم إعادة تعيين tx_st_valid في منتصف الحزمة الصادرة. هذا يعني أنه أثناء النقل ، يجب على المطور تقديم محتويات الحزمة بالكامل. إذا كان مصدر البيانات أبطأ من واجهة kernel ، يجب أن يجمع منطق المستخدم الكمية المطلوبة من البيانات قبل بدء الحزمة.
على جانب الاستلام وعلى جانب الإرسال ، يجب على المطور الانتباه إلى ترتيب البايت في رأس ومحتويات الحزمة ، بالإضافة إلى محاذاة البيانات.

في حزمة Avalon-ST من قلب الجهاز ، داخل كل كلمة مزدوجة داخل رأس حزمة PCIe ، تتبع وحدات البايت من الأدنى إلى الأعلى ؛ داخل محتويات العبوة - من الأقدم إلى الأصغر. يجب على المطور استخدام ترتيب مشابه في الحزم الصادرة لنقل البيانات بنجاح من نقطة النهاية إلى الجذر.

تعمل واجهة Avalon-ST لواجهة الأجهزة على محاذاة البيانات بمضاعفات 64 بت. بناءً على عرض واجهة Avalon-ST وطول رأس الحزمة على مستوى المعاملة وعنوان الحزمة ، قد تضيف النواة كلمة مزدوجة فارغة بين رأس الحزمة ومحتوياتها. بدوره ، عند إرسال البيانات ، يجب أن يضيف منطق المستخدم كلمة مزدوجة فارغة مقدمًا ، عن طريق القياس مع النواة. هذه الكلمة المزدوجة الفارغة لا تؤخذ في الاعتبار في طول الحزمة وهي ضرورية فقط للتشغيل الصحيح لنواة الأجهزة.

تتعلق الميزة التالية بردود القراءة الواردة. يوضح وصف kernel أنه لا يغيب عن الردود الواردة التي لا يتطابق معرفها مع الطلب الصادر. في نفس الوقت ، يجب أن يتبع منطق المستخدم وقت انتظار الردود. إذا تم تجاوز وقت الانتظار ، يجب أن يرفع منطق المستخدم العلامة "cpl_err [0]" أو "cpl_err [1]". ليس من الواضح من الوثائق كيف ستعمل التصفية عندما ترسل نقطة النهاية طلبات قراءة متعددة. يخبر منطق المستخدم النواة فقط أن المهلة منتهية الصلاحية لأحد الطلبات ، ولكن لا يمكن تمرير معرف هذا الطلب إلى النواة. هناك احتمال أن ترسل النواة إلى استجابات جانب المستخدم لطلب مهلة منتهية الصلاحية. لذلك ، يجب على المطور إنشاء عامل تصفية خاص به للاستجابات الواردة.

أخيرًا ، يتم تشجيع المطورين بشدة على استخدام المعلومات المتعلقة بالقروض المتاحة للحزم الصادرة. تقول الوثائق الأساسية أن هذا ليس ضروريًا ، لأن النواة تتحقق من القروض وتوقف الطرود عندما لا يكون هناك قروض كافية. ومع ذلك ، تصل جميع أنواع الحزم إلى النواة من خلال واجهة واحدة. في حالة تجاوز سعة المخزن المؤقت لحزمة kernel ، تقوم kernel بخفض إشارة tx_st_ready إلى صفر. حتى يتم تعيين إشارة tx_st_ready إلى إشارة واحدة ، لا يستطيع منطق المستخدم ، من حيث المبدأ ، إرسال أي حزم. يتم تحديث عدد القروض المتاحة من خلال حزم من جهاز شريك. إذا كان منطق المستخدم لا يكتب في كثير من الأحيان فحسب ، بل يقرأ أيضًا ، فإن السرعة التي تقوم بها النواة بتحديث عدادات الحد تنخفض. في النهاية ، يعاني الأداء العام للنظام.

استنتاج


وصفت المقالة المبادئ العامة لنقل البيانات عبر PCI Express ، تنسيقات حزم البيانات الرئيسية. ومع ذلك ، حذف المؤلف مكونات الواجهة مثل القنوات الافتراضية ، والتحكم في حجم الردود الواردة للقراءة ، وترتيب الحزم ليس صارمًا. تمت مناقشة هذه المواضيع بالتفصيل في عدد من المصادر الأجنبية [ 4 ، 6 ].
تتضمن المقالة أيضًا ميزات نوى أجهزة Intel Express V-series FPGA FPGA التي واجهها المؤلف أثناء العمل على وحدة تحكم الواجهة. قد تكون هذه التجربة مفيدة للمطورين الآخرين.

قائمة المصادر المستخدمة


  1. معمارية PCIe DMA لنقل بيانات متعددة جيجابايت في الثانية / L. Rota، M. Caselle، et. آل. // IEEE TRANSACTations on NUCLEAR SCIENCE، VOL. 62 ، لا. 3 ، يونيو 2015.
  2. An Efficient and Flexible Host-FPGA PCIe Communication Library / Jian Gong, Tao Wang, Jiahua Chen et. al. // 2014 24th International Conference on Field Programmable Logic and Applications.
  3. Design and Implementation of a High-Speed Data Acquisition Card Based on PCIe Bus / Li Mu-guo, Huang Ying, Liu Yu-zhi // 《测控技术》2013年第32卷第7期。
  4. Down to the TLP: How PCI express devices talk (Part I) / Eli Billauer
  5. Low-Cost FPGA Solution for PCI Express Implementation / Intel Corporation.
  6. Managing Receive-Buffer Space for Inbound Completions / Xilinx // Virtex-7 FPGA Gen3 Integrated Block for PCI Express v4.3, Appendix B
  7. PCIe Completion Timeout / Altera Forum
  8. PCIe packet in cyclone VI GX / Altera Forum
  9. PCIe simple transaction / Altera Forum
  10. PCIe w/ Avalon ST: Equivalent of ko_cpl_spc_vc0? / Altera Forum
  11. Point me in the right Direction – PCIe / Altera Forum
  12. طلب مهلة في PCIE / Altera Forum
  13. تصميم واجهة عالية السرعة على أساس PCIe لمنصة التحقق من المتلقي غير المتعاونة / Li Xiao-ning و Yao Yuan-cheng و Qin Ming-wei // 2016 المؤتمر الدولي حول الميكانيكية والتحكم والكهرباء والميكاترونكس والمعلومات والكمبيوتر
  14. مراجعة مواصفات قاعدة PCI Express 3.0 / PCI-SIG
  15. واجهة Stratix V Avalon-ST لحلول PCIe / Intel Corporation
  16. واجهة Cyclone V Avalon-ST لـ PCIe Solutions / Intel Corporation

All Articles