Установка и запуск закреплённого набора инструментов 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 сообщение называет инструмент и начинает его диагностический вывод. Исправьте модуль в указанном месте и запустите команду снова.

Команды движков CLI