Élaborer du CX et exporter un décodeur

Transformez une petite définition d’instruction CX enregistrée en décodeur et en référence Markdown.

Altifigence CLI 0.1.9 sous Linux lit le source CX natif depuis l’entrée standard pour les opérations ISA. Commencez par une seule instruction ADD afin d’examiner ensemble le format d’instruction, les opérandes de registre, l’encodage et l’expression d’exécution. Enregistrez le source suivant dans add.cx, dans votre répertoire de travail. Le banc de registres contient 32 registres de 32 bits chacun, et la lecture de x0 renvoie 0.

Exigez un statut de sortie 0 avant de lire un résultat enregistré. Conservez la sortie d’erreur standard séparément et examinez les champs du résultat décrits ci-dessous.

Enregistrer une instruction 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
}

Le format R attribue à chaque champ d’encodage une plage de bits explicite. ADD fixe les valeurs opcode, funct3 et funct7, tandis que les registres source et destination occupent leurs champs nommés. Sa notation assembleur utilise le format d’opérande x suivi de l’indice du registre. Conservez ce fichier source comme entrée commune pour l’élaboration et les deux exports.

Élaborer et exporter

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

Exécutez d’abord l’élaboration et vérifiez que son résultat JSON contient ok: true avant d’exporter. Les erreurs de source figurent dans diagnostics avec ok: false. L’export du décodeur sélectionne SystemVerilog ; l’export de référence sélectionne Markdown. La sortie de commande enregistrée contient le résultat généré pour inspection. Conservez add.cx à côté de ces résultats afin de pouvoir rattacher les modifications ultérieures à leur source. Si l’élaboration signale ok: false, utilisez son diagnostic pour corriger ce fichier, répétez l’élaboration et régénérez les deux sorties depuis la version corrigée.

Examiner le résultat de l’export

La sortie du décodeur est un résultat d’export JSON. Ces champs sélectionnés identifient le fichier généré ; content contient son texte SystemVerilog. Le résultat de référence utilise filename cx_reference.md et contient le texte Markdown dans content.

{"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}

Si l’ajout de --disassembler à l’export SystemVerilog produit l’erreur disassembler export supports C and Rust, supprimez --disassembler et répétez la commande SystemVerilog présentée.