Nand2Tetris — الجزء الأول: من المنطق إلى المعالج › المشروع 3: الذاكرة 3 / 6 السابق التالي

المشروع 3: الذاكرة

المشروع 3: الذاكرة

خلفية

الذاكرة الرئيسية للحاسوب، التي تُسمى أيضًا الذاكرة العشوائية أو RAM، هي متتالية قابلة للعنونة من مسجّلات بطول n بت، كل منها مصمم لحفظ قيمة بطول n بت. في هذا المشروع سوف تبني تدريجيًا وحدة RAM. ويتضمّن ذلك مسألتين رئيسيتين: (i) كيفية استخدام منطق البوابات لتخزين البتات بصورة مستمرة عبر الزمن، و(ii) كيفية استخدام منطق البوابات لعنونة (address) مسجّل الذاكرة الذي نريد العمل عليه.

الهدف

ابنِ جميع الشرائح الموصوفة في الفصل 3 (انظر القائمة أدناه)، وصولاً إلى وحدة RAM. مكوّنات البناء الوحيدة التي يمكنك استخدامها هي بوابات DFF الأولية، والشرائح التي ستبنيها فوقها، والشرائح الموصوفة في الفصول السابقة.

الشرائح

اسم الشريحة الوصف
DFF قلب ثنائي للبيانات (Flip-Flop) أولي
Bit مسجّل بطول 1 بت
Register مسجّل بطول 16 بت
RAM8 ذاكرة بطول 16 بت / 8 مسجّلات
RAM64 ذاكرة بطول 16 بت / 64 مسجّلًا
RAM512 ذاكرة بطول 16 بت / 512 مسجّلًا
RAM4K ذاكرة بطول 16 بت / 4096 مسجّلًا
RAM16K ذاكرة بطول 16 بت / 16384 مسجّلًا
PC عدّاد برنامج بطول 16 بت
سكربتات الاختبار ملف المقارنة
Bit.tst Bit.cmp
Register.tst Register.cmp
RAM8.tst RAM8.cmp
RAM64.tst RAM64.cmp
RAM512.tst RAM512.cmp
RAM4K.tst RAM4K.cmp
RAM16K.tst RAM16K.cmp
PC.tst PC.cmp

العقد

عند تحميل تصميم شريحتك (برنامج .hdl المعدَّل) في محاكي العتاد (Hardware Simulator) المُرفق، واختباره باستخدام سكربت .tst المُرفق، يجب أن يُنتج المخرجات المدرجة في ملف .cmp المُرفق. وإذا لم يكن الأمر كذلك، فسوف يُبلغك المحاكي بذلك. ويجب استيفاء هذا الشرط لكل شريحة مدرجة أعلاه، باستثناء شريحة DFF التي تُعدّ أولية، وبالتالي لا حاجة إلى تنفيذها.

الموارد

انظر الفصل 3، ودليل HDL، ومجموعة رقائق Hack.

لكل شريحة، نُزوّدك بملف .hdl هيكلي ينقصه جزء التنفيذ. وبالإضافة إلى ذلك، نُزوّدك لكل شريحة بسكربت .tst يوجّه محاكي العتاد إلى كيفية اختبارها، وبملف .cmp (ملف مقارنة) يحتوي على المخرجات الصحيحة التي يجب أن يُنتجها هذا الاختبار. ومهمتك هي إكمال واختبار ملفات .hdl الهيكلية المُزوَّدة.

والأدوات التي تحتاجها لهذا المشروع هي محاكي العتاد المُرفق والملفات المدرجة أعلاه. وإذا كنت قد حمّلت حزمة برامج Nand2Tetris Software Suite، فإن هذه الملفات مخزّنة في مجلد projects/03 لديك. وينقسم المجلد بدوره إلى مجلدين فرعيين، للأسباب الموضحة أدناه.

نصائح

تُعدّ بوابة DFF بوابة أولية، وبالتالي لا حاجة إلى بنائها: فعندما يصادف المحاكي جزءًا من شريحة DFF في برنامج HDL، فإنه يستدعي تلقائيًا التنفيذ المدمج nand2tetris/tools/builtInChips/DFF.hdl.

الشرائح المدمجة: عند بناء شرائح RAM من أجزاء شريحة RAM من مستوى أدنى، نوصي باستخدام الإصدارات المدمجة من تلك الأجزاء. وإلا، فسوف يُنتج المحاكي بصورة تعاقبية عددًا كبيرًا من كائنات البرمجيات المقيمة في الذاكرة، واحدة لكل جزء من الأجزاء العديدة التي تُشكّل وحدة RAM نموذجية. وقد يجعل ذلك المحاكي يعمل ببطء، أو، ما هو أسوأ، أن ينفد من الذاكرة. أي أن ينفد من ذاكرة الحاسوب الذي يعمل عليه المحاكي.

ولتفادي هذه المشكلة، قمنا بتقسيم شرائح RAM التي عليك بناؤها في هذا المشروع إلى مجلدين فرعيين، هما projects/03/a و projects/03/b. وهذا التقسيم سطحي، وتم لغرض واحد فقط: فعند بناء الشرائح المخزّنة في b، يُجبر المحاكي على استخدام التنفيذات المدمجة لأجزاء الشريحة من المستوى الأدنى التي تُخزَّن برامج .hdl الخاصة بها في a ولكن ليس في b.

الأدوات

يمكن تنفيذ واختبار جميع الشرائح المذكورة في المشاريع 0-5 باستخدام محاكي العتاد المُرفق. وفيما يلي لقطة شاشة لاختبار تنفيذ مدمج لشريحة RAM8.hdl على محاكي العتاد: