سلام امروز میخوام درباره یک مبحث جالب و مهمی که بسیار بصورت مجزا درباره هر کدوم میشنویم و میخونیم ولی شاید هیچ گاه، کلی و در کنار هم نمیبینمشون تا نقش و جایگاه هر کدومشون در سیستمها متوجه بشیم. میخواهم درباره انواع و اقسام حافظهها در یک سیستم دیجیتال بنویسم و همچنین به شباهتها و تفاوتها و کارکرد شون بپردازم.
به طور خلاصه به این موارد میردازیم : فلیپ فلاپها، رجیسترها و memory ها که به دو بخش RAM و ROM تقسیم میشوند.
1- اولین حافظه از نظر پایهای ترین سطح مداری و ساده ترین سیستم، فلیپفلاپ ها (به اختصار ffها) هستند.
فلیپ فلاپ ها مدارهایی هستند که اطلاعات انها در لبهی سیگنال کلاک اپدیت می شوند بسته به این که به کدام لبه حساس باشند به انها حساس به لبۀ بالا رونده یا لبه پایین رونده میگوییم، در واقع انها سنکرون با لبه سیگنال کلاک هستند.
به لبه بالا رونده: rising edge, positive-going edge, leading edge میگویند و به لبههای پایین رونده: Falling edge, negative-going edge, trailing edge میگویند.

2- رجیسترها:
رجیسترها از مجموع چند تا فلیپ فلاپ تشکیل میشوند، مثل ff ها کلاک میخورند و دو سیگنال کنترلی read/write و enable نیز دارند، نکته جالب توجه اینکه یک رجیستر رو میشه به شکل دو بافر سه حالته که به صورت feedback به هم متصل شدهاند نیز نشان داد مثل تصویر زیر:

این تصویر نشان میدهد که read/write یک سیگنال شدهاند و بسته به مقدار سیگنال دو بافر حالتهای متفاوتی میگیرند که یکی باعث نوشتن داده میشود و دیگری باعث خواندن.
رجیسترها در درون خود پردازندهها استفاده میشوند برای ذخیره کردن دستورالعمل هایی که باید اجرا شوند یا ذخیره داده بدست امده از یک پردازش و تقریبا تمام ریجستر ها ار ساختار tri-state buffer استفاده میکنند برای مشخص سازی جهت انتقال دیتا.
رجیسترها یک کاربرد بخصوصی که دارند اینست که علاوه بر ذخیره سازی اطلاعات می توان در درون خود انها عملیات هایی انجام داد به اصطلاح دارای یک سری trickهایی هستند، به همین دلایل (علاوه بر سرعت پاسخ گویی بالا) در درون processor استفاده میشوند؛ این قابلیتها شامل shift , rotate میباشد.
3- حافظهها:
عملکرد حافظهها همانند رجیسترها، ذخیره سازی اطلاعات هست؛ رجیسترها در درون پردازنده برای دادههای کوچک و استفاده سریع همراه با trickهای کاربردی هستند در حالی که حافظهها برای داده های با حجم بزرگ استفاده میشوند بدون هیچگونه trick.
حافظهها بر اساس اینکه بعد از قطع توان، توانایی نگهداری دادهها را داشته باشند یا نه به دو گروه volatile and non-volatile تقسیم بندی میشوند به معنی فرار بودن یا غیر فرار:
به دسته اول(volatile memory) حافظه RAM گفته میشود.
و به دسته دوم(non-volatile memory) حافظه ROM گفته میشود.
کلمه RAM اختصار عبارت Random Access memory میباشد که در واقع این نام به هیچ شکل ربطی به حافطههای volatile ندارند و کاملا بی معنی هست نسبت به این حافظه که در ادامه به این داستان و موضوع می پردازم
کلمه ROM مخفف عبارت Read Only memory هست که خود این حافظه به سه قسمت تقسیم میشودم مانند شکل:

توضیح در مورد خود ROMها در حوصله این نوشته نیست فقط نکته مهم اینکه ROM یک حافظه غیر فرار است یعنی با قطع برق دیتا از بین نمی رود در مقابل RAM ها.
حالا برمی گردیم به حافظه RAM و اینکه چرا این نام برای این حافظه کاملا بیمعنی است:
در روزهای محاسباتی ماقبل تاریخ، حافظه به ترتیب بارگذاری می شد به این معنی که داده اول در خانه صفرم حافظه، داده دوم، خانه اول، داده سوم، خانه دوم و به همین ترتیب حالا با پر شدن یکی یکی حافظه و نوشتن انها، زمانی که بخواهیم برگردیم به خانه اول دیتا خانه مثلا سوم را ارسال کنیم باید از خانه که هستیم برگردیم به خانه سوم مثلا در یک حافظه 1 مگابایتی اگر در خانه اخر یعنی خانه یک میلیون ام باشیم باید تا خانه 3ام برگردیم و این زمان زیادی میگیره، تازه باید همون راه رو دوباره برگردیم، عبارت random access memory به این معنی هست که زمان دسترسی به هر کدوم از خانه های حافظه برابر باشه، به حافظههای قبلی Sequential Access Memory(SAM) میگن که در حافظه هایی با حجم کم مناسب هستند ولی در حجم زیاد نه؛ انتخاب این نام به این دلیل بیمعنی هست که حافظههای ROM هم از همین روش Random Access Memory استفاده میکنند، در ادامه میگم که این روش چیه.
نحوه دسترسی:به هر خانه RAM یک سلول گفته میشه (بعدا بیان میکنم که از چه چیزی ساخته میشن) هر خانه یا سلول RAM یک شمارهای داره که به اون ادرس گفته میشه مثل شکل زیر

در شکل بالا 16 خانه حافظه داریم از 0 تا 15 یا 0000 تا 1111، خانههای حافظه به فرم مستطیل شکل میگیرند در شکل بالا یک مربع 4 در 4 (4 سطر و 4 ستون) برای دسترسی به یک سلول حافظه باید هم شماره سطر و هم شماره ستون فعال بشن مثلا ادرس 0110 به این معنی است که ردیف 01 و ستون 10 حافظه، برای همین برای دسترسی به سلولهای حافظه باید یک دیکدر تبدیل عدد باینری به شماره سطرها و ستونها قرار دهیم. برای یک حافظهای با n بیت ادرس 2 به توان n سلول ادرس داریم مثلا برای یک حافظهای با 20 بیت ادرس دهی 20^2 یعنی 576 048 1 یا 1Meg location داریم.
به طور اختصار حافظهRAM به دو نوع تقسیم میشوند:
1- Static RAM
2-Dynamic RAM

حافظه های dynamic از یک کلید و خازن تشکیل میشن که المان های مداری کمی دارند و ارزان هستند ولی سرعت پایینی دارند، علت پویا(dynamic) بودن انها اینست که به علت جریان نشتی بعد از معمولا 2ms باید مجددا شارژ شوند تا اطلاعات از بین نروند، مصرف توان کمی هم دارند و با توجه به فضای کم اشغالی که دارند چگالی ذخیره سازی بالایی دارند.
حافظه های static هم که از ffها تشکیل میشن و نیازی به recharge ندارند.(البته که سرعت بیشتری نسبت به نوع قبلی دارند.)
مطالب گفته شده از برداشت من از کتاب :
Introduction to Microprocessors and Microcontrollers
by John Crisp _ season 6 Registers and memories