میکروکنترلرها، طراحی و پیاده سازی – ریلیز شد!

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

سرفصل های کتاب :

فصل اول : میکروکنترل چیست؟
در این فصل کلیت یک میکروکنترلر و این که چه بخش هایی درونش به کار رفته، توضیح داده شده.

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

فصل سوم : عملیات محاسباتی
در این فصل در مورد انجام عملیات ریاضی در مبنای دو صحبت شده.

فصل چهارم : عملیات منطقی
در این فصل در مورد جبر بول و نحوه انجام عملیات بولین صحبت شده.

فصل پنجم : مدارهای منطقی
اینجا، اومدیم و یه سری گیت های پایه رو بررسی کردیم. همینطور در مورد گیت های مادر صحبت کردیم.

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

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

فصل هشتم : حافظه
اینجا رسیدیم به مدارهای ترتیبی و حافظه ای، در اینجا لچ S-R رو ساختیم، در مورد لچ Active High و Active Low توضیح دادیم.

فصل نهم : رجیستر فایل
اینجا چندین رجیستر رو چیدیم کنار هم و یک رجیستر فایل طراحی کردیم.

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

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

فصل دوازدهم : کامپیوتر (تئوری)
در اینجا به صورت تئوری و روی کاغذ کامپیوتر اصل کاری طراحی شده. تصمیم گیری شده که چه کارهایی انجام بده و «سازمان کامپیوتر» در این نقطه مشخص شده.

فصل سیزدهم : واحد محاسبه و منطق
در این فصل، واحد محاسبه و منطقی برای کامپیوتر خودمون طراحی کردیم، و در مورد Instruction Code ها تصمیم گیری کردیم.

فصل چهاردهم : ساختار برنامه
اینجا برای برنامه پذیر شدن کامپیوتر خودمون تصمیم گیری کردیم و ساختار برنامه ها در زبان ماشین رو تعیین کردیم.

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

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

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

برای دانلود PDF هم میتونید از این لینک استفاده کنید.

FacebookTwitterGoogle+Share

سلول های دیجیتال!

بعد از مدتها، یک تاپیک قشنگ برای نوشتن پیدا کردم، شاید مدتها هم در همین مورد در وبلاگم بنویسم. موضوعی که در جهان، در کنار موضوعات دیگر مطرح هست، موضوعی هست به اسم زیست شناسی مصنوعی که به نوعی میشه گفت پیوند علوم مختلف با زیست شناسی، و تغییر در ساختار بیولوژیک موجوداتی هست که در اطراف ما زندگی میکنن. لینکی را در توییتر دیدم (و البته خاطرم نیست که کجا دیدمش، وگرنه لینک میکردم بهش) که نوشته بود دانشمندان با استفاده از DNA تونستند مدار منطقی بسازند. همونجا خشکم زد و گفتم چطوری میشه؟! تا این که این ویدئو رو دیدم. حقیقت اینه که تا قبل از این، دیده بودم که از نورون (سلول های عصبی) برای انتقال اطلاعات و پیاده سازی منطق های مختلف استفاده بشه، ولی استفاده از DNA برای من به شدت جدید و جذاب بود. و فکر نمیکردم که بشه از DNA ها، ساختار ترانزیستوری گرفت.

در حقیقت، چیزی که اینجا برای ما صفر و یک میسازه، الکتریسیته نیست. بلکه پروتئین ها هستند. در واقع شما دو نوع پروتئین دارید، که یکی نماینده صفر منطقی و دیگری نماینده یک منطقی به حساب میاد. حالا یکم دقیق تر پیش بریم، اگر ویدئو رو ببینید، خواهید دید که ساختار DNA یک نوع باکتری به اسم E.coli (با تلفظ ایکولای) مثل یک گیت NOR هست. یعنی همه منطق های موجود رو میشه با استفاده از این DNA طراحی کرد! نکته جالب تر و شگفت آورتر قضیه هم اینجاست که دانشگاه MIT پلتفرمی به اسم سلوکد منتشر کرده که شما با مراجعه بهش، میتونید کد Verilog بنویسید و تحلیل DNA ایش رو ببینید! و از همه جالبتر اینه که MIT کدهای نوشته شده شما رو، روی سلول های زنده تست میکنه!

تست سلوکد

خب برای این که این پلتفرم دوست داشتنی رو تست کنم، نشستم و یک معکوس کننده یا گیت NOT رو با Verilog HDL نوشتم :

کد   
module NOT(output out, input in);
 always@(in)
   begin
   case({in})
   1'b0: {out} = 1'b1;
   1'b1: {out} = 1'b0;
   endcase
  end
endmodule

بعد از این که روی دکمه Run کلیک کردم (البته یادتون باشه که قبلش تعدادی DNA Sequence رو به عنوان ورودی و خروجی انتخاب کنید تا تحلیل های درست و بهتری تحویل بگیرید) ، شروع کرد به تحلیل کردن. حالا نتایج رو با هم می بینیم!

شکل گیت NOT به صورت قسمتی از DNA :

inverter_A000_dnaplotlib_Eu_outخب، این شکلی هست که در «زیست شناسی مصنوعی» برای بخش های کوچک DNA و نمایندگی اون ها استفاده میشه. ورودی و خروجی های این طراحی ها Promoter هستند که اتصالات بین پروتئین ها رو میتونن به وجود بیارن. پس میشه در یک سلول زنده منطق های مختلف داشت، و ساخت. حالا، جدول درستی این ساختار رو با هم می بینیم :

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

inverter_wiring_agrn

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

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

inverter_A000_xfer_model_P1_PhlF

و البته یک ساختار گیتی دیگر هم داره، که «جنس» ورودی خروجی ها، همون پروتئین هایی که نماینده صفر و یک منطقی هستند رو برای ما مشخص میکنه :

inverter_A000_wiring_grn

خب، تا اینجا میشه فهمید که بشر قصد داره کم کم ترانزیستور رو کنار بذاره و خب در آینده، کامپیوتر الکترونیکی، جای خودش رو به کامپیوترهای بیولوژیکی میده! و این به این معنیه که احتمالا نسل های بعد از ما، زمانی که بخوان سخت افزار رو مطالعه کنن، احتمالا درس «سلول های دیجیتال» خواهند داشت به جای «الکترونیک دیجیتال»! سعی میکنم در این مورد بیشتر مطالعه کنم و یاد بگیرم، و در آینده در موردش بیشتر بنویسم.

موفق باشید :)

FacebookTwitterGoogle+Share

ساخت یک کلاک ساده با آی‌سی 555

وقتی که داشتم در مورد آی‌سی 555 و کاربردهاش تحقیق میکردم یک مثال ساده به چشمم خورد : چشمک زن با LED . خیلی از چشمک زن هایی که در اینترنت بودند رو تست کردم و ساختم و دیدم که کار بکن نیستن که نیستن! تا این که دیدم Ben Eater (کسی که یک کامپیوتر برد بوردی هشت بیتی ساخته) ، یک مدار Clock ساخته. یکی از کاربردهای Clock این هست که مدارهای ما رو در لحظات خاص فعال و در لحظات خاص غیرفعال میکنه. همچنین، مدارهایی داریم که میتونن چند تا کلاک رو هندل کنن و یا نیاز دارن دو تا کلاک داشته باشن که برعکس هم کار میکنن. کلاکی که بن ایتر طراحی کرده به قدر کافی خوب و مناسب هست، اما من یک فیچر (اگر بتونیم بهش بگیم فیچر 🤔) بهش اضافه کردم و محصول نهایی شد این :

timerهمانطوری که در شکل می بینید، خروجی کلاک درجای خودش به یک LED زرد متصل شده. و یک مدار ترانزیستوری هم بهش اضافه شده که حالا میخوایم بررسی کنیم اون چیه؟ اگر با NPN ها آشنا باشید میدونید که وقتی جریان در Base برقراره، امکان حرکت الکترونها از Collector به سمت Emitter هم فراهم میشه. یعنی در این مدار زمانی که خروجی ای که به اسم CLK مشخص شده، روشنه، جریان به راحتی از Collector میره به Emitter و اون LED قرمز که با CLK~ مشخص شده، خاموش میشه. زمانی که جریانی در Base ترانزیستور ما نیست، نتیجتا جلوی حرکت جریان از Collector به Emitter گرفته میشه و جریان به CLK~ میره. این به این معناست که زمانی که نیاز داریم کلاکمون برعکس بزنه، میتونیم از اون خروجی مدار استفاده کنیم! حالا یک سوال هست، و اون هم اینه که …

555 چطور کار میکنه؟

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

در نهایت هم یک فیلم کوتاه از مداری که من ساختم ببینیم :

timer

حجم تصویر متحرک یکم بالاس به بزرگی خودتون ببخشید 😅 یک نکته هم توجه کنید زمانی که مدار رو بستم رنگ LED ها برعکس تصویر شماتیک بود، در شماتیک LED زرد به خروجی کلاک و LED قرمز به خروجی نقیض کلاک وصل شده.

FacebookTwitterGoogle+Share

پیشنهادهای شما برای پیاده سازی یک ایده سخت افزاری

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

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

توی پست های جادی چند مساله جالب به چشم میخوره، اولیش اینه «چی نداریم؟! آیا وسیله ای هست اون کار رو انجام بده؟ اگر نیست، خودم میسازمش». و دومین نکته هم «پیاده سازی ایده و تبدیل کردنش به استارتاپ و حتی تا حدی به پول رسوندنش، اونقدر ها هم که فکر میکنیم سخت نیست». و حتی شاید سومیش این باشه که «معطل نکن، شروع کن به پیاده سازی». خب، حالا بیایم ببینم که من میخوام چی کار کنم؟ جادی به من ایده داد که ایده جمع کنم برای یک محصول سخت افزاری! اما محصولی که بشه به در یک مدت زمان نه چندان کوتاهی پیاده سازیش کرد و بعد ازش به پول رسید (بر خلاف StrongPC که بیشتر فاز تحقیقی داره).

ایده هایی که در ذهن خودم هستن اینان :

  • پیاده سازی یه دستگاه ساده با استفاده از میکروکنترلرهایی که توی بازار موجودند، و روبرو شدن با چالش هایی مثل مطالعه معماری، برنامه نویسی برای ریزپردازنده، طراحی مدارهای واسط و … .
  • پیاده سازی یه دستگاه ساده با استفاده از آردوینو و ماژول هاش
  • پیاده سازی یک دستگاه ساده IoT طور با استفاده از Cubieboard یا رزبری
  • و …

حالا از شماها که این پست رو میخونید، میخوام در این باره کمک بدید. اول این که «دستگاه ساده» چی میتونه باشه (مثلا ساعت؟! تقویم رومیزی؟ سیستم اطفاء حریق و …) و دوم این که با چی و چطوری پیاده سازی بشه. بعد از این که ایده مشخص بشه، مرحله مرحله پیاده سازیش در همین وبلاگ، گزارش میشه.

FacebookTwitterGoogle+Share

دوستی با محصول جدید اتودسک

اکثرا میدونیم که شبیه سازی و استفاده از بردهای آردوینو و AVR و … ، برای کاربران لینوکس خیلی مشکله. حتی شبیه سازی ساده مدارهای الکتریکی و الکترونیکی هم مشکلیه که اکثرا کاربران لینوکس باهاش روبرو هستند. اما امروز، میخوام ابزاری رو معرفی کنم، که هم رایگانه و هم تحت وب. به شما امکان کد زدن روی آردوینو و تست کردن مدارهای مجتمع، ساختن مدارهای دیجیتال و آنالوگ رو میده.

شرکت اتودسک که پیش تر با محصولاتی مثل اتوکد و مایا شناخته شده بود، الان اومده محصولی به اسم 123D Circuits رو ارائه کرده که با ساختن یک اکانت و عضویت درش، میتونید به راحتی آزمایشات الکترونیکی خودتون رو انجام بدید.

این هم نمونه مداری که بستم، یک آی سی 7408 هست که داره دو ورودی رو با هم AND میکنه :

کافیه روی start simulation کلیک کنید و بعد با کلید ها بازی کنید تا تغییرات توی ولت متر و LED قرمز رنگ روی برد بورد رو شاهد باشید.

FacebookTwitterGoogle+Share

ساخت یک کامپیوتر ساده در Logisim – قسمت دوم (مجموعه دستور العمل ها)

در قسمت قبلی، چالش رو مطرح کردیم که کامپیوتر هشت بیتی خودمون رو بسازیم. ببینیم چه مداراتی نیاز داریم؟!

خب ما دو ورودی هشت بیتی A و B رو خواهیم داشت، پس به این موارد نیاز داریم :

  1. مداری برای NOT کردن ورودی A
  2. مداری برای NOT کردن ورودی B
  3. مداری برای AND کردن هر دو ورودی
  4. مداری برای OR کردن هر دو ورودی
  5. مداری برای جمع کردن دو ورودی
  6. مداری برای تفریق دو ورودی

خب، چون ما از یک قطعه به اسم «دیکدر» برای انتخاب دستورات استفاده میکنیم، و دیکدرها هم یک ورودی با سایز n میگیرن، و خروجی اونها «دو به توان n» هست، و ما اینجا «مجموعه دستور العمل» یا Instruction Set مون دارای ۶ دستور هست، بهینه ترین حالت استفاده از یک دیکدر ۳ به ۸ هست. خب، با این حساب، باید کد عملیات ها یا Operation Code ها رو به این شکل تعریف کنیم :

Operation Code
NOT A 000
NOT B 001
AND A, B 010
OR A, B 011
ADD A , B 100
SUB A, B 101

خب الان ما میدونیم که کامپیوتر محترم باید چه دستوراتی رو اچرا کنه. در واقع، وقتی میگیم ۰ ، کامپیوتر اون رو به دیکدر میده و میفهمه که باید نقیض A رو بهمون بده. وقتی ۱ رو فراخوانی میکنیم، باید نقیض B بهمون داده شه، وقتی میگیم ۵ در واقع مقدار B رو از A کم میکنیم و … . با توجه به این که الان، ما یک دیکدر ۳ به ۸ در مدار «واحد محاسبه و منطق» داریم، میتونیم ۴ دستور العمل دیگه هم بهش اضافه کنیم (با شما :) ). در قسمت بعدی این آموزش، میرسیم به این که ورودی ها و خروجی ها رو چطوری مدیریت کنیم. بعدش هم در مورد ساختار کلی ALU صحبت میشه و بعد از چند پست دیگه، یک ALU کامل با هم خواهیم داشت. پس فعلا در مورد بلاهایی که سر ۸ بیت ورودی میشه آورد فکر کنید و شاد باشید :)

FacebookTwitterGoogle+Share

روز آفتابی و لامپ روشن

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

بسیار خوب، عنوان مطلب به قدر کافی گویا هست که قراره چی رو به چی ربط بدیم، ولی بیاید این مثال رو در نظر بگیریم :

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

حالا چه چیزی باعث شد که چراغ ما خاموش بشه؟ اینجاست که به جادوی ترانزیستورها باید ایمان بیاریم. در واقع دو کلید ما به یک مدار به این شکل وصل هستند :

0 -NAND Gate using transistors

 

این مدار، یک مدار یا بهتر بگم دروازه منطقیه که بهش NAND میگن. این مدار رو ما توی اون کلید قرار دادیم، و جدول درستیش به این شکله که هر وقت هر دو ورودی صحیح باشن، خروجی غلط میشه. حالا برای نمایش دادن بهتر این گیت، از این نماد استفاده میشه :

1- NAND gate

خب، سایر گیت ها (که با نماد های دیگه ای نشون داده میشن) رو میتونیم از این گیت بسازیم. اما چیزی که هست اینه که این گیت، چیزیه که کامپیوتر رو میسازه. در واقع در عمده IC هایی که خریداری میکنیم تعداد زیادی گیت NAND قرار داره که با وصل کردنش به هم، میتونیم گیت های دیگه ای رو هم بسازیم.

2-NAND Logic

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

3-NOT Logic using NAND

حالا، اگر این کلید رو بزنیم، خروجی غلط و اگر خاموشش کنیم خروجی درست میشه. این ترکیب رو «نقض کننده» یا NOT هم بهش میگیم. در واقع گیت NOT که یک گیت با یک ورودی هست رو میتونیم به این شکل بسازیم.

الان میدونیم که یک NOT یا نقیض وجود داره. حالا میتونیم به جای اون ورودی، یک NAND با دو ورودی قرار بدیم که به این شکل در بیاد :

4-AND Logic using NAND

خب این مدار، یکم پیچیده شد. ولی دقت کنید که داره نقیض نتیجه NAND رو به ما میده. یعنی چی؟ یعنی در صورتی خروجی درست میشه که هر دو ورودی درست باشن. این منطق و این مدار هم که AND هست، و اگر جبر بول رو کمی بدونید میدونید که از بیسیک ترین دستورات جبر بول هست.

حالا، یه مدل دیگه این گیت ها رو پیش هم میچینیم. چطوری؟ این بار به جای نقض کردن نتیجه، نقیض ورودی ها رو به عنوان ورودی میدیم به یک گیت NAND . در واقع به این شکل :

5-OR Logic using NAND

حالا نتیجه به این شکل هست که «درصورتی که حداقل یکی از ورودی ها درست باشه، نتیجه درست میشه». و این منطق، منطق OR هست. در واقع گیت OR رو هم با NAND پیاده سازی کردیم.

یک مدار دیگه هم میمونه که نوع خیلی خاصی از OR هست. در واقع به این شکله :

6-XOR Logic using NAND

توی این گیت جدید، ما در واقع وقتی به نتیجه درست میرسیم، که تعداد «فرد» از ورودی ها (در اینجا یک، چون دو تا ورودی بیشتر نداریم) درست باشن. این منطق و این گیت رو «یای انحصاری» یا XOR میگن. اگر یک IC داشته باشیم که ۵ تا گیت NAND داخلش باشه، میتونیم ازش یک XOR بسازیم.

همه ما میدونیم که این گیت ها خودشون نماد انحصاری دارن و وقتی قراره چیزی با استفاده ازشون طراحی کنیم، بهتره (و باید!) از نمادهای خودشون استفاده کنیم، ولی یکی از دلایلی که این مطلب رو نوشتم این بود که میخواستم شما رو با ساختار درونی گیت ها آشنا کنم، همچنین میخواستم بررسی کنم که با استفاده از IC هایی که گیت NAND داخلشون هست، چطور میشه به سایر گیت ها رسید.

سال نو مبارک، موفق باشید :)

FacebookTwitterGoogle+Share

ساخت یک کامپیوتر ۴ بیتی ساده با استفاده از مدارات منطقی

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

مدارهای منطقی چی هستن؟

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

برای پردازنده کوچکمون چی نیازه؟

اول از همه، نیاز داریم که یک مدار Adder بسازیم. مدارهای Adder معمولا از چند تا Full Adder یک بیتی تشکیل میشن، و هر فول ادر یک بیتی هم از دو تا Half-adder .

برای ساخت Half-adder کافیه که یک بار ورودی A رو NOT کنیم و با B اون رو AND کنیم، سپس B رو NOT کنیم و با A اون رو AND کنیم. آخر هم نتیجه دو تا AND رو با هم OR کنیم. برای بدست آوردن رقم نقلی هم کافیه که A و B رو مستقیما با هم AND کنیم.half-adder2

مدار Half Adder نهاییمون به این شکل میشه. اما استفاده مدوام از NOT و AND و OR باعث سخت شدن توسعه ماشین میشه، پس از مجموعه ای که برای ساخت Half Adder استفاده کردیم میتونیم صرف نظر کنیم و از مدار XOR استفاده کنیم. البته همچنان برای رقم نقلیمون به AND نیاز خواهیم داشت.

بسیار خوب، برای Full Adder نیاز داریم که از پیش تعیین کنیم رقم نقلی ای وجود داره؟ یا نه! و برای این کار غیر از A و B یک ورودی به اسم Carry In یا «رقم نقلی ورودی» خواهیم داشت. و سپس، رقم نقلی ورودی رو باید به عنوان ورودی به یک Half-Adder دیگه بدیم. سپس، نتیجه AND شدن A و B رو با نتیجه AND شدن اولین Half-Adder و Carry In رو با هم OR کنیم تا رقم نقلی کلی بدست بیاد. پس مدار ما به این شکل خواهد شد :

full adderخب، این دو مدار رو الان ساختیم. قدم بعدی، ساختن کامپیوترمونه!

برای ساختن یک Adder چهار بیتی، باید به این شکل فول ادر ها رو کنار هم بچینیم :

Slide11همونطور که دیدید، این روش چیدن Adder ها پشت هم، مدل Ripple Carry نامیده میشه. خب، این کامپیوتر کوچک، میتونه اعداد ۰ تا ۱۶ (در دنیای بدون علامت و با در نظر گرفتن رقم نقلی) و -۱۶ تا ۱۵ (در دنیای علامت دار و بدون در نظر گرفتن رقم نقلی) رو به ما نمایش بده. با خاموش و روشن کردن به موقع مدارها عملیات جمع و تفریق رو میتونید انجام بدید.

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

4-bit computer simulation

برای شبیه سازی چه نرم افزاری نیازه؟

من برای کشیدن نقشه Half Adder و Full Adder از تخته وایت برد اتاقم (بله! تخته وایت برد توی اتاقا الزامیه!) و نرم افزار Logisim (موجود در مخازن اوبونتو) استفاده کردم. برای شبیه سازی کلی ماشین هم از Logic.ly که آزمایشگاه آنلاین داره استفاده کردم. البته هر نرم افزار دیگه ای میتونه بهتون در شبیه سازی کمک کنه. حتی میتونید با VHDL هم بنویسیدش و تستش کنید!

امیدوارم که این پست هم براتون مفید واقع شده باشه!

موفق باشید.

FacebookTwitterGoogle+Share