تصور کنید اگر این امکان وجود داشت که یک تراشه FPGA را باز میکردید و داخل آن را میدید، دقیقا با چه منابع سختافزاری درون FPGA روبرو میشدید؟
در این برنامه ویدئویی، شما را با این منابع سختافزاری و کاربرد هر کدام آشنا میکنم.
More...
تسلط واقعی به پیادهسازی مدارات دیجیتال به کمک FPGA نیاز به یادگیری دو مهارت مهم دارد:
بسیاری از افراد، فقط روی مهارت اول، یعنی کدنویسی اصولی با زبان VHDL یا Verilog متمرکز میشوند؛ در حالی که آشنایی با منابع سختافزاری داخل FPGA و نحوه استفاده اصولی از آنها در پیادهسازی، احتمالا مهمترین مهارتی است که برای پیادهسازی بهینه مدارات دیجیتال با FPGA باید به آن مسلط شوید.
در این برنامه، در مورد منابع سختافزاری مثل Logic Cellها، ضرب کنندهها، حافظههای داخلی، بلوکهای IO و منابع مرتبط با کلاک صحبت میکنم.
Logic Cellها در واقع مجموعه LUTها و فلیپفلاپها هستند که با هم، منابع عمومی سختافزاری درون FPGA را تشکیل میدهند.
ضرب کنندهها بخش بسیار مهمی در تمام FPGAهای شرکت Xilinx هستند که علاوه بر عملیات ضرب، قابلیتهای بسیار زیادی دیگری هم دارند. این قابلیتها را به طور مفصلتر در برنامه ویدئویی پشت پرده عملیات ضرب در FPGA توضیح دادهام.
هر کدام از پایههای IOی FPGA متصل به مداری است به اسم IO Block که قابلیتهای زیادی را برای هر IO ایجاد میکنند. تبدیل هر پایه IO به ورودی، خروجی، یا IOی دوطرفه، یکی از این قابلیتها است.
یکی دیگر از مهمترین منابع سختافزاری درون FPGA، منابع مرتبط با پیادهسازی کلاک است. از آنجایی که مدارات درون FPGA را همواره به صورت ترتیبی سنکرون پیادهسازی میکنیم، مساله کلاک بسیار مهم است. این موضوع را در برنامه ملزومات پیادهسازی کلاک در FPGA به طور دقیقتر توضیح دادهام.
ویدئو یا متن؟
محتوای این برنامه آموزشی، به دو صورت ویدئو و متن آماده شده است. اگر علاقمند به یادگیری این مطلب به صورت ویدئویی هستید، ویدئوی زیر را ببینید و اگر ترجیح میدهید آن را به صورت متن مطالعه کنید، ادامه این مطلب را بخوانید.
برای دانلود نسخه با کیفیت این ویدئو، روی دکمه زیر کلیک کنید:
در جلسهی قبل، راجع به مفهوم FPGA صحبت کردم.
در این جلسه میخواهم بحث جلسهی قبل، در این زمینه را کامل کنم و همچنین در ادامه راجع به بعضی از باورهای غلطی که بین کاربران FPGA وجود دارد، توضیحات بیشتری بدهم.
ابتدا اجازه دهید یک یادآوری از مباحث مطرح شده در جلسهی قبل داشته باشیم.
در قسمت قبل راجع به این موضوع صحبت کردیم که هر تابع منطقی را میتوانیم به کمک Look-Up Table یا LUT پیادهسازی بکنیم.
درحقیقت FPGAها از هزاران LUT تشکیل شدهاند که به کمک آنها میتوانیم مدارهای بزرگتر را پیادهسازی کنیم.
در واقع مدارهای بزرگتر به توابع کوچکتر تقسیم میشوند و هر کدام به کمک یک LUT پیادهسازی میشوند.
اکنون باید این LUTها را به هم وصل کنیم تا مدار اصلی تشکیل شود.
برای این کار سیمهای زیادی بین LUTها تعبیه شده است، تا بتوانیم با اتصال مناسب آنها به یکدیگر، مدار اصلی را تشکیل دهیم.
در اصطلاح به عمل سیمبندی بین LUT ها، Routing گفته میشود.
با پروگرام کردن درون LUTها و سوئیچهای مربوط به سیمها، میتوان هر مدار بزرگی را ایجاد کرد.
عمل پروگرام کردن LUTها و سیمبندیها، پیکرهبندی یا Configuration گفته میشود.
FPGA را میتوان بارها و بارها پیکرهبندی کرد.
ممکن است بخواهید با FPGA تمرین کنید، ممکن است بخواهید با FPGA تست انجام دهید، ممکن است بخواهید با FPGA مداری طراحی کنید و بعدا از آن مدار راضی نباشید. بنابراین، بارها و بارها میتوانید FPGA را با پیکرهبندی به یک مدار جدید تبدیل کنید.
اجازه بدهید نگاه دقیقتری به منابع دیجیتالی درون FPGA داشته باشیم.
اگر ما بتوانیم پوستهی بیرونی FPGA را کنار بزنیم و داخل آن را ببینیم، احتمالا تصویری شبیه به آنچه در شکل زیر است خواهید دید:
در اینجا منابع را پشت سر هم معرفی میکنم و در ادامه راجع به هر کدام یک توضیح مختصری میدهم.
منابع اصلی که در FPGAها وجود دارند، Logic Blockها هستند که در واقع همان LUTها هستند.
Routing Matrixها از دیگر منابع هستند که شامل سیمها و سوئیچها میشوند.
در رابطه با این دو منبع در جلسهی قبل توضیح دادیم.
منبع بعدی I/O Blockها هستند، پشت هر پین آی سی FPGA مداری وجود دارد که به آن I/O Block گفته میشود.
حافظهها، ضربکنندهها و در نهایت منابع کلاک، از جمله منابعی هستند که در درون FPGAها وجود دارند.
در ادامه راجع به هر کدام توضیح مختصری میدهم:
Logic Blockها
در تصویری که در زیر مشاهده میکنید، میتوانید مدار یک Logic Block را در یک FPGA فرضی مشاهده کنید:
معمولا به Logic Blockها، Logic Cell هم گفته میشود.
Logic Blockها جزء اصلی تشکیلدهنده FPGAها هستند و در حقیقت همان LUTها هستند.
بخشی که کنارLUT اضافه شده است، فلیپفلاپ است.
با استفاده از فلیپفلاپها میتوانید مدارات سنکرون را طراحی بکنید.
برای طراحی مدارهای سنکرون، نیاز دارید که تغییرات مدار را همزمان با یک سیگنال خارجی، که به آن کلاک گفته میشود انجام دهید.
برای اینکه بتوانیم تغییرات LUTها که در واقع همان توابع کوچک ما هستند را به صورت سنکرون با کلاک به بقیه مدار منتقل کنیم، میتوانیم در خروجی LUTها یک فلیپفلاپ قرار دهیم.
بنابراین، وجود این فلیپفلاپها، در Logic Blockها به ما کمک میکند که مدارهای سنکرون طراحی کنیم.
اگر هم نخواهیم چنین کاری کنیم میتوانیم خروجی Look-Up Table را به صورت مستقیم در بقیهی مدار استفاده بکنیم؛ که این انتخاب را میتوانیم به وسیلهی مالتیپلکسری که در Logic Block وجود دارد انجام بدهیم.
Routing Matrixها
منبع بعدی که در جلسهی قبل راجع به آن صحبت کردیم، Routing Matrixها هستند که شامل سیمها و شبکهی اتصالات قابل برنامهریزی است.
منابع دیجیتالی مختلف، از جمله LUTها را به کمک این سیمها میتوانیم به هم متصل کنیم.
I/O Blockها
پشت هر پین یا پایهی FPGA مداری وجود دارد که به آن I/O Block گفته میشود. این مدارها نیز قابل برنامهریزی هستند.
به وسیلهی I/O Block ها میتوان تعیین کرد که هر کدام از پایههای FPGA به صورت ورودی، خروجی یا دوطرفه تعریف شود.
همینطور شما به وسیلهی این مدارها میتوانید انواع استانداردهای I/O را برای این پایهها تعریف کنید.
مثلا، میتوانید مقدار جریاندهی پایههای خروجی را تعریف کنید، یا سطح ولتاژ پایههای ورودی-خروجی، چه مقدار باشد. با این قابلیت میتوانید پایههای FPGA را به انواع مختلف قطعات جانبی وصل کنید.
حافظهها
اگر طراحی دیجیتال انجام داده باشید میدانید که معمولا به هنگام طراحی دیجیتال، شما به مقداری حافظه نیز نیاز دارید.
ممکن است که محاسباتی در سیستم انجام شود و بخواهید از نتیجهی آن در مراحل بعدی استفاده کنید.
یا ممکن است سیگنالی در حال نمونهبرداری باشد و بخواهید آن را به کامپیوتر یا به سیستم دیگری ارسال کنید. در هر صورت معمولا نیاز دارید که مقادیری را به صورت موقت در جایی ذخیره بکنید.
برای اینکار در FPGAها حافظههایی به صورت بلوک سختافزاری طراحی شده است.
اگر این بلوکهای سختافزاری نبودند، شما برای ذخیرهسازی اطلاعات مجبور بودید از Look-Up Tableها استفاده بکنید.
اینکار دو ضرر داشت:
اول اینکه Look-Up Tableها منابع دیجیتالی بسیار مهمی هستند که به کمک آنها میتوانید توابع رو پیادهسازی کنید و اگر شما بخواهید حافظهها را هم به کمک آنها پیادهسازی کنید، مقدار زیادی از این Look-Up Tableها را از دست خواهید داد.
از طرف دیگر، استفاده از حافظههایی که از قبل به صورت سختافزاری ساخته شدهاند، میتواند سرعت کار سیستم را بیشتر بکند.
ضربکنندهها
عمل ضرب در بسیاری از پیادهسازیهای دیجیتال، خصوصا اگر قصد داشته باشید که الگوریتمهای پردازش سیگنال دیجیتال را پیادهسازی کنید، کاربرد بسیار زیادی دارد.
اگر ضربکنندههای از پیش ساخته شده در FPGA وجود نداشت، شما مجبور بودید مثل حافظهها از LUTها استفاده کنید و به کمک آنها ضربکنندهها را پیادهسازی کنید.
برای اینکه منابع Look-Up Table را بیهوده مصرف نکنید، و همچنین برای اینکه بتوانید ضربکنندههایی با سرعت بیشتر پیادهسازی کنید، در FPGA ها معمولا تعدادی ضربکننده به صورت سختافزاری از قبل تعبیه شده است که میتوانید در طراحی مدار از آنها استفاده کنید.
منابع کلاک
آخرین منبعی که میخواهم راجع به آن صحبت کنم منابع کلاک است.
مساله کلاک، به خصوص در طراحی مدارات سنکرون مساله بسیار مهمی است.
FPGA شامل مدار بزرگی خواهد بود که نیاز دارد کلاک را به صورت همزمان به بخشهای مختلف خود برساند.
کلاک از مسیرهای مختلفی عبور میکند و این مسیرها طولهای متفاوتی دارند و این طولهای متفاوت، باعث ایجاد ﺗﺄخیرهای متفاوت در رساندن کلاک به بخشهای مختلف مدار میشود.
اما در یک سیستم سنکرون واحد، ما دوست داریم که کلاک به صورت همزمان به بخشهای مختلف سیستم برسد.
برای اینکار در FPGAها، تمهیدات مناسبی اندیشیده شده است تا این تمهیدات بتوانند کلاک را به صورت همزمان به بخشهای مختلف سیستم برسانند.
یکی دیگر از منابعی که در بخش کلاک، FPGAها در اختیار ما قرار میدهند منبع تغییر فرکانس است.
معمولا وقتی شما با بردی که دارای یک FPGA است کار میکنید، این برد شامل یک اسیلاتور است که یک فرکانس ثابت و مشخص تولید میکند و به یکی از پینهای FPGA متصل است.
مثلا، ممکن است بردی که شما استفاده میکنید، اسیلاتوری داشته باشد که فرکانس 50 مگاهرتز را تولید میکند و این 50 مگاهرتز به یکی از پایههای FPGA داده میشود و شما میتوانید در مدار سنکرون از آن استفاده کنید.
اما ممکن است مداری که شما در حال طراحی آن هستید، نیاز به فرکانس کلاک دیگری داشته باشد.
مثلا، ممکن است شما بخواهید مداری با فرکانس کلاک 128 مگاهرتز طراحی کنید.
بنابراین، نیاز دارید که از فرکانس اسیلاتور، فرکانس جدیدی ایجاد کنید.
این کار به کمک منابع سختافزاری که قبلا در FPGA پیادهسازی شدهاند قابل انجام است.
این منبع سختافزاری در FPGAهای شرکت XILINX با نام DCM شناخته می شود.
البته در بعضی از FPGAهای دیگر، نام های دیگری دارد ولی در بیشتر FPGAها به نام DCM شناخته میشود.
به کمک DCMها میتوانید فرکانس اسیلاتور موجود روی برد را تغییر دهید و در سیستم طراحی شده با فرکانس جدید از آن استفاده بکنید.
اجازه بدهید راجع به آن باورهای غلطی که در ابتدا به آن اشاره کردم کمی صحبت کنیم.
البته در برنامههای بعدی که راجع به زبانهای توصیف سختافزار و پیادهسازی دیجیتال است در این زمینه بیشتر صحبت خواهم کرد.
اما اکنون با توجه به مواردی که صحبت شد میتوانیم کمی راجع به این موضوع صحبت کنیم.
شما احتمالا برای یکی از میکروکنترلرها برنامهنویسی کردهاید و یا اگر با میکروکنترلر هم کار نکرده باشید، احتمالابه زبان Pascal ،Basic ،C یا زبان دیگری، با کامپیوتر برنامهنویسی انجام دادهاید.
وقتی شما با یک میکروکنترلر یا کامپیوتر کار میکنید، در واقع با یک CPU سر و کار دارید. یعنی یک سختافزار از پیش ساختهشدهای که تعداد مشخصی دستور را پشتیبانی میکند.
برای استفاده از یک CPU شما نیاز به برنامهنویسی دارید. یعنی به کمک دستوراتی که برای آن CPU تعریف شده است، عملکرد خاصی را به کمک آن انجام میدهید.
اما در مورد FPGA این موضوع به چه صورت هست؟
وقتی با FPGA کار میکنید نه تنها CPU، بلکه هیچ سختافزار از پیش طراحی شده مشخصی را در اختیار ندارید.
آنچه در اختیار دارید، دریایی از منابع سختافزاری دیجیتالی است که در ابتدا و به خودی خود ارائهدهندهی هیچ سختافزار مشخصی نیستند.
مثلا برای اینکه دو رجیستر را در FPGA با هم جمع کنید، ابتدا باید یک سختافزار جمعکننده طراحی کنید. سپس باید دو رجیستر را به کمک سختافزاری که برای عمل جمع طراحی کردید، با هم جمع کنید.
اما رجیستری هم به خودی خود در FPGA وجود ندارد. بنابراین شما دو رجیستر نیز باید طراحی کنید.
بنابراین زمانی که با FPGA کار میکنید، شما در حال طراحی سختافزار هستید نه نرمافزار.
بنابراین، عباراتی مثل برنامهنویسی برای FPGA، یا طراحی نرمافزار برای FPGA، عبارات غلطی هستند.
در بحثی که در مورد زبانهای توصیف سختافزاری خواهیم داشت، اشاره خواهم کرد که در آن زبانها هم چیزی به اسم دستور وجود ندارد، چون دستورات مربوط به CPU هستند.
در آنجا شما عبارات توصیف سختافزاری را دارید، که به کمک آنها میتوانید رفتار مدار دیجیتال را
توصیف کنید.
در مورد این مفاهیم در برنامههای بعدی بیشتر توضیح خواهم داد.
شما با خواندن این مقاله و همچنین قسمت قبل همین مقاله، نه تنها منابع درونی FPGA را به خوبی میشناسید، بلکه با باورهای غلطی که در رابطه با FPGAها وجود دارد نیز آشنا هستید.
شما قطعا با شناخت این مفاهیم بنیادی و همچنین آشنایی با باورهای غلط رایجی که وجود دارد، در آینده طراحیهای صحیحتر و بهینهتری با FPGA انجام خواهید داد.
آیا برنامه ویدئویی FPGA چیست؟ - منابع سختافزاری درون FPGA برای شما مفید بود؟
لطفا نظرتان را در مورد این برنامه در پایین همین پست با دیگران به اشتراک بگذارید. همچنین با کلیک روی هر کدام از دکمههای اشتراک گذاری ابتدای این مطلب و به اشتراکگذاری آن در شبکههای اجتماعی میتوانید افراد بیشتری را در یادگیری این مطالب سهیم کنید.
بسیااااربسیاااااار عااالی بود
خوشحالم که این آموزش برای شما مفید بوده است.