تالار گفتمان مانشت

نسخه‌ی کامل: سخت افزار ضرب کننده
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
میخواهیم یک سخت افزار ضرب کننده 8 بیتی با استفاده از چندین بلوک ضرب کننده 4 بیتی بسازیم. به چند ضرلب کننده 4 بیتی و حداقل چند جمع کننده(تمام -نیم) نیاز میباشد؟
لطفا مفهومی توضیح بدید واسمHuh
سلام
منم هنوز این قسمت را نخوندم ولی استدلالم اینطوریه:

می خواهیم 2 عدد 8 بیتی A ,B را در هم ضرب کنیم با این تفاوت که بجای 2 تا ضرب کننده 8 بیتی باید از ضرب کننده های 4 بیتی استفاده کنیم پس برای A , B هر کدام نیاز به 2 ضرب کننده 4 بیتی داریم‌، که می شود 4 ضرب کننده 4 بیتی . حالا چون اینجا مشخص نکرده که حاصل ضرب ما سرریز داره یا نه پس حداقل نیاز به 16 عمل جمع یعنی 16 جمع کننده داریم.

اگر استدلالم اشتباه هست دوستان تذکر بدن !!!
یه راهی که به ذهن من میرسه استفاده از الگوریتم ضرب اعداد بزرگ هست که توی طراحی الگوریتم‌ها داریم!


(28 آبان 1389 07:38 ب.ظ)mohanddes نوشته شده توسط: [ -> ]سلام
منم هنوز این قسمت را نخوندم ولی استدلالم اینطوریه:

می خواهیم 2 عدد 8 بیتی A ,B را در هم ضرب کنیم با این تفاوت که بجای 2 تا ضرب کننده 8 بیتی باید از ضرب کننده های 4 بیتی استفاده کنیم پس برای A , B هر کدام نیاز به 2 ضرب کننده 4 بیتی داریم‌، که می شود 4 ضرب کننده 4 بیتی . حالا چون اینجا مشخص نکرده که حاصل ضرب ما سرریز داره یا نه پس حداقل نیاز به 16 عمل جمع یعنی 16 جمع کننده داریم.

اگر استدلالم اشتباه هست دوستان تذکر بدن !!!

منظورتون اینه که مثل جمع اعداد رو چند بخش کنیم و بخش‌ها رو در هم ضرب کنیم و حاصل این‌ها رو با هم جمع کنیم؟! اگه این باشه که به نظرم درست نیست! اگه هم منظورتون این نیست، من متوجه منظورتون نشدم Tongue
خوب برای ضرب 2تا عدد 8بیتی چرا 4ضرب کننده 4بیتی میخوایم؟
به نظر من 2تا کافیشهBig Grin
یا 8تا نمیتونم 4تا رو تصور کنمUndecided
ولی جوابتون درسته
[quote='mohanddes' pid='7650' dateline='1290193300']
خوب 1 عدد 8 بیتی 4بیت اولش با 4 بیت اول عدد دوم با یه ضرب کننده 4بیتی انجام شه!!!
4بیت دوم عدد اول با 4بیت دوم عدد دوم هم با یه ضرب کننده دیگه
(29 آبان 1389 02:30 ب.ظ)saria نوشته شده توسط: [ -> ]خوب 1 عدد 8 بیتی 4بیت اولش با 4 بیت اول عدد دوم با یه ضرب کننده 4بیتی انجام شه!!!
4بیت دوم عدد اول با 4بیت دوم عدد دوم هم با یه ضرب کننده دیگه

به نظرم اینی که دارید میگید یه کم ایراد داره!
این روش که گفتید توی جمع جواب میده، ولی توی ضرب نه!
اگه بخوایم یه مثال در مقیاس کوچیک بزنیم: مثلاً 23 × 45 برابر نیست با 3×5+2×4 (البته اگه من منظورتون رو درست متوجه شده باشم)
من نمی دونم برای این سوال که گفتید چه راه حل روتینی وجود داره اما همچنان عقیده دارم که الگوریتم ضرب اعداد بزرگ که به صورت زیر هست در موردش جواب میده!
کد:
prod(u,v){
x=u/10^m;
y=u%10^m;
w=v/10^m;
z=v%10^m;
r=prod(x+y,w+z);
p=prod(x,w);
q=prod(y,z);
return p*10^2m+(r-p-q)*10^m+q;
}

که برای این سوالی که گفتید، x میشه 4 بیت بالای عدد اول و y میشه 4 بیت پایین عدد اول w هم 4 بیت بالای عدد دوم و z هم 4 بیت پایین عدد دوم و با به دست آوردن r, q , z مسئله حل میشه!

من فکر میکنم برای این سوالی که مطرح کردید، 3 ضرب کننده‌ی 4 بیتی و 6 جمع کننده/تفریق کننده‌ی 4 بیتی لازم باشه! (با توجه به این الگوریتم)
در واقع اگه بخوایم این الگوریتم رو برای سوال شما بنویسیم، این طوری میشه فکر کنم:

کد:
prod(u,v){
x=u/2^4;
y=u%2^4;
w=v/2^4;
z=v%2^4;
r=(x+y)*(w+z);  //اینا چون هر 2شون 4بیتی هستند،با ضرب کننده هایی که داریم، می تونیم در هم ضربشون کنیم
p=x*w;  //اینا هم 4بیتی هستند
q=y*z;  // اینا هم همین طور
return p*2^8+(r-p-q)*2^4+q;
}
لینک مرجع