Inspecter, renommer et vérifier du SystemVerilog en local
Indexez du SystemVerilog enregistré, trouvez et renommez un symbole via un plan vérifié, vérifiez les assertions immédiates et lisez les catalogues de référence.
Utilisez Altifigence CLI 0.1.9 sous Linux pour inspecter les fichiers SystemVerilog enregistrés d’un projet local, renommer un symbole via un plan vérifié, vérifier les assertions immédiates et lire les catalogues de référence SVA et constrained-random.
Indexer un fichier source enregistré
Utilisez un nouveau projet local pour cet exemple, avec un fichier SystemVerilog enregistré. Exécutez les commandes avec votre compte utilisateur habituel.
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"Vérifiez que le code de sortie est 0. L’index a schemaVersion sv-index.v1. Chaque entrée de files contient path, bytes et lineCount. Chaque module contient ses ports, params, instances et loc.
Trouver une définition et ses références
Les positions utilisent des numéros de ligne et de colonne en base 1. La ligne 1, colonne 8 est le nom 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"Le résultat de définition a schemaVersion sv-definition.v1 avec query, symbol et definition. Le résultat de références a schemaVersion sv-references.v1 et une liste references. Chaque symbole localisé a name, kind et un loc avec path, line et column. Pour résoudre les symboles entre fichiers, listez les autres fichiers enregistrés après la colonne.
Renommer avec un plan vérifié
Créez un plan qui renomme child en leaf. La création du plan ne modifie aucun fichier.
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")"Le plan a schemaVersion sv-rename-plan.v1. Chaque modification a path, line, column, length et replacement. Vérifiez chaque modification, puis appliquez le même renommage avec le canonicalSha256 vérifié :
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"Vérifiez que le code de sortie est 0 et que appliedCurrentRequest est égal à true. Le reçu a schemaVersion sv-rename-apply.v1. L’étape apply reconstruit le plan à partir des fichiers SystemVerilog enregistrés du projet et n’écrit les modifications que si l’empreinte de ce plan est égale à l’empreinte vérifiée. Créez le plan sur tous les fichiers SystemVerilog enregistrés du projet afin que les deux plans couvrent les mêmes fichiers source.
Vérifier les assertions immédiates
La vérification lit un code source SystemVerilog depuis stdin et renvoie une vérification structurée des assertions.
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"Vérifiez que le code de sortie est 0 et lisez le résultat de la vérification. alti sv review interprocess lit son code source de la même manière et vérifie la synchronisation interprocessus.
Lire les catalogues de référence
Listez les entrées du catalogue SVA et affichez-en une :
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"Les deux catalogues ont schemaVersion altifigence.sv-library-catalog.v1. Une liste contient resultLimit, totalAvailable, totalMatches, truncated et entries. Chaque entrée contient stableId, category, name, summary, tags et attributes. Pour --category, utilisez checker avec sva, ou item ou control avec constrained-random. Restreignez une liste avec un texte --filter de 1 à 128 octets et avec --limit de 1 à 64. La limite par défaut est 64. Utilisez alti sv library constrained-random list et show de la même manière.
Lisez le contrat du pont UVM compilé avec ces interrogations. alti sv uvm readiness renvoie le reçu de disponibilité signé du composant fixe sans charger ni exécuter le composant.
alti sv uvm capabilities
alti sv uvm readinessReprendre après des erreurs
Si une interrogation signale no symbol at rtl/top.sv:2:1, cette position ne se trouve pas sur un nom de symbole. Prenez une ligne et une colonne dans un loc de l’index et relancez l’interrogation.
Si rename-apply signale reviewed SV rename plan changed: expected suivi de deux empreintes, les fichiers source enregistrés ne produisent plus le plan vérifié. Relancez rename-plan, vérifiez les nouvelles modifications et appliquez-les avec le nouveau canonicalSha256.
Si rename-apply signale SV rename apply requires --project <absolute-workspace>, ajoutez --project "$PROJECT" et relancez la commande.
Si show signale que l’entrée de la bibliothèque SV est introuvable, la commande se termine avec le code de sortie 2. Copiez un stableId depuis un résultat de list et relancez show.
Examiner les symboles, les détails au survol et les complétions
Après avoir appliqué le renommage, utilisez la même fixture enregistrée rtl/top.sv pour examiner ses symboles. symbols renvoie les symboles des modules, les références et les nombres de résolutions. symbols-v2 comprend aussi les valeurs constantes, les largeurs et le développement des blocs 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"]}Utilisez hover à l’emplacement d’un symbole et complete avec un préfixe de nom. Le survol comprend le symbole interrogé et sa définition ; les éléments de complétion comprennent label, kind et 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"]}Vérifiez que le code de sortie est 0 avant d’utiliser les emplacements renvoyés. Si aucun symbole n’est trouvé à un emplacement, choisissez un loc d’un symbole renvoyé, puis réessayez hover. Si complete indique un préfixe invalide, utilisez 1 à 128 octets, par exemple lea.
Examiner l’environnement UVM et les contrats ABI
Enregistrez les rapports d’environnement et d’ABI avec ceux des capacités et de disponibilité. environment décrit la politique de découverte des composants signés. abi répertorie l’interface C compilée, les codes de retour, les noms exportés et les types de paramètres.
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"}Examiner les contrats de requête de simulation UVM
Interrogez le contrat de simulation et les reçus de disponibilité, puis validez un descripteur de sources enregistrées et ses plafonds de ressources avec admit. L’exemple ci-dessous utilise la fixture enregistrée comme descripteur à une seule source. Enregistrez le requestSha256 renvoyé avec le descripteur que vous avez examiné.
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 valide aussi un identifiant de tentative et le temps restant dans son plafond de durée d’exécution. Il renvoie l’admission, la disponibilité du composant et de DPI, ainsi que l’évaluation de l’autorité sur les ressources pour cette tentative. Conservez le reçu complet pour examen.
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}Pour source bundle digest must be lowercase SHA-256, copiez l’empreinte de 64 caractères sans la modifier. Pour resource ceilings are outside v1 bounds, interrogez capabilities et choisissez des valeurs positives dans les maxima indiqués. Pour deadline is absent or exceeds the admitted wall-time ceiling, définissez une échéance positive dans les max-wall-time-ms suivant l’heure d’observation, puis répétez preflight. Les horodatages de tentative ci-dessus sont donnés à titre d’exemple.