Elabore CX y exporte un decodificador

Convierta una pequeña definición de instrucción CX guardada en un decodificador y una referencia en Markdown.

Altifigence CLI 0.1.9 en Linux lee código fuente CX nativo desde la entrada estándar para las operaciones ISA. Comience con una sola instrucción ADD para poder inspeccionar juntos el formato de instrucción, los operandos de registro, la codificación y la expresión de ejecución. Guarde el código fuente siguiente como add.cx en su directorio de trabajo. El banco de registros contiene 32 registros de 32 bits cada uno, y x0 se lee como cero.

Exija un estado de salida 0 antes de leer un resultado guardado. Conserve la salida de error estándar por separado e inspeccione los campos del resultado descritos a continuación.

Guarde una instrucción 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
}

El formato R asigna a cada campo de codificación un intervalo de bits explícito. ADD fija los valores de opcode, funct3 y funct7, mientras que los registros de origen y destino ocupan los campos con sus respectivos nombres. Su sintaxis de ensamblador utiliza el formato de operando x seguido del índice del registro. Conserve este archivo fuente como entrada compartida para la elaboración y ambas exportaciones.

Elabore y exporte

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

Ejecute primero la elaboración y compruebe que su resultado JSON tenga ok: true antes de exportar. Los errores del código fuente aparecen en diagnostics con ok: false. La exportación del decodificador selecciona SystemVerilog; la exportación de la referencia selecciona Markdown. La salida guardada del comando contiene el resultado generado para su inspección. Conserve add.cx junto a estos resultados para poder rastrear los cambios posteriores hasta su origen. Si la elaboración informa de ok: false, utilice su diagnóstico para corregir ese archivo, repita la elaboración y vuelva a generar ambas salidas a partir de la versión corregida.

Inspeccione el resultado de la exportación

La salida del decodificador es un resultado de exportación JSON. Estos campos seleccionados identifican el archivo generado; content contiene su texto SystemVerilog. El resultado de la referencia utiliza filename cx_reference.md y contiene el texto Markdown en 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 al añadir --disassembler a la exportación SystemVerilog se produce el error disassembler export supports C and Rust, elimine --disassembler y repita el comando SystemVerilog mostrado.