FPGA
واژه FPGA از سی سال پیش مطرح شد و امروزه کاربرد فراوانی پیدا کرده است، خیلیها فکر میکنند که FPGA یک میکرو کنترلر بسیار قدرتمنده، کافیه طرف یک مقدار کمال گرایی هم داشته باشه، حالا بهونه میگیره که میخوام FPGA یاد بگیرم، بدون اینکه بدونه این چیه اصلا، کجا کاربرد داره، بازار کار و تقاضا در چه حده، در کنارش باید چی یاد بگیره، چه چیزهایی نیازه که در کنارش داشته باشه، فقط از روی هیجان میگه میخوام یاد بگیرم.
اول اینکه FPGA میکروکنترلر نیست و کلا یه پردازنده متفاوته، پروسسورها که یا پردازندهها مثل CPU فقط کار پردازش رو انجام میدهند نه حافظهای دارند و نه واحد داخلی که یک کار جانبی را انجام دهد وگرنه پر از واحدهای داخلی هست این پردازندهها بسیار در پردازش قدرتمند هستند و از FPGAها و میکروکنترلرها بسیار در پردازش قویتر هستند که نیاز به واحدهای دیگری دارند مانند رم و هارد دیسک و گرافیک که به صورت خارجی باید به آنها متصل گردند تا بتوانند کار کنند، پردازندهها هیچ گونه اختیاری از خود ندارند و قابل برنامهنویسی نیستند به همین دلیل باید حتما زیر نظر یک سیستم عامل کار کنند تا سیستم کنترل آن را به عهده بگیرد.
میکروکنترلرها مثل یک کامپیوتر تمامی اجزای اصلی آن را دارند مانند CPU، رم، حافظه فلش و ورودی و خروجیهای متنوع که با نوشتن برنامه روی آن تمامی این قسمتها را میتوان کنترل نمود.
واحدهای داخلی متداول میکروکنترلر عبارتاند از:
USART, SPI, I2C, TIMER, ADC, DAC, CCP, GPIO, INTERRUPT و… که CPU با توجه به برنامهای که روی میکرو ریخته شده است با هرکدام از این واحدها ارتباط برقرار میکند و ورودی و خروجیهای آنها را پردازش میکند، هر واحد به صورت مستقل ورودیهای خود را دریافت کرده در صورتی که خود بتواند بدون نیاز به CPU وظیفه خود را انجام دهد کاری با CPU ندارد ولی در غیر این صورت دادهها را به CPU تحویل داده و CPU با توجه به نتیجه پردازش به واحدها دستورات لازم را صادر مینماید، دادههایی که در میکرو پردازش میشوند نیاز به یک حافظه رم برای ذخیرهسازی موقت دارند که در تمامی میکروکنترلرها موجود میباشد.
اما برسیم به بحث اصلی، FPGA یک ساختار کاملا متفاوت نسبت به پردازندههای CPU و میکروکنترلرها دارد، FPGAها تشکیل شدهاند از دهها هزار تا ۱۰ها میلیون از گیتهای منطقی مانند AND, OR, NAND, XOR و. . همین!؟
نه CPU نه RAM نه واحد داخلی دیگهای!؟ !
وقتی برنامهای نوشته میشه و FPGA رو پروگرام میکنیم، برخلاف میکرو این برنامه نمیره روی حافظه فلش ذخیره بشه، یا مثل کامپیوتر بره در هارد دیسک ذخیره بشه و توسط یک رم و CPU پردازش بشه؟!
بلکه طبق برنامه نوشته شده این گیتهای داخلی FPGA یک آرایش خاص نسبت به هم میگیرند، یعنی فقط ارتباطشون با هم طبق برنامه تغییر میکنه. چقدر تفاوت؟!
این آرایش برای همیشه حفظ خواهد شد مگر آن که دوباره بایک برنامه دیگر آن را پرگرام کنیم.
سوال اساسی این جاست که پردازش چطور انجام میشه پس؟!
جواب اینه که توسط همین آرایش گیت ها، برای روشن شدن مطلب یک مثال میزنم؛
مطمئنن از این کلیپها دیدید که یک توپی رو قل میدن و درو دیوار و اشیا دور برش و کلا مسیرش رو طوری درست میکنن که این توپ بعد خوردنهای متوالی به اینور و اونور، خیلی جالب در نهایت اون جایی که از قبل پیش بین شده بود میافته، حال اگر ۱۰۰۰ بار این توپ یا یک توپی شبیه این توپ از لحاظ حجم و جرم توی این مسیر بندازیم باز هم مسیر توپ همان مسیر ابتدایی است و نقطه فرود هم همان نقطه، اگر توپ رو به عنوان ورودی در نظر بگیریم و چینش اشیا و مسیر توپ به عنوان آرایش گیتها و نقطه فرود توپ هم به عنوان خروجی کار، متوجه میشویم که یک FPGA چگونه کار میکند.
در یک FPGA دادههای ورودی از گیتهای منطقی عبور میکنند و طبق آرایشی که ما برای گیتها در نظر گرفتهایم تحت یک پردازش خاص قرار میگیرند و خروجی مورد نظر بدست میآید، از این توضیح متوجه میشویم که نوع دادههایی که توسط میکرو یا CPU یا FPGA پردازش میکنیم کاملا با هم متفاوت است، در CPUها نوع داده مشخص نیست و طبق برنامهای که CPU با آن کار میکند امکان پردازش هر دادهای را دارد و فقط برای یک داده خاص طراحی نشده است، مانند کامپیوتر، شما یک کامپیوتر خریداری میکنید و امکان دارد با آن هر ورودی دریافت و هر خروجی صادر نمایید؛
در میکرو کنترلرها نوع ورودیها و خروجیها از یک طیف ورودی و خروجیهای خاص هستند و هر دادهای نمیتواند باشد ولی در هرلحظه معلوم نیست که چه ورودی دریافت میشود و یا چه خروجی باید صادر شود، بنابراین طبق هر داده در هر لحظه میکرو تصمیم گیری مینماید که چه کاری باید انجام شود و چه خروجی باید صادر شود؛
اما در FPGAها نوع ورودی برای همیشه ثابت است و این داده ثابت در یک زمان طولان قرار است تحت یک پردازش قرار بگیرد و یک خروجی ثابت داشته باشد، (که اصطلاحا به این دادهها Stream Data میگویند) مانند تلویزیون که قرار است همیشه یک داده ویدیویی با یک فرمت خاص را از آنتن دریافت نماید، آن را با یک پردازش ثابت پردازش و کدگشایی نماید، سپس با یک فرمت نمایشی ثابت در یک نمایشگر ثابت نمایش دهد؛
در این مثال داده دریافتی همیشه ثابت است، منظور از ثابت بودن فرمت داده است نه خود داده، مثلا همیشه داده دریافتی با فرمت MP4 است، یه لحظه نمیشه AVI یه لحظه دیگه بشه MTS، یا یهو بجای ویدیو دادههای کنترل سرعت موتور بیاد؛ فرمت ثابته ولی داده متغیر این لحظه امکان داره فیلم میان ستارهای پخش بشه فردا اپنهایمر، پردازش که فرقی نکرده!
چون نیاز به تصمیم گیری لحظه این نداریم با یک ساختار ثابت میتوان با سرعت خیلی بیشتری استریم دیتاها را پردازش کرد، پس متوجه شدیم که اینها کلا با هم فرق دارند جای هم نمیشه استفادشون کرد.
اما FPGAها امروزه پیشرفتهتر شدند و در برخی مدلهای آنها واحدهای داخلی میکروکنترلر مانند USART, SPI, I2T, TIMER, ADC و… رم، CPU و خیلی چیزهای دیگر هم میتوان یافت ولی به صورت تخصصی روی این واحدها کار نشده و مانند رسپبری پایها یک امکان در کنار آنها قرار داده شده است تا نیاز به میکرو را در کارهای معمول از بین ببرد.
برای بررسی میزان تقاضای FPGAها خودتان به اطرافطتون نگاه بندازید ببینید چقدر نیاز به FPGA وجود دارد، چقدر استریم دیتا داریم، از طرف دیگر FPGAها گران هستند و اصلا در کارهای عادی نمیتوان از آنها استفاده نمود، حتی هزینههای یادگیری آنها و انجام پروژهها تمرینی و تستی نیز به شدت بالاست، تعداد بسیار کمی پروژه و شرکت وجود دارد که تقاضای متخصصین این حوزه را دارند، امکان کار کردن در صنایع مختلف برای FPGAکاران وجود ندارد و فقط برخی صنایع به آن نیاز دارند همچنین امکان کار انفرادی نیز در این زمینه وجود ندارد و باید با شرکتهای معدود و پروژههای اندک سرو کار داشت، اما در صورت داشتن مهارت و تجربه لازم و کار کردن با شرکتهای بزرگ بسیار تخصص عالی و پولسازی خواهد بود.
تقریبا استفاده از میکروها چیزی بیش از ۸۰ درصد و FPGAها کمتر از ۲۰ درصد در کل صنعت میباشد، اما باز تاکید میکنم که هیچ یک از این توضیحات به معنای بدتری یا بهتری هیچ چیز نیست و هرکدام که نباشند صنعت و زندگی انسان لنگ میشه، این درصدی که گفتم دقیقا برابری میکنه با درصد استفاده از هواپیما و خودرو، آیا میتوان گفت هواپیما بدرد نمیخوره یا صنعت پولسازی نیست؟ یا این حرف رو برای خودرو زد؟ آیا فرقی بین مهندس ارشد بنز با ایرباس که هردو در آلمان هم هستند هست؟ هر دو این ابزار یک ابزار حمل و نقل هستند و میکرو و FPGA هم دو ابزار پردازشی، در یک کشوری مثل کره جنوبی متخصص خودرو وضع بهتری داره و در یک کشوری مثل روسیه یک متخصص هواپیما و در یک کشوری هم مثل آلمان و آمریکا هر دوی آنها و در یک کشوری هم مثل ایران…