Проверка, вычисление и генерация 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.json

Check возвращает информацию о разобранной функции. 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.json

RTL находится в 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. Перед повторной попыткой укажите срок в будущем или опустите необязательный срок.

Первый запуск CLI