آموزش اِف‌پی‌جی‌اِی از صفر
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
🌟 کرونافِر چیست؟

🔹 کرونافِر از دو کلمه کرونا و آفر (به معنای پیشنهاد) تشکیل شده است و به معنای پیشنهاد کرونایی یا پیشنهادی به دلیل شرایط کرونا است.

🔹 این نامی است که برای بزرگترین پیشنهاد ویژه تاریخ فراد اندیش انتخاب کرده‌ایم.

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

🔅 برای اطلاع از این پیشنهادات روی لینک زیر کلیک کنید: 👇

🌎 https://faradandish.com/corona-offer

🔺 مهلت استفاده از کرونافِر: جمعه ۵ اردیبهشت

🆔 @FPGA0
⚡️ مزایای استفاده از بلوک DCM برای پیاده‌سازی کلاک در FPGA (قسمت چهارم)

در پست‌های قبلی به کاربرد اصلی بلوک DCM که تغییر فرکانس کلاک مدار است، اشاره شد.

همچنین، دو مزیت مهم استفاده از آن که "کاهش جیتر کلاک ورودی" و "تصحیح Duty Cycle کلاک ورودی" است بیان شد.

و اما مزیت سوم استفاده از بلوک DCM:

3⃣ استفاده‌ی خودکار از بافرهای مخصوص کلاک

🔷 در FPGA، بافرهای مخصوصی وجود دارند که باید در مسیر کلاک یا کلاک‌های ورودی مدار قرار داده شوند.

🔷 به عبارت دیگر، برای استفاده از تمام تمهیداتی که برای کلاک در FPGA وجود دارد، شما حتماً باید سیگنال کلاک مدار را به محض ورود به FPGA، از این بافرها عبور دهید.

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

🔷 اما اگر از بلوک DCM استفاده کنید، تمام بافرهای کلاک لازم، به صورت خودکار در مدار شما قرار خواهد گرفت و دیگر نیازی به instant کردن دستی آن‌ها نیست.

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

مثلاً، اگر اسیلاتور روی برد شما ۱۰۰ مگاهرتز است و فرکانس کلاک مورد نیاز مدار شما نیز ۱۰۰ مگاهرتز است، سیگنال کلاک ۱۰۰ مگاهرتز را به ورودی DCM اعمال کنید و در خروجی آن هم ۱۰۰ مگاهرتز را دریافت کنید.

به این ترتیب می‌توانید از مزایای زیادی که استفاده از DCM برای مدار شما ایجاد می‌کند، بهره ببرید.

🆔 @FPGA0
سوال:

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

📝 جواب:

در FPGAهای شرکت Xilinx پایه‌های ورودی/خروجی (I/O) مخصوصی وجود دارند به نام Gigabit Transceiver یا GT که قابلیت ارسال و دریافت دیتا حتی بیش از ۱۰ گیگابیت در ثانیه را هم دارند. البته تعداد این پایه‌ها و حداکثر سرعت آن‌ها در هر نوع از FPGAهای شرکت Xilinx متفاوت هست.

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

http://www.xilinx.com/products/technology/high-speed-serial.html

البته طراحی چنین بردی نیاز به تجربه دارد. با نرم‌افزار آلتیوم می‌توان این برد را طراحی کرد، فقط طراح حتماً باید تجربه‌ی چنین کاری را داشته باشد؛ در غیر این صورت نیاز به زمان زیادی خواهد داشت.
🆔 @FPGA0
⚡️ تحقق مداری یک سیگنال در زبان VHDL وقتی در FPGA پیاده‌سازی می‌شود چیست؟

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

🔹 به صورت یک سیم
🔹 به صورت یک رجیستر

🔷 اما سوالی که برای بسیاری از پیاده‌سازان دیجیتال با FPGA مطرح می‌شود این است:

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

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

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

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

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

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

🆔 @FPGA0
⚡️ قوانین ارجاع در زبان VHDL (قسمت اول)

🔷 در زبان VHDL، برای انجام ارجاع‌ها قوانینی وجود دارد که در ادامه به آن‌ها می‌پردازیم.

1⃣ قانون ارجاع ساده

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

🔷 برای مثال، باید عرض بیت دو سیگنال A و B در ارجاع زیر با هم برابر باشد:

A <= B;

2⃣ قانون ارجاع جمع

🔷 فرض کنید مانند کد زیر می‌خواهیم تعدادی سیگنال را با هم جمع یا تفریق کنیم:

A <= B + C – D;

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

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

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

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

🆔 @FPGA0
⚡️ قوانین ارجاع در زبان VHDL (قسمت دوم)

🔷 در قسمت قبل، با قانون ارجاع ساده و ارجاع جمع در زبان VHDL آشنا شدیم. در این قسمت، با دو قانون ارجاع دیگر آشنا خواهیم شد.

3⃣ قانون ارجاع ضرب

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

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

🔷 طبق قانون ارجاع ضرب در زبان VHDL باید عرض بیت سیگنال سمت چپ با مجموع عرض بیت‌های سیگنال‌های سمت راست برابر باشد.

🔷 برای مثال، در کد زیر باید عرض بیت سیگنال A، با مجموع عرض بیت‌های سیگنال‌های B و C برابر باشد.

A <= B * C;

4⃣ قانون ارجاع Concatenation

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

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

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

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

🆔 @FPGA0
سوال:

ايا برای يادگيري و تسلط بالاي هفتاد درصد به fpga نياز به يادگيري arm, avr, dsp هست؟ اگه هست تا چه حد؟
اين سوال من و خيلي از هم کلاسيانم هست،ممنون.

🆔 @FPGA0
📝 جواب:

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

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

🆔 @FPGA0
سوال:

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

🆔 @FPGA0
📝 جواب:

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

برای آشنایی با زبان VHDL می‌توانید برنامه‌های ویدئویی زیر را ببینید:

🌎 http://goo.gl/ex5MTg

🌎 http://goo.gl/2ejGNO

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

🌎 http://bit.ly/What-is-FPGA-1

🌎 http://bit.ly/What-is-FPGA-2

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

ما در دوره‌های تخصصی آموزشگاه فراد اندیش، زبان VHDL را آموزش می‌دهیم.

لینک نرم‌افزار ISE را قبلاً برای دانلود در پست زیر قرار دادم:

🌎 http://goo.gl/czypdO


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

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

🔷 اما عملگر تقسیم نسبت به عملگرهای دیگر محدودتر است.

🔷 عملگر '/'، فقط برای پیاده‌سازی عملیات تقسیم یک رجیستر، بر یک عدد ثابت قابل استفاده است؛ این عدد ثابت نیز حتماً باید توانی از دو باشد.

🔷 برای مثال، شما می‌‌توانید به کمک عملگر تقسیم، ریجستر A را بر یک عدد ثابت مانند 128یا 256 تقسیم کنید.

🔷 اما نمی‌‌توانید به کمک این عملگر یک رجیستر را بر رجیستر دیگر تقسیم کنید.

🔷 برای تقسیم یک رجیستر بر رجیستر دیگر، دو راه دارید: یا باید مدار ویژه‌‌ای طراحی و پیاده‌سازی کنید و یا از IP تقسیم‌کننده‌ی نرم‌افزار ISE استفاده کنید.

🔷 در مقاله‌ی "پیاده‌سازی عملیات تقسیم در FPGA" نحوه‌ی انجام تنظیمات و استفاده از IP تقسیم‌کننده‌ را به‌طور مفصل شرح داده‌ام:

🌎 https://bit.ly/DividerIP

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

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

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

🌎 https://bit.ly/DividerIP
⚡️ قابلیت Generic در زبان VHDL برای سهولت در کدنویسی

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

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

🔷 برای اینکه به سادگی بتوانیم مقادیر و پارامترها را در کد VHDL تغییر دهیم، از قابلیت generic استفاده می‌کنیم.

🔷 این قابلیت امکان جدید پیاده‌سازی به شما نمی‌دهد. بلکه استفاده از generic کدنویسی شما را ساده‌تر می‌کند.

🔷 قابلیت generic مشابه قابلیت پارامتری کردن در برنامه‌نویسی است.

کافی است در بخش entity کد، قسمتی به نام generic ایجاد کنید و پارامترهای دلخواه را در آن تعریف کنید. برای مثال، به بخش entity کد زیر توجه کنید:

entity Example_Register_Generic is

Generic
(
Reg_Width:integer:= 8);

Port
(
D : in unsigned(Reg_Width-1 downto 0);
Clock: in STD_LOGIC;
Reset: in std_logic;
Q : out unsigned(Reg_Width-1 downto 0));

end Example_Register_Generic;

به این ترتیب، در کد بالا طول پورت‌های D و Q را به صورت Generic تعریف کردیم و هر گاه نیاز به تغییر طول آن‌ها بود، به راحتی می‌توانیم تغییرشان دهیم.

برای دیدن مثال‌های بیش‌تر می‌توانید به مقاله‌ی "کدنویسی آسان به کمک قابلیت Generic" در سایت فراداندیش مراجعه کنید:

🌎 https://goo.gl/Z2kmXG

🆔 @FPGA0
🆔 @FPGA0
#مقاله۷
🎓 کدنویسی آسان به کمک قابلیت Generic

📚 نوشته احمد ثقفی

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

🌎 https://goo.gl/Z2kmXG
سوال:

شما در توضیحات دوره پردازش سیگنال گفته بودید:

"موضوع مهم در ارتباط با این سیستم ۷-مرحله‌ای این است که برای یادگیری و استفاده از آن نیاز به دانستن هیچ فرمول یا دانشی در مورد پردازش سیگنال ندارید و بعد از یادگیری می‌توانید به سرعت، انواع الگوریتم‌های پیچیده پردازش سیگنال را پیاده‌سازی کنید."

🌎 https://goo.gl/oSHLWC

اکثر دوستانم این سوال براشون پیش اومده بود که چطور ممکنه بدون پیش نیاز درس DSP و سیگنال و بدون فرمول در ۴ جلسه، این دوره براشون مفید واقع بشه...؟
📝 جواب:

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

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

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

🌎 https://goo.gl/oSHLWC

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

🌎 https://goo.gl/oSHLWC

🆔 @FPGA0
⚡️ اثبات صحت عملکرد مدار به مدیر یا کارفرما (قسمت اول)

🔷 یکی از روش‌های تست مدار شبیه‎سازی است؛ اما این روش محدودیت‌هایی دارد.

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

🔷 ابزار ChipScope امکان تست در حال اجرا را برای سیستم فراهم می‌کند.

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

❇️ شبیه‌سازی مدار؛ مزایا و معایب

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

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

1⃣ شبیه‌سازی نوع اول: شبیه‌سازی رفتاری یا behavioral simulation

🔷 شبیه‌سازی رفتاری قبل از مرحله سنتز انجام می‌شود و تاخیر‌های انتشار منابع دیجیتالی سیستم در نظر گرفته نمی‌شود.

🔷 بنابراین، هیچ تاخیری به عنوان تاخیر انتشار قطعات یا سیم‌ها در مدار وجود ندارد.

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

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

2⃣ شبیه‌سازی نوع دوم: شبیه‌سازی زمانی یا timing simulation

🔷 شبیه‌سازی زمانی بعد از مرحله سنتز و place and route انجام می‌شود.

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

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

اما به‌طور کلی شبیه‌سازی‌ها (خصوصاً شبیه‌سازی زمانی)، فرایندی زمان‌بر است. گاهی شبیه‌سازی ۱۰ میکرو‌ثانیه از عملکرد یک مدار، بسته به میزان پیچیدگی آن می‌تواند تا چند دقیقه و یا حتی چند ساعت طول بکشد! بنابراین در عمل، استفاده از شبیه‌سازی محدودیت‌هایی خواهد داشت.

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

🆔 @FPGA0