Элаборация 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.