حول أردوينو إلى مبرمج لرقاقات FPGA و CPLD

2014-04-19

مقدمة

أردوينو يشبه السكين السويسرية يمكن استعماله كبديل للعديد من الأجهزة المكلفة والمختلفة. مثلا تحويله إلى مبرمج ISP/ICSP لمتحكمات AVR من Atmel (كما فعلنا في ملتقى الصناع) ويمكن تحويله إلى مبرمج PIC (لعلنا نناقش ذلك في مقالة أخرى). لكن في هذه المقالة سنجعل من لوح أردوينو مبرمج للمنظومات القابلة للبرمجة FPGA/CPLD.

يتم التخاطب مع تلك الرقاقات عبر برمجيات خاصة وعبر برتوكولات خاصة بكل جهاز أو مصنع أو أحيانا يكون سعر المبرمج مع وصلاته فوق 200 دولار. هناك وسيلة عيارية اسمها JTAG تدعمها كل رقاقات FPGA/CPLD وهناك صيغة عيارية عمياء لإرسال الأشياء عبر JTAG اسمها SVF النصية أو بصيغتها الثنائية XSVF. لذا فالطريقة الموضحة في هذه المقالة ليس فقط توضيح لفكرة بل قد تكون مجدية ماديا حيث أن سعر أردوينو أرخص بكثير من تلك الدارات الخاصة.

ما هي صيغة Serial Vector Format؟

صيغة SVF هي صيغة نصية صماء عمياء تحدد ماذا نرسل عبر JTAG وما هو الرد المتوقع الذي نستمله إن تم بنجاح. يمكنك العودة إلى وثيقة محددات SVF للمزيد من التفاصيل. وهناك نسخة غير نصية (تستخدم رموز ثنائية) مشتقة منها من شركة Xilinx اسمها XSVF تهدف لتوفير الحجم والسرعة.

يسمى البرنامج الذي يقوم بتنفيذ XSVF عبر JTAG باسم XSVF Player فهو يقوم بقراءة التعليمات الموجودة في XSVF وتنفيذها وتلقي الردود.

كيف نحصل على ملف XSVF و ماذا نفعل به؟

لإعداد العتاد نستخدم لغات وصف العتاد HDL مثل Verilog أو VHDL. باستخدام بيئة التطوير الخاصة بكل رقاقة عوضا عن برمجة الرقاقة مباشرة عبر لوح التطوير الخاص بتلك الشركة أو عبر جهاز البرمجة الخاص بها يوجد خيار لتصدير ملف XSVF (في بيئة Xilinx) أو SVF (في بيئة Altera).

إن حصلت على ملف SVF يمكنك تحويله إلى XSVF عبر سكربت svf2xsvf.py (وهو جزء من مشروع OpenOCD الذي يوفر العديد من أدوات JTAG). ثم يمكن تشغيله عبر XSVF Player مثل الذي سنتحدث عنه في هذه المقالة أو بأي وسيلة أخرى مثل Bus Pirate

ماذا نفعل بلوح أردوينو

لتحويل أردوينو إلى XSVF Player يمكنك استخدام مشروع JTAGWhisperer وذلك بإضافته إلى مجلد المكتبات ثم ستجد في الأمثلة برنامج JTAGWhisperer.ino حمله على لوح أردوينو ثم صله إلى JTAG بالطريقة التالية

  • TMS في JTAG مع المنفذ الرقمي 8 في أردوينو
  • TDI في JTAG مع المنفذ الرقمي 9 في أردوينو
  • TDO في JTAG مع المنفذ الرقمي 10 في أردوينو
  • TCK في JTAG مع المنفذ الرقمي 11 في أردوينو

تحذير: انتبه للفولتية لأنك ستتلف الدارة إن وصلتها مباشرة فهي لا تتحمل 5 فولت. تحتاج أن تستخدم zener diode أو دارة buffer بالفولتية المناسبة.

كيف نرسل ملف XSVF؟

في المشروع السابق تجد سكربت اسمه send_xsvf (وهو سكربت بايثوني بسيط يستخدم pyserial) يمكن استخدامه كمشغل XSVF هكذا

./send_xsvf -p /dev/ttyACM0 myfile.xsvf

حيث مابعد -p هو مسار جهاز أردوينو في لينكس أو COM مع رقمه في ويندوز.

2


Test User