Mit nativem XLS prüfen, auswerten und RTL erzeugen

Prüfen Sie DSLX oder XLS IR, werten Sie Vektoren aus, optimieren Sie IR, erzeugen Sie SystemVerilog und speichern Sie das Ergebnis eines lokalen Jobs.

Verwenden Sie Altifigence CLI 0.1.9 unter Linux für Inline-Funktionen in DSLX und XLS IR. Lesen Sie zuerst mit alti xls capabilities die vom installierten Runner unterstützten Operationen. Diese Beispiele wählen das CPU-Backend.

Eine Funktion auswerten

Speichern Sie diese Anfrage als eval.json. Die Eingabewerte folgen der Parameterreihenfolge der Funktion.

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

Das Ergebnis hat den Status "succeeded" und diese Ausgaben:

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

Die erste Summe wird auf die 8-Bit-Breite der Funktion zurückgeführt. Das Ergebnis enthält die Anfrage, Parameterbreiten sowie Hashwerte von Quelltext und Anfrage. Native Anfragen akzeptieren Funktionen mit 1–64 Bit und bis zu 256 Vektoren. Begrenzen Sie den Inline-Quelltext auf 8192 Bytes und die Anfrage auf 16384 Bytes.

Prüfen und optimieren

Kopieren Sie eval.json nach check.json. Setzen Sie operation auf "check" und vectors auf []. Speichern Sie eine zweite Kopie als optimize.json mit operation "optimize" und vectors [].

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

Check gibt die Informationen zur geparsten Funktion zurück. Optimize faltet Konstanten und entfernt ungenutzte reine Knoten. Lesen Sie compilation.ir und compilation.ir_top für die optimierte IR und den Einstiegspunkt. Setzen Sie diese Werte zur Auswertung in eine neue Anfrage mit input_kind "xls-ir" ein.

SystemVerilog erzeugen

Speichern Sie diese Anfrage als 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

Lesen Sie compilation.system_verilog für die RTL und compilation.rtl_top für das oberste Modul. Diese Anfrage erzeugt xls_pipeline mit latency_cycles 2 und der Schnittstelle "synchronous-reset-valid-delay". Wählen Sie 1 bis 16 Ausgangsregisterstufen. Lassen Sie pipeline für kombinatorische RTL weg; das oberste Modul heißt dann xls_top.

Einen lokalen Job ausführen und erneut öffnen

Speichern Sie diese vollständige CPU-Job-Anfrage als job.json. Ihr Hashwert bindet die eingebettete XLS-Anfrage.

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

Ein erfolgreiches Ergebnis enthält result.status "succeeded", das Artefakt und dessen Referenz in result.outputs. Kopieren Sie dessen artifact_id nach ARTIFACT_ID, um das Ergebnis erneut zu öffnen und wiederzugeben:

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

Bei einer direkten Operationsanfrage können Sie Ergebnisse auch mit folgenden Befehlen speichern und auflisten:

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

Eine Anfrage korrigieren

Bei einer 8-Bit-Eingabe führt "256" zu invalid-input. Ersetzen Sie den Wert durch ein Bitmuster im gültigen Bereich, etwa "255", und versuchen Sie es erneut. Setzen Sie bei "command and request operation differ" die JSON-operation auf den ausgeführten Befehl. Check, optimize und codegen verwenden vectors []; eine Auswertung enthält mindestens einen Vektor.

Aktualisieren Sie bei "XLS request digest differs" den SHA-256-Wert der Job-Eingabe passend zur kompakten UTF-8-JSON-Serialisierung der eingebetteten Anfrage in dieser Feldreihenfolge: schema, operation, input_kind, source, top, backend, vectors und anschließend pipeline, falls angegeben. Führen Sie den korrigierten Job erneut aus.

Ein Job, dessen optionale deadline_unix_ms verstrichen ist, gibt cancelled mit Exit-Code 3 zurück. Verwenden Sie eine zukünftige Frist oder lassen Sie die optionale Frist vor dem erneuten Versuch weg.

Erster Erfolg mit der CLI