آموزش اِف‌پی‌جی‌اِی از صفر
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، می‌توانیم هر مدار منطقی را پیاده‌ساز‌‌ی کنیم؟
Anonymous Quiz
69%
Logic Cell
12%
ضرب‌‌‌کنند‌‌ه‌‌‌
19%
حافظه بلوکی
♨️ برای اطلاعات بیشتر درباره منابع سخت‌افزاری درون FPGA و کاربرد هر کدام، به مجموعه پست زیر مراجعه کنید👇👇👇

https://t.me/fpga0/977
https://t.me/fpga0/978
https://t.me/fpga0/980

🆔 @FPGA0
⚡️ چگونه استفاده از IP به پیاده‌سازی‌های ما کمک می‌کند؟

🔷 عبارت IP یا به طور کامل‌تر IP Core، مخفف کلمه Intellectual Property Core است و به ماجول‌هایی اشاره دارد که از قبل توسط افراد یا شرکت‌هایی آماده و تست شده‌اند و عملکرد صحیح آن‌ها تضمین شده است.

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

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

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

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

1️⃣ افزایش سرعت روند پیاده‌سازی سیستم‌ها

2️⃣ صرفه‌جویی در هزینه توسعه پروژه

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

🌀 به این موضوع نیز توجه داشته باشید که شما نمی‌توانید کل یک پروژه را به‌کمک IPها پیاده‌سازی کنید.

🌀 بنابراین، وجود IPها شما را از کدنویسی HDL بی‌نیاز نمی‌کند.

اما چگونه از این IPها در پروژه استفاده کنیم؟

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

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

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

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

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

در مقاله "معرفی IPها در نرم‌افزار ISE و نحوه به‌گارگیری آن‌ها" از سایت فراد اندیش، نحوه به‌کارگیری IP در پروژه به‌کمک یک مثال عملی شرح داده شده است.👇👇👇

🌎 http://bit.ly/FPGA-Implementation-IP

🆔 @FPGA0
🆔 @FPGA0
#برنامه_ویدئویی۱۶
🎓 معرفی IPها در نرم‌افزار ISE و نحوه بکارگیری آنها

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

📥 در سایت فراد اندیش ببینید 👇👇👇👇
🌎 http://bit.ly/FPGA-Implementation-IP
⚡️ فرآیند درستی‌‌آزمایی به‌کمک نرم‌افزار متلب
⚡️ فرآیند درستی‌‌آزمایی به‌کمک نرم‌افزار متلب

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

🌀 برای ساختن چنین مدلی، ممکن است از نرم‌افزار متلب یا حتی یک زبان برنامه‌‌نویسی، مانند زبان C استفاده کنید.

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

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

🌀 فرض کنید شما در نرم افزار ISE به زبان VHDL یا Verilog، ماجول خودتان را پیاده‌‌سازی کرده‌اید.

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

🌀 برای شبیه‌‌سازی، نیاز به ایجاد یک تست‌‌بنچ دارید و باید ورودی‌‌های مورد نظرتان را درون تست‌‌بنچ به ماجول اعمال کنید.

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

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

🔷 پس از این مقایسه (که آن را به‌کمک نرم‌‌افزار متلب انجام می‌‌دهیم)، می‌‌توانیم مطمئن شویم که آیا عملکرد مداری که در نرم افزار ISE پیاده‌‌سازی کرده‌‌ایم، کاملاً مشابه عملکرد مدل ما در نرم‌‌افزار متلب یا C است یا خیر.

برای درک بهتر این فرآیند، به بلوک دیاگرام توجه کنید؛ این بلوک دیاگرام، ارتباط بین نرم‌‌افزار سطح بالایی چون متلب و نرم‌‌افزار پیاده‌‌سازی مثل ISE را در فرآیند درستی‌‌آزمایی به‌صورت کامل نشان می‌‌دهد.

همچنین، در مقاله «درستی‌آزمایی مدار دیجیتال به‌کمک متلب» در سایت فراد اندیش، در قالب یک مثال، تمامی مراحل فرایند درستی‌آزمایی به‌صورت گام به گام بررسی شده‌اند:👇👇👇

🌎 http://bit.ly/Verification-MATLAB

🆔 @FPGA0
🆔 @FPGA0
#برنامه_ویدئویی۳۲
🎓 درستی‌آزمایی مدار دیجیتال به کمک متلب

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

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

🌎 http://bit.ly/Verification-MATLAB
⚡️ چرا در کدهایمان از متغیر استفاده نمی‌کنیم؟ (قسمت اول)

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

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

اما منظور از متغیر در زبان VHDL چیست و چرا استفاده از آن در پیاده‌سازی‌ها را توصیه نمی‌کنم؟

به‌طور کلی، در زبان VHDL سه نوع object داریم:

❇️ signal
❇️ constant
❇️ variable

در این مجموعه پست، به بیان تفاوت‌های متغیر با دو نوع object دیگر می‌پردازم تا مشخص شود که چرا استفاده از متغیر را توصیه نمی‌کنم.

❇️ signal

🔷 شاید بتوان گفت که مهم‌ترین objectای که در زبان VHDL استفاده می‌شود signal است. در واقع، بخش عمده‌ای از کد شما را سیگنال‌ها تشکیل می‌دهند.

🔷 محل تعریف سیگنال‌ها در کد VHDL، محیط decleration یا معرفی است. این محیط، قبل از begin در بخش architecture واقع شده است.

🔷 برای مقداردهی به یک سیگنال در کد VHDL، از علامت کوچکتر-مساوی (=>) یا signal assignment استفاده می‌کنیم.

🌀 برای مثال، در ارجاع زیر مقدار B را به سیگنال A ارجاع داده‌ایم:

A <= B;

🔷 سیگنالی که در بخش معرفی تعریف می‌کنید در تمام کد قابل دسترسی است؛ در واقع، این سیگنال در محیط کانکارنت و در تمامی پراسس‌های کد قابل استفاده است.

اما تحقق فیزیکی سیگنال در FPGA در قالب چه سخت‌افزاری است؟

اگر شما به یک سیگنال در محیط کانکارنت ارجاع دهید، آن سیگنال تبدیل به یک سیم می‌شود.

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

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

🆔 @FPGA0
♨️ برای اطلاعات بیشتر درباره بلوک DCM و مزایای آن برای پیاده‌سازی کلاک در FPGA، به مجموعه پست زیر مراجعه کنید👇👇👇

https://t.me/fpga0/888
https://t.me/fpga0/890
https://t.me/fpga0/892

🆔 @FPGA0
⚡️ چرا در کدهایمان از متغیر استفاده نمی‌کنیم؟ (قسمت دوم)

🔷 در قسمت قبل، به معرفی انواع object در زبان VHDL و بررسی signal پرداختم. در این بخش، constant را بررسی می‌کنم.
❇️ constant

🔷 در زبان VHDL، شما می‌توانید constant را در محیط معرفی (قبل از begin در بخش architecture) تعریف کنید.

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

🔷 در واقع، نمی‌توانید در خلال کد، مقدار جدیدی به آن اعمال کنید. مقدار constant در هنگام تعریفش مشخص می‌شود و همان مقدار باقی می‌ماند.

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

اما تحقق فیزیکی و دیجیتالی constant در FPGA به چه صورت است؟

🔷 با توجه به اینکه constant یک مقدار ثابت است، در پیاده‌سازی، به کمک Vcc و GND‌هایی که درون FPGA وجود دارد استفاده می‌شود.

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

🆔 @FPGA0
⚡️ چرا در کدهایمان از متغیر استفاده نمی‌کنیم؟ (قسمت سوم)

🔷 در قسمت‌های قبل،‌ دو object سیگنال و constant را معرفی و بررسی کردیم. در این بخش، به‌سراغ variable می‌رویم تا ببینیم که متغیر در زبان VHDL دقیقاً چیست و نحوه پیاده‌سازی آن به چه صورت است؟

❇️ variable

🔷 محل تعریف variable، درون پراسس و قبل از کلمه begin در این بخش است.

🔷 از متغیر تنها می‌توان در پراسسی که در آن تعریف شده است استفاده کرد. اما اگر به خاطر داشته باشید، سیگنال و constant را می‌توانستیم در تمام کد (شامل محیط کانکارنت و پراسس‌ها) به‌کار ببریم.

🔷 برای ارجاع signal از علامت (=>) استفاده می‌کردیم اما برای ارجاع variable باید از علامت (=:) استفاده کنیم.

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

برای اطلاعات بیشتر، ویدئوی پیاده‌سازی کاملاً سنکرون را مشاهده کنید:

🌎 http://bit.ly/Synchronous-Implementation

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

🔷 وقتی درون یک پراسس، مقداری رابه یک متغیر ارجاع می‌دهید، مقدار متغیر در همان لحظه تغییر می‌کند. بنابراین، در ارجاعات سطرهای بعدی، مقدار جدید متغیر لحاظ می‌شود.

🔷 همان‌طور که می‌دانید، با آغاز به‌کار پراسس، تمامی ارجاعات به‌صورت هم‌زمان شروع به انجام شدن می‌کنند.

🔷 اما وقتی در یک پراسس متغیر داشته باشید، ارجاعاتی که در سمت راست آن‌ها متغیر حضور دارد، با شروع پراسس نمی‌توانند انجام شوند؛ زیرا ابتدا باید به متغیرها ارجاع انجام شود و مقدار آن‌ها تغییر کند.

🔷 همان‌طور که احتمالاً حدس می‌زنید، این موضوع می‌تواند موجب کند شدن مدار شما می‎شود.

پس، استفاده از متغیر ممکن است سرعت مدار را کاهش می‌دهد.

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

به این ترتیب،‌ با مشاهده شماتیک دو مدار و مقایسه آن‌ها، دیدگاه واضح‌تری نسبت به تاثیر استفاده از متغیر در پیاده‌سازی‌ها خواهید داشت:

🌎 http://bit.ly/VHDL-Variable

🆔 @FPGA0
🆔 @FPGA0
#برنامه_ویدئویی۳۶

🎓 چرا هرگز از متغیر در زبان VHDL استفاده نمی‌کنم؟

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

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

🌎 http://bit.ly/VHDL-Variable
کدام تراشه زیر دارای هسته پردازشی (CPU) است؟
Anonymous Quiz
15%
ARM
18%
FPGA
4%
AVR
63%
گزینه ۱ و ۳
♨️ برای اطلاعات بیشتر درباره تفاوت ماهیت FPGA و پردازنده‌ها، به مجموعه پست زیر مراجعه کنید👇👇👇

https://t.me/fpga0/869
https://t.me/fpga0/870

🆔 @FPGA0
🆔 @FPGA0
#مقاله۱۴
🎓 مراحل پروگرام کردن FPGA

📚 نوشته فاطمه مشاک

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

🌎 http://bit.ly/ProgrammingFPGA
♨️ برای اطلاعات بیشتر درباره پیاده‌سازی کلاک در FPGA، به مجموعه پست زیر مراجعه کنید👇👇👇
https://t.me/fpga0/882
https://t.me/fpga0/883
https://t.me/fpga0/884

🆔 @FPGA0
برای پیاده‌سازی ضرب در FPGA بهتر است از کدام منبع سخت‌افزاری استفاده کنیم؟
Anonymous Quiz
68%
DSP48
32%
LUT