مقدمة: الذاكرة المترافقة (بالإنجليزية: Content-addressable memory أو Associative Memory) هي نمط خاص من ذاكرة ال RAM والتي يتم الوصول فيها إلى بيانات محددة ليس من خلال عنوانها و إنما من خلال مقارنة هذه البيانات مع محتويات الذاكرة وهذا النمط من الذواكر يستخدم في بعض ذواكر الكاش و الذواكر الافتراضية.
الذاكرة المترافقة Associative Memory: يتم بناء ذاكرة الكاش إما باستخدام ال SRAM أو الذواكر المترافقة وفقا للنمط المستخدم في تخطيط الذاكرة في الذاكرة SRAM يتم الوصول لمحتوياتها كسائر أنماط الذواكر حيث تستقبل عنوان وتعطي محتوياتها الموجودة على ذاك العنوان ولكن في الذاكرة المترافقة يتم الوصول للبيانات بشكل مختلف عن باقي أنماط الذواكر حيث يتم تحديد جزء من البيانات المطلوبة (مثلا إذا كان طول الكلمة البيانات 20 بت تحدد 4 بتات مثلا) وتقوم الذاكرة المترافقة بالبحث في كل مواقعها الذاكرية على التوازي وتؤشر على المواقع التي حدث فيها تطابق مع جزء البيانات المحدد وتتم قراءة قيم هذه البيانات للتوضيح افترض بأنه لدينا ذاكرة مترافقة بثماني حجرات ذاكريه طول كل حجرة 16بت كما هو موضح بالشكل( 2-9):
أيضا هنالك بت إضافي لبتات البيانات في كل كلمة معطيات والمسمى (V) بت الصلاحية Valid Bit و ال (1) في هذا الموضع يشير إلى أن الحجرة الذاكرية تحتوي على بيانات صالحة لإجراء المقارنة والقيمة (0) تدل على أن القيمة غير صالحة لإجراء المقارنة . (كل بت في الذاكرة أما يحتوي القيمة (0) أو القيمة (1) سواء أكان يدل على صلاحية البيانات أو لا لهذا السبب من المهم أن يكون لدينا علم يحدد ببساطة هل البيانات صالحة أم غير صالحة وهذا شي مهم في عملية تحديد تطابق البيانات)
القيمة الأولى في الحجرة هي بيانات والقيمة الثانية هي دليل أو مفتاح. مثال 1: إذا كانت ال CPU تريد الوصول إلى البيانات التي خاناتها الأربعة الأعلى أهمية 1010 في الذاكرة المترافقة الموضحة بالشكل (1) والتي تحوي البيانات الموضحة بالجدول التالي:
تقوم ال CPU بتحميل القيمة 0000 0000 1111 في المسجل Mask Register حيث أن كل بت يجب أن يتم فحصه بوضع (1) بغض النظر عن قيمته وباقي الخانات توضع على (0) وتقوم ال CPU بتحميل القيمة 1010 xxxx xxxx إلى مسجل البيانات( Data register )أو (Argument register) و البتات المحددة هي البتات التي يجب أن يتم فحصها و البتات إل 12 الأخرى يمكن أن تأخذ أي قيمة لأنه لن يتم فحصها والآن تقوم CPU بفحص كل خاناتها على التوازي حيث تحدث المطابقة إذا كانت قيمة كل خانة ذات القيمة (1) في المسجل Masked Register في الموقع الذاكري متطابقة مع قيمتها في مسجل البيانات Data Register والخانة المفتاح تحوي على القيمة V=1.
تعميم: افترض أن لديك الموقع الذاكري (i) حيث بتات المعطيات هي والبت المفتاحي هو والمسجل mask register ومسجل البيانات وتحدث المطابقة عندما تتحقق العلاقة:
تحقيق الذاكرة المترافقة: كل موقع ذاكري في الذاكرة المترافقة يحتوي على البنية اللازمة لانجاز هذه العملية حيث تحتوي الذاكرة المترافقة على مسجل مطابقة(Match register ) والذي يملك بت من أجل كل حجرة ذاكريه فإذا حدثت المطابقة مع هذه الحجرة توضع قيمة البت الموافق لهذه الخانة على القيمة (1) وإلا يوضع على القيمة (0) كما تحقق بنية الحجرة عملية القراءة والكتابة من الحجرة ويوضح الشكل (2) بنية حجرة ذاكريه وحيدة.
أما الشكل التالي(3) فهو منطق المطابقة لكلمة مخزنة :
والشكل العام للذاكرة يكون كما هو مبين بالشكل (5):
تنويه: علينا أن نضيف دارة and بعد منطق المقارنة مع بت الصلاحيةv من أجل الوصول فقط للبيانات الصحيحة ويصبح الشكل
من أجل القراءة والكتابة: يكون منطق القراءة والكتابة لكل خلية ذاكريةهو كما الشكل (2)ولكن بشكل عام يكون يمكن اقتراح المنطق التالي الموضح بالشكل (7) للقراءة والكتابة:
حيث تم وضع بفرات على مخرج ال Output Registerو تم تفعيلها والتحكم بها عن طريق مدخل الOE . وفي المثال المذكور مثلا الموقعين الأخيرين يحققان المطابقة في مسجل البيانات ولكن الموقع قبل الأخير فقط لديه قيمة الخانة الدليل تساوي (1) أي بياناته قابلة للمطابقة وكنتيجة لهذا التساؤل فإن جميع خانات مسجل المطابقة سوف تسند قيمتها إلى القيمة (0) ما عدا الخانة قبل الأخيرة فأنها تسند قيمتها إلى (1) بعد ذلك تقوم دارة في الذاكرة المترافقة بإخراج قيمة الحجرة ما قبل الأخيرة إلى مسجل الخرج والذي يكون متاحا لل CPU للوصول إليه(إذا كان هنالك أكثر من خانة تحقق المطابقة يتم إخراجها بالتتالي لمسجل الخرج ولكن في تطبيقات الذاكرة المترافقة في ذواكر الكاش أو الذواكر الافتراضية فإن معظم الحالات تحدث مطابقة واحدة فقط) إن كتابة البيانات في الذاكرة المترافقة يتم بشكل مباشر حيث تقوم ال CPU بإرسال البيانات إلى مسجل البيانات ثم ترسل إشارة الكتابة write وتقوم الذاكرة المترافقة بالبحث عن موقع ذاكري قيمة خانة الدليل فيه تساوي (0) وتكتب البيانات الجديدة فيها وإذا لم تجد فيجب أن تقوم بمسح لتوضع قيمة البيانات فيه وتقوم باسنا القيمة (1) إلى خانة الدليل لهذه القيمة الجديدة ويتم تحديد هذه الخانة المستبدلة من خلال خوارزمية الاستبدال المطبقة من قبل الذاكرة.