دوستان عزیز پازجی سلام؛

از شما دوستان بابت تاخیر در ارائه مقالات آموزش FPGA پوزش می طلبیم. در روز های آینده سعی خواهد شد به بحث آموزش FPGA در سایت و انجمن بیشتر پرداخته شود.

در این نوشته ابتدا به بررسی اجمالی تراشه‌ی FT2232H و قابلیت‌های ارتباطی آن پرداخته و در ادامه با ارائه‌ی یک پروژه‌ی کامل، یک ارتباط USB با نرخ ۸MB/s بین FPGA موجود روی برد توسعه‌ی پازج-۱ و PC برقرار نموده و توسط تست loopback، میزان performance آن را مورد ارزیابی قرار می‌دهیم. سرعت این ارتباط بیش از ۸MB/s است. بنابراین قبل از مطالعه‌ی ادامه‌ی مطلب، کمربندهای ایمنی را بسته، محکم به صندلی تکیه داده و خود را برای یک جهش صعودی با شیب ناملایم(!) آماده کنید!

مقدمه: در باب FT2232H و خواص آن…

احتمالا تابحال نام شرکت FTDI و محصولات آن به گوشتان خورده است. این شرکت گستره‌ی متنوعی از تراشه‌های مبدل USB به پروتکل‌های متفاوت را تولید می‌کند که تراشه‌ی FT232R از جمله معروفترین آنهاست که در بین اکثر کاربران شناخته شده است. اما تراشه‌ی مورد بحث ما در این نوشته، عضو دیگری از خانواده تراشه‌های FT، یعنی تراشه‌ی FT2232H است که قابلیتهای بسیار بیشتری نسبت به FT232R دارد. برخی از مهترین ویژگی‌های شاخص این تراشه عبارتند از:

  • مبدل USB به دو کانال مجزا (به نام‌های A و B) با قابلیت پیکره‌بندی هر کانال در یکی از مودهای UART، Synchronous FIFO، Asynchronous FIFO، Bit-Bang، MPSSE، Fast Serial، CPU-Style FIFO و Host Bus Emulation.
  • پشتیبانی از استاندارد USB 2.0 در مودهای High Speed (480Mbps) و Full Speed(12Mbps).
  • مبدل USB به Synchronous FIFO با سرعت حداکثر ۴۰MB/s.
  • مبدل USB به Asynchronous FIFO با سرعت حداکثر ۱۰MB/s.
  • پیاده سازی کامل پروتکل USB به صورت سخت‌افزاری درون تراشه و عدم نیاز کاربر به درگیری با جزئیات این پروتکل.

در برد پازج-۱ نیز از این تراشه بهره گرفته شده است: “کانال A” جهت پیاده‌سازی پروگرامر رو-برد و “کانال B” جهت ارتباط FPGA و PC در یکی از دو حالت UART یا Async FIFO. در ادامه به بررسی نحوه‌ی برقراری ارتباط FPGA و PC در حالت Async FIFO خواهیم پرداخت.

گام صفرم: پیکره‌بندی مجدد تراشه‌ی FT2232H

کانال “B” ی تراشه‌ی FT2232H روی برد پازج-۱ بصورت پیش‌فرض روی حالت UART تنظیم شده است. به منظور ایجاد ارتباط Async FIFO ، قبل از هر چیز لازم است تا تراشه مجددا پیکره‌بندی شود.

توجه داشته باشید از آنجایی که تنظیمات مدار پروگرامر نیز در همین تراشه ذخیره شده است، هر گونه اشتباه در اجرای این فاز می‌تواند در عملکرد پروگرامر روی برد اختلال ایجاد کند که در اینصورت تنها راه حل ارجاع برد به ما جهت برنامه‌ریزی مجدد است! بنابراین این مرحله را دقیقا مطابق دستورالعملی که در ادامه آورده می‌شود انجام دهید.

جهت تغییر پیکره‌بندی FT2232H از حالت UART به Async FIFO :

  • برنامه‌ی ftdi_change_mode را که در آرشیو پیوست قرار دارد اجرا نمایید.
  • با اجرای برنامه پنجره‌ای مطابق شکل زیر باز می‌شود که از شما درخواست می‌کند حالت عملکرد تراشه را انتخاب نمایید. برای تغییر به حالت FIFO عدد ۲ و در صورتی که قصد بازگشت به حالت UART را دارید عدد “۱” را وارد نموده و Enter را بزنید.
  • یک بار برد را از کامپیوتر جدا کرده و مجددا متصل نمایید.

ftdi_change_mode

اکنون تراشه‌ی FT2232H برای عملکرد در مود Async FIFO آماده است.

گام یکم: برنامه‌ی سمت FPGA:

توضیحات طرح سخت‌افزاری:

شماتیک top_module طرح سخت‌افزاری سمت FPGA در شکل زیر نمایش داده شده است.

FPGA_FT2232H_async_fifo_interface

همانطور که مشاهده می‌شود طرح از سه ماژول اصلی تشکیل شده است که عملکرد آنها در ادامه به طور خلاصه تشریح میشود:

  • ماژول pll جهت تولید سیگنالهای clock و reset از روی ورودی کلاک اسیلاتور ۲۴ مگاهرتز و کلید ریست (USER_PB).
  • ماژول afifo : این ماژول در واقع بعنوان مبدل اینترفیس Async FIFO به دو FIFO ی مجزا جهت دریافت و ارسال دیتا عمل می‌کند. همانطور که در شکل نیز مشخص است، در سمت چپ این ماژول سیگنال‌های دیتا (ft_data) و handshaking (ft_wr_n، ft_rxf_n، ft_txe_n و ft_rd_n) قرار دارند که به تراشه‌ی FT2232H متصل می‌شوند و در سمت راست آن، دو کانال FIFO ی مجزا به ظرفیت ۴KB قرار گرفته‌اند که کانال پایینی FIFO ی دریافت (RX) است که اطلاعات ارسالی از سمت PC به FPGA در آن ذخیره شده و کانال بالایی، FIFO ی ارسال (TX) است و دربرگیرنده‌ی اطلاعاتی که قصد داریم از FPGA به سمت PC ارسال شود. در کنار خطوط دیتای هر FIFO، سیگنال‌های خواندن/نوشتن و پرچم خالی/پر آن نیز قرار گرفته است که کاربر میتواند بر اساس آنها اقدام به خواندن و نوشتن از/به FIFO ی مورد نظر نماید.
  • ماژول looper: این ماژول در واقع یک echo است که دیتای دریافت شده (ذخیره شده درون FIFOی RX) را برداشته و درون FIFO ی TX قرار می‌دهد تا دوباره به سمت کامپیوتر ارسال شوند. این کار تنها برای اطمینان از صحت عملکرد هر دو سمت ارتباط انجام شده است. در برنامه‌ی تست سمت کامپیوتر، دیتای فرستاده شده و دریافت شده با یکدیگر مقایسه می‌شوند و در صورت عدم تطابق خطا محسوب می‌شود.

بارگذاری فایل پیکره‌بندی روی FPGA:

پروژه‌ی ISE مربوط به پیاده‌سازی این طرح روی برد پازج-۱ درون پوشه‌ی “/ISE” آرشیو پیوست قرار دارد. همچنین فایل .bit ساخته شده و آماده جهت پروگرام نیز در زیر پوشه‌ی “Build/” درون پوشه‌ی مذکور قرار داده شده است. برای پروگرم کردن FPGA کافی است تا با استفاده از نرم‌افزار Impact فایل .bit را روی FPGA پروگرام نمایید.

گام دوم: برنامه‌ی سمت PC:

در سمت PC نیز دنباله ای از اعداد ۸ بیتی متوالی (از ۰x00 تا ۰xFF)  به صورت مرتب به سمت FPGA ارسال شده و سپس داده‌های ارسال شده از سمت FPGA دریافت شده و با مقدار مورد انتظار مقایسه می‌شود (تست loopback). در صورتی که عدم تطابقی رخ دهد، مورد به عنوان خطا در نظر گرفته شده و یک واحد به مجموع خطاها اضافه می‌شود. در حین اجرای برنامه نیز زمان صرف شده جهت ارسال و دریافت اطلاعات نیز به دقت اندازه‌گیری شده که جهت محاسبه‌ی نرخ تبادل اطلاعات به کار می‌رود. همچنین تعداد کل بایت‌های رد و بدل شده، سرعت ارسال و دریافت و تعداد خطاها نیز به طور منظم در طول اجرای برنامه نمایش داده می‌شود (شکل زیر).

fpga_usb_interface_loopback_test

fpga_usb_interface_loopback_test

نتیجه گیری:

بار دیگر مراحل اجرای این پروژه‌ی نمونه را به طور خلاصه مرور میکنیم:

  • گام صفرم: قبل از هر چیز لازم است تا مود عملکرد آی سی FT2232H را که به صورت پیش فرض در حالت UART است را به حالت Asynchronous FIFO تغییر دهیم. برای این کار از برنامه‌ی ftdi_change_mode که در آرشیو پیوست شده قرار دارد استفاده کنید. با اجرای فایل اجرایی داخل پوشه از طریق خط فرمان ویندوز و انتخاب حالت عملکرد FIFO، آی سی به صورت خودکار برنامه ریزی مجدد شده و در مود FIFO قرار میگیرد.
  • در گام بعدی لازم است با اجرای نرم افزار ISE، پروژه ی ISE موجود در فایل پیوست را باز کرده و مراحل سنتز و پیاده‌سازی را اجرا نموده و در پایان فایل .bit تولید شده را روی FPGA ی موجود روی برد پازج-۱ پروگرام کنید.
  • در انتها با اجرای نرم‌افزار تست سمت PC، نتیجه را مشاهده نمایید.

امیدوارم از این آموزش لذت برده باشید. always@posedge باشید!

منابع جهت مطالعه بیشتر:

  1. FT2232H Datasheet
  2. D2XX_Programmer’s_Guide
  3. FT2232H Used in an FT245 Style Synchronous FIFO Mode
  4. Instructions On Including The FTD2xx DLL In A VS2008 Project

فایل‌های پیوست:

دانلود (شامل نرم‌افزار ftdi_change_mode + پروژه‌ی ISE (به همراه فایل .bit آماده) + پروژه‌ی Visual Studio 2012 نرم‌افزار سمت PC)