使用原生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首次成功操作