Kiểm tra, đánh giá và tạo RTL bằng XLS gốc

Kiểm tra DSLX hoặc XLS IR, đánh giá các vector, tối ưu hóa IR, tạo SystemVerilog và lưu kết quả công việc cục bộ.

Dùng Altifigence CLI 0.1.9 trên Linux để làm việc với các hàm DSLX và XLS IR viết trực tiếp trong yêu cầu. Bắt đầu bằng alti xls capabilities để xem các thao tác mà trình chạy đã cài đặt hỗ trợ. Các ví dụ này chọn backend CPU.

Đánh giá hàm

Lưu yêu cầu này thành eval.json. Các giá trị đầu vào tuân theo thứ tự tham số của hàm.

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

Kết quả có status là "succeeded" và các đầu ra sau:

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

Tổng đầu tiên tràn và quay vòng theo độ rộng 8 bit của hàm. Kết quả bao gồm yêu cầu, độ rộng tham số và mã băm của mã nguồn và yêu cầu. Yêu cầu gốc chấp nhận hàm từ 1 đến 64 bit và tối đa 256 vector. Giữ mã nguồn viết trực tiếp trong giới hạn 8192 byte và yêu cầu trong giới hạn 16384 byte.

Kiểm tra và tối ưu hóa

Sao chép eval.json thành check.json. Đặt operation thành "check" và vectors thành []. Lưu bản sao thứ hai thành optimize.json với operation là "optimize" và vectors là [].

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

Check trả về thông tin hàm đã phân tích cú pháp. Optimize gấp hằng số và loại bỏ các nút thuần không được dùng. Đọc compilation.ir và compilation.ir_top để lấy IR đã tối ưu hóa và điểm vào. Để đánh giá, hãy đưa các giá trị đó vào yêu cầu mới với input_kind là "xls-ir".

Tạo SystemVerilog

Lưu yêu cầu này thành 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

Đọc compilation.system_verilog để lấy RTL và compilation.rtl_top để lấy mô-đun đỉnh. Yêu cầu này tạo xls_pipeline với latency_cycles là 2 và interface là "synchronous-reset-valid-delay". Chọn từ 1 đến 16 tầng thanh ghi đầu ra. Với RTL tổ hợp, hãy bỏ pipeline; mô-đun đỉnh là xls_top.

Chạy và mở lại công việc cục bộ

Lưu yêu cầu công việc CPU đầy đủ này thành job.json. Mã băm của yêu cầu ràng buộc yêu cầu XLS nhúng bên trong.

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

Kết quả thành công bao gồm result.status là "succeeded", sản phẩm đầu ra và tham chiếu của sản phẩm trong result.outputs. Sao chép artifact_id của sản phẩm vào ARTIFACT_ID để mở lại và phát lại kết quả:

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

Với yêu cầu thao tác trực tiếp, bạn cũng có thể lưu và liệt kê kết quả bằng:

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

Sửa yêu cầu

Với đầu vào 8 bit, "256" tạo ra invalid-input. Thay bằng mẫu bit trong phạm vi, chẳng hạn "255", rồi thử lại. Nếu gặp "command and request operation differ", hãy đặt operation trong JSON khớp với lệnh đang chạy. check, optimize và codegen dùng vectors []; đánh giá phải có ít nhất một vector.

Nếu gặp "XLS request digest differs", hãy cập nhật SHA-256 của đầu vào công việc để khớp với yêu cầu nhúng được tuần tự hóa thành JSON UTF-8 gọn theo thứ tự trường: schema, operation, input_kind, source, top, backend, vectors, rồi pipeline nếu được cung cấp. Chạy lại công việc đã sửa.

Công việc có deadline_unix_ms tùy chọn đã hết hạn trả về cancelled với mã thoát 3. Dùng thời hạn trong tương lai hoặc bỏ thời hạn tùy chọn trước khi thử lại.

Thao tác thành công đầu tiên với CLI