Установка и запуск закреплённого набора инструментов upstream XLS
Установите закреплённый релиз upstream XLS, проверьте его охват и запустите тесты модулей DSLX и генерацию SystemVerilog.
Используйте Altifigence CLI 0.1.9 в Linux x86_64, чтобы установить один закреплённый релиз набора инструментов upstream XLS и запускать с ним многофайловые проекты DSLX. CLI проверяет релиз перед каждым использованием.
Установка набора инструментов
Выберите новую папку установки и новый файл конфигурации в существующей папке. Оба пути должны быть абсолютными и ещё не должны существовать. Выполняйте команды от имени обычного пользователя.
set -euo pipefail
TOOLS="$HOME/alti-tools"
mkdir -p "$TOOLS"
alti xls upstream install \
--destination "$TOOLS/xls-upstream" \
--toolchain-config "$TOOLS/xls-upstream.json" > "$TOOLS/xls-install.json"
jq '{schema, status, license_files}' "$TOOLS/xls-install.json"Убедитесь, что код завершения равен 0. Выбранные поля результата имеют следующие значения:
{
"schema": "altifigence.xls.upstream-install.v1",
"status": "succeeded",
"license_files": [
"LICENSE",
"THIRD_PARTY_NOTICES.txt"
]
}install скачивает архив релиза xls-v0.0.0-10617-geb3151083-linux-x64.tar.gz по HTTPS с помощью /usr/bin/curl и проверяет его SHA-256 de9a5570f406d0865a159602180de1ac70e04cd51cfb808ead1f87549e56a4be. Он распаковывает архив с помощью /usr/bin/tar и /usr/bin/gzip, затем проверяет SHA-256 каждого из пяти инструментов и перечень стандартной библиотеки. Он сохраняет файлы лицензий релиза и записывает конфигурацию только после успешного прохождения этих проверок. Папка установки доступна только вашему пользователю. Размер архива может достигать 134217728 байт, размер промежуточной установки — 536870912 байт, а дочерние процессы используют общий срок в 300 секунд.
Чтобы установить из копии того же архива, которая у вас уже есть, добавьте --archive с абсолютным путём к ней. Применяется та же проверка SHA-256.
Чтение охвата
CONFIG="$HOME/alti-tools/xls-upstream.json"
alti xls upstream capabilities --toolchain-config "$CONFIG" > "$HOME/alti-tools/xls-capabilities.json"
jq '{schema, operations, input_kinds}' "$HOME/alti-tools/xls-capabilities.json"capabilities — это запрос. Он повторно сверяет установленные инструменты с закреплённым релизом и сообщает, что можно запросить. Для описанной выше установки выбранные поля имеют следующие значения:
{
"schema": "altifigence.xls.upstream-capabilities.v1",
"operations": ["check", "eval", "convert", "optimize", "codegen"],
"input_kinds": {
"dslx": ["check", "eval", "convert", "optimize", "codegen"],
"xls-ir": ["check", "optimize", "codegen"]
}
}identity перечисляет релиз, ревизию исходного кода, SHA-256 архива, значения SHA-256 инструментов и SHA-256 стандартной библиотеки. limits задаёт границы для запроса, исходного кода, файлов, вывода, результата, времени и конвейера.
Запуск тестов модулей
Запрос содержит каждый модуль в files с ключом — относительным путём, оканчивающимся на .x. entry называет модуль для запуска. Сохраните этот запрос как tests.json:
{
"schema": "altifigence.xls.upstream-request.v1",
"operation": "eval",
"input_kind": "dslx",
"entry": "main.x",
"files": {
"adder.x": "pub fn add(x: u8, y: u8) -> u8 { x + y }\n",
"main.x": "import adder;\n\n#[test]\nfn wraps() {\n assert_eq(adder::add(u8:255, u8:1), u8:0);\n}\n"
}
}Создайте рабочую папку для запуска, затем запустите запрос:
mkdir -p "$HOME/alti-work/xls"
alti xls upstream run --toolchain-config "$CONFIG" \
--work-root "$HOME/alti-work/xls" --request tests.json > tests.result.json
jq '{schema, status, operation, tests_executed}' tests.result.jsonПосле завершения с кодом 0 выбранные поля результата имеют следующие значения:
{
"schema": "altifigence.xls.upstream-result.v1",
"status": "succeeded",
"operation": "eval",
"tests_executed": 1
}eval запускает тестовые функции и тестовые proc входного модуля. Каждый запуск использует новую закрытую папку внутри рабочей папки и затем удаляет её. processes записывает каждый инструмент с его SHA-256, аргументами, кодом завершения и выводом. Используйте операцию check, чтобы разобрать входной модуль и его импорты и проверить их типы. Размер запроса не должен превышать 2097152 байт, число файлов — 64, а размер исходного кода — 1048576 байт.
Генерация SystemVerilog
Сохраните этот запрос как codegen.json. top называет функцию DSLX для генерации:
{
"schema": "altifigence.xls.upstream-request.v1",
"operation": "codegen",
"input_kind": "dslx",
"entry": "adder.x",
"top": "add",
"pipeline_stages": 2,
"files": {
"adder.x": "pub fn add(x: u8, y: u8) -> u8 { x + y }\n"
}
}alti xls upstream run --toolchain-config "$CONFIG" \
--work-root "$HOME/alti-work/xls" --request codegen.json > codegen.result.json
jq '.artifacts | keys' codegen.result.json
jq -r '.artifacts["module.sv"].text' codegen.result.json > module.svПосле завершения с кодом 0 имена артефактов следующие:
[
"converted.ir",
"interface.textproto",
"module.sv",
"optimized.ir",
"schedule.textproto",
"signature.textproto"
]Каждый артефакт содержит sha256, bytes и text. Этот запрос генерирует модуль xls_top со сбросом rst. Выберите от 1 до 64 ступеней конвейера или опустите pipeline_stages, чтобы получить комбинационный SystemVerilog. Используйте операцию convert, чтобы остановиться после converted.ir и interface.textproto, или optimize, чтобы остановиться после optimized.ir.
Исправление установки или запуска
Когда движок XLS возвращает ошибку, команда завершается с кодом 2 и записывает объект altifigence.xls.error.v1 в стандартный вывод. CLI сообщает о пустом или слишком большом запросе либо относительном пути хоста в стандартном потоке ошибок с префиксом error: и завершается с кодом 1. При ошибке движка XLS прочитайте её код и сообщение:
jq -r '.error.code + ": " + .error.message' tests.result.jsonПри install-conflict: installation destination must not exist или install-conflict: toolchain config must not exist выберите новые пути. Неудачная установка удаляет созданные ею папку и конфигурацию.
При toolchain-mismatch: archive SHA256 does not match pinned official release передайте исходный архив релиза с помощью --archive или опустите --archive, чтобы скачать его.
При toolchain-mismatch: configuration does not identify the supported pinned XLS release передайте файл конфигурации, который записал install.
При io-error: work root does not exist создайте рабочую папку и запустите команду снова.
При no-tests: upstream eval requires at least one executed test or test proc добавьте функцию #[test] во входной модуль.
При invalid-request: check/eval operate on the entry module, not a selected top удалите top. При invalid-request: DSLX optimize/codegen require a concrete top добавьте top.
При upstream-failed сообщение называет инструмент и начинает его диагностический вывод. Исправьте модуль в указанном месте и запустите команду снова.