使用原生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.jsonCheck會傳回剖析後的函式資訊。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。重試前,請改用未來的期限,或省略此選用期限。