Elaborar CX e exportar um decodificador

Transforme uma pequena definição de instrução CX salva em um decodificador e uma referência em Markdown.

O Altifigence CLI 0.1.9 no Linux lê o código-fonte CX nativo da entrada padrão para operações ISA. Comece com uma única instrução ADD para inspecionar juntos o formato da instrução, os operandos de registrador, a codificação e a expressão de execução. Salve o código-fonte a seguir como add.cx no seu diretório de trabalho. O banco de registradores contém 32 registradores, cada um com 32 bits de largura, e a leitura de x0 retorna zero.

Exija o status de saída 0 antes de ler um resultado salvo. Mantenha a saída de erro padrão separada e inspecione os campos do resultado descritos abaixo.

Salvar uma instrução 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
}

O formato R atribui um intervalo explícito de bits a cada campo de codificação. ADD fixa os valores de opcode, funct3 e funct7, enquanto os registradores de origem e destino ocupam seus campos nomeados. Sua representação em assembly usa o formato de operando x seguido do índice do registrador. Mantenha esse arquivo-fonte como entrada compartilhada para a elaboração e ambas as exportações.

Elaborar e exportar

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

Execute a elaboração primeiro e verifique se o resultado JSON contém ok: true antes de exportar. Erros no código-fonte aparecem em diagnostics com ok: false. A exportação do decodificador seleciona SystemVerilog; a exportação da referência seleciona Markdown. A saída salva do comando contém o resultado gerado para inspeção. Mantenha add.cx junto desses resultados para que alterações posteriores possam ser rastreadas até sua origem. Se a elaboração informar ok: false, use seu diagnóstico para corrigir esse arquivo, repita a elaboração e gere novamente ambas as saídas a partir da versão corrigida.

Inspecionar o resultado da exportação

A saída do decodificador é um resultado de exportação em JSON. Estes campos selecionados identificam o arquivo gerado; content contém seu texto SystemVerilog. O resultado da referência usa o filename cx_reference.md e contém o texto Markdown em 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 adicionar --disassembler à exportação SystemVerilog produzir o erro disassembler export supports C and Rust, remova --disassembler e repita o comando SystemVerilog mostrado.