Elaborare CX ed esportare un decoder

Trasforma una piccola definizione di istruzione CX salvata in un decoder e in un riferimento Markdown.

Altifigence CLI 0.1.9 su Linux legge il sorgente CX nativo dall'input standard per le operazioni ISA. Inizia con una singola istruzione ADD per poter ispezionare insieme il formato dell'istruzione, gli operandi registro, la codifica e l'espressione di esecuzione. Salva il sorgente seguente come add.cx nella directory di lavoro. Il banco di registri contiene 32 registri, ciascuno largo 32 bit, e la lettura di x0 restituisce zero.

Verifica che lo stato di uscita sia 0 prima di leggere un risultato salvato. Conserva separatamente l'output di errore standard e ispeziona i campi del risultato descritti di seguito.

Salvare un'istruzione 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
}

Il formato R assegna a ogni campo di codifica un intervallo di bit esplicito. ADD fissa i valori di opcode, funct3 e funct7, mentre i registri sorgente e destinazione occupano i rispettivi campi denominati. La sintassi assembly utilizza il formato dell'operando x seguito dall'indice del registro. Conserva questo file sorgente come input condiviso per l'elaborazione e per entrambe le esportazioni.

Elaborare ed esportare

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

Esegui prima l'elaborazione e verifica che il risultato JSON contenga ok: true prima di esportare. Gli errori nel sorgente compaiono in diagnostics con ok: false. L'esportazione del decoder seleziona SystemVerilog; l'esportazione del riferimento seleziona Markdown. L'output salvato del comando contiene il risultato generato da ispezionare. Conserva add.cx accanto a questi risultati per poter ricondurre le modifiche successive al relativo sorgente. Se l'elaborazione segnala ok: false, utilizza il messaggio diagnostico per correggere il file, ripeti l'elaborazione e rigenera entrambi gli output dalla versione corretta.

Ispezionare il risultato dell'esportazione

L'output del decoder è un risultato di esportazione JSON. Questi campi selezionati identificano il file generato; content contiene il relativo testo SystemVerilog. Il risultato del riferimento utilizza filename cx_reference.md e contiene il testo Markdown in 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}

Se l'aggiunta di --disassembler all'esportazione SystemVerilog produce l'errore disassembler export supports C and Rust, rimuovi --disassembler e ripeti il comando SystemVerilog mostrato.