سخت‌افزار چگونه جمع و تفریق انجام می‌دهد و سرریز را تشخیص می‌دهد

سخت‌افزار چگونه جمع و تفریق انجام می‌دهد و سرریز را تشخیص می‌دهد

جمع باینریتشخیص سرریزمدار جمع‌کننده

~3 دقیقه مطالعه · آخرین به‌روزرسانی ۱۵ شهریور ۱۴۰۵

چرا محاسبات ریاضی به طراحی سخت‌افزاری دقیق نیاز دارند

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

یک مدار برای هم جمع و هم تفریق

به‌جای ساخت دو مدار جداگانه، سخت‌افزار یک مدار Adder واحد را برای هر دو عملیات استفاده مجدد می‌کند. این کار به‌دلیل نحوه نمایش اعداد در Two's Complement امکان‌پذیر است، که پیش‌تر در این مجموعه بحث شد: تفریق یک عدد معادل جمع کردن نقیض آن است.

a − b = a + (−b)

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

سرریز چیست و چرا اهمیت دارد

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

قوانین سرریز برای اعداد علامت‌دار و بدون علامت متفاوت‌اند

اینکه یک نتیجه خاص سرریز محسوب شود یا نه، به نحوه تفسیر اعداد بستگی دارد.

  • برای Unsigned Numbers، سرریز زمانی رخ می‌دهد که جمع نتیجه‌ای تولید کند که به بیت‌های بیشتری از آنچه موجود است نیاز دارد — از نظر مفهومی، یک carry خارج از با اهمیت‌ترین بیت.
  • برای Signed Numbers، سرریز به‌طور خاص زمانی رخ می‌دهد که جمع دو عدد مثبت نتیجه‌ای منفی تولید کند، یا وقتی جمع دو عدد منفی نتیجه‌ای مثبت تولید کند — نشانه‌ای از اینکه نتیجه واقعی از نظر بزرگی برای جا شدن درست، بیش از حد بزرگ بوده است.

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

RISC-V چگونه سرریز را مدیریت می‌کند

RISC-V در اینجا یک رویکرد طراحی عمدی اتخاذ می‌کند: دستورات محاسباتی معمولی مانند add و sub به‌طور خودکار در سرریز علامت‌دار trap نمی‌کنند یا exception بلند نمی‌کنند. در عوض، تشخیص سرریز، در صورت نیاز، به‌طور صریح توسط نرم‌افزار با استفاده از دستورات مقایسه اضافی مدیریت می‌شود، که سخت‌افزار محاسباتی هسته را ساده نگه می‌دارد و با اصل طراحی پیشین یعنی سریع کردن حالت رایج و واگذاری شرایط نادرتر و پیچیده‌تر به نرم‌افزار سازگار است.

چرا این تمایز در عمل اهمیت دارد

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

نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

خطرهای داده در پایپ‌لاین: Forwarding در مقابل Stalling

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

ادامه

تبدیل یک Datapath تک‌سیکلی به یک Datapath پایپ‌لاین‌شده

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

ادامه

مروری بر پایپ‌لاینینگ: هم‌پوشانی اجرای دستورات

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

ادامه

طراحی منطق کنترلی برای یک پردازنده تک‌سیکلی

یک datapath به‌تنهایی بدون سیگنال‌های کنترلی که به آن بگویند برای هر دستور چه کاری انجام دهد، هیچ کاری نمی‌کند. این مقاله توضیح می‌دهد منطق کنترلی چگونه فیلدهای opcode و function یک دستور را می‌خواند تا سیگنال‌های دقیق مورد نیاز برای مسیریابی درست داده را تولید کند، و مرور می‌کند یک پیاده‌سازی کامل تک‌سیکلی چگونه انواع مختلف دستورات را اجرا می‌کند.

ادامه

ساخت یک Datapath: اتصال رجیسترها، حافظه، و ALU

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

ادامه

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

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

ادامه