使用原生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。重试前,请使用未来的截止时间,或省略此可选截止时间。