Menginspeksi, mengganti nama, dan meninjau SystemVerilog secara lokal

Indekskan SystemVerilog tersimpan, temukan dan ganti nama simbol melalui rencana yang ditinjau, tinjau assertion immediate, dan baca katalog referensi.

Gunakan Altifigence CLI 0.1.9 di Linux untuk menginspeksi file SystemVerilog tersimpan di proyek lokal, mengganti nama simbol melalui rencana yang ditinjau, meninjau assertion immediate, dan membaca katalog referensi SVA dan constrained-random.

Mengindeks file sumber tersimpan

Gunakan proyek lokal baru untuk contoh ini, dengan satu file SystemVerilog tersimpan. Jalankan perintah sebagai pengguna biasa.

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"

Pastikan status keluar adalah 0. Indeks memiliki schemaVersion sv-index.v1. Setiap entri di files memiliki path, bytes, dan lineCount. Setiap modul memiliki ports, params, instances, dan loc.

Menemukan definisi dan referensinya

Posisi menggunakan nomor baris dan kolom berbasis 1. Baris 1, kolom 8 adalah nama 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"

Hasil definisi memiliki schemaVersion sv-definition.v1 dengan query, symbol, dan definition. Hasil referensi memiliki schemaVersion sv-references.v1 dan daftar references. Setiap simbol yang ditemukan memiliki name, kind, dan loc dengan path, line, dan column. Untuk menyelesaikan simbol lintas file, cantumkan file tersimpan lainnya setelah kolom.

Mengganti nama dengan rencana yang ditinjau

Buat rencana yang mengganti nama child menjadi leaf. Membuat rencana tidak mengubah file.

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")"

Rencana memiliki schemaVersion sv-rename-plan.v1. Setiap edit memiliki path, line, column, length, dan replacement. Tinjau setiap edit, lalu terapkan penggantian nama yang sama dengan canonicalSha256 yang telah ditinjau:

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"

Pastikan status keluar adalah 0 dan appliedCurrentRequest sama dengan true. Tanda terima memiliki schemaVersion sv-rename-apply.v1. Langkah apply membangun ulang rencana dari file SystemVerilog tersimpan di proyek dan menulis edit hanya jika digest rencana itu sama dengan digest yang telah ditinjau. Buat rencana atas semua file SystemVerilog tersimpan di proyek agar kedua rencana mencakup file sumber yang sama.

Meninjau assertion immediate

Tinjauan ini membaca satu sumber SystemVerilog dari stdin dan mengembalikan tinjauan assertion terstruktur.

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"

Pastikan status keluar adalah 0 dan baca hasil tinjauan. alti sv review interprocess membaca sumbernya dengan cara yang sama dan meninjau sinkronisasi antarproses.

Membaca katalog referensi

Tampilkan daftar entri katalog SVA dan tampilkan salah satunya:

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"

Kedua katalog memiliki schemaVersion altifigence.sv-library-catalog.v1. Daftar memiliki resultLimit, totalAvailable, totalMatches, truncated, dan entries. Setiap entri memiliki stableId, category, name, summary, tags, dan attributes. Untuk --category, gunakan checker dengan sva, atau item atau control dengan constrained-random. Persempit daftar dengan teks --filter sepanjang 1 hingga 128 byte, dan dengan --limit dari 1 hingga 64. Batas bawaannya adalah 64. Gunakan alti sv library constrained-random list dan show dengan cara yang sama.

Baca kontrak bridge UVM terkompilasi dengan kueri berikut. alti sv uvm readiness mengembalikan tanda terima kesiapan komponen tetap yang ditandatangani tanpa memuat atau menjalankan komponen.

alti sv uvm capabilities
alti sv uvm readiness

Mengatasi kesalahan

Jika kueri melaporkan no symbol at rtl/top.sv:2:1, posisi itu bukan nama simbol. Ambil baris dan kolom dari loc di indeks lalu jalankan kueri lagi.

Jika rename-apply melaporkan reviewed SV rename plan changed: expected diikuti dua digest, file sumber tersimpan tidak lagi menghasilkan rencana yang telah ditinjau. Jalankan rename-plan lagi, tinjau edit baru, dan terapkan dengan canonicalSha256 yang baru.

Jika rename-apply melaporkan SV rename apply requires --project <absolute-workspace>, tambahkan --project "$PROJECT" lalu jalankan lagi.

Jika show melaporkan bahwa entri pustaka SV tidak ditemukan, perintah keluar dengan status 2. Salin stableId dari hasil list lalu jalankan show lagi.

Menginspeksi simbol, detail hover, dan pelengkapan

Setelah menerapkan penggantian nama, gunakan fixture rtl/top.sv tersimpan yang sama untuk menginspeksi simbolnya. symbols mengembalikan simbol modul, referensi, dan jumlah resolusi. symbols-v2 juga menyertakan nilai konstanta, lebar, dan ekspansi 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"]}

Gunakan hover pada lokasi simbol dan complete dengan prefiks nama. Hover menyertakan simbol yang dikueri dan definisinya; item pelengkapan menyertakan label, kind, dan 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"]}

Pastikan status keluar adalah 0 sebelum menggunakan lokasi yang dikembalikan. Jika tidak ada simbol pada suatu lokasi, pilih loc dari simbol yang dikembalikan lalu coba lagi hover. Jika complete melaporkan prefiks tidak valid, gunakan 1 hingga 128 byte, seperti lea.

Menginspeksi kontrak lingkungan UVM dan ABI

Simpan laporan lingkungan dan ABI bersama laporan kapabilitas dan kesiapan. environment menjelaskan kebijakan penemuan komponen yang ditandatangani. abi mencantumkan antarmuka C yang dikompilasi, kode pengembalian, nama ekspor, dan tipe parameter.

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"}

Meninjau kontrak permintaan simulasi UVM

Lakukan kueri kontrak simulasi dan tanda terima kesiapan, lalu validasi deskriptor file sumber tersimpan dan batas atas sumber dayanya dengan admit. Contoh di bawah menggunakan fixture tersimpan sebagai deskriptor satu file sumber. Catat requestSha256 yang dikembalikan bersama deskriptor yang Anda tinjau.

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 juga memvalidasi ID percobaan dan waktu yang tersisa dalam batas atas wall-time-nya. Perintah ini mengembalikan admission, kesiapan komponen dan DPI, serta penilaian otoritas sumber daya untuk percobaan tersebut. Simpan tanda terima lengkap untuk ditinjau.

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}

Untuk source bundle digest must be lowercase SHA-256, salin digest 64 digit tanpa perubahan. Untuk resource ceilings are outside v1 bounds, lakukan kueri capabilities dan pilih nilai positif dalam batas maksimumnya. Untuk deadline is absent or exceeds the admitted wall-time ceiling, tetapkan tenggat positif dalam max-wall-time-ms dari waktu pengamatan dan ulangi preflight. Stempel waktu percobaan di atas adalah nilai ilustrasi.

Perintah engine CLI