Элаборация CX и экспорт декодера

Преобразуйте небольшое сохранённое определение инструкции CX в декодер и справочник Markdown.

Altifigence CLI 0.1.9 в Linux читает исходный код в собственном формате CX из стандартного потока ввода для операций ISA. Начните с одной инструкции 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. Результат экспорта справочника использует имя файла cx_reference.md и содержит текст Markdown в 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}

Если добавление --disassembler к экспорту SystemVerilog приводит к ошибке disassembler export supports C and Rust, удалите --disassembler и повторите показанную команду SystemVerilog.