آموزش اِف‌پی‌جی‌اِی از صفر
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
⚡️چطور سرعت یک مدار دیجیتال را افزایش دهیم؟(قسمت سوم)

4️⃣ روش چهارم: تنظیم قیود پیاده‌سازی

تنظیم قید Period

🔷 با تنظیم این قید به نرم افزار اطلاع می‌دهیم که قصد داریم چه فرکانسی به مدار اعمال کنیم.

🔷 برای مثال در صورتی که فرکانس اعمال شده به مدار 50MHz باشد، باید کد زیر را در فایل UCF وارد کنیم:

NET "Clock" TNM_NET = Clock;
TIMESPEC TS_Clock = PERIOD "Clock" 50 MHz HIGH 50% ;

در کد بالا فرض شده که نام پورت کلاک، Clock است.

🆔 @FPGA0
⚡️⚡️چطور سرعت یک مدار دیجیتال را افزایش دهیم؟⚡️⚡️

♨️ در فرآیند انجام یک پروژه حرفه‌ای گاهی از شما خواسته می‌شود که سرعت یک مدار دیجیتال را که خودتان یا شخص دیگری پیاده‌سازی کرده است، افرایش دهید؛

♨️ شما باید خودتان را برای چنین روزی آماده کنید.

♨️ در پست‌های قبلی کانال، به بررسی این موضوع پرداختیم و راه‌حل‌های زیر را ارائه دادیم:

1⃣ روش اول: تغییر در الگوریتم

2⃣ روش دوم: تغییر در معماری

روش پایپ لاین

روش موازی

3⃣ روش سوم: رعایت الگوی استاندارد کدنویسی

رعایت نکات فنی مرتبط با ساختارهای شرطی IF و CASE

استفاده حداکثری از منابع اختصاصی FPGA به جای منابع عمومی (LUTها)

پیاده‌سازی مدار به صورت کاملاً سنکرون

استفاده هوشمندانه از حافظه‌های بلوکی و توزیع شده

4⃣ روش چهارم: تنظیم قیود پیاده‌سازی

تنظیم قید Period

برای آشنایی بیشتر با تکنیک‌های افزایش سرعت مدارهای دیجیتال، می‌توانید به مقالات و ویدئوهای زیر از سایت فراداندیش مراجعه کنید:

چگونه سرعت مدار دیجیتال را افزایش دهیم؟:

http://bit.ly/SystemSpeed

الگوی استاندارد کدنویسی برای FPGA:

http://bit.ly/StandardCoding

افزایش سرعت مدار با تنظیم قیدها در ISE:

http://bit.ly/SetConstrains

🆔 @FPGA0
سوال:

من و دوستانم با این مشکل مواجه هستیم که هنوز به تسلط نسبی در میکروکنترلرها و زبان C نرسیدیم و از طرفی مشتاقیم برای یادگیری FPGA و VHDL. بعضی از افرادی که FPGA و VHDL کار کردن، هشدار میدادن که فراگیری همزمان VHDL و C در روند یادگیری و تسلط به VHDL مشکل ایجاد میکنه.

میخواستم با توجه به تجربه ای که در این زمینه دارید، در مورد این مشکل راهنمایی کنید. آیا همزمانی یادگیری زبان C و VHDL رو توصیه میکنید و مفید میدونید یا خیر؟️

📝 جواب:

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

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

دو موضوع توصیف سخت‌افزار دیجیتال به کمک زبان VHDL و نوشتن یک نرم‌افزار به کمک زبان C کاملا متفاوت هستند. برای آشنایی بیشتر با تفاوت‌های موجود بین FPGAها و پردازنده‌ها می‌توانید #برنامه_ویدئویی۳ را ببینید 👇

🌎 http://bit.ly/FPGAvsCPU

برای آشنایی اولیه با زبان توصیف سخت‌افزاری VHDL هم می‌توانید #برنامه_ویدئویی۱۰ و #برنامه_ویدئویی۱۲ و #برنامه_ویدئویی۱۳ و #برنامه_ویدئویی۱۵ را ببینید 👇

🌎 http://bit.ly/36rXYin

همچنین برای آشنایی با نحوه انتخاب تکنولوژی مناسب برای پیاده‌سازی یک پروژه، می‌توانید #برنامه_ویدئویی۸ را ببینید 👇

🌎 http://bit.ly/ChooseProperHW

در این برنامه می‌آموزید، چطور از بین تکنولوژی‌هایی مثل AVR ،ARM ،DSP و FPGA، یکی را برای استفاده در یک پروژه خاص انتخاب کنید.

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

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

♨️ وقتی پروژه جدیدی به شما معرفی می‌شود، چطور از بین تکنولوژی‌هایی مثل AVR ،ARM ،DSP و FPGA یکی را انتخاب می‌کنید؟

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

🔹 هزینه‌‌‌ی کمتر‌‌

🔹 سرعت بیشتر

🔹 امکانات در دسترس

🔹 سهولت انجام پروژه

ادامه دارد...
🆔 @FPGA0
⚡️چگونه تکنولوژی مناسب برای پیاده‌سازی یک پروژه را انتخاب کنیم؟ (قسمت دوم)

برای پیاده‌سازی پروژه‌ی شما، پردازنده مناسب‌تر است یا FPGA؟

مزایای FPGA:

🔷 تراشه‌های FPGA، به دلیل قابلیت پیاده‌سازی موازی‌‌، سرعت بسیار زیاد‌‌ی دار‌‌ند.

🔷 تراشه‌های FPGA، به دلیل تعداد زیاد پایه‌‌‌ها، انعطاف‌پذیر‌‌ی زیاد‌‌ی در ارتباط با قطعات خارجی دار‌‌ند.

معایب FPGA:

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

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

بر این مبنا، بهتر‌‌ است در انتخاب تکنولوژی مناسب پیاده‌سازی، ابتدا از پرداز‌‌ند‌‌ه‌ها و همچنین از ارزان‌‌ترین پردازنده شروع کنید.

اما گاهی پردازنده‌ها سرعت و امکانات کافی، برای پیاده‌سازی پروژه‌ی شما را ندارند؛ در آن صورت، می‌توانید به انتخاب‌‌‌ها‌‌ی گران‌‌‌تر، مثل FPGA فکر کنید.

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

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

دو سوال اساسی که باید برای انتخاب سخت‌افزار از خود بپرسید:

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

سخت‌افزار، باید در چه مدت زمانی حجم محاسباتی مطرح شده را انجام دهد؟

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

به عنوان مثال:

🔷 فرض کنید یک سیستم پردازشی داریم که پاسخ دو سوال اساسی درباره‌ی آن، به صورت زیر است:

۱) الگوریتم ما به انجام پنج میلیون عملیات جمع یا ضرب نیاز دارد.

۲) سخت‌افزار، باید حداکثر در پنج میلی‌ثانیه کل الگوریتم را اجرا کند.

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

🔷 فرض کنید سه انتخاب داریم:

1⃣ یک پرداز‌‌ند‌‌ه‌‌‌ی AVR با کلاک ۲۰ مگاهرتز
2⃣ یک پردازنده‌‌‌ی ARM با کلاک ۴۰۰ مگاهرتز
3⃣ و یک FPGA.

🔷 با توجه به اینکه پرداز‌‌ند‌‌ه‌‌ی AVR از همه ارزان‌‌تر است، ابتدا بررسی می‌‌کنیم که آیا می‌توانیم این پروژه را با AVR پیاده‌‌‌ساز‌‌ی کنیم‌‌؟

🔷 در صورتی که جواب منفی بود، سراغ پرداز‌‌ند‌‌ه‌‌ی ARM می‌رویم و در صورت منفی بود‌‌ن مجدد جواب، سراغ FPGA می‌رویم‌‌.

1⃣ با توجه به اینکه کلاک AVR بیست مگاهرتز است و با فرض اینکه اجرا‌‌ی هر دستور جمع یا ضرب فقط نیاز به یک کلاک داشته باشد، با معکوس کردن کلاک، نتیجه می‌‌‌گیریم که اجرای هر دستور ۵۰ نانو‌‌ثانیه طول خواهد کشید.

۵۰ نانوثانیه از یک نانوثانیه‌ی مورد انتظار ما، بسیار بیشتر است؛ پس، سرعت AVR برای پیاده‌سازی الگوریتم ما بسیار کم است.

2⃣ کلاک پرداز‌‌ند‌‌ه‌‌‌ی ARM را برابر با ۴۰۰ مگاهرتز فرض کردیم؛ با معکوس کرد‌‌ن کلاک، به عدد ۲/۵ نانوثانیه خواهیم رسید. با فرض اجرا‌‌ی هر دستور در یک کلاک، سرعت ARM نیز برای الگوریتم ما کم است.

3⃣ بنابراین می‌توانیم با خیال راحت به سراغ FPGA برویم و به کمک قابلیت پیاده‌‌‌ساز‌‌ی موازی و منابع دیجیتالی دیگری که در FPGA وجود دار‌‌ند، این الگوریتم را به راحتی پیاده‌‌‌ساز‌‌ی کنیم.

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

🔷 سه روش برای نمایش اعداد علامت‌‌دار وجود دارد:

1️⃣ روش علامت و مقدار (sign & magnitude)

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

معایب روش علامت و مقدار:

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

🔹 برای عدد صفر، دو نمایش وجود دارد.

🔹 مثلاً، برای یک عدد باینری سه بیتی، هر دو نمایش زیر، نشان‌دهنده‌ی عدد صفر، به روش علامت و مقدار هستند:

000 = صفر
100 = صفر

2️⃣ روش مکملِ یک (one's complement)

🔷 در این روش، اعداد مثبت را به صورت باینری معمولی نمایش می‌‌دهیم.

🔷 اما برای نمایش اعداد باینری منفی، باید مکملِ یک آن عدد را محاسبه کنیم.

🔷 برای محاسبه‌ی مکمل یک، باید تمام رقم‌‌ها را not کنیم.

🔹 مثال سه‌بیتی:
+1=001
-1=110

عیب روش مکملِ یک:

🔹 دو نمایش برای عدد صفر وجود دارد.

🔹 مثلاً، برای یک عدد باینری سه بیتی، هر دو نمایش زیر، نشان‌دهنده‌ی عدد صفر هستند:

000 = صفر
111 = صفر

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

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

🔷 در پست قبلی دیدید که برای پیاده‌سازی اعداد علامت‌دار در FPGA، هر دو روش "علامت و مقدار" و "مکمل یک" معایبی داشتند.

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

3⃣ روش مکمل دو (two's complement)

🔷 در روش مکمل دو، اعداد مثبت را به صورت باینری معمولی نمایش می‌دهیم.

🔷 اما برای نمایش اعداد منفی، مکملِ دو اعداد مثبت را حساب می‌‌کنیم.

🔷 برای محاسبه‌ی مکمل دو، دو روش ذهنی وجود دارد:

روش اول: مکملِ یک را محاسبه کنید و یک واحد به آن اضافه کنید.

روش دوم: از سمت راست عدد، تمام صفر‌‌ها و اولین یک را بنویسید. سپس، بقیه‌ی رقم‌ها را not کنید.

🔹مثال:
+4=00100
-4=11100

مزایای روش مکمل دو:

🔹 پیاده‌سازی تفریق‌کننده ساده است.

🔹 برای عدد صفر، یک نمایش یکتا وجود دارد.

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

🆔 @FPGA
سوال:

من شنیدم استفاده از FPGA در کنار DSP راه حل بسیار کارآمدی میباشد. دلیلشان این بود که بعضی از الگوریتم ها توسط DSP سریعتر از FPGA انجام میشود.
سوالم اینه که اگه چنین حرفی درسته، چه نوع الگوریتمهایی در FPGA کند هستند که در DSP سریعترند؟

📝 جواب:

استفاده از DSP در کنار FPGA همانطور که شما هم اشاره کردید در بسیاری از سیستم‌های پیشرفته، یک راه مناسب برای پیاده‌سازی الگوریتم‌های پردازشی پیچیده است. چون کار با FPGA طراحی سخت‌افزار محسوب می‌شود و کار با DSP طراحی نرم‌افزار است،‌ به طراحی این نوع سیستم‌های ترکیبی Hardware/Software Codesign گفته می‌شود.

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

در مورد نحوه انتخاب تکنولوژی مناسب برای پیاده‌سازی، می‌توانید #برنامه_ویدئویی۸ را ببینید:

🌎 http://bit.ly/ChooseProperHW

موضوعی که شما در موردش سوال کردید بحث بسیار مفصلی است به طوری که بعضی از افراد در دانشگاه و صنعت متخصص این زمینه هستند و روی آن تحقیق انجام می‌دهند. آن‌ها این موضوع را بررسی می‌کنند که وظایف پردازشی را چطور بین سخت‌افزار (FPGA) و نرم‌افزار (DSP یا پردازنده‌ای درون FPGA) تقسیم کنیم. چون این موضوع تاثیر زیادی در هزینه و زمان انجام پروژه خواهد داشت.

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

🔷 در پست قبل، با روش مکمل دو آشنا شدید.

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

زیرا در این روش:

🔹 پیاده‌سازی تفریق‌کننده ساده است.

🔹 برای عدد صفر، یک نمایش یکتا وجود دارد.

برای پیاده‌سازی اعداد به روش مکمل دو در FPGA، چه باید کرد؟

طبق توصیه شرکت Xilinx، در کد VHDL، سیگنال‌هایی که قرار است روی آن‌ها محاسبات ریاضی علامت‌دار انجام شود را از نوع signed و بقیه را از نوع unsigned تعریف کنید.

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

روش مکمل دو به جز دو مزیتی که در بالا به آن اشاره شد، دارای یک مزیت کمتر شناخته شده اما مهم دیگر نیز هست که آن را در ویدئوی آموزشی زیر به طور کامل توضیح داده‌ام 👇

🌎 https://goo.gl/lQ1d5V

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

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

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

🌎 https://goo.gl/lQ1d5V
⚡️ چگونه اعداد مختلط را در 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