بیایید برای درک بهتر معنا و مفهوم سنتز در FPGA ها، با یک مثال ساده شروع کنیم.
اگر در دوران مدرسه، خوب به حرفهای معلم علوم گوش کرده باشید، معنای سنتز را یاد گرفته اید! البته معلم علوم بنده، عموی من بود.
به خاطر همین، برای اینکه به پدرم نگوید که من درس نمی خوانم، مجبور بودم حداقل درس علوم را خیلی خوب بخوانم.
خلاصه اینکه در درس علوم خواندیم که گیاه ها فتوسنتز می کنند ( شاید گیاه ها FPGA را از ما بهتر بلدند ) فتوسنتز ینی تبدیل نور به یه چیز دیگه..، اینجا کلمه ی سنتز مورد نظر ما هست که ینی تبدیل..
سنتز در FPGA ینی تبدیل کدی که ما مینویسیم به سخت افزار
درواقع نرم افزارهایی که کد رو سنتز میکنند دارن ساختار سخت افزار رو به زبان انسان نزدیکتر میکنن اما اگه واقعا قرار باشه برنامه رو به صورت حرفه ای و بهینه بنویسیم باید بدونیم پشت صحنه ی سنتز چه اتفاقی داره میوفته
فرض کنید توی یکی از FPGA های شرکت Xilinx کد HDL نوشتید اما پروژه قراره توی یک FPGA دیگه مثلا شرکت (Intel Altera) پیاده سازی بشه
ببینید رک بگم بهتون کد رو خیلیا مینویسن اما توی پروژه های بزرگ اگه بهینه نوشته نشه، همون که نوشته نشه سنگین تره
توی FPGA یه مفهوم مهم داریم به نام Critical Path ینی مسیر بحرانی، چه زمانی استفاده میشه؟
وقتی که توی یک پروژه مخابراتی و یا نظامی کد HDL نوشته شده اما فرکانس کاری مدار پایینه، چه باید کرد؟ ببینید از من به شما نصیحت “توی یک سیستم، سرعت سیستم رو کندترین قسمت سیستم تعیین میکنه، اگه بخاید سیستم سریع بشه باید بگردید مسیربحرانی و یا همون قسمت کند رو پیدا کنید که راهش همون یادگیری نحوه ی سنتز هستش”
بعضی اوقات سنتز مدار مشکلی نداره، فرکانس کاری مدار هم اصلا برامون مهم نیست و به نظر همه چیز عالی میاد،، بازهم نیاز به یادگیری نحوه ی سنتز مدار هست! چرا که برنامه نوشته شده جهت پیاده سازی بعد از سنتز FPGA باید یک سری مراحل دیگه رو هم طی بکنه مثل مکان یابی و مسیریابی … که اینجا سنتز در مراحل بعدی تاثیرگذار خواهد بود.
توی FPGA دو نوع حافظه داریم حافظه های Block RAM و حافظه های distributed RAMs که اولی حافظه های تعبیه شده در FPGA هست و فقط به عنوان حافظه استفاده میشه و دومی با استفاده از LUT ها ساخته میشه، اولی حجم بیشتری برای ذخیره سازی داره دومی کمتر، نحوه استفاده از این حافظه ها هم باید به صورت بهینه باشه مثلا برای جابجایی یک بار 9 تنی بصرفه نیست که از چندین وانت استفاده بشه به جای یک کامیون ده تن همونطوری که به صرفه نیست برای مسافرت چند نفر یک اتوبوس را اجاره کنیم!
هرچند دلایل بازم هست اما همون دلایل کافیه که نحوه سنتز مدار رو یاد بگیرید
یک نکته دیگه که باید بهش توجه کنید اینه که ابزار سنتز مداری که ما ازش استفاده میکنیم اسمش هست Vivado synthesis tool ابزارهای دیگه ای هم جهت سنتز مدار هستند که رفتارها و البته قابلیت های مشابهی دارند.
بیاید یک نمونه برنامه نویسی HDL و بهینه سازی اون جهت سنتز بهتر رو بررسی کنیم.
اول یه سیگنال تعریف میکنیم و بعد برنامه رو مینویسیم.
Signal s:std_logic_vector(2 downto 0);
قسمتی از برنامه به صورت زیر نوشته شده
If(s>=4)then
B<=a;
End if;
اما اگه به سیگنال s که یه سیگنال سه بیتی هست توجه کنید متوجه میشید که میتونیم فقط یک بیتش رو معیار قرار بدیم، نه هر سه بیتش.
برای اینکه هم سرعت مدار بالاتر بره هم از منابع کمتری استفاده کرده باشیم.
If(s(2)=’1’)then
B<=a;
End if;
نحوه پیاده سازی کد در سخت افزار رو در آینده بیشتر توضیح خواهیم داد.
ولی خلاصه یادتون باشه که نحوه سنتز مدار بحث بزرگ و البته مهمیه!
موفق باشید.