Vérifier, évaluer et générer du RTL avec XLS natif

Vérifiez du DSLX ou du XLS IR, évaluez des vecteurs, optimisez l’IR, générez du SystemVerilog et enregistrez le résultat d’un job local.

Utilisez Altifigence CLI 0.1.9 sous Linux pour travailler avec des fonctions DSLX et XLS IR intégrées à la requête. Commencez par alti xls capabilities pour consulter les opérations prises en charge par l’exécuteur installé. Ces exemples sélectionnent le backend CPU.

Évaluer une fonction

Enregistrez cette requête sous eval.json. Les valeurs d’entrée suivent l’ordre des paramètres de la fonction.

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

Le résultat a le statut "succeeded" et les sorties suivantes :

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

La première somme est ramenée à la largeur de 8 bits de la fonction par débordement. Le résultat inclut la requête, les largeurs des paramètres et les empreintes de la source et de la requête. Les requêtes natives acceptent des fonctions de 1–64 bits et jusqu’à 256 vecteurs. Limitez la source intégrée à 8192 octets et la requête à 16384 octets.

Vérifier et optimiser

Copiez eval.json vers check.json. Définissez operation sur "check" et vectors sur []. Enregistrez une seconde copie sous optimize.json avec operation "optimize" et vectors [].

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

Check renvoie les informations de la fonction analysée. Optimize évalue les expressions constantes et supprime les nœuds purs inutilisés. Consultez compilation.ir et compilation.ir_top pour obtenir l’IR optimisée et son point d’entrée. Pour l’évaluer, insérez ces valeurs dans une nouvelle requête avec input_kind "xls-ir".

Générer du SystemVerilog

Enregistrez cette requête sous 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

Consultez compilation.system_verilog pour le RTL et compilation.rtl_top pour son module principal. Cette requête produit xls_pipeline avec latency_cycles 2 et l’interface "synchronous-reset-valid-delay". Choisissez de 1 à 16 étages de registres de sortie. Pour du RTL combinatoire, omettez pipeline ; le module principal est alors xls_top.

Exécuter et rouvrir un job local

Enregistrez cette requête complète de job CPU sous job.json. Son empreinte lie la requête XLS intégrée.

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

Un résultat réussi comprend result.status "succeeded", l’artefact et sa référence dans result.outputs. Copiez son artifact_id dans ARTIFACT_ID pour rouvrir et rejouer le résultat :

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

Pour une requête d’opération directe, vous pouvez également enregistrer et lister les résultats avec :

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

Corriger une requête

Pour une entrée de 8 bits, "256" produit invalid-input. Remplacez cette valeur par une configuration de bits dans la plage, comme "255", puis réessayez. Pour "command and request operation differ", définissez operation dans le JSON sur la commande exécutée. Check, optimize et codegen utilisent vectors [] ; l’évaluation contient au moins un vecteur.

Pour "XLS request digest differs", mettez à jour le SHA-256 de l’entrée du job afin qu’il corresponde à la sérialisation JSON compacte en UTF-8 de la requête intégrée dans cet ordre de champs : schema, operation, input_kind, source, top, backend, vectors, puis pipeline lorsqu’il est fourni. Relancez le job corrigé.

Un job dont l’échéance facultative deadline_unix_ms est dépassée renvoie cancelled avec le code de sortie 3. Utilisez une échéance future ou omettez l’échéance facultative avant de réessayer.

Premier résultat avec la CLI