Instalar e executar a cadeia de ferramentas XLS upstream fixada

Instale a versão upstream fixada do XLS, verifique sua cobertura e execute testes de módulos DSLX e a geração de SystemVerilog.

Use o Altifigence CLI 0.1.9 no Linux x86_64 para instalar uma versão fixada da cadeia de ferramentas XLS upstream e executar com ela projetos DSLX com vários arquivos. A CLI verifica a versão antes de cada uso.

Instalar a cadeia de ferramentas

Escolha uma nova pasta de instalação e um novo arquivo de configuração dentro de uma pasta existente. Os dois caminhos devem ser absolutos e ainda não devem existir. Execute os comandos com sua conta de usuário comum.

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"

Exija o status de saída 0. Os campos selecionados do resultado são:

{
  "schema": "altifigence.xls.upstream-install.v1",
  "status": "succeeded",
  "license_files": [
    "LICENSE",
    "THIRD_PARTY_NOTICES.txt"
  ]
}

install baixa o arquivo da versão xls-v0.0.0-10617-geb3151083-linux-x64.tar.gz por HTTPS com /usr/bin/curl e verifica seu SHA-256 de9a5570f406d0865a159602180de1ac70e04cd51cfb808ead1f87549e56a4be. Ele extrai o arquivo com /usr/bin/tar e /usr/bin/gzip e verifica o SHA-256 de cada uma das cinco ferramentas e o inventário da biblioteca padrão. Ele mantém os arquivos de licença da versão e grava a configuração somente depois que essas verificações passam. A pasta de instalação é privada para seu usuário. O arquivo pode ter até 134217728 bytes e a instalação preparada até 536870912 bytes; os processos filhos compartilham um prazo de 300 segundos.

Para instalar a partir de uma cópia do mesmo arquivo compactado que você já tem, adicione --archive com o caminho absoluto dele. A mesma verificação de SHA-256 se aplica.

Ler a cobertura

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 é uma consulta. Ela verifica novamente as ferramentas instaladas em relação à versão fixada e informa o que você pode solicitar. Para a instalação acima, os campos selecionados são:

{
  "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 lista a versão, a revisão do código-fonte, o SHA-256 do arquivo compactado, os valores de SHA-256 das ferramentas e o SHA-256 da biblioteca padrão. limits informa os limites de solicitação, código-fonte, arquivo, saída, resultado, tempo e pipeline.

Executar testes de módulos

Uma solicitação carrega todos os módulos em files, indexados por um caminho relativo que termina em .x. entry nomeia o módulo a executar. Salve esta solicitação como 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"
  }
}

Crie uma pasta de trabalho para a execução e, depois, execute a solicitação:

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

Após o status de saída 0, os campos selecionados do resultado são:

{
  "schema": "altifigence.xls.upstream-result.v1",
  "status": "succeeded",
  "operation": "eval",
  "tests_executed": 1
}

eval executa as funções de teste e os procs de teste do módulo de entrada. Cada execução usa uma nova pasta privada dentro da pasta de trabalho e a remove depois. processes registra cada ferramenta com seu SHA-256, argumentos, código de saída e saída. Use a operação check para analisar e verificar os tipos do módulo de entrada e de suas importações. Mantenha cada solicitação dentro de 2097152 bytes, com até 64 arquivos e 1048576 bytes de fonte.

Gerar SystemVerilog

Salve esta solicitação como codegen.json. top nomeia a função DSLX a ser gerada:

{
  "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

Após o status de saída 0, os nomes dos artefatos são:

[
  "converted.ir",
  "interface.textproto",
  "module.sv",
  "optimized.ir",
  "schedule.textproto",
  "signature.textproto"
]

Cada artefato tem sha256, bytes e text. Esta solicitação gera o módulo xls_top com o reset rst. Escolha de 1 a 64 estágios de pipeline ou omita pipeline_stages para SystemVerilog combinacional. Use a operação convert para parar depois de converted.ir e interface.textproto, ou optimize para parar depois de optimized.ir.

Corrigir uma instalação ou uma execução

Quando o mecanismo XLS retorna um erro, o comando termina com o status de saída 2 e grava um objeto altifigence.xls.error.v1 na saída padrão. A CLI informa uma solicitação vazia ou grande demais ou um caminho de host relativo no erro padrão com o prefixo error: e termina com o status de saída 1. Para um erro do mecanismo XLS, leia o código e a mensagem dele:

jq -r '.error.code + ": " + .error.message' tests.result.json

Para install-conflict: installation destination must not exist ou install-conflict: toolchain config must not exist, escolha novos caminhos. Uma instalação com falha remove a pasta e a configuração que criou.

Para toolchain-mismatch: archive SHA256 does not match pinned official release, passe o arquivo compactado original da versão com --archive ou omita --archive para baixá-lo.

Para toolchain-mismatch: configuration does not identify the supported pinned XLS release, passe o arquivo de configuração que install gravou.

Para io-error: work root does not exist, crie a pasta de trabalho e execute novamente.

Para no-tests: upstream eval requires at least one executed test or test proc, adicione uma função #[test] ao módulo de entrada.

Para invalid-request: check/eval operate on the entry module, not a selected top, remova top. Para invalid-request: DSLX optimize/codegen require a concrete top, adicione top.

Para upstream-failed, a mensagem nomeia a ferramenta e inicia a saída de diagnóstico dela. Corrija o módulo no local informado e execute novamente.

Comandos de engine da CLI