zerotwo
zerotwo
خواندن ۳ دقیقه·۴ سال پیش

carry look ahead

از قبل با ripple carry adder آشنا شدیم ، و متوجه شدیم که مشکل اساسی ripple carry adder در این است که در آن هر FA برای محاسبات خود باید منتظر carry حاصل از FA قبلی خود باشد.

پس ما به دنبال راهی هستیم که حاصل carry را به صورت مستقل بدست آوریم. به همین دلیل به روش carry look ahead پیش بینی رقم نقلی نیز می گویند.

این بار FA را حاصل or کردن دو HA در نظر می گیریم:

پس طبق شکل بالا برای هر FA داریم:

در واقع هر FA شامل سه قسمت ، بدست آوردن PG ، بدست آوردن carry و بدست آوردن sum می باشد.

حالا شاید براتون سوال شده باشه که خب تا اینجا چه تفاوتی با ripple carry adder کرد؟ الان هم که هر carry وابسته به carry قبل از خودش است.

اما بیاید فرض کنیم که دو عدد 4 بیتی را می خواهیم باهم جمع بزنیم، پس ما باید 4 carry رو محاسبه کنیم ( C0 که به ما داده شده است ، C1 تا C4 را باید بدست آوریم)

حال طبق فرمولی که از FA بدست آوردیم تک تک carry هارو می نویسیم ، منتهی در هر carry فرمول carry قبلی را جایگذاری می کنیم، پس به فرمول زیر می رسیم:

حالا می بینید که می تونیم مستقل از هر FA و با این فرمول ها carry هارو محاسبه کنیم.

حالا اگر بخوایم مدار carry look ahead adder رو برای جمع دو عدد 4 بیتی بکشیم ، به شکل زیر می رسیم:

با فرض اینکه هر ستون به صورت موازی اجرا می شوند و تاخیر برای هر ستون t است ، پس در کل تاخیر برای 4bit carry look ahead برابر 4t می باشد. اما این تاخیر خیلی واقعی نیست چون همیشه تاخیر گیت xor بیشتر از گیت های دیگه است ، پس اگر تاخیر گیت xor را برابر 2t در نظر بگیریم تاخیر 4bit carry look ahead در کل برابر 6t خواهد شد.

یک نکته حائز اهمیت این است که در برخی منابع Pi رو برابر ai + bi در نظر می گیرند به جای xor. پس با این فرض به مدار زیر می رسیم:

حال طبق شکل بالا و مجدد با فرض اینکه اخیر گیت xor برابر 2t باشد تاخیر مدار بالا یعنی تاخیر برای 4bit carry look ahead برابر 5t خواهد بود.

پس در نتیجه اینکه تاخیر برای 4bit carry look ahead بین 6t و 4t خواهد بود.

در بالا و در قبل اشاره کردم که در carry look ahead ما سه قسمت اصلی رو بدست می آوریم اول PG سپس carry و در آخر sum ، یعنی به طور خلاصه مدار carry look ahead برابر شکل زیر است:

که تاخیر هر قسمت را 2t فرض می کنند.

سوال : آیا برای هر nbit carry look ahead adder تاخیر ثابت باقی می ماند و تمامی گیت ها به صورت موازی اجرا می شوند؟

به صورت تئوری بله! اما در عمل این کار امکان پذیر نیست ! زیرا ما محدودیت سخت افزار داریم مثلا گیت and هشت ورودی یا بالاتر وجود ندارد.

پس در نتیجه برای پیاده سازی جمع اعداد 8 بیتی ، 12 بیتی و ... باید چند carry look ahead adder چهاربیتی را به هم به صورت ripple adder متصل کنیم.

مثال: فرض کنید می خواهیم دو عدد 12 بیتی را باهم جمع بزنیم !

پس ما نیاز داریم سه 4bit carry look ahead adder را به صورت ripple به هم متصل کنیم. آیا می توان گفت تاخیر برای هر carry look ahead adder برابر 6t است بنابراین تاخیر کل 3 *6t یعنی 18t خواهد بود؟

خیر!!! باید مدار را کشیده و مسیر بحرانی بدست آوریم:

اگر هر مستطیل را یک carry look ahead adder در نظر بگیرید ، هر دایره درون آن برابر بدست آوردن سه مقدار اصلی PG و carry و sum است که تاخیر برای هر دایره نیز برابر 2t می باشد.

اگر این سه 4bit carry look ahead adder را بهم متصل کرده باشیم ، طولانی ترین مسیر یا همان مسیر بحرانی ما خط سبز رنگیست که در شکل مشخص کرده ام ، اگر دقت کنید شامل 5 دایره می باشد ، از آنجایی که تاخیر برای هر دایره برابر 2t است پس تاخیر کل برابر 5*2t یعنی 10t خواهد بود.

اگر جمع دو عدد 12 بیتی را با ripple carry adder پیاده سازی می کردیم ، تاخیر برابر 24t میشد که خب این تفاوت چشمگیری است.

در قسمت بعدی با همدیگه BCD adder رو یاد می گیریم.

معماری کامپیوترمدار منطقی
می نویسم تا خودم یادبگیرم ; )
شاید از این پست‌ها خوشتان بیاید