ネイティブ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.jsonCheckは解析済みの関数情報を返します。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.jsonRTLは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を返します。再試行する前に、未来の期限を指定するか、省略可能な期限を省いてください。