مولد واجهة اختبار UART VHDLwhiz
معلومات المنتج
تحديد:
- اسم المنتج: مولد واجهة اختبار UART لسجلات VHDL
- الإصدار: 1.0.4
- التاريخ: 18 أغسطس 2024
- المؤلف: جوناس جوليان جنسن
- منتج URL: رابط المنتج
- البريد الإلكتروني للتواصل: jonas@vhdlwhiz.com
وصف
يتيح لك هذا المنتج إنشاء واجهات مخصصة لقراءة وكتابة قيم سجلات FPGA باستخدام UART. توفر وحدة VHDL المولدة ونص Python القدرة على التفاعل مع أنواع مختلفة من السجلات في تصميم FPGA الخاص بك.
متطلبات
- مُفسِّر بايثون 3
- حزمة pyserial
بروتوكول
يستخدم المنتج بروتوكول تأطير البيانات بأربعة أحرف تحكم:
- اسم: اقرأ_مطلوب, قيمة: 0x0A – أمر من المضيف إلى FPGA لبدء تسلسل كتابة لإرسال جميع السجلات مرة أخرى عبر UART
- اسم: ابدأ_الكتابة، قيمة: 0x0B – يشير إلى بداية تسلسل الكتابة في أي اتجاه
- اسم: نهاية الكتابة، قيمة: 0x0C – يشير إلى نهاية تسلسل الكتابة في أي اتجاه
- اسم: يهرب، قيمة: 0x0D – حرف الهروب المستخدم للهروب من كلمات التحكم
تعليمات استخدام المنتج
تشغيل البرامج النصية
لاستخدام المنتج، تأكد من تثبيت Python 3 وحزمة Pyserial. قم بتشغيل البرامج النصية من خلال مفسّر Python 3.
إنشاء واجهات مخصصة
استخدم البرنامج النصي gen_uart_regs.py لإنشاء واجهات مخصصة لقراءة وكتابة قيم سجل FPGA. يمكنك تحديد تكوين سجلات الإدخال والإخراج وأنواعها عند إنشاء الإخراج files.
التفاعل مع السجلات
يمكنك القراءة من أو الكتابة إلى أي عدد من السجلات في تصميم FPGA الخاص بك باستخدام وحدة VHDL المولدة ونص Python. يمكن أن تحتوي السجلات التي يمكن الوصول إليها على أنواع مثل std_logic أو std_logic_vector أو signed أو unsigned.
رخصة
- يغطي ترخيص MIT متطلبات حقوق النشر وشروط الاستخدام الخاصة بكود المصدر. الرجوع إلى LICENSE.txt file في الرمز البريدي file للتفاصيل.
سجل التغييرات
- تشير هذه التغييرات إلى المشروع fileس، ويتم تحديث هذه الوثيقة وفقًا لذلك
إصدار | ملاحظات |
1.0.0 | الإصدار الأولي |
1.0.1 | تم إصلاح خطأ فقدان مرجع "الذات" عند الاستيراد كـ uart_regs.py كوحدة نمطية في Python. تم تغيير الطباعة الفاشلة للكتابة إلى استثناء
تجنب الطباعة على وحدة التحكم عند التشغيل كنموذج مستورد. |
1.0.2 | إصلاح خطأ Vivado [Synth 8-248] عندما لا توجد سجلات وضع الإخراج. |
1.0.3 | إصلاح تحذير Vivado Linter: تم تمكين التسجيل بواسطة
إعادة الضبط المتزامنة |
1.0.4 | إصلاح حالة الأحرف الكبيرة عند تلقي كلمة مشوهة مع حرف الإفلات كآخر بايت. ستضيع الكلمة التالية أيضًا لأننا لم نمسح recv_data_prev_is_escape عند العودة إلى IDLE.
يسمح البرنامج النصي gen_uart_regs.py الآن بأسماء التسجيل الفريدة فقط. |
وصف
- توضح هذه الوثيقة ما يلي files والمجلدات:
- gen_uart_regs.py
- ولدت/uart_regs.vhd
- تم إنشاؤه/uart_regs.py
- ولدت/insantiation_template.vho
- rtl/uart_regs_backend.vhd
- rtl/uart_rx.vhd
- rtl/uart_tx.vhd
- التجريبي/lattice_icestick/
- التجريبي/xilinx_arty_a7_35/
- التجريبي/xilinx_arty_s7_50/
- البرنامج النصي gen_uart_regs.py ودعم VHDL fileتتيح لك العناصر الموجودة في هذا المشروع إنشاء واجهات مخصصة لقراءة وكتابة قيم تسجيل FPGA بمختلف الأنواع والعروض باستخدام UART.
- يمكنك استخدام وحدة VHDL التي تم إنشاؤها وبرنامج Python النصي للقراءة أو الكتابة إلى أي عدد من السجلات في تصميمك. يمكن أن تحتوي سجلات UART التي يمكن الوصول إليها على الأنواع std_logic، أو std_logic_vector، أو موقعة، أو غير موقعة.
- يمكنك تحديد التركيب الدقيق لسجلات وأنواع الإدخال والإخراج عند إنشاء المخرجات fileباستخدام البرنامج النصي gen_uart_regs.py.
- تم إنشاء نصوص بايثون جزئيًا بمساعدة أداة الذكاء الاصطناعي ChatGPT، بينما تم تصنيع كود VHDL يدويًا.
متطلبات
- يجب تشغيل البرامج النصية في هذا المشروع من خلال مترجم Python 3 ويجب تثبيت حزمة Pyserial.
- يمكنك تثبيت pyserial من خلال Pip باستخدام هذا الأمر: pip install pyserial
بروتوكول
- VHDL fileيستخدم s وPython script بروتوكول تأطير البيانات مع أربعة عناصر تحكم
اسم | قيمة | تعليق |
اقرأ_مطلوب | 0 × 0 أمبير | أمر من المضيف إلى FPGA لبدء الكتابة
تسلسل لإرسال جميع السجلات مرة أخرى عبر UART |
START_WRITE | 0x0B | يشير إلى بداية تسلسل الكتابة في أي من
اتجاه |
END_WRITE | 0x0C | يمثل نهاية تسلسل الكتابة في أي من الاتجاهين |
يهرب | 0x0د | حرف الهروب المستخدم للهروب من أي من كلمات التحكم، بما في ذلك حرف ESCAPE نفسه، عندما تظهر كبيانات بين علامتي START_WRITE وEND_WRITE. |
أي بايت READ_REQ لم يتم إلغاؤه يتم إرساله إلى FPGA هو عبارة عن تعليمات لإرسال كافة السجلات التي يمكن الوصول إليها بواسطة UART (المدخلات والمخرجات) مرة أخرى إلى المضيف عبر UART. عادةً ما يتم إصدار هذا الأمر فقط عن طريق البرنامج النصي uart_regs.py.
عند تلقي هذا الأمر، سوف تستجيب FPGA عن طريق إرسال محتوى جميع السجلات مرة أخرى إلى المضيف. أولا، إشارات الإدخال، ثم إشارات الإخراج. إذا لم يكن مجموع أطوالها مضاعفًا لـ 8 بتات، فستكون البتات السفلية من البايت الأخير عبارة عن أصفار مبطنة.
تبدأ تسلسلات الكتابة دائمًا ببايت START_WRITE وتنتهي ببايت END_WRITE. وتعتبر أي بايتات بين هاتين البايتات بايتات بيانات. وإذا كانت أي بايتات بيانات لها نفس قيمة حرف التحكم، فيجب إفلات بايت البيانات. وهذا يعني إرسال حرف إفلات إضافي قبل بايت البيانات للإشارة إلى أنه بيانات بالفعل.
إذا وصل START_WRITE الذي لم يتم إلغاؤه إلى أي مكان في تدفق البايتات، فسيتم اعتباره بداية تسلسل الكتابة. تستخدم وحدة uart_regs_backend هذه المعلومات لإعادة المزامنة في حالة خروج الاتصال عن المزامنة.
gen_uart_regs.py
- هذا هو البرنامج النصي الذي يجب أن تبدأ به لإنشاء الواجهة. يوجد أدناه لقطة شاشة لقائمة المساعدة التي يمكنك الحصول عليها عن طريق تشغيل: python gen_uart_regs.py -h
- لإنشاء واجهة مخصصة، يجب عليك تشغيل البرنامج النصي مع إدراج كل من سجلات UART المرغوبة والتي يمكن التحكم فيها كوسائط. الأنواع المتوفرة هي std_logic وstd_logic_vector وغير موقعة وموقعة.
- الوضع الافتراضي (الاتجاه) موجود والنوع الافتراضي هو std_logic_vector ما لم يكن طول السجل: 1. بعد ذلك، سيكون الافتراضي هو std_logic.
- وبالتالي، إذا كنت تريد إنشاء إشارة إدخال std_logic، فيمكنك استخدام أي من هذه الوسائط:
- my_sl=1
- my_sl=1:في
- my_sl=1:in:std_logic
- ستؤدي جميع المتغيرات المذكورة أعلاه إلى قيام البرنامج النصي بإنشاء إشارة يمكن الوصول إليها بواسطة UART:
- دعنا نشغل البرنامج النصي باستخدام الوسائط لإنشاء واجهة تحتوي على عدة سجلات ذات اتجاهات وأطوال وأنواع مختلفة
تم توليده files
- سيؤدي التشغيل الناجح للبرنامج النصي gen_uart_regs.py إلى إنتاج مجلد إخراج يسمى تم إنشاؤه باستخدام الثلاثة fileالمدرجة أدناه. إذا كانت موجودة بالفعل، فسيتم استبدالها.
- ولدت/uart_regs.vhd
- تم إنشاؤه/uart_regs.py
- ولدت/insantiation_template.vho
- uart_regs.vhd
- هذه هي وحدة الواجهة المخصصة التي تم إنشاؤها بواسطة البرنامج النصي. تحتاج إلى إنشاء مثيل له في التصميم الخاص بك، حيث يمكنه الوصول إلى السجلات التي تريد التحكم فيها باستخدام UART.
- سيكون كل شيء أعلى قسم "- UART Accessible Registers" متطابقًا لكل وحدة uart_regs، بينما يعتمد تكوين إشارات المنفذ أسفل هذا السطر على الوسائط المعطاة لبرنامج المولد النصي.
- توضح القائمة أدناه كيان وحدة uart_regs الناتجة عن أمر الإنشاء على سبيل المثالampيظهر في قسم gen_uart_regs.py
- لا تحتاج إلى مزامنة إشارة uart_rx، حيث يتم التعامل مع ذلك في uart_rx. وحدة.
- عندما تتلقى الوحدة طلب قراءة، فإنها ستلتقط قيم جميع إشارات الإدخال والإخراج خلال دورة الساعة الحالية. يتم بعد ذلك إرسال اللقطة الفورية إلى المضيف عبر UART.
- عند حدوث عملية كتابة، يتم تحديث جميع سجلات الإخراج بالقيم الجديدة خلال نفس دورة الساعة. لا يمكن تغيير قيم إشارة الخرج بشكل فردي.
- ومع ذلك، يسمح البرنامج النصي uart_regs.py للمستخدم بتحديث المخرجات المحددة فقط من خلال إعادة قراءة القيم الحالية لجميع السجلات أولاً. ثم يقوم بإعادة كتابة كافة القيم، بما في ذلك القيم المحدثة.
- uart_regs.py
- تم إنشاء/uart_regs.py file يتم إنشاؤه مع وحدة uart_regs VHDL ويحتوي على معلومات التسجيل المخصصة في رأس الملف file. باستخدام هذا البرنامج النصي، يمكنك القراءة من سجلاتك المخصصة أو الكتابة إليها بسهولة.
قائمة المساعدة
- اكتب python uart_regs.py -h لطباعة قائمة المساعدة:
ضبط منفذ UART
- يحتوي البرنامج النصي على خيارات لتعيين منفذ UART باستخدام المفتاح -c. يعمل هذا على أنظمة التشغيل Windows وLinux. اضبطه على أحد المنافذ المتاحة المدرجة في قائمة التعليمات. لتعيين منفذ افتراضي، يمكنك أيضًا تحرير متغير UART_PORT في البرنامج النصي uart_regs.py.
سجلات القائمة
- يتم وضع المعلومات المتعلقة بتعيين السجل في رأس البرنامج النصي uart_regs.py بواسطة البرنامج النصي gen_uart_regs.py. يمكنك سرد السجلات المتاحة باستخدام المفتاح -l، كما هو موضح أدناه. هذا أمر محلي ولن يتفاعل مع FPGA المستهدفة
الكتابة إلى السجلات
- يمكنك الكتابة إلى أي من سجلات وضع الخروج باستخدام رمز التبديل -w. أدخل اسم السجل متبوعًا بـ "=" والقيمة المعطاة كقيمة ثنائية أو سداسية عشرية أو عشرية، كما هو موضح أدناه.
- لاحظ أن تنفيذ VHDL يتطلب من البرنامج النصي كتابة جميع سجلات الإخراج في نفس الوقت. لذلك، إذا لم تحدد مجموعة كاملة من سجلات الإخراج، فسيقوم البرنامج النصي أولاً بإجراء قراءة من FPGA المستهدفة ثم استخدام تلك القيم للقيم المفقودة. ستكون النتيجة أن السجلات المحددة فقط هي التي تتغير
- عند إجراء عملية كتابة، ستتغير جميع السجلات المحددة خلال نفس دورة الساعة، وليس بمجرد استلامها عبر UART.
سجلات القراءة
- استخدم رمز التبديل -r لقراءة كافة قيم التسجيل، كما هو موضح أدناه. القيم المميزة باللون الأصفر هي تلك التي قمنا بتغييرها في الكتابة السابقةample
- تعرض كل قراءة لقطة فورية لجميع سجلات الإدخال والإخراج. كلهم سampأدى خلال نفس دورة الساعة
تصحيح الأخطاء
استخدم رمز التبديل -d مع أي من رموز التبديل الأخرى إذا كنت بحاجة إلى تصحيح أخطاء بروتوكول الاتصال. بعد ذلك، سيقوم البرنامج النصي بطباعة جميع وحدات البايت المرسلة والمستقبلة tag لهم إذا كانوا أحرف التحكم، كما هو موضح أدناه.
استخدام الواجهة في نصوص بايثون الأخرى
- يحتوي البرنامج النصي uart_regs.py على فئة UartRegs التي يمكنك استخدامها بسهولة كواجهة اتصال في برامج Python النصية المخصصة الأخرى. ما عليك سوى استيراد الفئة وإنشاء كائن منها والبدء في استخدام الطرق، كما هو موضح أدناه.
- ارجع إلى سلاسل المستندات في كود Python للتعرف على الطريقة والأوصاف وأنواع قيم الإرجاع.
Instantiation_template.vho
- يتم إنشاء قالب إنشاء مثيل مع وحدة uart_regs لراحتك. لتوفير وقت البرمجة، يمكنك نسخ إنشاء مثيل للوحدة وإعلانات الإشارة في تصميمك.
ثابت من اليمين إلى اليسار files
- تحتاج إلى تضمين ما يلي files في مشروع VHDL الخاص بك بحيث يتم تجميعها في نفس المكتبة مثل الوحدة النمطية uart_regs:
- rtl/uart_regs_backend.vhd
- rtl/uart_rx.vhd
- rtl/uart_tx.vhd
- تقوم وحدة uart_regs_backend بتنفيذ أجهزة الحالة المحدودة التي تعمل على تسجيل بيانات التسجيل وإخراجها. ويستخدم وحدات uart_rx وuart_tx للتعامل مع اتصال UART مع المضيف.
مشاريع تجريبية
- هناك ثلاثة مشاريع تجريبية مدرجة في Zip file. إنها تتيح لك التحكم في الأجهزة الطرفية على اللوحات المختلفة بالإضافة إلى عدد قليل من السجلات الداخلية الأكبر حجمًا.
- تتضمن المجلدات التجريبية uart_regs.vhd وuart_regs.py التي تم إنشاؤها مسبقًا fileصُنع خصيصًا لتلك التصميمات.
شعرية iCEstick
- يحتوي المجلد التجريبي/icecube2_icestick على تنفيذ تجريبي للوصول إلى التسجيل للوحة Lattice iCEstick FPGA.
- لمتابعة عملية التنفيذ، افتح الملف التجريبي/lattice_icestick/icecube2_proj/uart_regs_sbt.project file في برنامج التصميم Lattice iCEcube2.
- بعد تحميل المشروع في واجهة المستخدم الرسومية iCEcube2، انقر فوق أدوات → تشغيل الكل لإنشاء الصورة النقطية للبرمجة file.
- يمكنك استخدام أداة Lattice Diamond Programmer Standalone لتكوين FPGA بالصورة النقطية التي تم إنشاؤها file. عند فتح برنامج Diamond Programmer، انقر فوق فتح مشروع مبرمج موجود في مربع حوار الترحيب.
- حدد المشروع file الموجود في الملف المضغوط: demo/lattice_icestick/diamond_programmer_project.xcf وانقر فوق OK.
- بعد تحميل المشروع، انقر فوق النقاط الثلاث في File عمود الاسم كما هو موضح أعلاه. استعرض لتحديد الصورة النقطية file الذي قمت بإنشائه في iCEcube2
- العرض التوضيحي/lattice_icestick/icecube2_proj/uart_regs_Implmnt/sbt/outputs/bitmap/top_icestick_bitmap.bin
- أخيرًا، مع توصيل لوحة iCEstick بمنفذ USB على جهاز الكمبيوتر الخاص بك، حدد Design → Program لبرمجة فلاش SPI وتكوين FPGA.
- يمكنك الآن المتابعة لقراءة وكتابة السجلات باستخدام البرنامج النصي demo/lattice_icestick/uart_regs.py كما هو موضح في قسم uart_regs.py.
Xilinx ديجيلنت متطفل على الفن A7-35T
- يمكنك العثور على التطبيق التجريبي لمجموعة التقييم Artix-7 35T Arty FPGA في المجلد التجريبي/arty_a7_35.
- افتح Vivado وانتقل إلى الملف المستخرج fileباستخدام وحدة تحكم Tcl الموجودة في الجزء السفلي من واجهة المستخدم الرسومية. اكتب هذا الأمر للدخول إلى مجلد المشروع التجريبي:
- قرص مضغوط /عرض توضيحي/arty_a7_35/مشروع فيفادو/
- قم بتنفيذ البرنامج النصي create_vivado_proj.tcl Tcl لإعادة إنشاء مشروع Vivado:
- المصدر ./create_vivado_proj.tcl
- انقر فوق إنشاء تدفق بت في الشريط الجانبي لتشغيل جميع خطوات التنفيذ وإنشاء تدفق بت للبرمجة file.
- أخيرًا، انقر فوق Open Hardware Manager وقم ببرمجة FPGA من خلال واجهة المستخدم الرسومية.
- يمكنك الآن متابعة قراءة السجلات وكتابتها باستخدام البرنامج النصي demo/arty_a7_35/uart_regs.py كما هو موضح في قسم uart_regs.py.
Xilinx ديجيلنت متطفل على الفن S7-50
- يمكنك العثور على التطبيق التجريبي للوحة تطوير Arty S7: Spartan-7 FPGA في المجلد التجريبي/arty_s7_50.
- افتح Vivado وانتقل إلى الملف المستخرج fileباستخدام وحدة تحكم Tcl الموجودة في الجزء السفلي من واجهة المستخدم الرسومية. اكتب هذا الأمر للدخول إلى مجلد المشروع التجريبي:
- قرص مضغوط /عرض توضيحي/arty_s7_50/vivado_proj/
- قم بتنفيذ البرنامج النصي create_vivado_proj.tcl Tcl لإعادة إنشاء مشروع Vivado:
- المصدر ./create_vivado_proj.tcl
- انقر فوق إنشاء تدفق بت في الشريط الجانبي لتشغيل جميع خطوات التنفيذ وإنشاء تدفق بت للبرمجة file.
- أخيرًا، انقر فوق Open Hardware Manager وقم ببرمجة FPGA من خلال واجهة المستخدم الرسومية.
- يمكنك الآن متابعة قراءة السجلات وكتابتها باستخدام البرنامج النصي demo/arty_s7_50/uart_regs.py كما هو موضح في قسم uart_regs.py.
تطبيق
- لا توجد متطلبات تنفيذ محددة.
قيود
- ليست هناك حاجة إلى قيود توقيت محددة لهذا التصميم لأن واجهة UART بطيئة ويتم التعامل معها على أنها واجهة غير متزامنة.
- تتم مزامنة إدخال uart_rx إلى وحدة uart_regs داخل وحدة uart_rx. وبالتالي، لا يلزم مزامنتها في وحدة المستوى الأعلى.
المشاكل المعروفة
- قد تحتاج إلى إعادة ضبط الوحدة قبل أن تتمكن من استخدامها، اعتمادًا على ما إذا كانت بنية FPGA الخاصة بك تدعم قيم التسجيل الافتراضية.
مزيد من المعلومات
- حقوق الطبع والنشر VHDLwhiz.com
الأسئلة الشائعة
س: ما هو الغرض من مولد واجهة اختبار UART؟
أ: يسمح منشئ واجهة اختبار UART بإنشاء واجهات مخصصة للتفاعل مع قيم سجل FPGA باستخدام اتصالات UART.
س: كيف أقوم بتثبيت حزمة Pyserial؟
ج: يمكنك تثبيت Pyserial من خلال Pip باستخدام الأمر: pip install pyserial
المستندات / الموارد
![]() |
مولد واجهة اختبار UART VHDLwhiz [بي دي اف] دليل المستخدم مولد واجهة اختبار UART، مولد واجهة الاختبار، مولد الواجهة، مولد |