Verificar, avaliar e gerar RTL com XLS nativo

Verifique DSLX ou XLS IR, avalie vetores, otimize IR, gere SystemVerilog e salve o resultado de uma tarefa local.

Use o Altifigence CLI 0.1.9 no Linux para trabalhar com funções DSLX e XLS IR incluídas na solicitação. Comece com alti xls capabilities para consultar as operações compatíveis com o executor instalado. Estes exemplos selecionam o backend de CPU.

Avaliar uma função

Salve esta solicitação como eval.json. Os valores de entrada seguem a ordem dos parâmetros da função.

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

O resultado tem status "succeeded" e estas saídas:

["bits[8]:0x0","bits[8]:0x13"]

A primeira soma dá a volta no limite de 8 bits da função. O resultado inclui a solicitação, as larguras dos parâmetros e os resumos do código-fonte e da solicitação. As solicitações nativas aceitam funções de 1 a 64 bits e até 256 vetores. Mantenha o código-fonte incluído em até 8192 bytes e a solicitação em até 16384 bytes.

Verificar e otimizar

Copie eval.json para check.json. Defina operation como "check" e vectors como []. Salve uma segunda cópia como optimize.json com operation "optimize" e vectors [].

alti xls check --request check.json
alti xls optimize --request optimize.json > optimized.json

Check retorna as informações da função analisada. Optimize resolve expressões constantes e remove nós puros não utilizados. Consulte compilation.ir e compilation.ir_top para obter o IR otimizado e o ponto de entrada. Para avaliá-lo, coloque esses valores em uma nova solicitação com input_kind "xls-ir".

Gerar SystemVerilog

Salve esta solicitação como 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

Consulte compilation.system_verilog para obter o RTL e compilation.rtl_top para obter seu módulo de topo. Esta solicitação produz xls_pipeline com latency_cycles 2 e interface "synchronous-reset-valid-delay". Escolha de 1 a 16 estágios de registradores de saída. Para RTL combinacional, omita pipeline; o módulo de topo será xls_top.

Executar uma tarefa local e reabrir o resultado

Salve esta solicitação completa de tarefa de CPU como job.json. Seu resumo vincula a solicitação XLS incluída.

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

Um resultado bem-sucedido inclui result.status "succeeded", o artefato e sua referência em result.outputs. Copie seu artifact_id para ARTIFACT_ID para reabrir e reproduzir o resultado:

alti xls artifact show --project /home/me/design ARTIFACT_ID

Para uma solicitação direta de operação, você também pode salvar e listar resultados com:

alti xls artifact store --project /home/me/design --request eval.json
alti xls artifact list --project /home/me/design

Corrigir uma solicitação

Para uma entrada de 8 bits, "256" produz invalid-input. Substitua por um padrão de bits dentro do intervalo, como "255", e tente novamente. Para "command and request operation differ", defina operation no JSON de acordo com o comando em execução. Check, optimize e codegen usam vectors []; a avaliação contém pelo menos um vetor.

Para "XLS request digest differs", atualize o SHA-256 da entrada da tarefa para corresponder à serialização JSON compacta em UTF-8 da solicitação incluída, nesta ordem de campos: schema, operation, input_kind, source, top, backend, vectors e, por último, pipeline, quando fornecido. Execute a tarefa corrigida novamente.

Uma tarefa cujo deadline_unix_ms opcional já passou retorna cancelled com código de saída 3. Use um prazo futuro ou omita o prazo opcional antes de tentar novamente.

Primeiro uso da CLI