Проверка, вычисление и генерация RTL с помощью нативного XLS
Проверяйте DSLX или XLS IR, вычисляйте векторы, оптимизируйте IR, генерируйте SystemVerilog и сохраняйте результат локальной задачи.
Используйте Altifigence CLI 0.1.9 в Linux для работы со встроенными в запрос функциями DSLX и XLS IR. Начните с alti xls capabilities, чтобы узнать, какие операции поддерживает установленный исполнитель. В этих примерах выбран бэкенд CPU.
Вычисление функции
Сохраните этот запрос как eval.json. Входные значения следуют порядку параметров функции.
{
"schema": "altifigence.xls.operation-request.v1",
"operation": "eval",
"input_kind": "dslx",
"source": "fn compute(x: u8, y: u8) -> u8 { x + y }",
"top": "compute",
"backend": "cpu",
"vectors": [
[
"255",
"1"
],
[
"0x10",
"0b11"
]
]
}alti xls eval --request eval.jsonРезультат имеет status "succeeded" и следующие выходные значения:
["bits[8]:0x0","bits[8]:0x13"]Первая сумма циклически переходит через границу 8-битной разрядности функции. Результат содержит запрос, разрядности параметров, а также дайджесты исходного кода и запроса. Нативные запросы принимают функции разрядностью от 1 до 64 бит и до 256 векторов. Размер встроенного исходного кода должен быть не более 8192 байт, а запроса — не более 16384 байт.
Проверка и оптимизация
Скопируйте eval.json в check.json. Установите operation в "check", а vectors в []. Сохраните вторую копию как optimize.json со значением operation "optimize" и vectors [].
alti xls check --request check.json
alti xls optimize --request optimize.json > optimized.jsonCheck возвращает информацию о разобранной функции. Optimize выполняет свёртку констант и удаляет неиспользуемые чистые узлы. Оптимизированный IR и точка входа находятся в compilation.ir и compilation.ir_top. Чтобы вычислить его, поместите эти значения в новый запрос с input_kind "xls-ir".
Генерация SystemVerilog
Сохраните этот запрос как codegen.json:
{
"schema": "altifigence.xls.operation-request.v1",
"operation": "codegen",
"input_kind": "dslx",
"source": "fn compute(x: u8, y: u8) -> u8 { x + y }",
"top": "compute",
"backend": "cpu",
"vectors": [],
"pipeline": {
"stages": 2
}
}alti xls codegen --request codegen.json > generated.jsonRTL находится в compilation.system_verilog, а его верхний модуль — в compilation.rtl_top. Этот запрос создаёт xls_pipeline со значением latency_cycles 2 и interface "synchronous-reset-valid-delay". Выберите от 1 до 16 ступеней выходных регистров. Для комбинационного RTL опустите pipeline; верхним модулем будет xls_top.
Запуск локальной задачи и повторное открытие результата
Сохраните этот полный запрос задачи CPU как job.json. Его дайджест связывает задачу со встроенным запросом XLS.
{
"schema": "altifigence.xls.job-request.v1",
"job": {
"schema": "altifigence.engine.job.v1",
"job_id": "xls-example",
"operation": {
"engine_id": "xls-engine",
"operation_id": "eval",
"contract_id": "altifigence.xls.operation-request.v1"
},
"execution_placement": "local",
"device_preference": {
"selection": {
"mode": "class",
"value": "cpu"
},
"fallback": "deny"
},
"resources": {
"cpu_slots": 1,
"memory_bytes": 1048576,
"device_slots": 0,
"device_memory_bytes": 0,
"max_wall_time_ms": 30000
},
"inputs": [
{
"artifact_id": "request",
"role": "xls-request",
"artifact_schema": "altifigence.xls.operation-request.v1",
"uri": "workspace://inputs/request.json",
"sha256": "fea82ea569518661ed34f31da0a1bd3df7387bd7d4b33e6c171a605bfe547325"
}
],
"cancellation": {
"cancellation_id": "xls-example-cancel"
}
},
"request": {
"schema": "altifigence.xls.operation-request.v1",
"operation": "eval",
"input_kind": "dslx",
"source": "fn compute(x: u8, y: u8) -> u8 { x + y }",
"top": "compute",
"backend": "cpu",
"vectors": [
[
"255",
"1"
],
[
"0x10",
"0b11"
]
]
}
}alti xls run --project /home/me/design --request job.jsonУспешный результат содержит result.status "succeeded", артефакт и ссылку на него в result.outputs. Скопируйте его artifact_id в ARTIFACT_ID, чтобы повторно открыть и воспроизвести результат:
alti xls artifact show --project /home/me/design ARTIFACT_IDДля прямого запроса операции также можно сохранять результаты и просматривать их список с помощью:
alti xls artifact store --project /home/me/design --request eval.json
alti xls artifact list --project /home/me/designИсправление запроса
Для 8-битного входа "256" приводит к invalid-input. Замените его битовым шаблоном в допустимом диапазоне, например "255", и повторите попытку. При сообщении "command and request operation differ" установите operation в JSON в соответствии с выполняемой командой. Check, optimize и codegen используют vectors []; для вычисления нужен хотя бы один вектор.
При сообщении "XLS request digest differs" обновите SHA-256 входа задачи, чтобы он соответствовал компактной сериализации встроенного запроса в JSON UTF-8 со следующим порядком полей: schema, operation, input_kind, source, top, backend, vectors, затем pipeline, если он указан. Запустите исправленную задачу ещё раз.
Задача, у которой истёк необязательный deadline_unix_ms, возвращает cancelled с кодом завершения 3. Перед повторной попыткой укажите срок в будущем или опустите необязательный срок.