تکنیک Retiming در ابزار سنتز Vivado

تکنیک Retiming یک الگوی بهینه سازی ترتیبی برای جابجایی رجیسترها در طول منابع منطقی است. این کار با هدف بهبود کارایی مدارات منطقی انجام می‌شود.

مقدمه

آنالیز زمانبندی ایستا پیش از هر چیزی نیازمند این است که ما با ابزارهای این کار و مفاهیم اولیه آن آشنا باشیم. در سایه‌ آشنایی با تعاریف می‌توانیم بهترین روش ممکن برای دستیابی به کارایی مطلوب را انتخاب و به موثرترین شکل به کار بگیریم. در این آموزش از پایگاه دانش هزالینکس قصد داریم شما را با مفهوم retiming و شیوه استفاده از تکنیک retiming در ابزار سنتز Vivado آشنا کنیم. اگر علاقمند به موضوعات مرتبط با بهینه سازی زمانبندی در طراحی‌های FPGA هستید، تا انتها با ما همراه باشید.

تعریف retiming

در ابتدا اجازه بدهید یک تعریف از retiming ارائه بدهیم. شاید در آغاز این تعریف کمی گنگ و نامفهوم به نظر برسد، اما با توضیحاتی که در ادامه مطالعه خواهید کرد، ابهامات اولیه به کلی برطرف می‌شود.

اصلاح زمانبندی مسیرها در FPGA، یا retiming یک تکنیک بهینه سازی ترتیبی برای جابجایی رجیسترها در طول منابع منطقی است. این کار با هدف بهبود کارایی طرح بدون بروز تداخل روی رفتار ورودی و خروجی‌های مدارات منطقی انجام می‌شود.

مدار نشان داده شده در شکل (۱) دارای مسیر بحرانی با یک جمع کننده شش ورودی است. این مسیر با رنگ قرمز متمایز شده است. این دقیقاً همان مسیری است که کارایی مدار را تحت تاثیر قرار می‌دهد.

شکل (۱) مثالی از یک مسیر زمانبندی ایستا بین دو رجیستر با یک جمع کننده شش بیتی
شکل (۱) مثالی از یک مسیر زمانبندی ایستا بین دو رجیستر با یک جمع کننده شش بیتی

تعریف مسیرهای زمانبندی ایستا (Static Timing Paths)

مسیر زمانبندی ایستا، مسیری است که

  • از یک عنصر کلاک دار شروع می شود.
  • در طول تعدادی عنصر ترکیبی و نت‌های متصل کننده آنها منتشر می شود و
  • به یک عنصر کلاک دار ختم می‌شود.

عناصر کلاک دار شامل فلیپ فلاپ ها، بلوک‌های ضرب کننده، حافظه‌ها و … هستند و عناصر ترکیبی شامل LUT ها، مالتی پلکسرها و … هستند.

در عمل آنالیز زمانبندی ایستا تنها برای بخش‌هایی از مدار که بین دو عنصر سنکرون قرار دارند صورت می‌پذیرد و مسیرهای فاقد عنصر سنکرون نادیده گرفته می‌شوند، به بیان ساده‌تر آنالیز زمانبندی برای مدارات ترکیبی کاملا بی معنی است.

مشخصه‌های زمانبندی و به طور کلی کارایی مداری که در این شکل نشان داده شده است می‌تواند با اعمال تکنیک retiming روی رجیسترهای خروجی جمع کننده بهبود پیدا کند. برای این کار لازم است رجیسترها به نقطه‌ای از مدار که عناصر ترکیبی بیشتری در آن‌جا هستند، منتقل شوند.

تأخیر مجموع ما در این مدار برابر با ۴ است. شکل (۲) یکی از روش‌های موجود برای انتقال رجیسترها با هدف کاهش توالی منابع منطقی را نشان می‌دهد. جابجا کردن رجیستر خروجی به ابتدای مدارت ترکیبی اصطلاحاً backward retiming نامیده می‌شود. با این کار، مسیر بحرانی محدود به یک جمع کننده دو ورودی می‌شود.

شکل (۲) مثالی از مسیر رجیستر به رجیستر با یک جمع کننده دو ورودی بعد از اعمال backward retiming
شکل (۲) مثالی از مسیر رجیستر به رجیستر با یک جمع کننده دو ورودی بعد از اعمال backward retiming

نکته دیگری که باید در مثال‌های بالا به آن توجه کنیم، تغییر در تعداد رجیسترهاست.

شکل (۱) دارای ۹ رجیستر روی هر باس (سیگنال‌های ۱۶ بیتی) است. در حالی که شکل (۲) دارای ۱۲ رجیستر باس متفاوت است. واضح است که این اختلاف ناشی از بکارگیری تکنیک backward retiming است. با جابجایی رجیستر از خروجی به سمت ورودی هر دو ورودی گیت باید دارای رجیستر باشند.

به طور کلی دو نوع retiming‌ وجود دارد:

  • جابجایی فلیپ فلاپ‌ها به صورت رو به عقب یا backward retiming و
  • جابجایی فلیپ فلاپ‌ها به صورت رو به جلو یا forward retiming .

در backward retiming رجیسترهای خروجی‌گیت‌ها حذف می‌شود و رجیسترهای جدید در ورودی آن‌ها قرار داده می‌شود. در forward retiming دقیقاً به صورت معکوس عمل می‌کند و رجیسترهای را از ورودی گیت‌ها حذف و در خروجی گیت‌ها قرار می‌دهد.

برای اینکه تکنیک backward retiming با موفقیت همراه شود، مدار ترکیبی باید تنها یک رجیستر را درایو کند و fanout اضافی روی سایر بخش‌های منطقی نداشته باشیم. برای اینکه forward retiming کار کند هر ورودی گیت‌ باید با رجیسترهایی که دارای کنترل ست‌های مشابه هستند درایو شود.

تعریف fanout در مدرات دیجیتال و FPGA

در الکترونیک دیجیتال، مفهوم fanout به عنوان پارامتری برای توصیف ظرفیت خروجی‌ گیت‌های منطقی بکار برده می‌شود و بیانگر تعداد ورودی‌هایی است که یک خروجی می‌تواند برای گیت‌های دیگر تامین کند. به بیان ساده‌تر در FPGA تعداد مسیرهای منشعب شده از یک سیگنال یا پورت خروجی fanout نامیده می‌شود. هر پورت ورودی در گیت‌های منطقی نمی‌تواند با بیش از یک پورت خروجی تغذیه شود، اما در نقطه مقابل هر خروجی ممکن است برای تامین ورودی بخش‌های مختلف سیستم مورد استفاده قرار بگیرد. هر چه fanout یک سیگنال خروجی کمتر باشد، میزان پایداری و قابلیت اطمینان از عملکرد آن سیگنال‌ و در نتیجه کل سیستم بالاتر می‌رود. در واقع fanout معیاری برای سنجش تعداد کپی‌های ساخته شده از یک سیگنال واحد درون طراحی دیجیتال است.

شکل (۳) مداری را با هر دو نوع retiming معرفی شده نشان می‌هد.
شکل (۳) مداری را با هر دو نوع retiming معرفی شده نشان می‌هد.

تنظیمات سرتاسری در مقایسه با تنظیمات محلی

برای فعال سازی و اعمال اتوماتیک تکنیک retiming در ابزار سنتز Vivado دو روش وجود دارد.

  • روش محلی (local retiming)
  • و روش سرتاسری (global retiming)

در روش سرتاسری فرایند اصلاح زمانبندی روی تمام طرح اعمال می‌شود و رجیسترها روی بخش‌های مختلف ترکیبی مدار جابجا می‌شوند. نحوه اعمال این جابجایی‌ها کاملاً وابسته به ملاحظات زمانبندی طرح است.

در واقع بعد از فعال سازی تنظیمات سرتاسری retiming کل طرح آنالیز می‌شود و رجیسترها به سمت بدترین مسیرها از نقطه نظر زمانبندی منتقل می‌شوند. با این الگو بهینه سازی سرتاسری روی طرح اعمال می‌شود و طرح ما در مجموع سریعتر می‌شود. برای انجام این کار لازم است قیود زمانبندی مناسب و البته دقیق (timing constraints) برای طرح تعریف و در فایل xdc گنجانده شوند. تنظیمات سرتاسری با فراخوانی سوئیچ -retiming در synth_design (فرمان tcl برای سنتز طرح) و یا انتخاب گزینه retiming در برگه تنظیمات ابزار سنتز Vivado فعال می‌شود. علاوه بر این با استفاده از ویژگی BLOCK_SYNTH در زمان سنتز، این امکان برای ما وجود دارد که تنها یک ماژول خاص را برای retiming مشخص کنیم.

در نقطه مقابل در روش محلی، کاربر با استفاده از attribute ها درون کد HDL صراحتاً به ابزار می‌گوید عملیات retiming‌ را دقیقاً روی کدام بخش از مدار و به چه صورت ( backward retiming و یا forward retiming ) انجام شود.

لازم است به این نکته توجه داشته باشید که در زمان اجرای retiming ابزار دقیقاً همان کاری را کاربر تعیین کرده است، انجام می‌دهد و کلیه ملاحظات زمانبندی اتوماتیک کنار گذاشته می‌شوند. یعنی تمامی مسئولیت کارایی مدار بعد از local retiming بر عهده مهندس طراح است.

برای اطلاعات بیشتر در این زمینه می‌توانید به UG901 مراجعه کنید

آنالیز گزارش خروجی (Log file)

شکل (۴) مثالی را نشان می‌دهد که در آن تکنیک retiming باعث بهبود تعداد سطوح منطقی می‌شود. ساختار ما دارای مسیر بحرانی با سه سطح منطقی است که از گیت and با ۳۷ بیت تامین می شود. رجیستر مبدأ din1_dly_reg نام دارد و رجیستر مقصد tmp1_reg نام گذاری شده است. یک رجیستر اضافی دیگر بلافاصله بعد از رجیستر tmp1_reg وجود دارد و هیچ سطح منطقی بین این دو رجیستر وجود ندارد.

در واقع ما با یک مسیر ایده آل روبرو هستیم و می‌توانیم به خوبی مشخصه‌های زمانبندی آن را اصلاح کنیم. در اینجا ما دو مسیر پشت سرهم داریم که مسیر اول آن دارای سه سطح گیت منطقی است و مسیر دوم آن فاقد سطوح منطقی یا گیتی است. ما می‌توانیم سطوح منطقی مسیر اول را از ۳ به ۲ سطح کاهش و سطح منطقی باقی مانده را به مسیر دوم منتقل کنیم.

شکل (۴) شماتیک مداری که می‌توان روی آن تکنیک backward retiming را اعمال کرد
شکل (۴) شماتیک مداری که می‌توان روی آن تکنیک backward retiming را اعمال کرد

فایل گزارش خروجی سنتز، اطلاعاتی مشابه شکل زیر را در کنسول خروجی نمایش می‌دهد:

شکل (۵) گزارش خروجی سنتز
شکل (۵) گزارش خروجی سنتز

با مطالعه این گزارش شما می‌توانید تعداد سطوح منطقی در هر بخش از طرح خود را قبل و بعد از اعمال تکنیک retiming بررسی نمایید. در این گزارش نام رجیستر جدیدی که ساخته‌ایم نیز مشاهده می‌شود. زمانی که ابزار سنتز یک رجیستر جدید با هدف اصلاح زمانبندی تولید می‌کند از پیشوند‌های “bret” و “fret” به ترتیب برای مشخص کردن رجیستر تولیدی جدید در backward retiming‌ و forward retiming استفاده می‌کند.

شکل (۶) مداری را نشان می‌دهد که وجود یک رجیستر ناسازگار از اعمال retiming جلوگیری می‌کند. در این ساختار نیز همچون ساختار قبلی رجیستر مبدأ din1_dly_reg نام دارد، در ادامه مسیر یک گیت and با ۳۷ بیت وجود دارد که باعث ایجاد سه سطح منطقی می‌شود. در نهایت مسیر به رجیستری به نام tmp1_reg منتهی می‌شود. علاوه بر این گیت AND دارای fanout اضافی به یک رجیستر دیگر است که با رنگ صورتی متمایز شده است.

شکل (۶) شماتیک مداری که نمی‌توان روی آن تکنیک retiming را اعمال کرد
شکل (۶) شماتیک مداری که نمی‌توان روی آن تکنیک retiming را اعمال کرد

در این مثال به دلیل وجود رجیستر اضافی در خروجی گیت and اعمال retiming‌ امکان پذیر نیست. این رجیستر دارای ریست آسنکرون است در حالی که رجیستر tmp1_reg چنین شرایطی ندارد. از آنجایی که دو تا رجیستر خروجی دارای کنترل ست ‌های مشابه نیستند، امکان اعمال تکنیک backward retiming‌ روی گیت AND وجود ندارد. گزارشی خروجی سنتز اطلاعاتی مشابه با تصویر نشان داده شده در شکل (۷) را نشان می‌دهد

شکل (۷) گزارش خروجی سنتز
شکل (۷) گزارش خروجی سنتز

فایل گزارش خروجی سنتز شامل پیغامی درباره عدم سازگاری فلیپ فلاپ‌ها هست. در این گزارش تعداد سطوح منطقی قبل و بعد از retiming تغییر نمی‌کند.

به طور کلی عملیات retiming در موارد زیر امکان‌پذیر نیست:

  • زمانی که از قید Timing Exceptions روی رجیسترها استفاده شده باشد (قیدهایی همچون multicycle paths, false paths, max delay )
  • زمانی که ویژگی Keep روی رجیستر فعال شده باشد. (در زمان استفاده از قیدهایی همچون DONT_TOUCH, MARK_DEBUG)
  • رجیسترهایی که دارای کنترل ست متفاوت باشند
  • رجیسترهایی که مستقیماً به خروجی‌ها و یا ورودی‌های ماژول متصل شده اند. مگر اینکه طرح به صورت OOC – out of context علامت گذاری و سنتز شود.

مثالی از یک حلقه فیدبک

در ادامه یک مثال از مداری که در آن retiming قادر به بهبود مسیر بحرانی در یک حلقه فیدبک نیست را با هم مرور می‌کنیم. وقتی که یک مسیر دارای یک رجیستر مبدأ و مقصد یکسان است، بهینه سازی با تکنیک retiming قادر به ایجاد بهبود در سطوح منطقی نیست.

برای مثال مدار شکل (۸) را در نظر بگیرید:

مسیر بحرانی رجیستر “dout_reg” با رنگ قرمز متمایز شده است. خروجی رجیستر بعد از عبور از گیت AND در ادامه به پین ریست رجیستر مبدأ منتهی می‌شود.

شکل (۸) چگونگی شکل گیری یک مسیر فیدبک
شکل (۸) چگونگی شکل گیری یک مسیر فیدبک

گیت RTL_REDUCTION_AND با توجه به عرض بیت ما یعنی ۱۶ بیت، دارای دو سطح منطقی است.

تصویری که در شکل (۹) ملاحظه می‌کنید. بخشی از گزارش سنتر است که در آن ابزار سنتز Vivado ماهیت این مسیر بحرانی را توصیف کرده است. در این گزارش، نام سلول‌هایی که بخشی از مسیر بحرانی هستند نیز ذکر شده است.

شکل (۹) گزارش خروجی سنتز
شکل (۹) گزارش خروجی سنتز

جمع بندی

به طور کلی در تعیین عمکرد و کارایی یک طرح عناصر سازنده طرح تاثیرگذار نیستند !!! بلکه شیوه کنار هم قرار دادن آن‌ها تعیین کننده است. در این آموزش ما شما را با یکی از تکنیک‌های بهینه سازی زمانبندی در FPGA آشنا کردیم. بدیهی است در طرح‌های پیچیده استفاده از تکنیک retiming به تنهایی کافی نیست و شما باید برای دستیابی به نتایج مطلوب تسلط لازم به کلیه مفاهیم آنالیز زمانبندی ایستا داشته باشید.

منبع: برگرفته از وبلاگ Xilinx  

اشتراک در
بیشتر بخوانیم
آموزش سریع Vivado HLS ابزارهای طراحی

قسمت پنجم: استفاده از اینترفیس Tcl در Vivado HLS

در این ویدئو ابتدا روش ساخت و سفارشی سازی یک فایل Tcl و در ادامه نحوه استفاده از اینترفیس Tcl برای اجرای Vivado HLS را با هم مرور خواهیم کرد.

اینترفیس AXI ابزارهای طراحی

اینترفیس AXI (قسمت سوم: شبیه سازی AXI4-Lite با AXI VIP)

در قسمت سوم این سری آموزشی قصد داریم با اضافه کردن AXI VIP به یک پروژه در Vivado فرایند شبیه سازی اینترفیس AXI4-Lite با AXI VIP را به طور کامل بررسی کنیم.

بلوک‌های UltraRAM‌ در تراشه‌های +UltraSclae تراشه‌های قابل پیکره‌بندی

مفهوم حافظه در FPGA و کاربردهای آن

حافظه ها یکی از مهمترین منابع درون تراشه FPGA هستند و بدون آن ها جریان طراحی به شکلی که امروزه انجام می شود، امکان پذیر نبود، حافظه ها درون FPGA به دو دسته تقسیم می شوند.

محاسبه سینوس و کسینوس در FPGA با استفاده از CORDIC ابزارهای طراحی

محاسبه سینوس و کسینوس در FPGA با استفاده از CORDIC

روش‌‌های متفاوتی برای محاسبه سینوس و کسینوس در FPGA وجود دارد که یکی از آن‌ها استفاده از CORDIC IP Core در مجموعه نرم افزاری ISE و Vivado است.

عناوین مطالب
    برای شروع تولید فهرست مطالب ، یک هدر اضافه کنید

    دیدگاه‌ خود را بنویسید

    نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

    اسکرول به بالا