在本地检查、重命名和审查SystemVerilog
为已保存的SystemVerilog建立索引,通过已审查的计划查找并重命名符号,审查立即断言,并读取参考目录。
在Linux上使用Altifigence CLI 0.1.9,检查本地项目中已保存的SystemVerilog文件,通过已审查的计划重命名符号,审查立即断言,并读取SVA和约束随机参考目录。
为已保存的源文件建立索引
此示例请使用全新的本地项目,其中包含一个已保存的SystemVerilog文件。请以普通用户身份运行命令。
set -euo pipefail
WORK="$(mktemp -d)"
mkdir -p "$WORK/project/rtl"
PROJECT="$(cd "$WORK/project" && pwd -P)"
cat > "$PROJECT/rtl/top.sv" <<'SV'
module child(input logic a, output logic y);
assign y = a;
endmodule
module top(input logic a, output logic y);
child u_child(.a(a), .y(y));
endmodule
SV
alti sv frontend index --project "$PROJECT" rtl/top.sv > "$WORK/index.json"
jq '{schemaVersion, files, modules: [.modules[].name], diagnostics}' "$WORK/index.json"请确认退出状态为0。索引的schemaVersion为sv-index.v1。files中的每个条目都有path、bytes和lineCount。每个模块都有其ports、params、instances和loc。
查找定义及其引用
位置使用从1开始的行号和列号。第1行第8列是名称child。
alti sv frontend definition --project "$PROJECT" rtl/top.sv 1 8 \
> "$WORK/definition.json"
alti sv frontend references --project "$PROJECT" rtl/top.sv 1 8 \
> "$WORK/references.json"
jq '{schemaVersion, definition}' "$WORK/definition.json"
jq '{schemaVersion, references: [.references[].loc]}' "$WORK/references.json"定义结果的schemaVersion为sv-definition.v1,包含query、symbol和definition。引用结果的schemaVersion为sv-references.v1,并包含一个references列表。每个已定位的符号都有name、kind和一个带有path、line和column的loc。要跨文件解析符号,请在列号之后列出其他已保存的文件。
通过已审查的计划重命名
请创建一个将child重命名为leaf的计划。创建计划不会更改文件。
alti sv frontend rename-plan --project "$PROJECT" rtl/top.sv 1 8 leaf \
> "$WORK/rename.plan.json"
jq '{schemaVersion, edits}' "$WORK/rename.plan.json"
PLAN_SHA256="$(jq -r .canonicalSha256 "$WORK/rename.plan.json")"计划的schemaVersion为sv-rename-plan.v1。每项编辑都有path、line、column、length和replacement。请审查每项编辑,然后使用已审查的canonicalSha256应用同一个重命名:
alti sv frontend rename-apply --project "$PROJECT" rtl/top.sv 1 8 leaf \
"$PLAN_SHA256" > "$WORK/rename.receipt.json"
jq '{schemaVersion, reviewedPlanSha256, appliedCurrentRequest}' \
"$WORK/rename.receipt.json"请确认退出状态为0,且appliedCurrentRequest等于true。回执的schemaVersion为sv-rename-apply.v1。应用步骤会根据项目中已保存的SystemVerilog文件重新构建计划,只有当该计划的摘要等于已审查的摘要时才会写入编辑。请针对项目中所有已保存的SystemVerilog文件创建计划,使两个计划涵盖相同的源文件。
审查立即断言
审查会从stdin读取一份SystemVerilog源码,并返回结构化的断言审查结果。
cat > "$WORK/check.sv" <<'SV'
module check(input logic [3:0] count);
always_comb begin
assert (count != 4'hf) else $error("count overflow");
end
endmodule
SV
alti sv review immediate < "$WORK/check.sv" > "$WORK/immediate.json"
jq . "$WORK/immediate.json"请确认退出状态为0,并读取审查结果。alti sv review interprocess以同样的方式读取其源码,并审查进程间同步。
读取参考目录
列出SVA目录条目并显示其中一条:
alti sv library sva list --limit 5 > "$WORK/sva.json"
jq '{schemaVersion, totalMatches, truncated, ids: [.entries[].stableId]}' "$WORK/sva.json"
ENTRY_ID="$(jq -r '.entries[0].stableId' "$WORK/sva.json")"
alti sv library sva show "$ENTRY_ID"两个目录的schemaVersion均为altifigence.sv-library-catalog.v1。列表包含resultLimit、totalAvailable、totalMatches、truncated和entries。每个条目都有stableId、category、name、summary、tags和attributes。对于--category,sva使用checker,constrained-random使用item或control。可以用1到128字节的--filter文本以及1到64的--limit来缩小列表范围。默认限制为64。请以同样的方式使用alti sv library constrained-random list和show。
请通过这些查询读取已编译的UVM桥接契约。alti sv uvm readiness返回已签名的固定组件就绪回执,不会加载或运行该组件。
alti sv uvm capabilities
alti sv uvm readiness处理错误
如果查询报告no symbol at rtl/top.sv:2:1,则表示该位置不在符号名称上。请从索引中的loc取一个行号和列号,然后重新运行查询。
如果rename-apply报告后面跟着两个摘要的reviewed SV rename plan changed: expected,则表示已保存的源文件不再生成已审查的计划。请重新运行rename-plan,审查新的编辑,并使用新的canonicalSha256应用。
如果rename-apply报告SV rename apply requires --project <absolute-workspace>,请添加--project "$PROJECT"并重新运行。
如果show报告未找到SV库条目,命令会以状态2退出。请从list结果中复制一个stableId,并重新运行show。
检查符号、悬停详细信息和补全
应用重命名之后,请使用同一个已保存的rtl/top.sv测试夹具检查其符号。symbols返回模块符号、引用和解析计数。symbols-v2还包含常量值、宽度和generate展开。
alti sv frontend symbols --project "$PROJECT" rtl/top.sv > "$WORK/symbols.json"
alti sv frontend symbols-v2 --project "$PROJECT" rtl/top.sv > "$WORK/symbols-v2.json"
jq '{schemaVersion, modules: [.modules[].name]}' "$WORK/symbols.json"
jq '{schemaVersion, modules: [.modules[].name]}' "$WORK/symbols-v2.json"{"schemaVersion":"sv-symbols.v1","modules":["leaf","top"]}
{"schemaVersion":"sv-symbols.v2","modules":["leaf","top"]}请在符号位置使用hover,并使用名称前缀调用complete。Hover包含所查询的符号及其定义;补全项包含label、kind和loc。
alti sv frontend hover --project "$PROJECT" rtl/top.sv 1 8 > "$WORK/hover.json"
alti sv frontend complete --project "$PROJECT" lea rtl/top.sv > "$WORK/complete.json"
jq '{schemaVersion}' "$WORK/hover.json"
jq '{schemaVersion, labels: ([.items[].label] | unique)}' "$WORK/complete.json"{"schemaVersion":"sv-hover.v1"}
{"schemaVersion":"sv-completion.v1","labels":["leaf"]}在使用返回的位置之前,请确认退出状态为0。如果该位置没有符号,请从返回的符号中选择一个loc并重试hover。如果complete报告前缀无效,请使用1到128字节的值,例如lea。
检查UVM环境和ABI契约
请将环境和ABI报告与能力和就绪报告一并保存。environment描述已签名组件的发现策略。abi列出已编译的C接口、返回代码、导出名称和参数类型。
alti sv uvm environment > "$WORK/uvm-environment.json"
alti sv uvm abi > "$WORK/uvm-abi.json"
jq '{schemaVersion, authority: .discovery.authority}' "$WORK/uvm-environment.json"
jq '{schemaVersion, callingConvention}' "$WORK/uvm-abi.json"{"schemaVersion":"altifigence.uvm-bridge-environment.v1","authority":"host-owned-signed-component-discovery"}
{"schemaVersion":"altifigence.uvm-bridge-abi.v1","callingConvention":"C"}审查UVM仿真请求契约
请查询仿真契约和就绪回执,然后使用admit验证已保存源文件的描述符及其资源上限。下面的示例将已保存的测试夹具用作单个源文件的描述符。请将返回的requestSha256与您已审查的描述符一并记录。
alti sv uvm simulation capabilities > "$WORK/uvm-simulation-capabilities.json"
alti sv uvm simulation readiness > "$WORK/uvm-simulation-readiness.json"
jq '{schema, admissionAvailable, preflightAvailable}' "$WORK/uvm-simulation-capabilities.json"{"schema":"altifigence.uvm-simulation-capabilities.v1","admissionAvailable":true,"preflightAvailable":true}BUNDLE_SHA256="$(sha256sum "$PROJECT/rtl/top.sv" | cut -d ' ' -f 1)"
SOURCE_BYTES="$(wc -c < "$PROJECT/rtl/top.sv")"
alti sv uvm simulation admit --bundle-id demo --bundle-sha256 "$BUNDLE_SHA256" \
--source-count 1 --source-bytes "$SOURCE_BYTES" \
--test smoke --top top --clock clk --period-ps 1000 --cycles 10 \
--max-wall-time-ms 1000 --max-cpu-cores 1 \
--max-memory-bytes 1048576 --max-artifact-bytes 1048576 > "$WORK/uvm-admission.json"
jq '{schema, admitted, sourceCount, cycleCount}' "$WORK/uvm-admission.json"{"schema":"altifigence.uvm-simulation-admission.v1","admitted":true,"sourceCount":1,"cycleCount":10}preflight还会验证尝试ID及其挂钟时间上限内的剩余时间。它返回该次尝试的准入结果、组件和DPI就绪状态,以及资源权限评估。请保存完整回执以供审查。
alti sv uvm simulation preflight --bundle-id demo --bundle-sha256 "$BUNDLE_SHA256" \
--source-count 1 --source-bytes "$SOURCE_BYTES" \
--test smoke --top top --clock clk --period-ps 1000 --cycles 10 \
--max-wall-time-ms 1000 --max-cpu-cores 1 \
--max-memory-bytes 1048576 --max-artifact-bytes 1048576 \
--attempt-id review-1 --observed-at-unix-ms 1000 --deadline-unix-ms 1500 \
> "$WORK/uvm-preflight.json"
jq '{schema, admitted: .admission.admitted}' "$WORK/uvm-preflight.json"{"schema":"altifigence.uvm-simulation-preflight.v1","admitted":true}对于source bundle digest must be lowercase SHA-256,请原样复制64位摘要。对于resource ceilings are outside v1 bounds,请查询capabilities并选择其最大值以内的正值。对于deadline is absent or exceeds the admitted wall-time ceiling,请设置正值的截止时间,且须在观测时间起max-wall-time-ms以内,然后重复preflight。上面的尝试时间戳是示例值。