• خانه
  • >
  • رشته برق
  • >
  • سری آموزش گام به گام نرم افزار Hspice بخش دهم (ضرب کننده آرایه ای)

سری آموزش گام به گام نرم افزار Hspice بخش دهم (ضرب کننده آرایه ای)

در این آموزش از سری آموزشهای گام به گام نرم افزار Hspice ضرب کننده آرایه ای را مورد بررسی قرار خواهیم داد که یک ضرب کننده باینری هست و ساده ترین در نوع خود بوده و در جاهایی که توان مصرفی در اولویت است و سرعت در درجه دوم اهمیت قرار دارد از آن استفاده می کنند.

ابتدا مختصری در مورد الگوریتم ضرب و کاربرد ضرب کننده ها در مدارات دیجیتال توضیح خواهیم داد و در بخش بعدی ضرب کننده آرایه ای را که هدف اصلی ما هست را به بحث و تحلیل می گذاریم و در انتها کد نویسی و شبیه سازی یک ضرب کننده آرایه ای ۴*۴ را خواهیم داشت.

ضرب کننده های باینری

اگر بخواهیم یک تقسیم بندی کلی داشته باشیم می توانیم ضرب کننده ها را به دو دسته آنالوگ و دیجیتال تقسیم بندی کنیم.

ضرب کننده های آنالوگ که موضوع بحث ما نیست بیشتر در مدارات فازی و نوسان سازها کاربرد دارند و شاید به اندازه ضرب کننده های دیجیتال مورد توجه قرار نگیرند. ضرب کننده های دیجیتال که از آنها به عنوان ضرب کننده باینری نیز یاد می شود یکی از اساسی ترین بلوک های محاسباتی در مدارات مجتمع دیجیتالی هستند و تقریباً در تمامی CPU ها اعم از کامپیوترهای خانگی و لپ تاپ ها ، تلفن های همراه ، و انواع مدارات محاسبه گر دیگر کاربرد دارند.

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

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

 عملیات ضرب باینری صرفه نظر از پیچیدگی های مدارات ضرب کننده بسیار ساده بوده و همان تکنیکی که در دروس ابتدایی برای عمل ضرب اعداد اعشاری یاد گرفتیم اینجا نیز صدق می کند.

یعنی ابتدا اولین بیت ضرب کننده (Multiplier) در تمامی بیت های ضرب شونده (Multiplicand) ضرب می شود و یک حاصلضرب جزئی (Partial Product) تولید می شود در مرحله بعدی دومین بیت ضرب کننده نیز در تمامی بیت های ضرب شونده ضرب خواهد شد و حاصلضرب جزیی با یک بیت شیفت به سمت چپ در زیر اولین حاصل ضرب جزئی قرار می گیرد و این روال تا تکمیل شدن تمامی حاصلضرب های جزئی ادامه می یابد.

الگوریتم ضرب

در انتها کاری که باید انجام دهیم جمع کردن تمامی حاصل ضرب های جزئی با هم دیگر است و به این ترتیب الگوریتم ضرب به پایان رسیده و به نتیجه مطلوب خواهیم رسید.

 نکته۱: نتیجه یک ضرب کننده m*n بیتی m+n بیت خواهد بود.

نکته۲: تعداد حاصلضرب های جزئی برابر تعداد بیت های ضرب شونده و طول آن برابر تعداد بیت های ضرب کننده است.

ضرب کننده آرایه ای

قبل از صحبت در مورد ضرب کننده آرایه ای بهتر است این مساله را روشن کنیم که ضرب کننده های دیجیتال خود به دو دسته کلی علامتدار (sighned) و بدون علامت (unsighned) طبقه بندی می شوند که مبحث مربوط به اعداد علامت دار را می توان در رفرنس های مربوطه یافت. در اینجا تمرکز ما بر روی ضرب کننده های بدون علامت است.

ضرب کننده آرایه ای ساده ترین نوع ضرب کننده است که در آن حاصلضرب های جزئی با ساده ترین روش ممکن (با استفاده از تمام جمع کننده و نیم جمع کننده ها) با هم جمع می شود و هیچ تکنیک خاصی برای کاهش مدارات یا افزایش سرعت آن اندیشیده نشده است. ضرب کننده آرایه ای در مقیاس های کوچک یعنی ضرب کننده هایی با تعداد بیت های کم مورد استفاده قرار می گیرند و وقتی که تعداد بیت ها زیاد می شود استفاده از این ضرب کننده ها به لحاظ سرعت پاسخگوی نیازهای محاسباتی نیست.

شکل زیر یک ضرب کننده آرایه ای ۴*۴ را نشان می دهد.

ضرب کننده آرایه ای

همانطور که گفته شد و انتظار هم می رود تعداد بیت های خروجی ضرب کننده آرایه ای ۴+۴=۸ بیت است. گیت های AND در اینجا نقش تولید حاصلضرب های جزئی را عهده دار هستند و اگر بیت ضرب کننده صفر منطقی باشد حاصلضرب جزئی تولید شده در آن ردیف کلاً صفر شده و اگر بیت ضرب کننده یک منطقی باشد حاصلضرب جزئی آن سطر برابر ضرب شونده خواهد شد و این خاصیت گیت AND است.

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

کدنویسی و شبیه سازی یک مدار ضربکننده ۴*۴ در نرم افزار Hspice

نت لیست یک ضرب کننده آرایه ای ۴*۴ در شکل زیر نشان داده شده است.

نت لیست ضرب کننده آرایه ای 4 بیتی

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

نت لیست ضرب کننده آرایه ای را به دو بخش یعنی تولید حاصلضرب های جزئی و بخش مربوط به جمع PP های تولید شده تقسیم می کنیم. اگرمقداری در انتخاب اسم گره ها هوشمندانه عمل کنیم می بینیم که مدارت بسیار پیچیده تر نیز به راحتی در نرم افزار Hspice قابل پیاده سازی است. برای تست مدار ضرب کننده معمولی نیز مانند جمع کننده ها عمل کرده و با انتخاب ورودی های مختلف و انجام شبیه سازی نتیجه خروجی را با نتیجه مورد انتظار مقایسه می کنیم.

با انتخاب ورودی X3,X2,X1,X0=1010 و Y3,Y2,Y1,Y0=1111 نتیجه حاصلضرب برابر عدد ۱۵۰ ده دهی (که معادل باینری آن ۱۰۰۱۰۱۱۰ می شود) خواهد شد.

نتیجه شبیه سازی ضرب کننده آرایه ای 4 بیتی

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

 

برای دریافت مشاوره انجام پروژه های دانشگاهی وارد صفحه انجام پروژه hspice سایت استاد راهنما شوید.

ارسال به دوستان

دیدگاهتان را بنویسید

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

کد امنیتی *