برآورده کردن نیازمندیهای سیستمهای دیجیتال مدرن در حوزههای مخابرات، هوافضا، نفت و …، طراحان را به سمت استفاده از تکنولوژیهای پیچیده سوق داده است. در این میان، تراشههای 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 برای شما مفید بود؟
لطفا نظرتان را در مورد این برنامه در پایین همین پست با دیگران به اشتراک بگذارید. همچنین با کلیک روی هر کدام از دکمههای اشتراک گذاری ابتدای این مطلب و به اشتراکگذاری آن در شبکههای اجتماعی میتوانید افراد بیشتری را در یادگیری این مطالب سهیم کنید.


این مقاله برای من واقعا مفید بود و بسیار روان و قابل فهم هست، حتی برای افرادی که در زمینه ی معماری کامپیوتر و تراشه ها تازه وارد هستند.
ممنونم.
آقای مهندس ثقفی، یک تبریک بزرگ در خصوص متون بسیار روان شما دارم. این قضیه صرفا یک مزیت نیست بلکه یک پیروزی آشکار است تا آنجا که این قضیه سبب شده موفقیت های حال و آتی شما را کاملا تجسم کنم از طرفی علاقه و پیگیری من نیز چند برابر گردد. موفقیت بیش از پیش شما را آرزومندم.
با سپاس.
سلام، ممنون از لطف شما.
خوشحالم که این مقالات برای شما مفید بودند.
موفق باشید.
سلام
من در مورد ساختار خروجی-ورودی در fpga بیشتر میخواستم بدونم میتونید کمک کنید؟
با سلام ممنون از مطالب مفیدتون.جناب مهندس میشه لطف بفرمایین اگر امکان پذیر هست یک سری مطالب راجع به ساختار ورودی /خروجی FPGA هم بزارین .واقعا ممنون میشم.
سلام حضور استاد عزیزم مهندس ثقفی . بسیار از متون و دوروس شما در دوره ی طراحی دیجیتال با fpga هم در دوره ی حضوری که داشتم وهم در دوره ی آنلاین که در حال پی گیری آن هستم رضایت دارم وبسیار کاربردی و قائم به ذات است .من انشاالله اگر این دوره را تمام کردم وچند پروژه ی کاربردی با fpga انجام دادم . در دوره ی پردازش سیگنال با fpga هم شرکت خواهم کرد .فقط انتظار دارم در این دوره ها موارد کاربردی و از پیش انجام شده وتست گردیده کنجاده شود که مشکل کار کاربردی با fpga در شرکتم که در حال کار در آن هستم کامل مرتفع گردد. با تشکر ویژه .
اکبر قاصری نیگجه
سلام،
ممنون از نظر مثبت شما و خوشحالم که آموزشها تا به اینجا برای شما مفید بودهاند.
در دوره پردازش سیگنال با FPGA مثالهای بسیار کاربردی و جدی بررسی میشوند و کدهای آن به طور کامل برای تمرین و بررسی بیشتر در اختیار شما قرار داده میشود.
در ضمن ما در حال تهیه دوره جدیدی با موضوع اینترفیس هستیم که یک دوره ۱۰۰ درصد عملی است.
موفق باشید.
سلام این مقاله بسیار قابل فهم، ساده و روان بود. ممنونم از مطالب مفیدتون.
سلام،
خواهش میکنم. از اینکه این مطالب برای شما مفید بوده است بسیار خوشحالم.
موفق باشید.
سلام. در شکل ساختار یک سلول منطقی، لفظ FFT بکار رفته است؛ درست است یا اشکال املایی دارد؟ نباید Flip Flop باشد؟ با تشکر
سلام،
با تشکر از دقت و توجه شما. عبارت صحیح، همانطور که در متن آموزش نیز اشاره شده است، فلیپفلاپ (FF) است. این موضوع در شکل تصحیح شد.
موفق باشید.
به نظر بنده با وجود فیلم جای سوالی نمی گذارد .
سلام خیلی ممنون از مطالب مفیدتون… در مورد نحوه ارتباط fpga ها با قطعات جانبی هم در سایتتون یاد دادین؟
سلام،
در دوره “اینترفیس با FPGA” در این مورد به طور مفصل صحبت کردهایم.
موفق باشید.
سلام بسیار عالی بود واقعا دیدگاه بنده رو نسبت به FPGA باز کرد. سپاسگزارم
سلام،
خوشحالم که این مطلب برای شما مفید بوده است.
موفق باشید.
سلام استاد ثقفی
واقعا متشکرم از مطالب ارزنده و مفید که ارایه کردید.
سلام استاد ارجمندم
عالی بود
تشكر عالي بود