واحد محاسبه و منطق

از ویکی‌پدیا، دانشنامهٔ آزاد
نماد ALU

واحد حساب و منطق[۱] یا واحد محاسبه و منطق (به انگلیسی: Arithmetic logic unit (ALU))، یک مدار ترکیبی دیجیتال است که عملیات حساب و منطق را روی اعداد دودویی صحیح انجام می‌دهد.[۲][۳][۴] این در حالیست که واحد اعداد اعشاری (به انگلیسی:floating-point unit) مربوط به اعداد اعشاری می‌باشد. واحد محاسبه و منطق یک قطعهٔ سازندهٔ اساسی برای بسیاری از مدارهای محاسباتی از جمله واحد پردازش مرکزی کامپیوتر (به انگلیسی: CPU)، و FPUها و واحد پردازندهٔ گرافیکی (به انگلیسی: Graphics Processing Unit) است.[۵]

نمایش سمبولیک ALU و سیگنال‌های ورودی و خروجی آن که با فلش‌های رو به داخل و رو به خارج ALU نمایش داده شده‌است. هر فلش نمایانگر یک یا بیش از یک سیگنال است. سیگنال‌های کنترل از چپ وارد می‌شوند و سیگنال‌های وضعیت از راست خارج می‌شوند. داده‌ها از بالا به پایین جریان دارند.

ورودی‌های ALU داده‌هایی هستند که قرار است روی آن‌ها عملیات انجام گیرد که عملوند (به انگلیسی: operand) نام دارند و نوع عملیات مورد نظر می‌باشد. خروجی ALU حاصل این عملیات است. در بسیاری از طراحی‌ها، ALU حاوی ورودی‌ها و خروجی‌های وضعیت یا هردو نیز هست که بترتیب اطلاعاتی را در رابطه با وضعیت قبلی یا وضعیت کنونی بین ALU و رجیستر وضعیت خارجی منتقل می‌کنند.

سیگنال‌ها[ویرایش]

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

داده[ویرایش]

یک ALU پایه دادای سه گذرگاه دادهٔ موازی از جمله دو عملوند ورودی (A و B) و یک خروجی حاصل (Y) است. هر گذرگاه داده شامل گروهی از سیگنال‌ها است که یک عدد صحیح باینری را منتقل می‌کنند. بطور معمول، پهنای گذرگاه (تعداد سیگنال‌های تشکیل دهندهٔ هر گذرگاه) A و B و Y مشابهند و با اندازهٔ کلمهٔ مدار خارجی (مثلاً CPU احاطه گر یا سایر پردازش گرها) منطبق هستند.

آپ‌کد[ویرایش]

ورودی آپ کد یک گذرگاه موازی است که کد انتخاب عملیات را که یک مقدار عددی است به ALU منتقل می‌کند. این مقدار عددی، نوع عملیات حساب یا منطق دلخواه را که قرار است توسط ALU اجرا شود، مشخص می‌کند. اندازهٔ آپ کد (یعنی پهنای گذرگاه آن) نشاندهندهٔ حداکثر تعداد عملیاتی است که توسط ALU قابل انجام است. برای مثال یک آپ کد چهار بیتی می‌تواند تا شانزده عملیات مختلف را در ALU مشخص کند. بطور کلی، آپ کد ALU مشابه آپ کد زبان ماشین نیست، اگرچه در برخی موارد، ممکن است بطور مستقیم بشکل یک bit field در داخل یک آپ کد زبان ماشین کدگذاری شود.

وضعیت[ویرایش]

خروجی‌ها[ویرایش]

خروجی‌های وضعیت، سیگنال‌های منفرد مختلفی هستند که حاوی اطلاعاتی پیرامون نتیجهٔ عملیات کنونی ALU هستند. ALUهای دارای کاربرد عمومی، بطور معمول حاوی سیگنال‌های وضعیت زیر هستند:

  • رقم انتقالی خارجی (به انگلیسی: carry out): که رقم انتقالی حاصل از عملیات جمع، رقم قرض حاصل از عملیات تفریق، یا بیت سرریز از یک عملیات جابجایی را منتقل می‌کند.
  • صفر: نشان می‌دهد که تمام بیت‌های Y صفر منطقی هستند.
  • منفی: نشان می‌دهد نتیجهٔ یک عملیات حسابی منفی است.
  • سرریز: نشان می‌دهد نتیجهٔ یک عملیات حسابی بیشتر از محدودهٔ رقمی Y شده‌است.
  • زوجیت/فردیت (به انگلیسی: parity): نشان می‌دهد که آیا تعداد زوج یا فردی از بیت‌ها در Y یک منطقی هستند.

در پایان هر عملیات ALU، سیگنال‌های خروجی وضعیت معمولاً در رجیسترهای خارجی ذخیره می‌شوند تا برای عملیات بعدی در ALU (مثلاً پیاده‌سازی محاسبه ی دقیق چند مرحله ای (به انگلیسی: multiple-precision arithmetic)) یا برای کنترل انشعاب شرطی (به انگلیسی: conditional branching) در دسترس باشند.

مجموعهٔ رجیسترهای بیت که خروجی‌های وضعیت را ذخیره می‌کنند معمولاً بشکل یک رجیستر چند بیتی منفرد در نظر گرفته می‌شوند که به آن رجیستر وضعیت یا رجیستر کد وضعیت گفته می‌شود.

ورودی‌ها[ویرایش]

ورودی‌های وضعیت باعث می‌شوند تا اطلاعات اضافه برای ALU در زمان انجام یک عملیات فراهم شود. بطور معمول، این ورودی یک بیت انتقالی ورودی منفرد است که همان بیت ذخیره شده از یک عملیات قبلی ALU است.

عملیات مدار[ویرایش]

The combinational logic circuitry of the 74181 integrated circuit, which is a simple four-bit ALU

واحد محاسبه و منطق یک مدار منطقی ترکیبی است، به این معنی که خروجی‌های آن در پاسخ به تغییرات ورودی بطور غیر همزمان تغییر می‌کند. در عملیات نرمال، سیگنال‌های پایدار به تمام ورودی‌های ALU اعمال می‌شود و هنگامیکه زمان کافی یا همان زمان تأخیر انتشار (به انگلیسی: propagation delay) گذشته باشد تا سیگنال‌ها در مدار ALU منتشر شوند، آنگاه نتیجهٔ عملیات ALU در خروجی آن ظاهر می‌شود. مدار خارجی متصل به ALU باعث می‌شود تا از پایداری سیگنال‌های ورودی ALU در طی عملیات مطمئن شویم و همچنین زمان کافی به سیگنال‌ها می‌دهد تا قبل از دریافت نتیجهٔ ALU، در مسیر ALU منتشر شوند.

بطور کلی، مدار خارجی با اعمال سیگنال‌ها به ورودی‌های ALU، آن را کنترل می‌کند. بطور معمول، مدار خارجی از منطق ترتیبی برای کنترل عملیات ALU استفاده می‌کند. سرعت و ریتم این مدار ترتیبی توسط یک سیگنال ساعت با فرکانس نسبتاً پایین تنظیم می‌شود تا زمان کافی برای تولید خروجی‌های ALU در بدترین شرایط فراهم باشد. برای مثال یک CPU با متصل کردن و مسیردهی عملوندها از منبع (که معمولاً رجیسترها هستند) به ورودی‌های عملوند ALU یک عملیات جمع را در ALU آغاز می‌کند و بطور همزمان، واحد کنترل یک مقدار مشخص را به ورودی آپ کد ALU می‌دهد تا عمل جمع را انجام دهد. همچنین، بطور همزمان، CPU، خروجی حاصل ALU را به یک رجیستر مقصد که مقدار جمع را دریافت می‌کند، وصل و مسیردهی می‌کند. سیگنال‌های ورودی ALU، که تا زمان ساعت بعدی پایدار نگه داشته می‌شوند، در تمام ALU منتشر می‌شوند و به رجیستر مقصد می‌رسند، این در حالی است که CPU منتظر ساعت بعدی است. با فرارسیدن ساعت بعدی، رجیستر مقصد نتیجهٔ ALU را ذخیره می‌کند و از آنجاییکه عملیات ALU کامل شده‌است، ورودی‌های ALU ممکن است برای عملیات بعدی ALU آماده شوند.

توابع[ویرایش]

بطور معمول، تعدادی توابع منطقی اساسی و محاسباتی تک بیتی توسط ALUها پشتیبانی می‌شوند. ALUهای پایه ای و با کاربرد عمومی معمولاً از این عملیات پشتیبانی می‌کنند:[۲][۳][۴][۶]

عملیات حسابی[ویرایش]

  • جمع: A و B با هم جمع می‌شوند و حاصلجمع در Y و بیت انتقالی خروجی ظاهر می‌شود.
  • جمع همراه با بیت انتقالی: A و B و بیت انتقالی ورودی با هم جمع می‌شوند و حاصل جمع در Y و بیت انتقالی خروجی ظاهر می‌شود.
  • تفریق: B از A کم می‌شود (یا بالعکس) و تفاوت در Y و بیت انتقالی خروجی ظاهر می‌شود. برای این تابع، بیت انتقالی خروجی بطور مؤثری یک نشان گر برای «قرض» است. این عمل ممکن است برای مقایسهٔ اندازه‌های A و B نیز استفاده شود. در چنین مواردی، خروجی Y ممکن است توسط پردازنده نادیده گرفته شود، چون برای پردازنده فقط بیت‌های وضعیت (خصوصاً صفر و منفی) حاصل از عملیات اهمیت دارد.
  • تفریق همراه با بیت قرضی: B از A همراه (یا بالعکس) با قرض (ورودی انتقالی) کم می‌شود و تفریق حاصل در Y همراه با خروجی انتقالی (خروجی قرض) نمایان می‌شود.
  • مکمل دو (نفی کردن): A (یا B) از صفر کم می‌شود و تفاوت در Y نمایان می‌شود.
  • افزایش: به A (یا B) یک واحد اضافه می‌شود و حاصل آن در Y نمایش داده می‌شود.
  • کاهش: از A یا B یک واحد کم می‌شود و مقدار حاصل در Y نمایان می‌شود.
  • عبور از طریق: تمام بیت‌های A (یا B) بدون تغییر در Y ظاهر می‌شوند. این عمل بطور معمول برای تعیین پریتی عملوند یا مشخص کردن صفر یا منفی بودن عملوند یا وارد کردن عملوند به داخل یک رجیستر پردازنده استفاده می‌شود.

عملیات منطقی بیت به بیت (به انگلیسی: bitwise)[ویرایش]

  • AND: حاصل A «و» B که در Y نمایش داده می‌شود.
  • OR: حاصل A «یا» B در Y نمایش داده می‌شود.
  • Exclusive -OR (یا انحصاری): حاصل A XOR B در Y نمایش داده می‌شود.
  • مکمل یک: تمام بیت‌های A (یا B) معکوس شده و در Y نمایش داده می‌شود.

عملیات جابجایی بیت[ویرایش]

مثال‌های جابجایی بیت برای یک ALU هشت بیتی
Type Left Right
Arithmetic shift Rotate left logically.svg Rotate right arithmetically.svg
Logical shift Rotate left logically.svg Rotate right logically.svg
Rotate Rotate left.svg Rotate right.svg
Rotate through carry Rotate left through carry.svg Rotate right through carry.svg

عملیات جابجایی ALU موجب جابجایی عملوند A(یا B) به سمت چپ یا راست (بسته به آپ کد) شده و عملوند جابجا شده در Y ظاهر می‌شود. ALUهای معمولی فقط می‌توانند عملوند را به اندازهٔ موقعیت یک بیت جابجا کنند، درحالیکه ALUهای پیچیده با استفاده از جابجاگرهای بشکه ای می‌توانند در یک عملیات عملوند را به تعداد بیت‌های دلخواه جابجا کنند. در تمام عملیات جابجایی تک بیتی، بیت خارج شده از عملوند به شکل خروجی انتقالی نمایان می‌شود. مقدار بیت وارد شده به داخل عملوند بستگی به نوع جابجایی دارد.

  • شیفت محاسباتی: عملوند به شکل یک اینتیجر مکمل دو در نظر گرفته می‌شود؛ به این معنی که مهمترین بیت همان بیت علاممت است و حفظ می‌شود.
  • شیفت منطقی: یک صفر منطقی به داخل عملوند جابجا می‌شود. این نوع برای جابجایی اینتیجرهای بدون علامت استفاده می‌شود.
  • چرخش: عملوند به شکل یک بافر حلقوی از بیت‌ها در نظر گرفته می‌شود؛ بطوریکه کم ارزش‌ترین و با ارزش‌ترین بیت‌های آن بطور مؤثری در مجاورت هم هستند.
  • چرخش از طریق بیت انتقالی: بیت انتقالی و عملوند مجموعاً به شکل یک بافر حلقوی از بیت‌ها در نظر گرفته می‌شوند.

کاربردها[ویرایش]

محاسبهٔ چند دقتی[ویرایش]

در محاسبات جبری اینتیجر، محاسبهٔ دقیق چند مرحله ای، الگوریتمی است که بر روی آن دسته از اینتیجرها صورت می‌گیرد که بزرگتر از اندازهٔ کلمهٔ ALU هستند. به این صورت که، این الگوریتم هر عملوند را بصورت یک مجموعهٔ منظم از بخش‌هایی با اندازهٔ ALU که از با ارزش‌ترین به کم ارزش‌ترین (یا بالعکس) مرتب شده‌اند در نظر می‌گیرد. برای مثال، در رابطه با یک ALU ی ۸ بیتی، اینتیجر ۲۴ بیتی 0x123456 به سه قسمت ۸ بیتی تقسیم می‌شود:

0x12 (با ارزش‌ترین), 0x34, و 0x56 (کم ارزش‌ترین). از آنجاییکه سایز یک قسمت دقیقاً برابر با سایز کلمهٔ ALU است، ALU می‌تواند مستقیماً روی این قسمت از عملوند محاسبه انجام دهد. الگوریتم از ALU استفاده می‌کند تا مستقیماً روی قسمت‌های خاص عملوند محاسبه انجام دهد و بنابراین یک قسمت مرتبط (یک تکه) از نتیجهٔ چند دقتی را تولید می‌کند. هر تکه بعد از تولید شدن، در ناحیهٔ مرتبطی از حافظه که به حاصل چند دقتی اختصاص داده شده‌است، نوشته می‌شود. این فرایند برای تمام قسمت‌های عملوند تکرار می‌شود به گونه ای که مجموعهٔ کاملی از قطعات تولید شود که حاصل یک عملیات دقیق چند پاره است.

در عملیات محاسباتی (مثلاً جمع یا تفریق)، با فراخوان یک عملیات ALU روی بخش‌های کم ارزش تر عملوند، الگوریتم آغاز می‌شود و بدین گونه یک قطعهٔ کم ارزش و یک بیت انتقالی خروجی تولید می‌شود. الگوریتم، قطعهٔ مورد نظر را در حافظهٔ مربوطه می‌نویسد، درحالیکه ماشین وضعیت پردازنده، بطور معمول بیت انتقالی خروجی را در یک رجیستر وضعیت ALU ذخیره می‌کند. الگوریتم سپس سراغ قطعهٔ بعدی از مجموعهٔ هر عملوند می‌رود و عملیاتی را از ALU بر روی این قطعه‌ها همراه با بیت انتقالی ذخیره شده از عملیات قبلی ALU فراخوان می‌کند و در نتیجه قطعه ای دیگر (با ارزش تر) و یک بیت انتقالی خروجی تولید می‌کند. همانند قبل، بیت انتقالی در رجیستر وضعیت ذخیره می‌شود و قطعهٔ تولید شده در حافظهٔ اختصاص داده شده نوشته می‌شود. این فرایند ادامه پیدا می‌کند تا زمانیکه تمام قطعات عملوند پردازش می‌شوند، در نتیجه مجموعهٔ کاملی از قطعات در حافظه تولید می‌شود که همان نتیجهٔ محاسبهٔ چند دقتی است.

در عملیات جابجایی چند دقتی، ترتیب پردازش قطعات عملوند بستگی به جهت جابجایی دارد. در عمیات جابجایی رو به چپ، قطعات با ارزش کمتر اول پردازش می‌شوند، چون کم ارزش‌ترین بیت هر قطعه -که از طریق بیت انتقالی ذخیره شده منتقل می‌شود _ باید از با ارزش‌ترین بیت کم ارزش‌ترین عملوندی که پیش از آن به سمت چپ جابجا شده‌است، بدست آید. بالعکس، در عملیات جابجایی به راست، عملوندها از بخش با ارزش تر پردازش می‌شوند، چون با ارزش‌ترین بیت هر قطعه باید از کم ارزش‌ترین بیت با ارزش‌ترین عملوندی که پیش از آن به سمت راست جابجا شده بدست آید.

در عملیات منطقی بیت به بیت (نظیر AND منطقی و OR منطقی)، قطعات عملوند را می‌توان به هر ترتیب دلخواهی پردازش کرد، چون هر قطعه فقط به قطعات عملوند متناظر بستگی دارد (بیت انتقالی ذخیره شده از عملیات پیشین ALU نادیده گرفته می‌شود).

عملیات پیچیده[ویرایش]

اگرچه می‌توان ALU را طوری طراحی کرد که توابع پیچیده را انجام دهد، اما باعث میچیدگی بیشتر مدار، هزینه و مصرف انرژی بیشتر و اندازهٔ بزرگتر آن می‌شود که این کار در بیشتر موارد بطور عملی امکان‌پذیر نیست. در نتیجه، واحد منطق و محاسبه معمولاً محدود به توابع ساده هستند که سرعت اجرای بسیار بالا دارند (یعنی تأخیر انتشار بسیار کوتاه) و مدار پردازندهٔ خارجی با هماهنگ‌کردن مجموعهٔ متوالی از توابع ساده‌تر در ALU، توابع پیچیده را اجرا می‌کند.
برای مثال، محاسبهٔ ریشه دوم یک عدد ممکن است به شیوه‌های مختلفی پیاده‌سازی شود که بستگی به پیچیدگی ALU دارد.

  • محاسبه در تنها یک بازهٔ ساعت: یک ALU بسیار پیچیده که ریشه دوم را در طی تنها یک عملیات محاسبه می‌کند.
  • خط تولید محاسبه: گروهی از ALUهای ساده که ریشه دوم را در طی مراحلی محاسبه می‌کنند و نتایج بینابینی در ALU جابجا می‌شوند و شبیه خط تولید یک کارخانه مرتب می‌شوند. این مدار می‌تواند قبل از تمام کردن مورد قبلی عملوندهای جدید را بپذیرد و با سرعتی معادل با سرعت یک ALU ی بسیار پیچیده نتایج را تولید می‌کند، اگرچه نتایج با تأخیری معادل با مجموع تاخیرهای انتشار مراحل ALU بدست می‌آید. برای اطلاعات بیشتر مراجعه کنید به مقاله خط تولید دستورالعمل.
  • محاسبهٔ پیمایشی: یک ALU ی ساده که ریشه دوم را از طریق مراحل متعدد و تحت هدایت واحد کنترل محاسبه می‌کند.

پیاده‌سازی‌های بالا بترتیب از روش‌های بسیار سریع و بسیار هزینه بر تا روش‌های بسیار کند و با کمترین هزینه ذکر شده‌اند. ریشه دوم در تمام موارد محاسبه می‌شود اما پردازنده‌های دارای ALUهای ساده زمان بیشتری برای محاسبه می‌برند، زیرا عملیات متعددی در ALU باید انجام گردد.

منابع[ویرایش]

مشارکت‌کنندگان ویکی‌پدیا. «Arithmetic logic unit». در دانشنامهٔ ویکی‌پدیای انگلیسی، بازبینی‌شده در ۵ آوریل ۲۰۲۱.

  1. «واحد حساب و منطق» [رایانه و فنّاوری اطلاعات] هم‌ارزِ «arithmetic-logic unit, ALU»؛ منبع: گروه واژه‌گزینی. جواد میرشکاری، ویراستار. دفتر اول. فرهنگ واژه‌های مصوب فرهنگستان. تهران: انتشارات فرهنگستان زبان و ادب فارسی. شابک ۹۶۴-۷۵۳۱-۳۱-۱ (ذیل سرواژهٔ واحد حساب و منطق)
  2. ۲٫۰ ۲٫۱ A.P.Godse; D.A.Godse (2009). "3". Digital Logic Design. Technical Publications. pp. 9–3. ISBN 978-81-8431-738-1.
  3. ۳٫۰ ۳٫۱ Leadership Education and Training (LET) 2: Programmed Text. Headquarters, Department of the Army. 2001. pp. 371–.
  4. ۴٫۰ ۴٫۱ A.P.Godse; D.A.Godse (2009). "Appendix". Digital Logic Circuits. Technical Publications. pp. C–1. ISBN 978-81-8431-650-6.
  5. "1. An Introduction to Computer Architecture - Designing Embedded Hardware, 2nd Edition [Book]". www.oreilly.com. Retrieved 2020-09-03.
  6. Horowitz, Paul; Winfield Hill (1989). "14.1.1". The Art of Electronics (2nd ed.). Cambridge University Press. pp. 990-. ISBN 978-0-521-37095-0.