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

BCD adder(تفریق)

از قبل می دانیم عمل تفریق در هر مبنایی به فرض r به صورت زیر انجام می شود:

A - B = A + r'th complete B

یعنی عمل تفریق A و B برابر با جمع عدد A با مکمل r عدد B است.

مثلا در مبنای 2 برای تفریق عدد اول را با مکمل دو عدد دوم جمع می کردیم که مکمل 2 همان مکمل 1 بعلاوه 1 است. و در مبنای ده باید عدد اول را با مکمل 9 عدد دوم بعلاوه 1 جمع کنیم.

چون BCD عددی در مبنای ده است که هر رقم آن به صورت دودویی نمایش داده می شود پس در تفریق A-B باید عدد A را با مکمل 9 عدد B بعلاوه یک جمع کنیم.

برای بدست آوردن مکمل 9 در دهدهی هر رقم را منهای 9 می کردیم اما در BCD اینگونه نیست و دو روش داریم:

1) اول عدد را با 0110 جمع کرده سپس تمام ارقام را not کنیم.

2)تمام ارقام عدد را not کرده و سپس با 1010 جمع کنیم و از carry آن صرف نظر کنیم.

مثال :

مکمل 9 عدد 1100 را بدست آورید:

result: not(1100 + 0110) =1101

مثال:

تفریق دو عدد 0110 -1001 را به صورت bcd انجام دهید:

ابتدا مکمل 9 عدد 0110 را بدست می آوریم:

result: not(0110 + 0110 ) = 0011

پاسخ تفریق برابر است با جمع bcd اعداد زیر:

result: 1001 + 0011 + 0001= 0001 0001

که جواب نهایی ما رقم یکان یعنی 0001 است و دهگان به عنوان carry در نظر می گیریم و از آن صرف نظر می کنیم. زیرا از قبل در مکمل 2 به یاد داریم هنگامی که عدد A بزرگتر از عدد B باشد carry برابر یک می شد و بالعکس carry برابر صفر می شد.

پس برای اینکه مدار تفریق bcd رو کامل کنیم ، نیاز به یک مکمل 9 کننده داریم که ابتدا عدد B رو مکمل نه آن را حساب کند سپس وارد bcd adder بشود و همچنین cin رو به bcd adder باید 1 بدیم به عنوان اون یکی که باید با عدد مکمل 9 B جمع شود ، پس داریم:


طبق شکل بالا ، الان چالش پیش روی ما در این است که این مکمل 9 کننده رو بسازیم!

همانطور که از قبل گفته شد ، برای بدست آوردن مکمل9 bcd دو روش داشتیم ، ساخت هر دو روش به صورت زیر خواهد بود:


سپس در آخر یکی از دو مدار بالا را در شکل اول به جای مکمل 9 کننده جایگذاری می کنیم و تمااام! حالا ما یک مکمل9 کننده داریم!


سوال: یک ورودی کنترلی مانند M در نظر بگیرید و جمع کننده ، تفریق کننده bcd بسازید.

***یعنی تصور کنید اگر M مقدارش یک بود عمل تفریق انجام شود و اگر مقدار M برابر صفر بود عمل جمع انجام شود.

از درس مدار منطقی با xor آشنا هستید . در xor هرگاه عددی با یک xor شود برابر not آن عدد و اگر با صفر xor شود برابر خودش خواهد بود.


از همین مزیت xor استفاده کرده و ورودی کنترلی M را وارد bcd adder خودمون می کنیم و به شکل زیر می رسیم:


همچنین می توان به عنوان روش دوم از یک مالتی پلکسر استفاده کرد که اگر ورودی کنترل کننده یک باشد مکمل 9 عدد B را به bcd adder بفرستد و اگر ورودی کنترل کننده صفر باشد خود عدد B را به bcd adder بفرستد.

سوال: آیا می توانید یک جمع کننده و تفریق کننده باینری نیز بسازید؟ ( باینری adder ما ripple carry adder است)

بله می شود از خاصیت xor در این جا هم استفاده کرد و به شکل زیر رسید:

و حالا با همدیگه bcd adder رو کامل یاد گرفتیم ;))))


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