SystemVerilog lokal untersuchen, umbenennen und prüfen
Indizieren Sie gespeichertes SystemVerilog, suchen Sie ein Symbol und benennen Sie es über einen geprüften Plan um, prüfen Sie Immediate Assertions und lesen Sie die Referenzkataloge.
Verwenden Sie Altifigence CLI 0.1.9 unter Linux, um gespeicherte SystemVerilog-Dateien in einem lokalen Projekt zu untersuchen, ein Symbol über einen geprüften Plan umzubenennen, Immediate Assertions zu prüfen und die Referenzkataloge für SVA und Constrained-Random zu lesen.
Eine gespeicherte Quelldatei indizieren
Verwenden Sie für dieses Beispiel ein neues lokales Projekt mit einer gespeicherten SystemVerilog-Datei. Führen Sie die Befehle mit Ihrem normalen Benutzerkonto aus.
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"Prüfen Sie, dass der Exit-Status 0 ist. Der Index hat die schemaVersion sv-index.v1. Jeder Eintrag in files hat path, bytes und lineCount. Jedes Modul hat seine ports, params, instances und loc.
Eine Definition und ihre Referenzen finden
Positionen verwenden 1-basierte Zeilen- und Spaltennummern. Zeile 1, Spalte 8 ist der Name 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"Das Definitionsergebnis hat die schemaVersion sv-definition.v1 mit query, symbol und definition. Das Referenzergebnis hat die schemaVersion sv-references.v1 und eine Liste references. Jedes gefundene Symbol hat name, kind und ein loc mit path, line und column. Um Symbole dateiübergreifend aufzulösen, führen Sie die anderen gespeicherten Dateien nach der Spalte auf.
Mit einem geprüften Plan umbenennen
Erstellen Sie einen Plan, der child in leaf umbenennt. Das Erstellen des Plans ändert keine Dateien.
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")"Der Plan hat die schemaVersion sv-rename-plan.v1. Jede Änderung hat path, line, column, length und replacement. Prüfen Sie jede Änderung und wenden Sie dann dieselbe Umbenennung mit dem geprüften canonicalSha256 an:
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"Prüfen Sie, dass der Exit-Status 0 und appliedCurrentRequest gleich true ist. Der Beleg hat die schemaVersion sv-rename-apply.v1. Der Apply-Schritt erstellt den Plan erneut aus den gespeicherten SystemVerilog-Dateien im Projekt und schreibt die Änderungen nur, wenn der Hashwert dieses Plans dem geprüften Hashwert entspricht. Erstellen Sie den Plan über alle gespeicherten SystemVerilog-Dateien des Projekts, damit beide Pläne dieselben Quelldateien abdecken.
Immediate Assertions prüfen
Die Prüfung liest einen SystemVerilog-Quelltext aus stdin und gibt eine strukturierte Assertion-Prüfung zurück.
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"Prüfen Sie, dass der Exit-Status 0 ist, und lesen Sie das Prüfergebnis. alti sv review interprocess liest seinen Quelltext auf dieselbe Weise und prüft die Interprozess-Synchronisation.
Die Referenzkataloge lesen
Listen Sie SVA-Katalogeinträge auf und zeigen Sie einen davon an:
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"Beide Kataloge haben die schemaVersion altifigence.sv-library-catalog.v1. Eine Liste enthält resultLimit, totalAvailable, totalMatches, truncated und entries. Jeder Eintrag hat stableId, category, name, summary, tags und attributes. Verwenden Sie für --category checker mit sva oder item oder control mit constrained-random. Schränken Sie eine Liste mit --filter-Text von 1 bis 128 Bytes und mit --limit von 1 bis 64 ein. Das Standardlimit ist 64. Verwenden Sie alti sv library constrained-random list und show auf dieselbe Weise.
Lesen Sie den kompilierten UVM-Bridge-Vertrag mit diesen Abfragen. alti sv uvm readiness gibt den signierten Bereitschaftsbeleg der festen Komponente zurück, ohne die Komponente zu laden oder auszuführen.
alti sv uvm capabilities
alti sv uvm readinessNach Fehlern fortfahren
Wenn eine Abfrage no symbol at rtl/top.sv:2:1 meldet, liegt diese Position nicht auf einem Symbolnamen. Übernehmen Sie Zeile und Spalte aus einem loc im Index und führen Sie die Abfrage erneut aus.
Wenn rename-apply reviewed SV rename plan changed: expected gefolgt von zwei Hashwerten meldet, ergeben die gespeicherten Quelldateien nicht mehr den geprüften Plan. Führen Sie rename-plan erneut aus, prüfen Sie die neuen Änderungen und wenden Sie sie mit dem neuen canonicalSha256 an.
Wenn rename-apply SV rename apply requires --project <absolute-workspace> meldet, fügen Sie --project "$PROJECT" hinzu und führen Sie den Befehl erneut aus.
Wenn show meldet, dass der SV-Bibliothekseintrag nicht gefunden wurde, endet der Befehl mit dem Exit-Status 2. Kopieren Sie eine stableId aus einem Ergebnis von list und führen Sie show erneut aus.
Symbole, Hover-Details und Vervollständigungen untersuchen
Verwenden Sie nach der Umbenennung dieselbe gespeicherte Fixture-Datei rtl/top.sv, um ihre Symbole zu untersuchen. symbols gibt Modulsymbole, Referenzen und Auflösungsanzahlen zurück. symbols-v2 enthält zusätzlich Konstantenwerte, Breiten und die Generate-Expansion.
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"]}Verwenden Sie hover an einer Symbolposition und complete mit einem Namenspräfix. Hover enthält das abgefragte Symbol und seine Definition. Vervollständigungseinträge enthalten label, kind und 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"]}Prüfen Sie, dass der Exit-Status 0 ist, bevor Sie die zurückgegebenen Positionen verwenden. Wenn an einer Position kein Symbol gefunden wird, wählen Sie loc aus einem zurückgegebenen Symbol und wiederholen Sie hover. Wenn complete ein ungültiges Präfix meldet, verwenden Sie 1 bis 128 Bytes, beispielsweise lea.
Die UVM-Umgebung und die ABI-Verträge untersuchen
Speichern Sie die Umgebungs- und ABI-Berichte zusammen mit den Funktions- und Bereitschaftsberichten. environment beschreibt die Richtlinie zur Erkennung signierter Komponenten. abi listet die kompilierte C-Schnittstelle, Rückgabecodes, Exportnamen und Parametertypen auf.
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"}Die Anfrageverträge der UVM-Simulation prüfen
Fragen Sie den Simulationsvertrag und die Bereitschaftsbelege ab und validieren Sie anschließend mit admit einen Deskriptor für gespeicherte Quellen und seine Ressourcengrenzen. Das folgende Beispiel verwendet die gespeicherte Fixture als Deskriptor mit einer Quelle. Erfassen Sie den zurückgegebenen Wert requestSha256 zusammen mit dem geprüften Deskriptor.
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 validiert außerdem eine Versuchs-ID und die verbleibende Zeit innerhalb seiner Laufzeitgrenze. Es gibt die Zulassung, die Bereitschaft von Komponente und DPI sowie die Bewertung der Ressourcenautorität für diesen Versuch zurück. Speichern Sie den vollständigen Beleg zur Prüfung.
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}Kopieren Sie bei source bundle digest must be lowercase SHA-256 den 64-stelligen Digest unverändert. Fragen Sie bei resource ceilings are outside v1 bounds mit capabilities die Grenzen ab und wählen Sie positive Werte innerhalb der Maxima. Setzen Sie bei deadline is absent or exceeds the admitted wall-time ceiling eine positive Frist innerhalb von max-wall-time-ms ab dem Beobachtungszeitpunkt und wiederholen Sie preflight. Die obigen Versuchszeitstempel sind Beispielwerte.