ネイティブXLSで検査、評価、RTL生成を行う

DSLXまたはXLS IRを検査し、ベクトルを評価し、IRを最適化してSystemVerilogを生成し、ローカルジョブの結果を保存します。

Linux上のAltifigence CLI 0.1.9を使用して、インラインの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を[]に設定します。operationを"optimize"、vectorsを[]にした別のコピーをoptimize.jsonとして保存してください。

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で確認してください。このリクエストは、latency_cyclesが2でinterfaceが"synchronous-reset-valid-delay"のxls_pipelineを生成します。出力レジスター段数を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"の場合は、JSONのoperationを実行するコマンドに合わせてください。check、optimize、codegenではvectors []を使用し、評価には少なくとも一つのベクトルを含めます。

"XLS request digest differs"の場合は、ジョブ入力のSHA-256を、埋め込まれたリクエストをコンパクトなUTF-8 JSONでシリアライズした値に合わせて更新してください。フィールド順はschema、operation、input_kind、source、top、backend、vectors、指定されている場合は最後にpipelineです。修正したジョブをもう一度実行してください。

省略可能なdeadline_unix_msを過ぎたジョブは、終了コード3でcancelledを返します。再試行する前に、未来の期限を指定するか、省略可能な期限を省いてください。

CLIで最初の操作を成功させる