با سلام خدمت دوستان و همراهان همیشگی سیسوگ در این سری از آموزشها قصد دارم برخی موضوعات پیرامون FPGA و طراحی مدارت با آنها خدمتتون ارائه کنم.
همانطور که در سایت سیسوگ مشاهده کردید خیلی از آموزشها برای FPGA ها وجود دارد و میتونید این آموزشها رو در صفحه آموزش FPGA مشاهده کنید.
چرا FPGA و چرا به آنها نیاز داریم؟
این سؤال برای خیلی از کسانی که تا حدود خوبی با الکترونیک آشنا هستن پیش میاد، اصلاً این دنیا به این وسعت ارزش وقتگذاشتن و یادگیری یا ورود رو دارد یا خیر؟ اصلاً تو چه جور مداراتی به کار میاد؟ فرقشون چیه؟ چرا زبان برنامهنویسش انقدر فرق داره؟ و سؤالاتی ازاینقبیل. برای آشنایی با 0 تا 100 FPGA این مقاله رو بخونید خالیازلطف نیست، منم یک توضیحات بیسیکی به صورت خلاصه خدمتتون میگم.
در جواب اینجور سؤالات هم جوابهای بسیار درست و مفهومی و علمی نیز مطرح شده که پاسخگوی تمام سؤالات هستن، در اینجا من به طور خلاصه خدمتتون فرق هاش و علت نیاز بهش رو خدمتتون میگم.
در دنیای امروز الکترونیک با وجود این بازار تراشه و طراحی ASICها (تراشه هایی که برای کار های خاص ساخته میشوند) برخی گمان میکنن نیاز به FPGAها کمرنگ شده و عملا نیازی به یادگیری و ورود به این دنیای بزرگ و عجیب نیست این حرف تا حدودی درست و تا حدودی غلط هست. حالا چرا؟ میگم خدمتتون جلو تر.
حالا شاید براتون سؤال باشه همه دارن میپرسن فرق با میکروکنترلر چیه تو سریع رفتی سراغ فرقش با ASICها؟ XD
در قدم اول به طور خلاصه بهتون بگم که اصلاً میکروکنترلرها رو با FPGA مقایسه نکنید، چون دنیاشون متفاوته
دقیقاً همونطوری که دنیای محاسبات و عملکرد CPU از کارت گرافیکها متفاوته.
میکروکنترلرها یک هسته پردازشی دارن فارغ از معماریش و طراحی داخلیش، این بخش داخل همشون یکسانه شاید برخی دو یا چند هسته داشته باشن که در اینجا فرقی برامون نداره و یک سری پریفرالها ک وظیفه ارتباط با دنیای بیرون رو داره، چون ما فقط با هستهٔ سری محاسبات انجام بدیم ولی نتونیم جایی اعمالش کنیم یا استفاده کنیم به دردی نمیخوره.
خب پس تا حالا فهمیدیم که میکروکنترلر چیست، هر میکرو بر اساس رده، شرکت سازنده، کاربرد و هزار تا مؤلفه دیگه هستهها و پریفرال های مختلفی داره که بسته به نیاز پروژه ازش استفاده میشه ولی در نهایت هر مدل میکرویی که انتخاب کنید آخرش یک یا چند تا هسته داره و چندین پریفرال ارتباطی با دنیای خارج.
خب این از میکرو ها حالا بریم کمی با FPGAها آشنا بشیم، در FPGAها ما لاجیک بلاک هارو داریم،دیدید مثلا میگن اون میکرو مثلا 4KB حافظه فلش داره؟ یعنی تا 4 کیلو بایت میتونید کد HEX رو روی میکرو بریزید داخل FPGAها میشه همین لاجیک بلاک هارو به این نسبت داد. (این دوتا اصلا شبیه هم نیستن و ربطی به هم ندارن جلو تر با لاجیک بلاک ها اشنا میشم این فقط مثالی بود برای وارد شدن ذهنتون به این دنیا).
حالا این لاجبک بلاک ها به چ دردی میخورن؟ شما اینا رو به عنوان یک کاغذ سفید در نظر بگیرید ک مدار منطقی ک روش میکشید رو در عمل اجرا میکنه مثلا یک نوع FPGA 1000 تا لاجیک بلاک داره یعنی برگه طراحی مدار شما بزرگ تر است از FPGA که مثلا 150 تا لاجیک بلاک داره.
خب الان سؤالی که مطرح میشه آیا همه FPGA همینه؟ همش لاجیک بلاک هست و اینترکانکت و اینا؟ نه!
دارای FPGAها قسمتهای بسیار زیاد و مهمی وجود داره که جلوتر بهشون میرسیم.
برخی از آنها حتی هستههای پردازشی جداگانه و قدرتمندی هم نیز داخل خود دارند؛ مثلاً مثل سری ZYNQ هسته ARM داخلشون دارن، دوباره الان سؤالی براتون پیش میاد که این که دوباره شد میکروکنترلر! نه به این صورت نیست! 🙂
بهطورکلی FPGAها رو بیشتر برای مداراتی استفاده میکنن که نیاز به پردازش موازی داره یا مداراتی که کاستوم هستن، حالا پردازش موازی و مدارات کاستوم یعنی چی؟ پردازش موازی همون Real time OS هستن؟ نه!
در real time OSها در نهایت یک یا چند CPU داریم که باید محاسبات از اینا بگذره. با عکس زیر تفاوت اینکه بهترین روش محاسبه دیتا بر اساس نوع دیتا با کدام چیپ بهتر هست رو میبینید.
جواب محاسبات همه اینا یکسان هست؛ ولی سرعت محاسبه شون فرق داره.
فرض کنید شما میخواهید به 5 تا متغیری که دارید یک عددی اضافه کنید یا محاسباتی روی آنها انجام بدید مثلاً
A = A + 5;
B = 64 + 22;
C = 40 / 2;
D = 60 – 1;
E = A + B + C + D;
در میکروکنترلر اول A رو با 5 جمع میزنه و جوابش رو نگه میداره بعد B بعد C بعد D و در نهایت جوابهای محاسبات بالا رو میزاره داخل E، شما حتی اگه هر نوع سیستم Real Time هم پیاده بکنی باز هم به همین روش محاسبه میکنه، حالا همین رو اگه داخل بخش لاجیک FPGA به این شکل بالا اینجوری در زبان سخت افزار پیاده کنید خروجیتون اشتباه در میاد!
حالا چرا چون دقیقاً در زمانی که کلاک میاد هم A+5 میشه هم B محاسبه میشه هم C هم D هم E و مشکلی که پیش میاد اینه که وقتی E داره اجرا میشه هنوز مقدارهای A-B-C-D جوابشون نیومده چون با هم همزمان اجراشدن و خروجی مدارتون اشتباه در میاد. پس در پردازش موازی دیدید که کل سیستم با هم جلو میرن و پشتسرهم نیستن
حالا یک میپرسه اینکه فقط ی زمان خیلی کمی از ما سیو میکنه و عملا در عمل تاثیری نداره،درست هم میگن محاسبه 5 تا متغییر هیچ وقت هیچ توضیحی نداره ک به خاطر سرعت و موازی بودن با FPGA پیاده سازی بشه ولی محاسبات سنگین تر که باید به طور موازی پردازش بشن باید با FPGA صورت بگیره، حالا بریم سراغ یک مثال که میکرو نمیتونه به صورت دلخواه ما انجامش بده
فرض کنید به یک میکرو یک LCD وصل کردید و قراره این میکرو دیتای یک دوربین رو نمایش بده روی LCD
فریم ریت ما مثلا 30 فریم بر ثانیه هست یعنی توی هر 0.033 ثانیه باید کل صفحه ما یک بار اپدیت شده باشه
خب یکی میاد میگه اینکار که با میکروهای جدید اصلا کاری نداره،درست هم میگه اگه بحث فقط نمایش مطلق باشه،ولی اگه شما بخواهید این تصویر روش پردازش های انجام بدی به مشکل سرعت بر میخوری
چون میکرو باید بیاد به صورت سری اول محاسباتی ک میخوای رو انجام بده بعد جوابشو بریزه داخل پیکسلی ک میخوای ،تازه اینجور محاسبات که یکی دو تا پیکسل نیست شما برای یک LCD 480*800 در نظر بگیر 384000 تا پیکسل داره هر پیکسل سه تا رنگ داره R , G ,B باید همه محاسبات و اپدیت ها در 0.033 انجام بشه ک یک میکروی خیللللی سریع بازم میتونه این کار بکنه ولی مثال یکی از ساده ترین نوع محاسبات بود برای برخی محاسبات حتی کارت های گرافیک ک بهترین مثال برای پردازش موازی هستن هم کم میارن 😊. خیلی الگوریتم ها متفاوتی وجود دارن که نیاز به پردازش موازی دارن
حالا این یک مثال کلی بود و دنیای FPGA به این بیدروپیکری نیست و جلوتر با طرز فکر مدارت سختافزاری بیشتر آشنا میشید، این طرز فکر و دیدتون به پیاده سازه سختافزاری بهشدت مهمه، اصلاً داخل ذهن خودتون چیزهای اشتباه جا ندید یا فکرهای پلید نکنید که بعداً سخت میشه کارتون. اینارو روزنامهوار تو ذهنتون بزارید و حد اهمیتش براتون مثل متن یک روزنامه تاریخگذشته باشه😊.
خب پس موازی رو گفتیم بریم سراغ کاستوم که بالاتر مطرح کردیم.
فرض کنید شما در پروژه نیاز دارید که 10 تا سنسور SPI رو بخونید این سنسور ها 16 بیتی هستن و بفرستید روی مثلا Ethernet با سرعت بالا
در میکرو کنترل شما میتوانید از یک SPI استفاده بکنید و 10 تا پایه CS که نوبتی سنسورها رو روشن بکنن تا دیتا رو از روشون برداره بعد بفرسته روی eth که برای سیستم ما کنده
ولی داخل FPGA شما میتونی SPI طراحی بکنی که یه خروجی کلاک داره یک خروجی CS و 10 تا MISO که این ده تارو میاد قشنگ میزاره کنار هم و مثلاً داخل یک ریجستر 256 بیتی 160 تا بیت رو درآنواحد پر میکنه و حتی میتونی راحت برای overrun و اینجور چیزا هم بزاری و بهش پروبال بدی
بعد که ریجسترت پر شد؛ مثلاً یک هسته داخل FPGA میزاری که این 160 رو بیاد بفرسته روی ETH به هم راحتی با سرعت بالا در اینجا ما یک SPI کاستوم ساختیم بر اساس نیاز پروژهمون.
این مطالبی که مطرح شد فرق FPGA با میکروکنترلرها بود که پردازش سری داشتن، حالا بریم سراغ ASICها که اون اول هم گفته شد
به طور سریع و خلاصه بگمASIC ها چندین نوع هستن که ما با اون نوعیش کار داریم که برای بار پردازشی موازی برای یک کار خاص طراحی شد، در مورد ASIC ها بیشتر موضوع مالی میشه تا فنی بعضی مواقع هم زمانی میشه تا فنیو
فرض کنید شما یک مدار دارید که باید یک دیتای موازی رو با سرعت بالا پردازش کنه، خب طبق توضیحاتمون FPGA بهترین گزینه هست حالا شما از این مدار 500000 تا میخواید بفروشید، آیا براتون میصرفه که 500000 تا FPGA بزارید رو محصولتون؟
در این مواقع طراحی ASICها بیشتر به کار میاد، مثلاً شما یکبار هزینهای بابت طراحی اون ASIC میدید ولی قیمت تولید هر کدوم مثلاً 1 دلاره در حالی ک مثلا یک FPGA با همون کار شاید 60-70 دلار با بردی با تکنولوژی ساخت بالا تری براتون در بیاد،که اینجا مارو میبره به سمت ASIC کاستوم برای پروژه خودمون.
حالا فرض کنید یکی قبلاً این ASIC رو ساخته و بیشتر نیازهای شما رو هم برآورده میکنه، قیمتشم همون 1 دلار هست مثلاً، ولی اینجور چیپها زمان توسعه نرمافزار براشون بهشدت طولانیتر از FPGA در میاد که در بعضی مواقع که زور پول به زمان میرسه میشه از این موضع صرفنظر کرد، آیا با توضیحات بالا FPGA به درد نمیخوره؟
اتفاقاً به درد میخوره چون شما برای طرح اولیه و دولوپ حتماً باید روی FPGA طرح رو بیاری بالا و مطمئن بشی از طرف بعد بری ASIC کاستوم بزنی یا وقت بزاری روی ASIC برای دولوپ نرمافزار. خیییلی موردهای دیگه هم هست که باید بر اساس پروژهتون انتخاب بشه.
یک سایت خارجی هست لینکش براتون میزارم خیلی قشنگ این مباحث تفاوت بین ASIC و FPGA رو گفته:
https://www.wevolver.com/article/asic-vs-fpga
بررسیش کنید خالیازلطف نیست.
مباحث فصل اول
خب زیاد مقدمه رو طولانی نمیکنم فعلاً برای فصل یک آموزش FPGA میخوایم بریم سراغ مباحث زیر
ما در این فصل از آموزشها از اسپارتان 6 و نرم افزار ISE استفاده میکنیم و فصل بعدی اگه فرصتی باشه میریم سراغ پردازنده های ZYNQ و نرم افزار Vivado
1 . کمی پیرامون برد ها و سخت افزار های FPGA و نحوه طراحی بردی که پردازده اصلی آن FPGA است صحبت کنیم، اینکه بتوانیم یک سخت افزار مبتنی بر FPGA طراحی کنیم.
2 . آموزش زبان توصیف سخت افزار Verilog ،پیاده سازی چندین سخت افزار کاستوم
3 . استفاده از Micro Blaze
4 . توسعه سیستم با متلب
5 . پیاده سازی چندین مثال کاربردی
در فصل دوم از آموزشها میریم سراغ ZYNQها با Vivado که دارای هسته داخلی هستن که میتوان روی آن لینوکس اجرا کرد و سطح کار با FPGA بالاتر برد.
برای اینکه بتوانید با آموزشهای فصل 1 همگام باشید میتوانید یک برد که با ISE همخوانی دارد را تهیه کنید یا راه پرعلمتر و ارزونتر رو انتخاب کنید و خودمون یک برد برای Spartan6 بزنیم ولی اگر هم برد نخواستید بخرید با شبیهساز میتوان همه مباحث رو تقریبا یاد گرفت اونقدر تفاوتی ایجاد نمیکنه.
برای فصل دو به علت اینکه بردهای مبتنی بر تراشه زینک گرونه من پیشنهاد میکنم از کنترل بردهای ماینرها استفاده کنید که در این زمان که من این مقاله رو مینویسم قیمتی حدودی 500 -800 هزار تومن دارن هم قیمت یک میکروی بالارده.
من پایه آموزشهای زینک رو میزارم روی همین برد (البته فرق زیاده نداره کمی تو کانفیکها تفاوت دارن بردهای مختلف) که همه دوستان با کمترین هزینه بتونن همراهی کنن اسم برد کنترل برد S9J هست از شرکت Antminer
من بعداً براش یک هدر برد میزنم که پایههاش راحتتر در دسترسمون باشه، توی آموزشهای سختافزار میزارم فایلهاشو دوست داشتید چاپ کنید.
بردهای ماینر مشابه هستن با قیمتهای کمی بیشتر و کمتر فعلا بیس ما همین هست. یه نکتهای هم بهتون بگم برای فصل اول اگه Spartan که با ISE سازگار باشه تهیه نکردید مشکلی نداره چون تقریباً همه اون بخشها روی این هم قابل تسته.
سلام تشکر از مطلب خوب و جذابتون…