برآورده کردن نیازمندیهای سیستمهای دیجیتال مدرن در حوزههای مخابرات، هوافضا، نفت و …، طراحان را به سمت استفاده از تکنولوژیهای پیچیده سوق داده است. در این میان، تراشههای FPGA به عنوان ابزاری قدرتمند و در دسترس برای تحقق ایدههای سیستمی پیشرفته، مدتها است که از محبوبیت زیادی در بین مهندسان طراح دیجیتال برخوردار است.
More...
علیرغم تمام مزیتهای بکارگیری این تکنولوژی برای تحقق سیستمهای دیجیتال پیشرفته، ماهیت حقیقی آن برای بسیاری از علاقمندان به کار در این حوزه هنوز به طور کامل شناخته نشده است. در این مقاله قصد دارم تا ضمن معرفی این تکنولوژی و بیان جایگاه آن در طراحی دیجیتال مدرن، به مهمترین سوالاتی که ممکن است برای علاقمندان به کار در این زمینه ایجاد شود پاسخ دهم:
تفاوت اصلی FPGAها با پردازندههایی مثل ARM، DSPو AVR چیست؟
در چه نوع طرحهایی باید از FPGAها استفاده کرد؟
طراحی با FPGAها شامل چه مراحل ویژهای است؟
الگوریتمهای پردازشی و کنترلی را چگونه میتوان به کمک FPGAها پیادهسازی کرد؟
چرا سرعت پردازش در FPGAها از پردازندهها بیشتر است؟
پاسخ به این سوالات میتواند تصویری روشن و واقعبینانه از ماهیت و قابلیتهای تکنولوژی FPGA ترسیم کرده و زمینه را برای ورود به این حوزه برای علاقمندان به طراحی سیستمهای دیجیتال پیشرفته فراهم کند.
ماهیت و ساختار FPGAها
بسیاری از افرادی که طراحی دیجیتال با FPGA را شروع میکنند، قبلا با پردازندههایی مثل ARM، AVR و یا DSP تجربه داشتهاند. وقتی با یک پردازنده سر و کار دارید، در حقیقت با یک سختافزار از پیش طراحی شده که دارای دستوراتی است کار میکنید. واحد پردازش مرکزی یا CPU هر پردازنده از تعدادی دستور ثابت و مشخص پشتیبانی میکند و شما به عنوان برنامهنویس، با ترکیب این دستورات اقدام به نوشتن روتین مورد نظر خود میکنید. اما این وضعیت در مورد تراشههای FPGA چگونه است؟
در FPGAها چیزی به نام پردازنده و یا هر نوع مدار دیجیتال معنی داری در ابتدای کار وجود ندارد. بنابراین، زبان برنامهنویسی نیز برای آن وجود ندارد. آنچه طراح FPGA انجام میدهد برنامهنویسی به کمک دستورات یک پردازنده نیست؛ بلکه طراحی سختافزار دیجیتال است. به عبارت دیگر، طراح باید از ابتدا یک مدار سختافزاری دیجتالی را طراحی کند. در نتیجه، طراح دیجیتال به کمک FPGA، برنامه نرمافزاری برای CPU نمینویسد؛ بلکه در صورت لزوم، خود CPU را طراحی کرده و آن را پیادهسازی میکند.
منابع دیجیتالی موجود در FPGA
برای درک بیشتر این موضوع و آشنایی با ماهیت و ساختار FPGAها، بهتر است نگاهی به محتوای یک تراشه FPGA بیندازیم. شکل زیر دیاگرامی از آنچه به طور معمول درون تراشههای FPGA وجود دارد نشان میدهد. همانطور که در این شکل دیده میشود، درون FPGA آرایهای از منابع دیجیتالی وجود دارد که به طور منظمی چیده شدهاند. این منابع در ابتدا هیچ تابع یا مفهوم دیجیتالی را ایجاد نمیکنند، بلکه به عنوان بلوکهای سازنده یک مدار دیجیتالی توسط طراح دیجیتال مورد استفاده قرار میگیرند تا هر مدار دلخواهی را ایجاد کند.

دیاگرامی از آنچه به طور معمول درون تراشههای FPGA وجود دارد
بهتر است ابتدا نگاهی داشته باشیم به منابع دیجیتالی FPGAها. این منابع شامل موارد زیر هستند:
- بلوکهای منطقی برنامهپذیر؛
- حافظههای داخلی؛
- مسیرها؛
- مدارات ورودی/خروجی؛
- منابع کلاک.
در تراشههای مختلف FPGA ممکن است منابع دیگری نیز افزون بر منابع مذکور وجود داشته باشند که در ادامه این مقاله به بعضی از آنها اشاره خواهد شد. مهمترین بخش هر FPGA، بلوکهای منطقی برنامهپذیر (CLB: Configurable Logic Block) یا سلولهای منطقی (LC: Logic Cell) هستند. سلولهای منطقی خود از حافظههای جستجو (LUT: Look-Up Table) و تعدادی فلیپ-فلاپ و مالتیپلکسر تشکیل شدهاند.
شکل زیر، ساختار یک سلول منطقی نوعی را نشان میدهد. به کمک LUT و ساختار یک سلول منطقی میتوان هر تابع کوچک منطقی را پیادهسازی کرد. همانطور که در شکل بالا نشان داده شده است، یک FPGA شامل آرایهای از بلوکهای منطقی برنامهپذیر است. بسته به نوع FPGA، این تعداد متغیر و ممکن است به صدها هزار برسد. برای طراحی مدارات دیجیتال بزرگتر، تعداد بیشتری از این سلولهای منطقی مورد استفاده قرار میگیرد.

ساختار یک سلول منطقی
بعد از اینکه یک مدار دیجیتال بزرگ به کمک تعدادی از سلولهای منطقی طراحی شد، باید این سلولها را به نحو مناسب به هم متصل نمود. برای این منظور، مسیرهای از پیش تعیین شدهای در FPGA و در بین ساختار آرایهای آن تعبیه شده است. این مسیرها در محل برخورد با یکدیگر به کمک سوئیچهایی به نحو مناسب به یکدیگر متصل میشوند تا در نهایت اتصال بلوکهای منطقی مورد نظر پیادهسازی شود. از آنجا که در طراحیهای دیجیتال، بلوکهای متنوع حافظه به وفور استفاده میشوند، در تراشههای FPGA تعداد قابل توجهی منابع حافظه وجود دارد که در طراحی میتوان از آنها استفاده نمود.
برای آشنایی با انواع حافظههای داخلی FPGA این برنامه ویدئویی را ببینید…
یکی دیگر از منابع موجود در FPGAها، مدارات از پیش طراحی شده مربوط به ایجاد و توزیع کلاک است. ایجاد کلاک و توزیع مناسب آن در تمام مدار دیجیتالی، یکی از بخشهای بسیار مهم پیادهسازی یک مدار دیجیتال است. در FPGAها معمولا مدارات ساخت کلاک به کمک یک هسته PLL برای ساخت فرکانس دلخواه طراح ایجاد میشوند. همچنین مسیرهای ویژهای برای توزیع آن از قبل طراحی شده است که دارای ویژگیهای الکترونیکی مناسب برای انتقال کلاک به بخشهای مختلف مدار است.
برای ارتباط با دنیای خارج، تعداد قابل توجهی درگاههای ورودی/خروجی همهمنظوره در هر تراشه FPGA وجود دارد. از این درگاهها میتوان برای ارتباط با قطعات جانبی مثل حافظهها، مبدلهای آنالوگ به دیجیتال و غیره استفاده نمود. با توجه به اینکه استانداردهای متنوعی برای ارتباط با این قطعات جانبی وجود دارد، مدارات ورودی/خروجی در FPGA قابلیت تنظیم شدن برای هر کدام از این استانداردها را دارا هستند. از جمله این استانداردها میتوان به LVDS، LVTTL، LVCMOS و LDT اشاره کرد.
با توجه به مطالب بیان شده در این بخش، FPGA یک پردازنده و یا هر نوع مدار از پیش طراحی شده منطقی نیست؛ بلکه هر FPGA شامل دریایی از منابع نسبتا ساده منطقی است که با اتصال مناسب آنها به یکدیگر میتوان هر نوع مدار دیجیتالی را طراحی و پیادهسازی کرد. نحوه طراحی یک مدار دیجیتال بزرگ و روش پیادهسازی آن بر روی FPGAها را در بخشهای بعدی این مقاله مورد بررسی قرار خواهیم داد.
آیا مقاله آشنایی با FPGA – ماهیت و ساختار FPGA برای شما مفید بود؟
لطفا نظرتان را در مورد این برنامه در پایین همین پست با دیگران به اشتراک بگذارید. همچنین با کلیک روی هر کدام از دکمههای اشتراک گذاری ابتدای این مطلب و به اشتراکگذاری آن در شبکههای اجتماعی میتوانید افراد بیشتری را در یادگیری این مطالب سهیم کنید.

