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

BCD adder

در قسمت قبلی تفاوت باینری adder و bcd adder رو توضیح دادم و متوجه شدیم که تفاوت این دو روش جمع تنها در رنج 10 تا 19 می باشد که اختلاف آن ها برابر 0110 که برابر عدد 6 دهدهی است، و در رنج 0 تا 9 حاصل آن ها با هم تفاوتی ندارد.

پس روش ما برای جمع باید به گونه ای باشد که اعداد را اول به صورت باینری جمع کنیم ، سپس ببینیم آیا عدد ما در رنج 10 تا 19 هست یا خیر اگر بود آن را با 0110 مجدد جمع کنیم تا برابر حاصل جمع در BCD شود ، در غیر این صورت نیازی به تغییر نیست.

حالا مشکل این جاست که ببینیم چگونه اعداد 10تا 19 را پیدا کنیم!؟

فرض کنیم دو عدد 4 بیتی را می خواهیم به صورت باینری جمع کنیم :


طبق تصویر بالا در حاصل ما یه عدد پنج بیتی به صورت زیر داریم:

carry sum3 sum2 sum1 sum0

زمانی که carry برابر 1 باشد ، عدد بزرگ تر و مساوی 16 خواهد بود.

زمانی که ، sum3 و sum2 هر دو باهم یک باشند عدد بزرگ تر مساوی 12 خواهد بود.

و زمانی که sum3 و sum1 هر دو باهم یک باشند عدد بزگ تر مساوی 10 خواهد بود.

پس زمانی که یک یا دو یا هر سه شرط برقرار باشد قطعا عدد ما در رنج 10 تا 19 خواهد بود ، به همین راحتی!

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


حالا وقتی که رنج عددمون رو پیدا کرده ایم ، پس نیاز داریم عدد را اگر در رنج 10 تا 19 بود با 0110 جمع کرده و اگر در بازه 0 تا 9 بود با 0000 جمع کنیم.

پس مجددا نیاز به یک باینری adder دیگر داریم.

پس از تکمیل شکل به تصویر زیر می رسیم:

همانطور که در بالا گفته شد ، زمانی که خروجی or ما یک باشد ، عدد در رنج 10 تا 19 خواهد بود ، اما اگر خروجی or صفر باشد عدد در رنج 0 تا 9 خواهد بود .

پس ما خروجی or رو اگر با z نمایش دهیم ، به شیوه زیر به 4bit adder دوم وصل می کنیم:


دلیل این کار این است که اگر خروجی or یا همون z یک باشد ، به معنای بازه 10 تا 19 است و عدد باید با 0110 جمع شود و اگر z برابر صفر باشد به معنای بازه 0 تا 9 است پس عدد با 0000 جمع می گردد.

یکان حاصل جمع BCD ما همان حاصل جمع 4bit adder دوم می باشد، و دهگان جمع BCD ما همان z یا حاصل or می باشد.

البته دهگان را می شود به روش دیگری نیز محاسبه کرد :

الف) میدانیم carry در 4bit adder اول زمانی یک می شود که حاصل بین 16 تا 19 باشد.

ب) و همچنین carry در 4bit adder دوم زمانی یک می شود که حاصل در رنج 10 تا 15 باشد ( زیرا جمع اعداد 10 تا 15 با عدد 0110 موجب ایجاد carry می گردد)

نتیجه: پس با این حساب با or کردن carry های دو 4bit adder می توانیم دهگان را بسازیم.

سوال: در جمع BCD چهار بیتی چند حالت مجاز داریم؟

پاسخ:دو ورودی A و B تنها اعداد 0 تا 9 را می توانند بپذیرند، بنابراین هر کدام ده حالت دارند ، ورودی cin نیز دو حالت صفر و یک دارد ، بنابراین :

result: 100*100*2=200

تاخیر در BCD adder:

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

ابتدا باید مسیر بحرانی را پیدا کنیم:


مسیر بحرانی ما ، مسیر بنفش رنگی ست که در شکل مشخص کرده ام .

علت اینکه FA اول در باینری adder دوم در مسیر بحرانی ما نیست این است که FA اول در واقع s0 را با دو تا صفر جمع میزند یعنی در واقع عملی انجام نمی دهد و می توان آن را حذف کرد.

پس مسیر بحرانی ما شامل 4 FA در باینری adder اول گیت and و گیت or و 3 FA در باینری adder دوم می باشد. یعنی در مجموع برابر 16t می باشد.( تاخیر گیت and و or را t فرض کرده ایم)

*اما اگر سوال از ما بپرسد که تاخیر برای دهگان BCD چقدر است؟ جواب 16t نخواهد بود ، زیرا دهگان برابر حاصل گیت or بود که اصلا وارد باینری adder دوم نمی شد پس از سه FA آخر عبور نخواهد کرد، بنابراین برابر 10t خواهد بود.

در قسمت بعدی با هم چند سوال از BCD adder حل می کنیم.

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