پرش به


تصویر

بررسی ارتباط نرم افزار متلب با FPGA

ارتباط متلب با FPGA

  • لطفا وارد حساب کاربری خود شوید تا بتوانید پاسخ دهید
2 پاسخ برای این موضوع

#1 moonice

moonice

    newbie

  • کاربر عادی
  • ستاره
  • 2 ارسال

ارسالی 20 June 2016 - 05:36 AM

با سلام خدمت دوستان گرامی

بالاخره فرصتی پیش اومد که قولی که به مهندس حقیقی از برای تشکیل دادن شیرازه این بحث برای تعامل دوستان را داده بودیم عملی نماییم.

خب بدون مقدمه چینی میریم سر اصل مطلب:

 

ما در ابتدا میخواهیم دو روش را مورد بحث قرار دهیم:

1-UART

2-AFIFO

ما فرض را بر این منوال گذاشتیم که شما آموزش های گذشته سایت که به توضیح در مورد این پروتکل ها نموده بود مشاهده کرده اید.

از همین رو از بحث در این باره خود داری میکنیم و مستقیم روی استفاده از این روش ها میرویم.

 

UART

 

ارتباط UART  در متلب بسیار ساده میباشد، به طوری که با یک سرچ ساده در help متلب میتوانید از تمام جزئیات آن آگاه شوید.ولی خب از آنجایی که میخواهیم همه چیز گفته شود از ابتدا تا همه دوستان با ما جلو بیایند و مسیر برای تعامل همه فراهم شود به یک مثال ساده میپردازیم:

 

در اولین قدم نیاز میباشد طراحی و پیاده سازی پروتکل UART روی FPGA انجام دهید.

آموزش این قسمت به لطف دوستان خوبمان در یکی از فیلم های آموزشی سایت به طور کامل توضیح داده شد پس از آن میگذریم(برای مشاهده فیلم اینجا کلیک نمایید).

 

فقط دونکته میباشد که نیاز به توجه دارد:

 

1-      در این مثال در حقیقت ما از نرم افزار متلب به عنوان یک ترمینال سری استفاده نمودیم ولی چیزی که مشخصه اینه که میتوانیم ابتدا الگوریتم های مختلف را روی داده های خود با استفاده از توابع متلب پیاده کنیم سپس توسط یوارت به چیپ بفرستیم.

2-      ما معمولا میخوایم داده ها رو به چیپ بفرستیم که باهاش یه کاری کنیم دیگه( J ) از همین رو علاوه بر پیاده سازی سخت افزاری UART روی FPGA الگوریتم مورد نظر خود (مثل انواع فیلتر ها ) را به صورت سخت افزاری روی FPGA پیاده میکنیم.

 

خب ما از پیش یک طراحی سخت افزار برای این قسمت نمودیم که کار شما را راحت کنیم.

در این طرح هر داده ای که به FPGA فرستاده بشود دقیقا همان را بر میگرداند.(میتوان الگوریتم دلخواه را روی داده های فرستاده شده انجام شود سپس باز گردانده شود به متلب)

(برای توضیحات بیشتر در مورد این طرح اینجا کلیک نمایید)

فقط کافیست فایل .bit مربوط به این پروژه را روی FPGA پروگرام نمایید. با این کار، درون FPGA یک لوپ-بک تشکیل میشود و FPGA هر داده‌‌ای که دریافت میکند را ارسال میکند.

 

حال سراغ پیاده سازی مقدمات ارتباط UART سمت نرم افزار متلب میرویم.

با برنامه زیر میتوایند رشته "abcdefghij" را به FPGA فرستاده و طبق طراحی سخت افزاری مشاهده میکنیم که دقیقا همین ها برگردانده و در متغیر Z ذخیره میشود.

im = 'abcdefghij';
s = serial('COM8');
fopen(s)
tic;


fprintf(s,im)
z = fscanf(s);


tt = toc;
fclose(s)
disp(['elapsed time: ', num2str(tt), ' s']);

 

نکات زیر قابل توجه میباشد:

1-      به جای COM8 پروت مورد نظر در سیستم خود راجایگزین نمیاید.

2-      متغیر im را از هر طریق دلخواه میتوانید مقدار دهی کنید و به FPGA  بفرستید (میتوایند یک رشته متنی یا یک تصویر یا یک رشته صوتی یا... باشد.)

3-      به حجم داده ارسالی و زمان ارسال و دریافت توجه نمایید.

 

همانطور مشاهده میکنید بسیاااار ساده بود! 

برای اطلاعات بیشتر دستور زیر را در رابط دستوری متلب وارد نمایید: doc serial

 

ارتباط AFIFO (آسنکرون فیفو)

 

همانند روش قبل در مرحله اول نیاز طراحی و پیاده سازی سخت افزاری روی FPGA دارد.

اینکه این روش چی هست یا نه کاری با آن نداریم زیرا در آموزش های قبلی توضیح داده شد(برای اطلاعات بیشتر اینجا کلیک نمایید)

 

فقط دونکته میباشد که نیاز به توجه دارد:

1-      در این مثال در حقیقت ما از نرم افزار متلب به عنوان یک ترمینال استفاده نمودیم ولی چیزی که مشخصه اینه که میتوانیم ابتدا الگوریتم های مختلف را روی داده های خود با استفاده از توابع متلب پیاده کنیم سپس به چیپ بفرستیم.

2-      ما معمولا میخوایم داده ها رو به چیپ بفرستیم که باهاش یه کاری کنیم دیگه( J ) از همین رو علاوه بر پیاده سازی سخت افزاری AFIFO روی FPGA الگوریتم مورد نظر خود (مثل انواع فیلتر ها ) را به صورت سخت افزاری روی FPGA پیاده میکنیم.

 

همانند بخش قبل ما یک پروژه طراحی سخت افزاری AFIFO رو برای شما آماده کردیم.در این طراحی هر داده ای که به FPGA ارسال شود NOT میشود و به متلب برگشت داده میشود که نتیجه‌ی آن تبدیل تصویر به صورت نگاتیو است. فقط کافی است فایل .bit موجود در آرشیو پیوست را دانلود نمایید و بر روی بورد پروگرام کنید.

 

بعد از پیاده سازی قسمت سخت افزاری سمت برنامه متلب میرویم. در سمت متلب برای برقراری ارتباط آسنکرون، نیاز به یک API برای برقراری ارتباط آسنکرون فیفو داریم. این API بصورت یک mex file توسط گروه پازج آماده شده است که از آرشیو پیوست قابل دریافت است. با قرار دادن این فایل در کنار mfile خود میتوانید از آن استفاده کنید.

 

اکنون با استفاده از کد m-file زیر، یک تصویر دلخواه با نام im1.tif و اندازه‌ی 480*640 را با ارتباط آسنکرون فیفو به برد ارسال میکنیم و داده‌ی برگشتی از برد را در متغیر b1 ریخته و نمایش میدهیم.

im1 = imread('im1.tif');
subplot(1,2,1)
imshow(im1)
im1_vec = double(im1(:)');
tic;
b = afifo3(im1_vec);
tt = toc;
disp(['elapsed time: ', num2str(tt), ' s']);
b1 = uint8(reshape(b, [480, 640]));
subplot(1,2,2)
imshow(b1) 

نکات زیر قابل توجه میباشد:

1- متغیر im1 را از هر طریق دلخواه میتوانید مقدار دهی کنید و به FPGA  بفرستید(میتوایند خروجی یک رشته متنی یا یک تصویر یا یک رشته صوتی یا... باشد.)

2- به حجم داده ارسالی و زمان ارسال و دریافت توجه نمایید.

3- حتما توجه کنید که مود چیپ FT2232 روی AFIFO باشد.(برای اطلاعات بیشتر اینجا کلیک نمایید)

 

نتیجه اجرای پروژه را در تصویر زیر ملاحظه مینمایید:

matlab-afifo-imginv.jpg

 

توجه: برای اجرای این کد لازم است درایورهای D2XX شرکت FTDI روی سیستم شما نصب باشد. (لینک دانلود)

نتیجه گیری :

به وضوح مشخص است که سرعت ارسال داده در AFIFO بسیار بالاتر از UART میباشد.ارسال و دریافت یک عکس 300 کیلو بایتی با استفاده از ارتباط UART و باودریت 9600 حدود 2 دقیقه طول می‌کشد ولی با استفاده از ارتباط AFIFO  در کمتر 0.1 ثانیه ارسال و دریافت میشود.سرعت AFIFO چیزی حدود  8MB/s (معادل 64Mbps) میباشد، که تقریبا معادل 7000 برابر ارتباط UART @9600 می‌باشد!

 

خب حال بستر ارتباط متلب FPGA فراهم شد و شما میتوانید در این زمینه پژوهش های خود را شروع نمایید و دست آورد های خود را به اشتراک گذارید که تعامل را تکمیل نماییم.

 

همچنین مباحث فوق به صورت کمی مفصل تر و مقدمه ای راجب اینکه FPGA چیست بنده به چندی از بچه های دانشجو دکترا الکترونیک قدرت توضیح دادم که در این لینک زیر می توانید فیلم آن را مشاهده نمایید.

برای دانلود فایل پیوست مربوط به مثال های این آموزش را از این لینک می توانید استفاده نمایید.

 

با تشکر

سعیدی


  • mahmoud, mahdichi, M.Sadeghi و 2 فرد دیگر این پست را پسندیده اند

#2 دانشجو

دانشجو

    newbie

  • کاربر عادی
  • ستاره
  • 1 ارسال

ارسالی 04 June 2017 - 01:04 PM

چطور الگوریتم متلب را به VHDL تبدیل کنیم؟



#3 mahmoud

mahmoud

    Administrator

  • مدیریت انجمن
  • 100 ارسال

ارسالی 06 June 2017 - 10:06 AM

 

چطور الگوریتم متلب را به VHDL تبدیل کنیم؟

سلام.

این آموزش صرفا در رابطه با نحوه‌ی برقراری ارتباط FPGA با متلب از طریق پورت USB است و ارتباطی با تبدیل کد به vhdl ندارد.

برای تبدیل الگوریتم متلب به زبان vhdl میتوانید از ابزار hdl-coder متلب استفاده کنید.

چنانچه سوالی در این زمینه دارید در تاپیکی با عنوان جداگانه مطرح کنید.






0 کاربر در حال خواندن این موضوع است

0 کاربر، 0 مهمان و 0 عضو مخفی