在本機檢查、重新命名並檢閱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。可用--filter(1到128位元組的文字)及--limit(1到64)縮小清單範圍。預設上限為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。上述嘗試的時間戳記是示意值。

CLI 引擎指令