उत्पन्न क्यों नहीं करती है, मैं अपना कोड लिखना चाहता हूं जो माइक्रोब्लैज़ पर टीएलबी मिस को संभालेगा और इसके माध्यम से, पेज टेबल इत्यादि। यह सब कुछ किया जा रहा है OVPsim।एक अप्रत्याशित स्थान तक पहुंच हार्डवेयर अपवाद (माइक्रोब्लैज़)
ori r20, r0, 0
ori r12, r0, 0x1000000
/* next line should break it */
sw r20, r12, r0
(Ie, लिखना: -
के रूप में मैं जाना मैं एक तुच्छ स्थान (0x1000000) संदर्भ के लिए विधानसभा का यह छोटा टुकड़ा लिखा था मैं सीख रहा हूँ के रूप में मैं पर वी एम के साथ इस रूप में विशेषाधिकार प्राप्त कोड चला रहा हूँ r20 == 0
पते के लिए बाहर की सामग्री r12 == 0x1000000
और r0 == 0 => 0x1000000
oring जाहिर द्वारा गठित)
लेकिन अपवाद वेक्टर के लिए कूद करने के बजाय, GDB रिपोर्ट "कार्यक्रम SIGSEV प्राप्त।" - मैं गलत क्या मिला? मुझे एमएसआर में सक्षम हार्डवेयर अपवादों को थोड़ा सा नहीं मिला है लेकिन मैनुअल का कहना है कि आप इन अपवादों को किसी भी मामले में मास्क नहीं कर सकते हैं, इसलिए यह मुद्दा नहीं होना चाहिए।
अधिक जानकारी मैं नहीं किसी भी अपवाद हैंडलिंग कोड के (जैसे, मिसलिग्न्मेंट अपवाद सहित) निष्पादित करने के लिए, या नहीं, मैं डिबगर का उपयोग कर रहा प्राप्त कर सकते हैं (जब तक मैं स्पष्ट रूप से इसे कहते हैं)। डिबगर बंद के साथ मैं (मैं केवल परीक्षण पता बदल एनबी - वहाँ ऊपर 0xA000000 और 0x100000 के बीच अंतर में कोई महत्व नहीं है) OVPsim से उत्पादन मिलता है:
Processor Exception (PC_PRX) Processor 'platform/cpu0' 0x248: sw r20, r12, r0
Processor Exception (PC_WPX) No write access at 0xa000000
यह सब कोड विशेषाधिकार प्राप्त मोड में चलाया जा रहा है, तो मैं इसके लिए कोई अति कारण नहीं देख सकता हूं कि हैंडलर को कॉल न करें, जब तक मैंने माइक्रोब्लैज को ठीक से कॉन्फ़िगर नहीं किया है। मैं इन चालू कर दी है:
icmAddStringAttr(cpu1_attr, "endian", "big");
icmAddDoubleAttr(cpu1_attr, "mips", 100.000000);
icmAddStringAttr(cpu1_attr, "variant", "V8_20");
icmAddBoolAttr(cpu1_attr, "verbose", "true");
icmAddUns32Attr(cpu1_attr, "C_PVR", 2);
icmAddUns32Attr(cpu1_attr, "C_USE_MMU", 3);
icmAddStringAttr(cpu1_attr, "C_USE_BARREL", "1");
icmAddStringAttr(cpu1_attr, "C_USE_DIV", "1");
icmAddUns32Attr(cpu1_attr, "C_USE_INTERRUPT", 1);
icmAddUns32Attr(cpu1_attr, "C_MMU_TLB_ACCESS", 3);
icmAddUns32Attr(cpu1_attr, "C_UNALIGNED_EXCEPTIONS", 1);
icmAddUns32Attr(cpu1_attr, "C_ILL_OPCODE_EXCEPTION", 1);
icmAddUns32Attr(cpu1_attr, "C_DIV_ZERO_EXCEPTION", 1);
icmAddUns32Attr(cpu1_attr, "C_OPCODE_0x0_ILLEGAL", 1);
icmAddUns32Attr(cpu1_attr, "C_DEBUG_ENABLED", 1);
वहाँ विश्वास करने के लिए के रूप में OVPsim Microblaze पर लिनक्स चलेगा यह काम नहीं करेगा कोई कारण नहीं है।
आप माइक्रोब्लॉज़ कॉन्फ़िगरेशन ठीक दिखता है। एम्यूलेटर का उत्पादन थोड़ा अजीब दिखता है। "नो राइट एक्सेस" अपवाद का अर्थ यह हो सकता है कि संबंधित पृष्ठ टीएलबी में पाया गया था लेकिन इसमें कोई लेखन पहुंच सक्षम नहीं है। आपको इस मामले में भी अपवाद देखना चाहिए। 'एमएसआर' में' ईई' बिट सेट करने का प्रयास करें, हालांकि, अगर उसके ओवीपीसिम कार्यान्वयन गलत है। – dkz
मेरे पास पहले से ही ईई बिट सेट है :( एमएसआर 0x2502 – adrianmcmenamin
माइक्रोबलाज़ पैरामीटर 'C_MMU_ZONES = 2' सेट करने के लिए बस एक और सुझाव है। भले ही आप सुरक्षा क्षेत्र का उपयोग नहीं कर रहे हों, जब यह पैरामीटर 0 माइक्रोब्लेज़ कोड उत्पन्न नहीं करता है या डेटा एक्सेस अपवाद। – dkz