بنية هارفارد

بنية هارفارد هي بنية حاسوبية تتميز بأن ذاكرة التعليمات وذاكرة البيانات مستقلتين عن بعضهما فيزيائياً. وتستخدم كل ذاكرة منهما مسارات منفصلة للعنونة ونقل البيانات.
نشأ المصطلح من الحاسوب هارفارد مارك I، الذي كان يستخدم شريطاً مثقبّاً (بعرض 24 بت) لتخزين التعليمات، وعدادات إلكتروميكانيكية لتخزين البيانات. كان تخزين البيانات في هذه الأجهزة القديمة ينحصر بوحدة المعالجة المركزية، ولم يكن الوصول إلى التعليمات وتحميلها بشكل بيانات ممكناً. كما أن المعالج لم يكن قادراً على الإقلاع وحده، بل يجب أن يعمل شخص على تحميل البرامج. 
تعتمد معظم المعالجات اليوم على مسارات منفصلة لزيادة الأداء، لكنها في الواقع تعتمد على بنية هارفارد معدلة، حيث تدعم هذه المعالجات مهاماً إضافية مثل تحميل برنامج من قرص تخزيني على أنه بيانات ثم تنفيذه.

تفاصيل الذاكرة

في بنية هارفارد لا يشترط أن تكون لذاكرتي التعليمات و البيانات الخصائص نفسها، إذ يمكن أن تختلفا عن بعضهما ببنية العنوان، أو طريقة التصنيع، أو التوقيت، أو عرض الكلمة. 
في بعض النظم، يمكن تخزين التعليمات في ذاكرة قراءة فقط، بينما تحتاج البيانات عموماً لذاكرة قراءة/كتابة. كما أنه في بعض النظم تكون سعة ذاكرة التعليمات أكبر بكثير من ذاكرة البيانات، ولذلك تكون عناوين التعليمات أعرض من عناوين البيانات.

الاختلاف عن بنية فون نيومان

في بنية فون نيومان الأصلية، إما أن يقرأ المعالج تعليمة و وإما أن يقرأ أو يكتب البيانات على الذاكرة، لكن لا يمكن أن يجري الحدثين معاً لأن التعليمات والبيانات تمران على نفس النواقل في النظام. أما في الحواسيب ذات بنية هارفارد فيمكن لوحدة المعالجة المركزية قراءة تعليمة وتنفيذ عملية وصول للبيانات في آن معاً، حتى في حال عدم وجود ذاكرة مخبئية. ولذلك يمكن أن تكون حواسيب هارفارد أسرع بالنسبة للدارات المعقدة لأن عمليات جلب التعليمات والوصول للبيانات لا تتنافس على مسار نقل وحيد. 
كما أن فضاء عنونة البيانات في بنية هارفارد منفصل عن فضاء عنونة التعليمات، فقد يكون عنوان التعليمة مُمثَّلاً بقيمة عرضها 24 بت، بينما تُمثَّل عناوين البيانات بقيم مؤلفة من 8 بت غير مرتبطة بالقيمة التي تمثل عناوين التعليمات.

الاختلاف عن بنية هارفارد المعدلة

تتشابه بنية هارفارد المعدلة مع بنية هارفارد كثيراً، حيث تسمح لوحدة المعالجة المركزية بالوصول إلى الذاكرة عبر ناقلين منفصلين (أو أكثر)، لكنها لا تركز على الفصل التام بين التعليمات والبيانات. أكثر التعديلات انتشاراً هي فصل الذاكرة المخبئية المستخدمة للتعليمات عن الذاكرة المخبئية المستخدمة لتخزين البيانات. عندما يتعامل المعالج مع الذاكرة المخبئية، يعمل وفق بنية هارفارد تماماً. لكن عند الوصول للذاكرة الرئيسية، يعمل وفق بنية فون نيومان (حيث تنقل التعليمات البرمجية كما تنقل البيانات، وهذه التقنية مهمة). هذا التعديل منتشر في المعالجات المعاصرة مثل معمارية ARM ومعمارية إكس 86. تصنف أحياناً هذه المعالجات ضمن بنية هارفارد دون الالتفات إلى أنها في الواقع بنية معدلة عن بنية هارفارد الأصلية.
من التعديلات أيضاً السماح لوحدة المعالجة المركزية بقراءة كلمات من ذاكرة التعليمات (مثل ROM أو الذواكر الوميضية) ومعاملتها كبيانات للقراءة فقط. تستخدم هذه التقنية في بعض المتحكمات الدقيقة، ومنها متحكمات Atmel AVR. تسمح هذه التقنية بالوصول للبيانات الثابتة، مثل السلاسل المحرفية أو function tables مباشرة، دون الحاجة لنسخها أولاً إلى ذاكرة البيانات، وهذا يساعد على الاحتفاظ بذاكرة البيانات صغيرة السعة (والمستهلكة للطاقة) للمتغيرات التي تحتاج للقراءة والكتابة. تستخدم تعليمات آلة خاصة لقراءة البيانات من ذاكرة التعليمات.

تصميم الذاكرة المخبئية المنفصلة

تستفيد تصاميم المعالجات الحديثة عالية الأداء من خصائص بنية هارفارد وبنية فون نيومان ، خصوصاً بنية هارفارد المعدلة ذات "الذاكرة المخبئية المنفصلة" المنتشرة جداً. تقسم ذاكرة المعالج المخبئية في هذا التصميم إلى قسمين: ذاكرة مخبئية للتعليمات وذاكرة مخبئية للبيانات. تستخدم بنية هارفارد عندما يتعامل المعالج مع الذاكرة المخبئية. أما إذا لم تكن البتات المطلوبة متوفرة في الذاكرة المخبئية، فسوف يتم إحضارها من الذاكرة الرئيسية، التي لا تقسم إلى أقسام منفصلة للتعليمات والبيانات، رغم أن النظام قد يحوي متحكمات منفصلة يمكن استخدامها للوصول المتوازي لذواكر RAM و ROM وذواكر (NOR) الوميضية.
بالتالي يستفيد النظام من ميزات بنية هارفارد عند التعامل مع الذاكرة المخبئية رغم أنه يستخدم بنية فون نيومان في النواحي الأخرى، مثل تحميل البيانات والتعليمات عبر متحكم الذاكرة نفسه.