nanoFOX - نواة متوافقة بسيطة RISC-V

مقدمة صغيرة:


جاءت فكرة كتابة جوهرك الخاص بعد اجتياز ندوة مدرسية حول الدوائر الرقمية في مدينة تومسك . في هذا الحدث ، تم تقديم مقدمة إلى لغات وصف الأجهزة الحالية (Verilog HDL و VHDL) ، فضلاً عن مجموعة المعالجات schoolMIPS الصغيرة. لفهم بنية النوى ، تقرر اختراع دراجتهم الخاصة ، تتبع مسار تطوير schoolMIPS ، ولكن مع الأخذ بنظام قيادة آخر كأساس. نظرًا لتزايد شعبية RISC-V وانفتاح نظام القيادة الخاص بها (لم يكن MIPS يحتوي على نظام قيادة مفتوح وقت كتابة النواة) ، فقد تم اختيار مجموعة من تعليمات RISC-V ، وهي RV32I ، لتطوير kernel في المستقبل. يحتوي RV32I على مجموعة صغيرة من التعليمات الأساسية (37 باستثناء تلك الخاصة) ويمكن توسيعها إذا رغبت في ذلك ، على سبيل المثال ، عن طريق إضافة عدد صحيح من تعليمات الضرب والقسمة (RV32M) أو دعم للتعليمات المختصرة (RV32C). أيضًا ، تم تصميم هذا المشروع على أنه تعليمي ، لذلك تقرر زيادة وضوح النواة لإظهار عمله بفعالية.


قياسًا على schoolMIPS ، تم تنفيذ إصدارات kernel التالية:


  1. إصدار دورة واحدة (00_simple_risc_v_cpu).
  2. إصدار دورة واحدة مع دعم لتعليمات lw / sw (تحميل كلمة / كلمة مخزن) (01_simple_risc_v_cpu_lwsw).
  3. إصدار خطوط الأنابيب (ناقل ذو 5 مراحل) (02_pipe_risc_v_cpu).

حاليًا ، يتم وصف إصدار kernel التالي (03_pipe_risc_v_cpu_fc) بمجموعة كاملة من أوامر RV32I (دون مراعاة بعض الأوامر الخاصة).


معلومات موجزة:


في سياق وصف kernel ، تم التفكير في طرق لتحسين وضوح العمل وتصحيح الأخطاء والتحقق. تنفذ حاليا الطرق التالية:


  1. إضافة وحدة VGA النص التصحيح (لفروع kernel أحادية الدورة). يتيح لك تضمين هذه الوحدة تتبع قيمة 32 تسجيلًا في وقت واحد على شاشة الشاشة ، وهو أمر غير ممكن عند استخدام إخراج المعلومات في مؤشرات السبعة قطاعات. في الأشكال الموضحة أدناه ، تحسب النواة أرقام ليوناردو وتعرض معلومات عن وحدة تصحيح الأخطاء المقابلة ؛


    hex_display و DebugScreenCore

    مخرجات المعلومات حول المؤشرات السبعة: صورة
    إخراج المعلومات على شاشة VGA: صورة


  2. إضافة رسائل إلى محطة المحاكاة حول حالة ملف السجل والإرشادات المنفذة حاليًا. تتيح لك هذه الطريقة تحليل عملية النواة بشكل أفضل في المراحل الأولى من التطوير ، ولكنها ليست مريحة دائمًا ؛


    محطة

    تهيئة ملف السجل: صورة
    تغيير قيمة sp: صورة


  3. إضافة متغيرات السلسلة إلى الطول الموجي مع عرض الإرشادات القابلة للتنفيذ. باستخدام متغيرات السلسلة هذه ، يمكن للمطور تتبع الإعداد الصحيح لإشارات التحكم في جميع مراحل خط الأنابيب ؛


    الموجي

    تهيئة ملف السجل: صورة
    تغيير قيمة sp: صورة


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


    ملف نصي

    تهيئة ملف السجل: صورة
    تغيير قيمة sp: صورة


  5. إضافة القدرة على كتابة معلومات تصحيح الأخطاء حول حالة النواة في ملف HTML. يتم تقديم حالة ملف السجل في شكل جدول مع ملاحظات حول تغيير قيم الخلايا ، بالإضافة إلى الإرشادات التي يتم تنفيذها حاليًا بواسطة kernel. إنه تماثل للفقرتين 2 و 4 ، لكن بالإضافة إلى ذلك ، يتيح لك الإشارة بسهولة إلى تغيير في البيانات. كما يتضح من الصور أدناه ، إذا لم يتم تحديد قيمة السجل ، فسيتم تمييز السجلات باللون الأحمر (السجلات s0 / fp - t6). في الدورة 17 ، تتغير قيمة السجل s0 / fp ويتم تمييز الخلية باللون الأخضر.
    في الدورة 41 ، يتم تحميل القيمة 0x00010000 في سجل sp.


    ملف HTML

    تهيئة ملف السجل: صورة
    تغيير قيمة sp: صورة



مقارنة بين فروع النواة:

تعليمات kernel المدعومة حاليًا للفروع المختلفة:


دليل التعليمات00_simple_risc_v_cpu01_simple_risc_v_cpu_lwsw02_pipe_risc_v_cpu
إضافة+++
و--+
SLL--+
أو+++
عدي+++
أوري--+
slli+++
ش،-++
jalr--+
لوي+++
بيك+++
BNE--+
جنوب غرب-++
جال--+
فرعية++-

الأجهزة الطرفية المدعومة:


المحيط00_simple_risc_v_cpu01_simple_risc_v_cpu_lwsw02_pipe_risc_v_cpu
RAM-++
PWM-++
GPIO-++
UART--+

اللغات المدعومة لبرامج الكتابة:


لغة00_simple_risc_v_cpu01_simple_risc_v_cpu_lwsw02_pipe_risc_v_cpu
المجمع+++
C--+

موارد FPGA المطلوبة للنواة (nf_cpu):


EP4CE22F17C6 (de0_nano):


01_simple_risc_v_cpu_lwsw02_pipe_risc_v_cpu03_pipe_risc_v_cpu_fc
مجموع وحدات الذاكرة0/608256 (0٪)2048/608256 (أقل من 1 ٪)2،144 / 608256 (أقل من 1 ٪)
مجموع عناصر المنطق3.645 / 22.320 (16 ٪)1739 / 22.320 (8 ٪)2،058 / 22،320 (9 ٪)
مجموع وظائف التوافقية2.653 / 22.320 (12٪)1،472 / 22،320 (7 ٪)1،838 / 22،320 (8 ٪)
سجلات منطقية مخصصة1،055 / 22،320 (5 ٪)575 / 22.320 (3 ٪)606/2320 (3٪)

10M50DAF484C7G (de10_lite):


00_simple_risc_v_cpu01_simple_risc_v_cpu_lwsw02_pipe_risc_v_cpu03_pipe_risc_v_cpu_fc
مجموع وحدات الذاكرة0 / 1،677،312 (0 ٪)0 / 1،677،312 (0 ٪)2،048 / 1،677،312 (أقل من 1٪)2،144 / 1،677،312 (أقل من 1 ٪)
مجموع عناصر المنطق2851/49760 (6 ٪)2،881 / 49،760 (6٪)1629/49760 (3 ٪)1.927 / 49.760 (4٪)
مجموع وظائف التوافقية2.613 / 49.760 (5٪)2.653 / 49.760 (5٪)1،473 / 49،760 (3 ٪)1849/49760 (4 ٪)
سجلات منطقية مخصصة1055/49760 (2 ٪)1055/49760 (2 ٪)575/49760 (1 ٪)606/49760 (1 ٪)

تطوير المشروع.


ما هو المخطط القيام به في المستقبل:


  1. إضافة جميع تعليمات RV32I (في مرحلة الوصف) ؛
  2. تنفيذ تصحيح الأخطاء ؛
  3. إضافة وحدة تحكم DMA (DMA) ؛
  4. إضافة دعم للإطارات الأخرى AXI ، Avalon ، عظم الترقوة ؛
  5. إضافة ذاكرة التخزين المؤقت (ذاكرة التخزين المؤقت) ؛
  6. دمج الأجهزة الطرفية المختلفة (SPI ، TWI (I2C) ، Ethernet (10 base-t)) ؛
  7. إضافة تحكم المقاطعة ؛
  8. منفذ إصدارات مختلفة إلى لوحات التصحيح الأخرى ؛
  9. إضافة طرق أخرى لزيادة وضوح النواة ؛
  10. تشغيل RTOS ، على سبيل المثال zephyr .

كما يتم قبول التوصيات والاقتراحات لتطوير النواة.


رابط إلى المستودع: nanoFOX .

Source: https://habr.com/ru/post/ar451388/


All Articles