محاكاة الطاقة المعمارية الدقيقة (خرائط) للقشرة M3
ملخص
محاكاة Fast Cortex-M3 التي تخلق آثار الطاقة. يمكن العثور على مزيد من المعلومات في https://eprint.iacr.org/2017/1253.pdf
- مكتوب في C ++ للسرعة
- يقرأ ومحاكاة ملف .bin الذي تم إنشاؤه من مصدر تجميع/C باستخدام أدوات ARM GNU
يتم دعم التعليمات فقط الموجودة عادة في ترميز بدائل التشفير. يمكن إضافة تعليمات غير مدعومة في CPU.CPP.
التجميع
- ترجمة محاكاة: يتم تخزين المحاكاة (بما في ذلك) الوظيفة الرئيسية ، في مكتبة ثابتة.
- CD libsim/build
- يصنع
- اجعل التثبيت
- تجميع البرامج الثابتة للتنفيذ. نستخدم sec_add_v05 كمثال:
- CD Sec_add_v05/fw/build
- يصنع
- قم بتجميع محاكاة التنفيذ (لا تزال تستخدم sec_add_v05 كمثال):
- CD SEC_ADD_V05/SIM/BUILD
- يصنع
باستخدام المحاكاة
قراءة المحاكاة ملف .bin الذي يجب أن يكون موجودًا في الدليل الحالي. يعتمد اسم ملف .bin على ما تم تحديده في مصادر المحاكاة.
من المفترض أن يتم استخدام جهاز المحاكاة عند تطوير البرامج الثابتة ، وبالتالي فإن الطريقة المعتادة لتشغيل المحاكاة هي
- تغيير الدليل إلى دليل البرامج الثابتة: CD sec_add_v05/fw/build
- قم بتشغيل المحاكاة: ../../sim/build/sim_sec_add_v05 -n 1000
يعرض الخيار "-H" الخيارات والمعلمات الصالحة.
ترميز تطبيق FW جديد
تطبيق FW هو ببساطة وظيفة C (ربما تحتوي على رمز التجميع) ، باتباع ARM ABI (المعلمة الأولى في R0 ، إلخ ...) لا توجد وظيفة رئيسية. يمكن استخدام جميع وظائف C والمعالجة المسبقة.
قد يتم تجميع البرامج الثابتة بواسطة أي مترجم ذراع يدعم القشرة M3. تم اختبار ARM فقط GCC. يمكن تغيير المسار إلى برنامج التحويل البرمجي ARM في البرامج النصية/fw.mak عن طريق تعديل المتغير "dir".
ترميز محاكاة جديدة
من الأفضل أن تبدأ وتعديل جهاز محاكاة بالفعل. يجب أن يحتوي المحاكاة على 3 وظائف:
- void check_sec_algo (void): تطبق هذه الوظيفة بعض متجهات الاختبار وتطبع ما يمر الاختبار أم لا.
- void t_test_sec_algo (الخيارات والخيارات): تعمل هذه الوظيفة على تشغيل T_Test عن طريق إنشاء مدخلات وجمع الآثار
- غلاف لاستدعاء وظيفة FW (التي سيتم محاكاة). يجب أن يكتب هذا الغلاف (الذي يعتمد توقيعه على وظيفة FW) الوسيطات في ذاكرة المحاكاة وتعيين سجلات المعالج وفقًا لذلك. ثم ، يبدأ المحاكاة. بعد المحاكاة ، يجب أن ينسخ النتائج من الذاكرة المحاكاة.
دعم المزيد من تعليمات ARM V7-M
اتبع تلك الخطوات لدعم التعليمات في المحاكاة:
- أضف قيم فك التشفير والقناع في الملف libsim/src/opcodes.h
- فك تشفير التعليمات في خطوة الوظيفة () في libsim/src/cpu.cpp
- أضف تنفيذ الوظيفة في نفس الملف
- لا تنس إضافة هذه الوظيفة الجديدة إلى قائمة الأساليب في CPU.H
تبسيط الماكرو test_ins32 و test_ins16 فك تشفير التعليمات أيضًا ، لا تنسوا التحقق من صحة سلوك التعليمات المحاكاة الجديدة ، وخاصة سلوك خطوط الأنابيب Reg_A و Reg_B!
عمليات التحقق
يجب التحقق من صحة كل تعليمات تدعمها المحاكاة مقابل محاكاة RTL. لا يتم تخزين شجرة RTL في هذا المستودع لأنه ينتمي إلى ARM Limited. معظم الإجراءات الموضحة أدناه موجودة فقط لوثائق بلدي.
- أضف التعليمات الجديدة في ملفات الملف. C في شجرة المحاكاة
- Execute Make Check> sim_trace.log 2> & 1 في اتجاه إنشاء FW في شجرة المحاكاة
- أضف التعليمات الجديدة في ملف التسرب
- ترجمة: اجعل testcode testName = تسرب
- محاكاة: قم بتشغيل TestName = التسرب
- تحويل ملف تتبع tarmac.log إلى ملف تتبع التسجيل: ../../../../../python/gen_trace.py> verilog_trace.log
- انسخ ملف تتبع التسجيل في شجرة Simulator: CP ~/documents/repos/maps/sender/sse050/logical/testbench/execution_tb/verilog_trace.log.
- قارن تتبع المحاكاة وتتبع RTL. إما بصريًا باستخدام gvim -d sim_trace.log verilog_trace.log ، أو باستخدام: ./../../python/compare_traces.py
الأخطاء/القيود
معرفة القيود هي:
- يعد خط أنابيب تعليمات LDRB/STRB أكثر تعقيدًا مما يتم تنفيذه في المحاكاة. على سبيل المثال ، للرمز التالي:
ldrb r2, [r0]
strb r2, [r0]
لن يتم محاكاة Reg_A و Reg_B بشكل صحيح بواسطة المحاكاة. الوظيفة لا تزال صحيحة رغم ذلك. عند إدراج تعليمات أخرى بين LDRB وتعليمات STRB ، تكون المحاكاة صحيحة.