使用原生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設為[]。再儲存一份為optimize.json,將operation設為"optimize",vectors設為[]。

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

Check會傳回剖析後的函式資訊。Optimize會折疊常數並移除未使用的純節點。請讀取compilation.ir和compilation.ir_top,以取得最佳化後的IR及進入點。若要對其求值,請將這些值填入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

請從compilation.system_verilog讀取RTL,從compilation.rtl_top讀取頂層模組。此請求會產生xls_pipeline,其latency_cycles為2,interface為"synchronous-reset-valid-delay"。請選擇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已過,會傳回cancelled,結束代碼為3。重試前,請改用未來的期限,或省略此選用期限。

CLI首次成功操作