حمیدرضا کلباسی
حمیدرضا کلباسی
خواندن ۵ دقیقه·۶ سال پیش

بیایید یک کامپیوتر بسازیم ( قسمت اول )

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

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

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

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

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

کامپیوتر چیست؟

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

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

قرار است دقیقا چه بسازیم؟

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

اما قرار است محصول ما چه باشد؟ دقیقا این:

طرح کلی کامپیوتر ما
طرح کلی کامپیوتر ما

این یک کامپیوتر ۸ بیتی با 16 بایت رم است. ( بعدا این اصطلاحات را بررسی خواهیم کرد. )

قسمت های مهم کامپیوتر ما که در بالا می بینید عبارت اند از:

  • منطق کنترل: قسمتی است که دستور العمل ها را از قسمت رجیستر دستورالعمل دریافت می کند و بر اساس آن، تعیین می کند که اکنون باید چه اتفاقی بیفتد. مثلا کامپیوتر متوقف شود، مقدار رم در رجیستر آ نوشته شود، مقدار رجیستر ب، آدرس خانه آماده به کار رم را تعیین کند و ... . او این کار را توسط ایجاد اختلاف پتانسیل یا همان ۰ و ۱ کردن خروجی هایش که با سیم به قسمت های مختلف کامپیوتر ما وصل شده اند، انجام می دهد.
  • رم: حافظه کامپیوتر ماست. از طریق قسمت های A0 تا A3 می توانیم یک عدد ۴ بیتی در مبنای دو ( از ۰ تا ۱۵ ) را به آن بدهیم و با آن، آدرسی را که می خواهیم با آن کار کنیم را تعیین کنیم. ( در نتیجه ۱۶ بایت در رم در اختیار داریم ) سپس مقدار آن را در باس بنویسیم یا مقدار درون باس را درون آن ذخیره کنیم ( از طریق ۰ و ۱ کردن RI و RO ). از حافظه رم در نگهداری دستورالعمل ها ( برنامه ) و هم چنین حافظه ای برای استفاده برنامه از آن ( یعنی همان متغیر های برنامه ) استفاده می کنیم.
  • ساعت: از ساعت برای تولید یک موج مربعی استفاده می کنیم. یعنی در هر 2t ثانیه، در t ثانیه اول ولتاژ خروجی ساعت زیاد و در t ثانیه دوم کم است. از این موج برای زمان بندی کار ها در کامپیوتر استفاده می کنیم. مثلا مقدار رجیستر ها در لبه بالا رفتن موج ( وقتی ولتاژ از ۰ به ۱ تبدیل می شود ) تغییر می کنند.
یک موج مربعی. برای اطلاعات بیشتر، سیگنال ساعت را ببینید.
یک موج مربعی. برای اطلاعات بیشتر، سیگنال ساعت را ببینید.
  • خروجی: این قسمت عدد درون باس را به صورت قابل فهم برای انسان ( یک عدد از -۱۲۸ تا ۱۲۷ به صورت مبنای ده توسط سون سگمنت ) نمایش می دهد.
  • واحد پردازش ریاضی ( ALU ): این قسمت می تواند جمع و تفریق اعداد ذخیره شده در رجیستر های آ و ب را محاسبه کند و در صورت فرمان واحد کنترل، آن را به باس انتقال دهد.
  • باس: این قسمت فقط شامل ۸ سیم است که اجزای کامپیوتر می توانند با آن یک عدد ۸ بیتی را به هم انتقال دهند.
  • شمارنده برنامه این قسمت یک عدد ۴ بیتی را در خود نگه می دارد که در هنگام لبه بالا رفتن ساعت، مقدارش یک واحد زیاد می شود. از این قسمت برای نشان دادن آدرسی که دستورالعمل باید از آن برداشته شود استفاده می کنیم.

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


الکترونیکمعماری کامپیوتربایوسترانزیستورکامپیوتر
شاید از این پست‌ها خوشتان بیاید