المشروع 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 على محاكي العتاد:
