خانه / چگونه بسازیم / الکترونیکی / آموزش ساخت یونیت محاسبه و منطق (ALU) چهار بیتی

آموزش ساخت یونیت محاسبه و منطق (ALU) چهار بیتی

واحد پردازش مرکزی (CPU) مرکز تمام دستگاه های الکترونیکی مدرن هستند؛ از موبایل بگیرید تا مدارهای کنترل کارخانه ای. این پردازشگرها چه ویژگی دارند که کارکردشان اینقدر متنوع است؟ چطور کار می کنند؟ در این ساختنی همه چیز درباره قلب یک پردازشگر مرکزی یعنی یونیت محاسبه و منطق (ALU) را می خوانید و طرز ساختش را یاد می گیرید. واحد محاسبه و منطق که به اختصار به آن ALU می گویند قسمتی از پردازنده است که وظیفه انجام محاسبات و اعمال منطقی را بر عهده دارد.

واحد محاسبه و منطق را در خانه بسازید
واحد محاسبه و منطق را در خانه بسازید

CPUهای مدرن از میلیون ها و میلیاردها ترانزیستور ساخته می شوند و در نتیجه نمی شود آنها را در خانه ساخت. اما یک CPU ساده (مثلاً پردازنده Z80) فقط ۸۵۰۰ ترانزیستور دارد. کامپیوترهای قدیمی از تراشه های سری ۴۰۰۰ و ۷۴۰۰ مجزا ساخته می شدند. این یعنی شما هم می توانید در خانه – و بدون استفاده از میکروکنترلرهای جدید مثل آردینو و رزبری پای – کامپیوتر بسازید. در این ساختنی، آموزش ساخت یونیت محاسبه منطق ۴ بیتی مجزایی را یاد می گیرید که با تراشه های سری ۴۰۰۰ و ۷۴۰۰ ساخته می شود.

یونیت محاسبه و منطق (ALU)

طرز کار واحد محاسبه و منطق
طرز کار واحد محاسبه و منطق

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

جمع دودویی

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

تئوری

جمع زدن اعداد دودویی (بیت های منفرد) نسبتاً ساده است و در لیست زیر نشان داده شده است:

  • ۰ + ۰ = ۰
  • ۰ + ۱ =۱
  • ۱ + ۰ = ۱
  • ۱ + ۱ = ۱۰ (این ترکیب ۰ + بیت حامل است)

اما جمع اعداد دودویی که بیشتر از یک رقم دارند، چطور انجام می شود؟ بیت حامل اینجا وارد قضیه می شود و باید از جمع طولانی استفاده کنیم. بیت های حامل به صورت زیر استفاده می شوند؛ ۰(c) به معنای نداشتن بیت حامل و ۱(c) به معنای بیت حامل است.

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

جمع بلند اعداد دودوییجمع بلند اعداد دودویی
جمع بلند اعداد دودویی

در مثال بالا، ۱۰۱۱ را به ۰۰۰۱ اضافه می کنیم (۱۲ = ۱ + ۱۱). با شروع از سمت راست، ۱ + ۱ را اضافه می کنیم که حاصلش ۱۰ است (۰ و یک بیت حامل). سپس به ستون بعدی می رویم (دومین ستون از سمت راست) و تمام بیت ها را بهم اضافه می کنیم. دقت کنید که در این عملیات جمع هم بیت حامل را حساب کرده ایم. این یعنی در این محاسبات سه رقم را با هم جمع می کنیم: ۱ (بیت حامل)، ۱ و صفر.

حالا که می دانید چطور روی کاغذ دو عدد دودویی را با هم جمع کنید، سراغ ساخت مداری می رویم که بتواند همین کار را بکند.

مدار جمع دودویی

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

در ساختنی بخوانید :  با کمترین مهارت چرم دوزی، ساک چرمی زنانه بدوزید
مدار نیم جمع کننده
مدار نیم جمع کننده
جدول درستی مدار نیم جمع کننده
جدول درستی مدار نیم جمع کننده

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

مدار جمع کننده کامل از دو مدار نیم جمع کننده
مدار جمع کننده کامل از دو مدار نیم جمع کننده

متاسفانه در ساخت یونیت محاسبه و منطق چهار بیت، امکان استفاده از تراشه مجزا برای ساخت جمع کننده چهار بیتی وجود ندارد. بنابراین از یک آی سی جمع کننده ۴ بیتی ۴۰۰۸ استفاده می کنیم که قیمت مناسبی هم دارد.

پین اوت جمع کننده کامل 4 بیتی 4008
پین اوت جمع کننده کامل ۴ بیتی ۴۰۰۸

تفریق دودویی

تئوری

برای تفریق دو عدد ۴ بیتی، از یک سیستم دودویی به نام مکمل دو استفاده می کنیم. این سیستم چند قانون دارد:

  1. برای خنثی کردن یک عدد (مثلاً تبدیل ۵ به ۵-) تمام بیت ها را بچرخانید و ۱ را اضافه کنید.
  2. عدد وقتی خنثی شده که MSB (مهمترین بیت) ۱ باشد. برای مثال: ۱۰۰۱۰ منفی و ۰۰۰۱۰ مثبت است.

با قانون شماره یک می توانید مقدار یک عدد دودویی منفی را مشخص کنید:

  • ۰۰۰۱ = ۱ : برای خنثی کردن : ۱- = (۱۱۱۱ = ۱ + ۱۱۱۰)
  • ۱۰۰۱ = ۷- : برای خنثی کردن : ۷ = (۰۱۱۱ = ۱ + ۰۱۱۰)
  • ۰۱۱۰ = ۶ : برای خنثی کردن : ۶- = ۱۰۱۰ = ۱ + ۱۰۰۱)

تکنیک دو مکمل به این خاطر مفید است که امکان اجرای عملیات جمع و تفریق را از طریق یک مدار واحد ممکن می سازد. پس اگر بخواهیم جمع کننده ۴ بیتی را به تفریق کننده ۴ بیتی تبدیل کنیم، فقط باید یک آی سی ۴۰۷۰ تکی (به همراه XOR ) استفاده کنیم. ورودی های اعداد دودویی را به یکی از ورودی های یک گیت XOR می فرستیم و از ورودی XOR دیگر به عنوان لاین جمع/تفریق استفاده می کنیم و سپس این لاین را به حامل ورودی مدار جمع کننده می فرستیم.

اگر بخواهیم B را از A تفریق کنیم، لایت تفریق را high را می کنیم. با اینکار دو اتفاق می افتد:

  • تمام بیت های ورودی در ورودی B چرخانده می شوند؛
  • یکی به جمع کننده اضافه می شود.
جمع کننده/تفریق کننده 4 بیتی کامل
جمع کننده/تفریق کننده ۴ بیتی کامل

مدار نهایی از یک بافر چهارگانه ۷۴HC125 هم روی خروجی استفاده می کند تا بتوانیم یونیت جمع کننده/تفریق کننده را به یک پایگاه اطلاعات مشترک برای خروجی وصل کنیم. این بافر یک لاین فعالسازی دارد که امکان انتخاب خروجی از جمع کننده/تفریق کننده را فراهم می کند.

حالا یوینت جمع کننده/تفریق کننده هم کامل است و باید سراغ توابع منطقی برویم.

توابع منطقی

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

این تابع بیت های یک کلمه (پورت) را با عدد دیگر(عددی که بیت های چهار پورت بالایی را حذف می کند) AND می کند. اگر پورت را با ۰x0F  اند کنیم، چهار بیت پایینی را حفظ می کنیم (چون x AND 1 = x) و چهار بیت بالایی را حذف می کنیم (چون x AND 0 = 0).

  • AND برای حذف بیت ها استفاده می شود.
  • NOT برای چرخاندن یا برعکس کردن تمام بیت ها استفاده می شود (یعنی ۰۰۰۰۰ به ۱۱۱۱۱ تبدیل می شود).
  • OR برای ادغام بیت ها استفاده می شود (۰۱۱۰ OR 0001 می شود ۰۱۱۱).
  • XOR برای چرخاندن بیت های انتخاب شده استفاده می شود (۰۱۰۱ XOR 0100 می شود ۰۰۰۱).
در ساختنی بخوانید :  خودتان یک پمپ آب گریز از مرکز ارزان بسازید

یونیت های منطقی در یونیت محاسبه و منطق، گیت های AND، OR، XOR و NOT متصل به بافرها هستند. رای هر یونیت منطقی یک لاین فعالسازی به هر پایگاه بافر ارسال می شود تا بشود هر یوینت را به صورت جداگانه انتخاب کرد.

  • ۴۰۸۱ – گیت چهارگانه AND
  • ۴۰۷۰ – گیت چهارگانه XOR
  • ۴۰۷۱ – گیت چهارگانه OR
  • ۴۰۴۹ – گیت شش گانه NOT
  • ۷۴HC125- بافرهای خروجی (برای جداسازی پایگاه)
گیت های چهار تابع منطقی واحد محاسبه و منطق
گیت های چهار تابع منطقی واحد محاسبه و منطق

برای درک بهتر دیاگرام بالا باید به دو نکته زیر توجه کنید:

  1. A و B بیت ۰، ۱، ۲ یا ۳ از کلمه A و بیت مربوطه از کلمه B را نشان می دهند.
  2. عملیات NOT فقط شامل یک کلمه می شود؛ هر بیت این کلمه بدون در نظر گرفتن وضعیت کلمه دیگر، کامل می شود.

بیت شیفتینگ و مقایسه

بیت شیفتینگ هم یکی دیگر از توابع مهم است. این توابع معمولاً در میکروکنترلرهای دارای پورت سریال و وقتی داده بیت به بیت در جریان است، یافت می شوند. این یعنی با رسیدن بیت ها، باید آن بیت را دریافت کنید و آن را رد یک بایت در ابتد (یا انتها) قرار بدهید و سپس تمام بیت های آن بایت را به چپ یا راست (بسته به اینکه ورودی را کجا قرار داده اید) شیفت کنید.

جالب اینجاست که بیت شیفت شده به راست (مثلاً تبدیل ۰۰۱۰ به ۰۰۰۱) برابر با تقسیم بر دو و بیت شیفت شده به چپ (مثلاً ۰۰۱۰ تبدیل به ۰۱۰۰) برابر با ضرب در دو است. پیاده سازی بیت شیفتینگ بسیار ساده است. تنها تراشه مورد نیاز یک بافر است چون لاین های دیتای فیزیکی به سادگی تنظیم مجدد می شوند.

چرخش به چپ
چرخش به چپ

برای یک چرخش به چپ:

  • بیت صفر به بیت یک در خروجی وصل می شود.
  • بیت یک به بیت دو درخروجی وصل می شود.
  • بیت دو به بیت سه درخروجی وصل می شود.
  • بیت سه به بیت چهار درخروجی وصل می شود.
چرخش به راست
چرخش به راست

برای یک چرخش به راست:

  • بیت صفر به بیت سه درخروجی وصل می شود.
  • بیت یک به بیت صفر درخروجی وصل می شود.
  • بیت دو به بیت یک درخروجی وصل می شود.
  • بیت سه به بیت دو درخروجی وصل می شود.

آخرین عملیاتی که باید روی یونیت محاسبه و منطق اجرا بشود، مقایسه است که بسیار مفید و افزودنش به یونیت بسیار ساده است. برای اضافه کردن این عملیات از مقایسه کننده بزرگی ۴۵۸۵ استفاده می کنیم. کاری که این تراشه می کند، مقایسه دو عدد چهار بیتی است تا مشخص بشود که A>B یا A<B یا A=B.

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

در ساختنی بخوانید :  دستبند پاراکورد بسازید و با مهره های چوبی تزیینش کنید

اشکال تراشه مقایسه کننده ۴۵۸۵ این است که از نوع مقایسه کننده بزرگی است و نمی تواند با دو متمم کار کند.

مقایسه کننده بزرگی 4585
مقایسه کننده بزرگی ۴۵۸۵

گام اول: وسایل مورد نیاز

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

  • آی سی ۴۰۰۸ (۱۶ DIP)
  • آی سی ۴۰۸۱ (۱۴ DIP)
  • دو عدد آی سی ۴۰۷۰ (۱۴ DIP)
  • آی سی۴۰۷۱ (۱۴ DIP)
  • آی سی ۴۰۴۹ (۱۶ DIP)
  • هفت عدد آی سی ۷۴HC125
  • ۱۴ عدد خازن ۱۰۰nF
  • ۱۱ عدد سوکت ۱۴ DIP (برای لحیم کاری)
  • ۳ عدد سوکت ۱۶ DIP (برای لحیم کاری)

گام دوم: مدار را بسازید

از لینک زیر می توانید شماتیک مدار یونیت محاسبه و منطق را در قالب pdf دانلود کنید (رمز فایل saakhtani.ir است). مدار کمی بزرگ است اما در واقع ساخت آن بسیار ساده است. پس صرفاً با دیدن شماتیک منصرف نشوید!

بجای ساخت کل ماژول روی یک برد، ALU را در بخش های کوچک بسازید و در نهایت آنها را با سیم های پایگاه بهم بچسبانید.

مدار واحد محاسبه و منطق را بسازید

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

برای کنترل ALU در فرایند تست، از استریپ برد پنجم برای نگه داشتن دکمه ها، LEDهای خروجی و تراشه رمزگشایی ۴۵۱۵ (برای رمزگشایی خروجی ها) استفاده می شود. ماژول های ALU لاین های فعالسازی دارند که active-low هستند؛ پس برای فعال کردن یک ماژول روی پایگاه داده باید لاین فعالسازی را به ۰V وصل کنید (بجای ۵٫۵V که ارسال داده توسط ماژول را متوقف می کند).

یونیت محاسبه منطق یا ALU از یک پایگاه داده مشترک استفاده می کند و توابع منفرد بوسیله یک بافر چهارگانه از هم جدا می شوند. با اینحال ماژول ها نمی توانند همزمان کار کنند و هربار یک ماژول باید فعال باشد (مثلاً فقط ADD فعال باشد و سایر ماژول ها غیرفعال باشند). فعال کردن بیش از یک ماژول به صورت همزمان به تراشه ۷۴HC125 آسیب می زند.

یونیت محاسبه و منطق را تست کنید

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

برای گام بعدی می توانید یک رجیستر به خروجی ALU وصل کنید و دوباره آن را به کلمه B ارسال کنید. سپس می توانید یک کنترل حافظه بسازید که اعداد را از تراشه ارسال کند و عملیات را روی آن اعدا اجرا کند. در این صورت است که می توانید اعداد را در حافظه ذخیره کنید و تصمیم بگیرید ALU چه عملیاتی روی آنها اجرا کند. درست همین جاست که مدار شما دیگر ALU نیست و تبدیل به CPU می شود! این آموزش را دوست داشتید ؟ ساختنی را خبر کنید !

منبع

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

درباره عاطفه اسدزاده

عاطفه اسدزاده
عاطفه اسدزاده،یکی از نویسندگان وبسایت ساختنی است.

پاسخ دهید