#Essentials
✅ آیا تا به حال به اهمیت رعایت مساله زمانبندی در طراحی های FPGA فکر کردید؟ آیا با مفاهیم ساده و اولیه سنجش کارایی یک پیاده سازی آشنایی دارید؟ تا به حال به این فکر کردید که چرا برخی از پیاده سازی ها با وجود اینکه نتایج شبیه سازی آن ها کاملا درست است، اما نتایج سخت افزاری کاملا اشتباه و نامعتبر دارند؟
به طور کلی انجام مجاسبات ریاضی و پردازش سیگنال در FPGA نیازمند رعایت اصول پیاده سازی خاص در این مدارهاست، سوال اینجاست که اگر این اصول رعایت نشود، چه مشکلی پیش می آید؟
✅ قبل از پاسخ به این سوال اجازه بدهید در پست زیر یکسری مفاهیم مقدماتی را به زبان ساده توصیف کنیم. هر طراح FPGA باید با مفاهیمی همچون #Race_Condition و #Glitch آشنایی داشته باشد تا بتواند دلیل رعایت یکسری از اصول را در برنامه نویسی متوجه شود، و برای آن ها راه حل مناسب پیدا کند. این آغاز ماجراجویی شماست، با ما همراه باشید ...
@Hexalinx
✅ آیا تا به حال به اهمیت رعایت مساله زمانبندی در طراحی های FPGA فکر کردید؟ آیا با مفاهیم ساده و اولیه سنجش کارایی یک پیاده سازی آشنایی دارید؟ تا به حال به این فکر کردید که چرا برخی از پیاده سازی ها با وجود اینکه نتایج شبیه سازی آن ها کاملا درست است، اما نتایج سخت افزاری کاملا اشتباه و نامعتبر دارند؟
به طور کلی انجام مجاسبات ریاضی و پردازش سیگنال در FPGA نیازمند رعایت اصول پیاده سازی خاص در این مدارهاست، سوال اینجاست که اگر این اصول رعایت نشود، چه مشکلی پیش می آید؟
✅ قبل از پاسخ به این سوال اجازه بدهید در پست زیر یکسری مفاهیم مقدماتی را به زبان ساده توصیف کنیم. هر طراح FPGA باید با مفاهیمی همچون #Race_Condition و #Glitch آشنایی داشته باشد تا بتواند دلیل رعایت یکسری از اصول را در برنامه نویسی متوجه شود، و برای آن ها راه حل مناسب پیدا کند. این آغاز ماجراجویی شماست، با ما همراه باشید ...
@Hexalinx
#Race_Condition
#Metastabilty
#Glitch
✳️ رخداد #Race_Condition نتیجه و حاصل یک طراحی نامناسب برای یک لچ یا فلیپ فلاپ در FPGA است. در واقع نشان دهنده وضعیتی است که در آن داده و کلاک ورودی به یک فلیپ فلاپ در یک زمان تغییر می کنند و نتیجه خروجی بستگی به این دارد که کدام یک از این دو در اصطلاح برنده شود.
✳️ در موارد نادر، ممکن است در زمان تغییر وضعیت کلاک، داده دقیقا برابر 0 و یا 1 باشد ، ولی در اکثر موارد داده مقداری بین 0 و یا 1 دارد، یعنی در بازه زمانی گذر از حالت low به حالت high قرار دارد. در این چنین شرایطی خروجی برای یک لحظه بین 0 و 1 باقی می ماند، (برای مثال در یک سیستم با ولتاژ 5V ، خروجی ممکن است برای مدت زمان خیلی کوتاهی مثلا چند نانو ثانیه حدود 2.5V باشد. هنگامی که این اتفاق می افتد در اطلاح گفته می شود خروجی ناپایدار یا #Metastable است. ناپایدار بودن باعث ایجاد اثرات جدی و منفی بر روی عملکرد سیستم می شود از همه بدتر اینکه، تقریبا تکرار پذیری این حالت ناپایدار تقریبا غیرممکن است و بنابراین پیدا کردن منشا خطا و برطرف کردن آن بسیار سخت است.
✳️ مسئله ناپداری در خروجی فقط مختص به فلیپ فلاپ ها نیست و ممکنه به دلیل تاخیر وضعیت نامتناسب در ورودی های گیت های منطقی نیز وجود داشته باشد و باعث ایجاد مشکلات ناخواسته بشود، این رخداد نیز در اصطلاح #Glitch نامیده می شود.
✳️ برای جلوگیری از بروز چنین مشکلاتی در طراحی، طراح باید با در نظر گرفتن بدترین شرایط ممکن، آنالیز زمانی کاملا دقیقی روی مداری که طرحی کرده است، انجام دهد. این نوع آنالیزها عموما با بکارگیری تاخیرهای انتشار، تاخیرهای مسیر بین عناصر موجود در FPGA، محاسبه زمان بندی high و low شدن سیگنال و یکسری پارامترهای دیگر انجام می شود. این کار عموما زمان بر است، اما شرکت های سازنده تراشه های قابل برنامه ریزی ابزارهای مناسبی را برای انجام این تحلیل ها ارائه داده اند.
@Hexalinx
#Metastabilty
#Glitch
✳️ رخداد #Race_Condition نتیجه و حاصل یک طراحی نامناسب برای یک لچ یا فلیپ فلاپ در FPGA است. در واقع نشان دهنده وضعیتی است که در آن داده و کلاک ورودی به یک فلیپ فلاپ در یک زمان تغییر می کنند و نتیجه خروجی بستگی به این دارد که کدام یک از این دو در اصطلاح برنده شود.
✳️ در موارد نادر، ممکن است در زمان تغییر وضعیت کلاک، داده دقیقا برابر 0 و یا 1 باشد ، ولی در اکثر موارد داده مقداری بین 0 و یا 1 دارد، یعنی در بازه زمانی گذر از حالت low به حالت high قرار دارد. در این چنین شرایطی خروجی برای یک لحظه بین 0 و 1 باقی می ماند، (برای مثال در یک سیستم با ولتاژ 5V ، خروجی ممکن است برای مدت زمان خیلی کوتاهی مثلا چند نانو ثانیه حدود 2.5V باشد. هنگامی که این اتفاق می افتد در اطلاح گفته می شود خروجی ناپایدار یا #Metastable است. ناپایدار بودن باعث ایجاد اثرات جدی و منفی بر روی عملکرد سیستم می شود از همه بدتر اینکه، تقریبا تکرار پذیری این حالت ناپایدار تقریبا غیرممکن است و بنابراین پیدا کردن منشا خطا و برطرف کردن آن بسیار سخت است.
✳️ مسئله ناپداری در خروجی فقط مختص به فلیپ فلاپ ها نیست و ممکنه به دلیل تاخیر وضعیت نامتناسب در ورودی های گیت های منطقی نیز وجود داشته باشد و باعث ایجاد مشکلات ناخواسته بشود، این رخداد نیز در اصطلاح #Glitch نامیده می شود.
✳️ برای جلوگیری از بروز چنین مشکلاتی در طراحی، طراح باید با در نظر گرفتن بدترین شرایط ممکن، آنالیز زمانی کاملا دقیقی روی مداری که طرحی کرده است، انجام دهد. این نوع آنالیزها عموما با بکارگیری تاخیرهای انتشار، تاخیرهای مسیر بین عناصر موجود در FPGA، محاسبه زمان بندی high و low شدن سیگنال و یکسری پارامترهای دیگر انجام می شود. این کار عموما زمان بر است، اما شرکت های سازنده تراشه های قابل برنامه ریزی ابزارهای مناسبی را برای انجام این تحلیل ها ارائه داده اند.
@Hexalinx
#Intermediate
#BUFGCE, #BUFHCE
🔖 تقریبا در تمامی تراشههای FPGA پیشبینیهای لازم برای گیت کردن کلاک در راستای کاهش توان مصرفی در نظر گرفته شده است. در تراشههای سری ۷ این مساله به شکل جدیتری مورد توجه قرار گرفته است. با استفاده از کنترلهای در نظر گرفته شده برای این منظور میتوان به راحتی بخشی از مدار را که نیاز به انجام عملیات خاصی ندارند، غیرفعال کرد. این کنترلها برای تغییر و مالتیپلکس کردن دو یا چند کلاک هم میتوانند مورد استفاده قرار بگیرند.
🔖 اگر با منابع کلاک درون تراشههای سری ۷ آشنا باشید حتما بافرهای کلاک را میشناسید و نامهایی مثل BUFGCE و BUFHCE را شنیدهاید. تقریبا در تمامی طراحیها تعداد زیادی بافر از نوع BUFGCE و BUFHCE وجود دارد که بدون استفاده رها میشوند. در حالت کلی هر BUFGCE میتواند کلاک مورد نیاز برای چندین ناحیه کلاک مختلف در تراشه را تامین کند و در نقطه مقابل هر BUFHCE تنها قادر به تامین کلاک برای یک ناحیه کلاک است.
برای درک بهتر مساله اجازه بدهید مثالی از نحوه فعال یا غیرفعال کردن کلاک بزنیم. توجه شود که در اینجا مفهوم غیرفعال کردن کلاک برای یک یا چند فلیپفلاپ بکار نمیرود و مساله کنترل کلاک بخشی از مدار پیادهسازی شده است. اگر تمامی مداراتی که نیاز است به طور دائم فعال باشند به شکل مناسبی با تعریف قیود مکانی در یک یا چند ناحیه کلاک محصور شده باشند، آنگاه یک BUFGCE میتواند برای تامین کلاک این نواحی به کار گرفته بشود. از سوی دیگر اگر اینترفیس خاصی به صورت کامل درون یک ناحیه کلاک محصور شده باشد و تنها نیاز باشد در بازههای زمانی کوتاه فعال باشد، میتوان با BUFHCE کلاک ورودی به این ناحیه را گیت کرد.
🔖 کنترل پایههای enable این دو بافر یک روش بسیار آسان برای کنترل دینامیک توان مصرفی روی نواحی مختلف کلاک است. در مورد روش مالتی پلکس کردن کلاکها نیز در آینده مطلبی ارائه خواهیم داد.
❗️اما هنوز یک نکته باقی مانده است. اگر به دلایل مختلف مجبور هستیم clock gating انجام دهیم. چگونه اینکار را انجام دهیم تا کمترین تاثیر منفی را روی طرح بگذارد؟ بهترین نقطه برای آغاز یا پایان فرایند clock gaiting دقیقا وسط بخش میانی کلاک است. دقیقا زمانی که مقدار آن صفر است. این کار معمولا با گیت and انجام میشود و هدف ممانعت از ایجاد #glitch در خروجی است. با رعایت این مساله در زمان روشن شدن گیت یا خاموش شدن آن در کلاک تولیدی خروجی هیچ شرایط پیش بینی نشدهای به وجود نمیآید و همینطور عرض پالس نیز کوتاه نمیشود.
@Hexalinx
#BUFGCE, #BUFHCE
🔖 تقریبا در تمامی تراشههای FPGA پیشبینیهای لازم برای گیت کردن کلاک در راستای کاهش توان مصرفی در نظر گرفته شده است. در تراشههای سری ۷ این مساله به شکل جدیتری مورد توجه قرار گرفته است. با استفاده از کنترلهای در نظر گرفته شده برای این منظور میتوان به راحتی بخشی از مدار را که نیاز به انجام عملیات خاصی ندارند، غیرفعال کرد. این کنترلها برای تغییر و مالتیپلکس کردن دو یا چند کلاک هم میتوانند مورد استفاده قرار بگیرند.
🔖 اگر با منابع کلاک درون تراشههای سری ۷ آشنا باشید حتما بافرهای کلاک را میشناسید و نامهایی مثل BUFGCE و BUFHCE را شنیدهاید. تقریبا در تمامی طراحیها تعداد زیادی بافر از نوع BUFGCE و BUFHCE وجود دارد که بدون استفاده رها میشوند. در حالت کلی هر BUFGCE میتواند کلاک مورد نیاز برای چندین ناحیه کلاک مختلف در تراشه را تامین کند و در نقطه مقابل هر BUFHCE تنها قادر به تامین کلاک برای یک ناحیه کلاک است.
برای درک بهتر مساله اجازه بدهید مثالی از نحوه فعال یا غیرفعال کردن کلاک بزنیم. توجه شود که در اینجا مفهوم غیرفعال کردن کلاک برای یک یا چند فلیپفلاپ بکار نمیرود و مساله کنترل کلاک بخشی از مدار پیادهسازی شده است. اگر تمامی مداراتی که نیاز است به طور دائم فعال باشند به شکل مناسبی با تعریف قیود مکانی در یک یا چند ناحیه کلاک محصور شده باشند، آنگاه یک BUFGCE میتواند برای تامین کلاک این نواحی به کار گرفته بشود. از سوی دیگر اگر اینترفیس خاصی به صورت کامل درون یک ناحیه کلاک محصور شده باشد و تنها نیاز باشد در بازههای زمانی کوتاه فعال باشد، میتوان با BUFHCE کلاک ورودی به این ناحیه را گیت کرد.
🔖 کنترل پایههای enable این دو بافر یک روش بسیار آسان برای کنترل دینامیک توان مصرفی روی نواحی مختلف کلاک است. در مورد روش مالتی پلکس کردن کلاکها نیز در آینده مطلبی ارائه خواهیم داد.
❗️اما هنوز یک نکته باقی مانده است. اگر به دلایل مختلف مجبور هستیم clock gating انجام دهیم. چگونه اینکار را انجام دهیم تا کمترین تاثیر منفی را روی طرح بگذارد؟ بهترین نقطه برای آغاز یا پایان فرایند clock gaiting دقیقا وسط بخش میانی کلاک است. دقیقا زمانی که مقدار آن صفر است. این کار معمولا با گیت and انجام میشود و هدف ممانعت از ایجاد #glitch در خروجی است. با رعایت این مساله در زمان روشن شدن گیت یا خاموش شدن آن در کلاک تولیدی خروجی هیچ شرایط پیش بینی نشدهای به وجود نمیآید و همینطور عرض پالس نیز کوتاه نمیشود.
@Hexalinx