آموزش اِف‌پی‌جی‌اِی از صفر
3.37K subscribers
520 photos
14 videos
10 files
517 links
آموزش قدم به قدم طراحی دیجیتال به کمک FPGA

🌎 آموزشگاه فراد اندیش
www.FaradAndish.com
☎️ ۴۲۴۳۹۹۰۰
ایمیل سایت:
help@faradandish.com

📌 لینک اولین پست کانال:
https://t.me/fpga0/22
Download Telegram
⚡️ چگونه اعداد مختلط را در FPGA پیاده‌سازی کنیم؟

🔷 بسیاری از الگوریتم‌های پردازش سیگنال شامل محاسباتی روی اعداد مختلط هستند.

🔷 اما در FPGAها (و به‌طورکلی در تمامی مدارات دیجیتال)، تحقق فیزیکی یا مداری خاصی برای پیاده‌‌سازی اعداد مختلط وجود ندارد.

پس برای پیاده‌سازی سیگنال‌ها و پورت‌‌های ورودی و خروجی مختلط در FPGA چه راه‌‌حلی وجود دارد؟

همان‌طور که می‌دانید، هر عدد مختلط از دو بخش حقیقی و موهومی تشکیل شده است.

🔷 مثال:
X = 2 + 3i
Xr = 2
Xi = 3
که در آن Xr، قسمت حقیقی و Xi، قسمت موهومی عدد X است.

به ازای هر سیگنال یا پورت مختلط، دو سیگنال تعریف می‌کنیم:

یکی برای بخش حقیقی سیگنال و دیگری برای بخش موهومی آن.

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

البته این کار شامل جزئیات دیگری هم هست که آن‌ها را به طور کامل و به همراه یک مثال، در ویدئوی "پیاده‌سازی اعداد مختلط در FPGA" توضیح داده‌ام:

http://bit.ly/ComplexNum

🆔 @FPGA0
سوال:

این سوال خیلی از دوستان دیگر من هم هست: اینکه در آگهی های استخدام اومده، پیاده سازی الگوریتم های پردازشی با زبان VHDL بر روی FPGA چه رزومه و مهارت هایی رو باید داشته باشیم؟ اینکه مثلا چه الگوریتم هایی، پیاده سازیش در FPGA متداوله و یک مبتدی از کجا باید شروع کنه پردازش رو.

📝 جواب:

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

همان‌طور که چندین بار در کانال و همچنین در صفحه مربوط به دوره‌ی پردازش سیگنال با FPGA توضیح دادم، پیش‌نیاز ورود به موضوع پیاده‌سازی الگوریتم‌های پردازشی، آشنایی نسبی با FPGA و زبان VHDL یا Verilog است.

🌎 https://goo.gl/oSHLWC

تصور بسیاری از علاقمندان به این مهارت این است که مرحله‌ی بعدی، آشنایی با الگوریتم‌های پردازش سیگنال است، که البته درست نیست. چون شما به عنوان یک پیاده‌ساز الگوریتم‌های پردازشی با FPGA نیاز به تسلط به انواع الگوریتم‌ها و نحوه‌ی طراحی آن‌ها ندارید.

آنچه در این مرحله نیاز دارید، یادگیری مهارت‌های ویژه‌ای است که در پیاده‌سازی الگوریتم‌های پردازش سیگنال با FPGA به کار می‌رود. برای یادگیری این مهارت‌ها، نیاز به آشنایی با الگوریتم‌ها ندارید.

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

برای شروع، در صورتی که آشنایی نسبی با FPGA و یک زبان توصیف سخت‌افزاری دارید، می‌توانید از کتاب‌هایی که در این زمینه وجود دارند و من دو مورد از آن‌ها را در کانال معرفی کرده‌ام استفاده کنید 👇

🌎 http://goo.gl/9vGL3n
🌎 https://goo.gl/DlK1lP

در صورت تمایل و برای اینکه مسیر یادگیری و تسلط بر این مهارت‌های ویژه را در زمان کوتاه‌تری طی کنید، می‌توانید در دوره پردازش سیگنال با FPGA هم شرکت کنید 👇

🌎 https://goo.gl/oSHLWC

در این دوره، شما را با یک روش ۷-مرحله‌ای استاندارد آشنا می‌کنم که به کمک آن می‌توانید هر نوع الگوریتم پردازش سیگنال دیجیتال را به کمک FPGA پیاده‌سازی کنید. این الگوریتم‌ها می‌توانند در حوزه پردازش تصویر، پردازش صوت، مخابرات، رادار و یا هر حوزه پردازشی دیگر باشند.

🆔 @FPGA0
🖥 سمینار آنلاین "۷ گام پیاده‌سازی الگوریتم‌های پردازش سیگنال با FPGA" دیروز ساعت ۷ بعد از ظهر با حضور بیش از ۲۰۰ نفر برگزار شد.

❇️ با توجه به مشکلات اینترنتی کشور در چند روز گذشته، بعضی از ثبت‌نام کنندگان در سمینار برای ورود به جلسه دچار مشکل شدند. به همین دلیل تصمیم گرفتیم این سمینار را مجددا روز چهارشنبه ساعت ۷ بعد از ظهر برگزار کنیم.

🔷 ثبت‌نام رایگان در سمینار آنلاین، از فردا صبح مجددا شروع می‌شود.

🆔 @FPGA0
⚡️ چگونه می‌توان اعداد اعشاری را در FPGA پیاده‌سازی کرد؟ (قسمت اول)

1️⃣ روش اول: Floating-point

استانداردهای این روش، توسط سازمان IEEE تدوین شده که شامل استاندارد ۳۲ بیتی و ۶۴ بیتی هستند.

مزیت روش Floating-point:

🔷 اعداد اعشاری را با دقت بسیار زیادی نمایش می‌دهد.

معایب روش Floating-point:

🔷 پیاده‌‌سازی این روش، مشکل است.

🔷 منابع سخت‌‌افزاری زیادی را مصرف می‌‌کند.

🔷 سرعت مدار را کاهش دهد.

2️⃣ روش دوم: Fixed-point

مزایای روش Fixed-point:

🔷 منابع سخت‌‌افزاری کمتری را نسبت به روش اول اشغال می‌‌کند.

🔷 سرعت بسیار بیشتری نسبت به روش اول دارد.

عیب روش Fixed-point:

🔷 اعداد اعشاری را با دقت کمتری نسبت به روش Floating-point نمایش می‌دهد.

به دلیل دو مزیتی که روش Fixed-Point دارد، اکثر پیاده‌‌سازی‌‌‌ها در FPGA را به کمک روش Fixed-Point انجام می‌‌دهیم.

ادامه دارد...

🆔 @FPGA0
⚡️چگونه می‌توان اعداد اعشاری را در FPGA پیاده‌سازی کرد؟ (قسمت دوم)

🔷 برای تفسیر یک عدد باینری باید دو مورد زیر مشخص باشند:

عدد موردنظر، علامت‌‌دار است یا بدون علامت؟

نقطه‌ی باینری (کسری)، در کدام مکان از این عدد قرار گرفته است؟

🔷 مثال: عدد باینری زیر، نشان‌دهنده‌ی چه عددی در مبنای ده است؟

1001010=?

1⃣ حالت اول: اگر فرض کنیم این عدد، یک عدد بدون علامت است، با توجه به ارزش‌گذاری هر رقم در اعداد باینری، خواهیم داشت:

(1×2^64)+(1×2^8)+(1×2^1) = 74

2⃣ حالت دوم: اگر فرض کنیم این عدد، یک عدد علامت‌دار و از نوع مکمل دو است، داریم:

-((1×32)+(1×16)+(1×4)+(1×2)) = -54

3⃣ حالت سوم: اگر فرض کنیم این عدد، یک عدد اعشاری بدون علامت است و نقطه‌ی کسری آن کنار بیت سوم قرار دارد:
1001.010 = ?

(1×2^3)+(1×2^1)+(1×2^(-2)) = 8+1+0.25 = 9.25

🔷 ما در بالا، بسته به علامت‌دار بودن یا نبودن عدد و محل نقطه‌ی کسری (در صورت وجود)، سه تفسیر مختلف از یک عدد باینری داشتیم.

🔷 عدد باینری ما در این مثال، عدد 1001010 بود که در سخت‌افزار دیجیتال قرار دارد.

🔷 بدون تغییر این عدد و تنها با تغییر فرضی که در ذهن ما وجود دارد تفسیرهای مختلفی از آن داشتیم.

🔷 پس، مفهوم یک عدد باینری به تفسیری که از آن می‌‌شود، بستگی دارد.

ادامه دارد...

🆔 @FPGA0
⚡️چگونه می‌توان اعداد اعشاری را در FPGA پیاده‌سازی کرد؟ (قسمت سوم)

آیا ما در FPGA ابزاری برای مشخص کردن نقطه باینری (کسری) داریم؟

خیر؛ در پیاده‌‌سازی دیجیتال، ما نمی‌‌توانیم نقطه‌ی باینری را به صورت فیزیکی پیاده سازی کنیم.

ما فقط رقم‌های باینری را در خانه‌های حافظه‌ی سیستم قرار می‌دهیم.

بنابراین سوالی که پیش می‌آید این است که "نقطه‌ی باینری" کجاست؟

پاسخ: نقطه‌ی باینری در ذهن شما به عنوان پیاده‌ساز مدار دیجیتال است.

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

اما این کار را چگونه باید انجام داد؟

برای مثال، فرض کنید بخواهید یک جمع اعداد کسری به صورت زیر را به روش Fixed-Point در FPGA پیاده‌‌سازی کنید:

001101010.10011
+
10110.100
= ?

برای در نظر گرفتن نقطه‌ی باینری در محاسبات، باید به صورت زیر عمل کنید:

1⃣ همان‌گونه که در جمع روی کاغذ، باید نقطه‌‌های باینری دو عدد را زیر هم قرار دهید تا عمل جمع به صورت صحیح انجام شود، در اینجا نیز باید همین کار را انجام دهید:

001101010.10011
+
10110.100
= ?

2⃣ در واقع باید در کد VHDL، به سمت راست عددی که رقم اعشار کمتری دارد، به کمک عملگر Concatenation، صفر اضافه کنید، تا عملیات جمع به صورت زیر درآید:

001101010.10011
+
10110.10000
=
001100001.00011

بدین ترتیب، با اضافه کردن تعدادی صفر به سمت راست یکی از اعداد، محل نقطه‌ی باینری (که برای هر دوی این اعداد اعشاری در ذهن شما بود)، در سخت‌افزار زیر هم قرار می‌گیرد.

البته این کار شامل جزئیات دیگری هم هست که آن‌ها را به طور کامل و به همراه پیاده‌سازی یک مثال به زبان توصیف سخت‌افزار VHDL، در ویدئوی "پیاده‌سازی محاسبات اعشاری در FPGA" توضیح داده‌ام:

http://bit.ly/ImplementDecimals

🆔 @FPGA0
🆔 @FPGA0
#برنامه_ویدئویی۲۲
🎓 پیاده‌سازی محاسبات اعشاری در FPGA

🎥 برنامه ویدئویی احمد ثقفی
🕘 زمان: ۱۲ دقیقه

📥 در سایت فراد اندیش ببینید 👇👇👇👇

🌎 http://bit.ly/ImplementDecimals
سوال:

1- کتابی به من معرفی کنید که جامع و شامل باشد هرچند لاتین باشد که اعتماد به نفس کار کردن را به من بدهد.
2- برای کسب درامد خوب و عالی از FPGA چه چیزهای را در ارتباط با آن باید خوب بلد باشیم. اگر کتابی هست معرفی کنید.
3- در صنایع نظامی از یک متخصص FPGA چه چیزهایی را میخواهند.

📝 جواب:

۱- متاسفانه من چنین کتابی را نمی‌شناسم و احتمال می‌دهم که وجود هم نداشته باشد. برای یادگیری و تسلط به این حوزه، نیاز است که موارد مختلفی را از کتاب‌ها و مستندات شرکت سازنده FPGA (مثلا Xilinx) مطالعه کنید و همچنین از تجربه‌ی افراد باسابقه در این زمینه استفاده کنید.

قبلاً چند کتاب را در کانال معرفی کرده‌ام که می‌توانید از آن‌ها استفاده کنید:

🌎 http://goo.gl/Qv9s1E

🌎 http://goo.gl/YD75W8

۲- برای کسب درآمد عالی در این زمینه، باید اولاً، پیاده‌سازی مدارات دیجیتال با FPGA را به خوبی یاد بگیرید و به آن مسلط شوید. یعنی به زبان VHDL یا Verilog کاملاً مسلط شوید و آن را درک کنید و همچنین به FPGA و نحوه بکارگیری مناسب و صحیح منابع موجود در آن مسلط شوید.

در مرحله‌ی بعد، بهتر است در مورد نحوه پیاده‌سازی الگوریتم‌های پردازش سیگنال دیجیتال با FPGA مطالعه و تمرین کنید؛ چون این حوزه، بیشترین کاربرد FPGA را شامل می‌شود و اگر شما به آن مسلط شوید، حتما درآمد خوبی هم خواهید داشت.

۳- در صنایع نظامی همه مواردی را که در بند ۲ اشاره کردم از شما انتظار دارند.

البته به این نکته هم توجه داشته باشید که همین الان افرادی با توانایی کمتر در این حوزه در صنایع مختلف مشغول به کار هستند. اما مواردی که به آن‌ها اشاره کردم، اگر کمی تجربه هم به آن اضافه شود، می‌تواند برای رسیدن به درآمد خیلی خوب به شما کمک کند.

🆔 @FPGA0
⚡️عملیات ضرب در FPGA چگونه پیاده‌سازی می‌شود؟ (قسمت اول)

🔷 عملیات ضرب در الگوریتم‌‌های پردازش سیگنال بسیار پرکاربرد است.

🔷 عملیات‌های جمع، تفریق و ضرب در زبان VHDL به صورت تعریف شده هستند.

🔹یعنی برای پیاده‌‌سازی یک مدار جمع، تفریق یا ضرب نیازی نیست که خودتان مداری طراحی کنید.

🔷 بلکه فقط کافی است که در زبان VHDL، از عملگرهای + ، - و * استفاده کنید.

🔹 در این صورت، نرم‌‌افزار پیاده‌‌ساز، به صورت خودکار، مدار مناسبی را درون FPGA پیاده‌‌سازی می‌‌کند.

اما اگر عملگر ضرب (*) را در کدتان به کار ببرید، پیاده‌‌سازی ضرب‌‌کننده در مدار شما چگونه اتفاق می‌افتد؟

ادامه دارد...
🆔 @FPGA0
⚡️عملیات ضرب در FPGA چگونه پیاده‌سازی می‌شود؟ (قسمت دوم)

🔷 به صورت کلی، برای پیاده‌‌سازی مدارات دیجیتال در FPGA، از یکی از مهم‌‌ترین منابع سخت‌افزاری داخل FPGA، یعنی Look-Up Tableها (LUT‌ها) استفاده می‌‌شود.

🔷 بلوک‌های LUT، حافظه‌‌های کوچکی هستند که می‌توان هر مدار دیجیتالی را به کمک آن‌ها پیاده‌‌سازی کرد.

🔷 در عمل، پیاده‌‌سازی یک مدار دیجیتالی بزرگ به این صورت انجام می‌شود:

🔹مدار به بخش‌‌ها و توابع کوچکی تقسیم می‌شود.

🔹هر کدام از توابع کوچک، به کمک یک LUT پیاده‌‌سازی می‌شود.

🔹با به هم متصل کردن این LUTها، مدار اصلی تشکیل می‌شود.

🔷 موضوع پیاده‌‌سازی عمل ضرب در FPGA‌ها، کمی متفاوت از عمل جمع و تفریق است.

🔷 از آنجا که عملیات ضرب در پیاده‌‌سازی‌های دیجیتال بسیار پرکاربرد است، بلوک‌‌های سخت‌‌افزاری مخصوصی در FPGA وجود دارد که به طور خاص، عمل ضرب را انجام می‌دهند.

🔷 در FPGAهای شرکت Xilinx، به بلوک‌‌های سخت‌‌افزاری از پیش آماده شده برای پیاده‌سازی عملیات ضرب، اصطلاحاً بلوک DSP48 گفته می‌‌شود.

ادامه دارد...
🆔 @FPGA0
⚡️عملیات ضرب در FPGA چگونه پیاده‌سازی می‌شود؟ (قسمت سوم)

🔷 اگر در کد شما، عملگر ضرب استفاده شود، نرم‌‌افزار سنتز به صورت پیش‌‌فرض، آن را با استفاده از یک بلوک DSP48 (و نه با استفاده از LUTها)، پیاده‌‌سازی می‌‌کند.

🔷 مثال:
اگر در کد شما، عبارتی مانند A=B*C وجود داشته باشد، نرم‌‌افزار سنتز، آن را با استفاده از یک بلوک DSP48 پیاده‌سازی می‌کند.

🔷 همان‌طور که می‌‌دانیم، هر سخت‌‌افزار دیجیتالی (از جمله ضرب‌‌کننده‌ها) را می‌توانیم به کمک LUTها نیز پیاده‌‌سازی کنیم.

پس چرا نرم‌افزار سنتز، به صورت پیش‌فرض، به جای LUT‌ها، از بلوک‌‌های سخت‌‌افزاری DSP48 برای پیاده‌‌سازی ضرب‌‌کننده استفاده می‌‌کند؟

ادامه دارد...
🆔 @FPGA0
⚡️عملیات ضرب در FPGA چگونه پیاده‌سازی می‌شود؟ (قسمت چهارم)

🔷 استفاده از بلوک DSP48، که مخصوص پیاده‌‌سازی ضرب است، مزایای مختلفی نسبت به استفاده از LUTها (از منابع عمومی FPGA) دارد:

1⃣ ضرب‌کننده‌ای که با بلوک DSP48 پیاده‌سازی می‌شود نسبت به ضرب‌کننده‌ای که با بلوک LUT پیاده‌سازی می‌شود سرعت بسیار بیش‌تری دارد.

🔹بنابراین، مدار شما می‌تواند با سرعت بیش‌تری کار کند.

2⃣ در صورت استفاده از بلوک DSP48 می‌توانید منابع عمومی کمتری از FPGA را مصرف کنید.

🔹فرض کنید در مدار شما، تعداد زیادی ضرب‌‌کننده وجود داشته باشد...

🔹اگر برای پیاده‌‌سازی همه‌‌ی این ضرب‌‌کننده‌‌ها از بلوک‌‌های LUT استفاده شود، تعداد زیادی از بلوک‌‌های LUT موجود در FPGA (که در واقع باید برای پیاده‌‌سازی بخش‌‌های دیگر مدار استفاده شوند) هدر می‌روند و فضای FPGA به سرعت اشغال می‌شود.

3⃣ بلوک‌‌های DSP48 نسبت به حالتی که شما بخواهید برای عملیات ضرب از تعدادی بلوک LUT استفاده کنید، توان مصرفی کمتری دارند.

به این دلایل، نرم‌افزار به صورت پیش‌فرض به جای LUT‌ها از بلوک‌‌های DSP48 استفاده می‌کند.

بلوک DSP48، علاوه بر ضرب ساده، عملگرهای دیگری را نیز می‌تواند پیاده‌سازی کند که آن‌ها را به همراه مثال، در ویدئوی "پشت پرده عملیات ضرب در FPGA" توضیح داده‌ام:

🌎http://bit.ly/MultiplicationDSP48

🆔 @FPGA0
🆔 @FPGA0
#برنامه_ویدئویی۲۸
🎓 پشت پرده عملیات ضرب در FPGA

🎥 برنامه ویدئویی احمد ثقفی
🕘 زمان: ۲۲ دقیقه

📥 در سایت فراد اندیش ببینید 👇👇👇👇

🌎 http://bit.ly/MultiplicationDSP48
سوال:

من مطالب داخل سایتتون رو دنبال می‌کنم. می‌خواستم بدونم نیازه دوره آنلاین مقدماتی رو شرکت کنم؟ یا بهتره فقط دوره‌ی آنلاین پردازش سیگنال با FPGA رو ثبت‌نام کنم؟

📝 جواب:

در حال حاضر، دو دوره‌ی آنلاین اصلی در آموزشگاه فراداندیش برگزار می‌شود. در مورد این دوره‌ها لطفاً به نکات زیر توجه کنید:

🔵 دوره‌ی آنلاین "طراحی دیجیتال با FPGA" یک دوره‌ی مقدماتی نیست؛ بلکه یک دوره‌ی آموزشی کامل است که از پایه، تمام موارد لازم برای پیاده‌سازی انواع مدارات دیجیتال را در آن می‌آموزید. پیش‌نیاز این دوره، فقط آشنایی عمومی با مدارات منطقی است.

🌎 https://faradandish.com/product/online-fpga-design/

✳️ دوره‌ی آنلاین "پردازش سیگنال با FPGA" یک دوره تکمیلی برای یادگیری مهارت پیاده‌سازی الگوریتم‌های پردازش سیگنال با FPGA است. پیش‌نیاز این دوره، آشنایی نسبی با زبان VHDL و FPGA است.

🌎 https://faradandish.com/onlinefpgaprocessing/

🔹 اگر شما آشنایی نسبی با زبان VHDL و خود FPGA دارید، شرکت در دوره‌ی آنلاین پردازش سیگنال با FPGA می‌تواند یک قدم بسیار بزرگ برای تحول در تحصیل و شغل شما باشد.

🔹 اگر با FPGA آشنا نیستید، در دوره‌ی آنلاین طراحی دیجیتال با FPGA می‌توانید به طور کامل با روش‌های حرفه‌ای کدنویسی به زبان VHDL و همچنین نحوه‌ی اصولی استفاده از منابع دیجیتالی FPGA آشنا شوید.

🔹 مهارت‌هایی که در هر دو دوره‌‌ی آنلاین می‌آموزید، برگرفته از تجربه‌ی حرفه‌ای من در طراحی و ساخت سیستم‌های پیشرفته پردازش سیگنال با FPGA است.

🆔 @FPGA0
📚 این کتاب می‌تواند به عنوان مرجع شما در بکارگیری زبان VHDL به کار برود.

🔹 بر خلاف بسیاری از کتاب‌های مشابه، مثال‌های این کتاب با هدف سنتز شدن و پیاده‌سازی روی FPGA تهیه شده‌اند.

🔹 مسایل مربوط به طراحی دیجیتال، تا حد زیادی در کنار آموزش زبان VHDL مطرح شده است.

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

🔹 اگر در حال یادگیری زبان VHDL هستید، پیشنهاد می‌کنم حتما این کتاب را دانلود کنید و از آن به عنوان مرجع در زمان یادگیری و پس از آن استفاده کنید.

احمد ثقفی

🆔 @FPGA0
🆔 @FPGA0

📚 عنوان: Circuit Design with VHDL

👤 نویسنده: Volnei A. Pedroni
📅 سال انتشار: 2004
🖨 ناشر: Volnei A. Pedroni

📥 لینک دانلود: http://bit.ly/VHDLbook