CX का एलेबोरेशन करें और डिकोडर निर्यात करें

एक छोटी सहेजी गई CX निर्देश परिभाषा को डिकोडर और Markdown संदर्भ में बदलें।

Linux पर Altifigence CLI 0.1.9, ISA प्रक्रियाओं के लिए मानक इनपुट से मूल CX स्रोत पढ़ती है। एक ADD निर्देश से शुरुआत करें ताकि आप निर्देश का प्रारूप, रजिस्टर ऑपरेंड, एन्कोडिंग और निष्पादन व्यंजक साथ जाँच सकें। निम्न स्रोत को अपनी कार्य निर्देशिका में add.cx के रूप में सहेजें। रजिस्टर फ़ाइल में 32 रजिस्टर हैं, प्रत्येक की चौड़ाई 32 बिट है, और x0 पढ़ने पर शून्य मिलता है।

सहेजा गया परिणाम पढ़ने से पहले निकास स्थिति 0 होना आवश्यक है। मानक त्रुटि को अलग रखें और नीचे वर्णित परिणाम फ़ील्ड की जाँच करें।

एक CX निर्देश सहेजें

arch CX-Core {
    word = 32 bits
    address = 32 bits
    endian = little
}
regfile gpr {
    count = 32
    width = 32 bits
    x0 = hardwired 0
}
format R = 32 bits {
    funct7 @ 31..25
    rs2 @ 24..20
    rs1 @ 19..15
    funct3 @ 14..12
    rd @ 11..7
    opcode @ 6..0
}
operand gpr (5 bits) {
    reads gpr[@]
    writes gpr[@]
    asm "x{@}"
}
instruction ADD uses R {
    reads rs1, rs2 : gpr
    writes rd : gpr
    encode opcode=0b0110011, funct3=0b000, funct7=0b0000000
    asm "add {rd}, {rs1}, {rs2}"
    exec rd <- rs1 +wrap rs2
}

R प्रारूप प्रत्येक एन्कोडिंग फ़ील्ड को स्पष्ट बिट रेंज देता है। ADD, opcode, funct3 और funct7 के मान निश्चित करता है, जबकि स्रोत और गंतव्य रजिस्टर अपने नामित फ़ील्ड में रहते हैं। उसकी असेंबली अभिव्यक्ति में ऑपरेंड प्रारूप x के बाद रजिस्टर का इंडेक्स आता है। एलेबोरेशन और दोनों निर्यात के लिए इस स्रोत फ़ाइल को साझा इनपुट के रूप में रखें।

एलेबोरेशन और निर्यात करें

alti isa elaborate < add.cx
alti isa export-decoder --language sv < add.cx > decoder-result.txt
alti isa export-reference --format md --title "ADD reference" < add.cx > reference-result.txt

पहले एलेबोरेशन चलाएँ और निर्यात करने से पहले जाँचें कि उसके JSON परिणाम में ok: true है। स्रोत की त्रुटियाँ diagnostics में ok: false के साथ दिखाई देती हैं। डिकोडर निर्यात SystemVerilog चुनता है; संदर्भ निर्यात Markdown चुनता है। कमांड के सहेजे गए आउटपुट में जाँच के लिए उत्पन्न परिणाम होता है। इन परिणामों के साथ add.cx रखें ताकि बाद के बदलावों का पता उनके स्रोत तक लगाया जा सके। यदि एलेबोरेशन ok: false बताए, तो उसके निदान से उस फ़ाइल को ठीक करें, एलेबोरेशन दोहराएँ और सुधारे गए संस्करण से दोनों आउटपुट फिर से बनाएँ।

निर्यात परिणाम की जाँच करें

डिकोडर आउटपुट एक JSON निर्यात परिणाम है। ये चुनिंदा फ़ील्ड उत्पन्न फ़ाइल की पहचान करते हैं; content में उसका SystemVerilog पाठ होता है। संदर्भ परिणाम filename cx_reference.md उपयोग करता है और content में Markdown पाठ रखता है।

{"schema":"cx-export/1","ok":true,"kind":"decoder","format":"sv","filename":"cx_decoder.sv","mime_type":"text/x-systemverilog","word_bits":32,"instruction_count":1}

यदि SystemVerilog निर्यात में --disassembler जोड़ने पर त्रुटि disassembler export supports C and Rust मिले, तो --disassembler हटाएँ और दिखाई गई SystemVerilog कमांड दोहराएँ।