네이티브 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가 지난 작업은 cancelled와 종료 코드 3을 반환합니다. 다시 시도하기 전에 미래 시각의 기한을 사용하거나 선택 항목인 기한을 생략하세요.

CLI 첫 실행