منذ أن أعمل عادة مع الطلاب، أنا دائما على النظر في وحدة المعالجة المركزية بسيطة، ويفضل أن يكون ذلك في Verilog، في منطقة المعتدل. هذا هو، وليس كذلك بسيطة وكذلك غير صعبة للغاية. كان لدي آمال كبيرة في هذا المعالج RISC 16 بت الذي قدمه [FPGA4STUDENT] ولكن دون بعض الأعمال الإضافية، فمن المرجح أن يكون غير قابل للاستخدام له هدفه المقصود.
وحدة المعالجة المركزية نفسها بسيطة للغاية وكذلك تناسبها على صفحة ويب طويلة نسبيا. ومع ذلك، فإن التفاصيل حول الأمر متناثر قليلا. هذا ليس دائما شيء فقير. يمكنك تقديم المتدربين وكذلك الكثير من المساعدة. ثم مرة أخرى، يمكنك تقديم الكثير كذلك. ومع ذلك، فإن ما هو أسوأ هو أحد الوحدات اللازمة للحصول عليه كان في عداد المفقودين! قد تشير إلى أنه كان ممارسة تفويض القارئ، ومع ذلك، كان من المرجح أن يتم شرحه بهذه الطريقة.
في البداية، كنت مستعدا لحذف الإشارة المرجعية وكذلك المضي قدما. ثم قررت أن عملية إصلاح هذا النمط وكذلك القيام بتحليل بعض الشيء قد تكون أكثر اهدرية من مجرد دراسة تصميم عمل تماما. لذلك قررت مشاركة إصلاحي معك وكذلك النظر داخل التصميم أكثر قليلا. علاوة على ذلك، سأريكم بالضبط كيفية الحصول على الشيء الذي يجب تشغيله في محاكي الإنترنت حتى تتمكن من تجربة أي تثبيت تطبيق برامج. بالطبع، إذا كنت مرتاحا مع مجموعة أدوات Verilog (مثل تلك الموجودة من Xilinx أو Altera، أو حتى منها مجاني مثل ICARUS أو CIVER)، يجب أن يكون لديك أي مشكلة في جعل هذا العمل، سواء. هذه المرة سأركزها بالضبط كيف يعمل وحدة المعالجة المركزية وكذلك في المرة القادمة فسأرهر لك بالضبط كيفية محاكاة ذلك مع بعض الأدوات المجانية.
التصميم
دعنا نبدأ بمخطط كتلة من وحدة المعالجة المركزية. لا يختلف كثيرا عن هياكل RISC الأخرى، وخاصة أي نوع من عدم استخدام خط أنابيب. برنامج مكافحة البرنامج (PC) يدفع ذاكرة الاتجاه. هناك أدلى مخصص لإضافة أربعة إلى الكمبيوتر لكل اتجاه لأن كل اتجاه هو أربعة بايت. يتيح لك MUX الكثير من الكمبيوتر الشخصي عن الاتجاه التالي أو مع هدف القفز (في الواقع، قفزة مطلقة، فرع محسوب، أو عنوان إرجاع). هناك Adder واحد أكثر مخصصة للفروع المحسوبة.
تحدث المعالجة في نظام منطق حسابي (Alu) يؤدي عمليات مختلفة. يمكن أن تكون الوجهة الذاكرة الأولية أو واحدة من السجلات. تستخدم بيانات التسجيل تقنية قديمة لمنع مشكلة نموذجية. لنفترض أنه يمكنك التحقق من سجل واحد لكل دورة. إذا قمت بتمكين سجل واحد فقط في تعليمات، فلا بأس بذلك. ومع ذلك، إذا قمت بتمكين اتجاه القيام بشيء مثل إضافة سجلتين، فستواجه صعوبة في تحميل كل منهما إلا إذا قمت بتمديد وقت الاتجاه. لهذا السبب يحتوي ملف التسجيل على منفذ إخراج.
الحقيقة هي أن بيانات التسجيل هي منطقة واحدة على الأقل حيث لن يتقلب النمط إلى الأجهزة الأصلية بالإضافة إلى ذلك. لشيء واحد، هناك حلقة في الكتلة الأولية إلى صفر السجلات. سوف معظم أدوات التوليف فقط رمي ذلك بعيدا. كنت أفضل حالا بكثير مع إشارة إعادة تعيين. تعتمد القضية الأخرى الممكنة على ما ستهدف FPGA الدقيق وكذلك الأدوات التي تستخدمها.
يوفر المصمم منفذين تم فحصه إلى السجلات، ولكن التخزين الأساسي هو نفسه. هذا من شأنه أن يجعل من الصعب استخدام خلايا RAM المتخصصة إذا كانت متاحة. هناك طريقة نموذجية أخرى هي فقط الاستفادة من كتل تسجيل منفصلة، واحدة لكل منفذ تم فحصه. سوف ترسل إنشاء البيانات إلى كلا كتلتين من الخارج لا يمكنك إخبار الفرق. في كثير من الأحيان، سيؤدي ذلك إلى ذلك بشكل أسرع وكذلك تصميم أكثر ضغطا.
سيكون رائعا (وغير صعبة للغاية) لإعادة كتابة بيانات التسجيل للقيام بذلك. ومع ذلك، إذا كنت لن تتطور إلى الأجهزة، فمن المرجح أن تلاحظ أي نوع من الفرق.
مثل معظم وحدات المعالجة المركزية المشابهة، يعمل التحكم بأكمله إلى Muxes لتحديد البيانات التي يتم بها إرسال البيانات حيث. على وجه الخصوص، هناك أربعة muxes في مسار بيانات المعالج:
PCSRC – توجيه قيمة الكمبيوتر الشخصي “التالي” إلى عداد البرنامج
Regdst – تحديد السجل الذي يتألف من حقلين في الاتجاه (يظهر الرسم التخطيطي ثلاثة مدخلات، ومع ذلك يبدو أن هذا خطأ)
BSRC – يختار الخلاف الثاني إلى Alu (إما قيمة فورية أو قيمة تسجيل)
WBSrc – The “write back” mux selects what data is set back to the registers for writing
تصميم الجداول
يعرض بقية النمط التعليمات الثلاثة عشر، وتنسيقات الاتجاه الخمسة، بالإضافة إلى إشارات التحكم المطلوبة لكل تنسيقات. The nuances of the instructions in each classification depend upon what the ALU is set to do. In other words, an add direction as well as a subtract direction are precisely the exact same except for what the ALU does. As you may imagine, the ALU takes two inputs as well as an operation code as well as creates an output.
The original publish doesn’t really state which instructions are in which category, however it is quite simple to puzzleخارج. Tons وكذلك تعليمات المتجر موجودة في الذاكرة الوصول إلى التنسيقات. التراجع على قدم المساواة وكذلك التعليمات غير المتساوية موجودة في فئة الفروع. اتجاه القفز له تنسيق خاص به. جميع التعليمات الأخرى هي “معالجة البيانات”. يظهر الجدول واحد رمز OP “Hamming Rater”، ومع ذلك، لا يظهر هذا في أي مكان آخر، بما في ذلك في التعليمات البرمجية، لذلك أظن أنه قطع خطأ في الصق.
الجداولان يقومان بمهمة رائعة لتلخيص متطلبات العمليات لجعل أعمال وحدة المعالجة المركزية. هناك تسعة إشارات تحكم فريدة من نوعها:
Regdst – هذا يتوافق مع MUX في رسم تخطيطي من نفس الاسم بالضبط وكذلك يختار إذا كانت الوجهة سجل (يظهر ك Reg_dst في التعليمات البرمجية)
alusrc – يختار مصدر خلاف علو (نفس BSRC MUX في الرسم البياني، وكذلك يظهر كما alu_src في التعليمات البرمجية)
MemtoreG – نشط عند حدوث ذاكرة تسجيل النقل (mem_to_reg في التعليمات البرمجية)
REGWRITE – تعيين عند تأسيس يجب أن تذهب إلى سجل (REG_WRITE في التعليمات البرمجية)
memread – تعيين عند سحب الذاكرة هو البيانات المصدر للاتجاه (mem_read في التعليمات البرمجية)
memprite – تعيين عند الذاكرة هي وجهة إنشاء (mem_write في التعليمات البرمجية)
فرع – نشط عند تطوير فرع (مزيج من BEQ وكذلك إشارات BNE في التعليمات البرمجية)
يختار Aluop – جنبا إلى جنب مع جزء من التعليمات، العملية لأداء في Alu (Alu_op في التعليمات البرمجية)
القفز – نشط عند التقفز قيد التقدم
يتوافق الجدول مباشرة إلى Verilog في نظام التحكم باستثناء تغييرات الاسم، وهو أمر مؤسف لأنه يجعل الجدول أصعب بعض الشيء. على سبيل المثال، هنا هو رمز اتجاه معالجة البيانات مع OpCode 0010:
4’b0010: // data_processing
يبدأ
REG_DST = 1’b1؛
alu_src = 1’b0؛
mem_to_reg = 1’b0؛
REG_WRITE = 1’b1؛
mem_read = 1’b0؛
mem_write = 1’b0؛
beq = 1’b0؛
bne = 1’b0؛
alu_op = 2’b00؛
القفز = 1’b0؛
نهاية
قارن ذلك إلى الجدول في النشرة الأصلية وكذلك سترى خرائط تكنولوجيا المعلومات مباشرة. في اللغة الإنجليزية، يتجاوز الاتجاه من السجلات التي تكتب إلى السجلات التي تحتوي على رمز عملية ALU من 0 وكذلك ليست قفزة أو فرع.
بشكل غير مفهوم، تكرر هذه الكتلة لجميع تعليمات معالجة البيانات على الرغم من أنه لا ينبغي أن يكون ضروريا. لحسن الحظ، من أجل المحاكاة، لن يهم الأمر حقا وكذلك معظم أدوات التجميع ستشكلها وكذلك دمج الكود المتطابق لك.
في المرة القادمة
في الدفعة التالية، سأريك بالضبط كيفية طن نمط في إحدى أدوات النمط السريع المفضل، ODA Playground. كان هناك بيانات مفقودة بالإضافة إلى بعض التدليك اللازمة للحصول عليها للعمل مع أداة الإنترنت على الإنترنت. ومع ذلك، فإن وحدة المعالجة المركزية تعمل كما وعدت، بمجرد معرفة عدد قليل من الخصائص. إذا كنت تريد نظرة خاطفة على المحاكاة، يمكنك فحص الفيديو أدناه.