Ispezionare, rinominare ed esaminare SystemVerilog in locale
Indicizza SystemVerilog salvato, trova e rinomina un simbolo tramite un piano esaminato, esamina le asserzioni immediate e leggi i cataloghi di riferimento.
Utilizza Altifigence CLI 0.1.9 su Linux per ispezionare i file SystemVerilog salvati in un progetto locale, rinominare un simbolo tramite un piano esaminato, esaminare le asserzioni immediate e leggere i cataloghi di riferimento SVA e constrained-random.
Indicizzare un file sorgente salvato
Utilizza un nuovo progetto locale per questo esempio, con un file SystemVerilog salvato. Esegui i comandi con il tuo normale account utente.
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"Verifica che il codice di uscita sia 0. L’indice ha schemaVersion sv-index.v1. Ogni voce in files ha path, bytes e lineCount. Ogni modulo ha i propri ports, params, instances e loc.
Trovare una definizione e i suoi riferimenti
Le posizioni usano numeri di riga e di colonna in base 1. La riga 1, colonna 8 è il nome 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"Il risultato della definizione ha schemaVersion sv-definition.v1 con query, symbol e definition. Il risultato dei riferimenti ha schemaVersion sv-references.v1 e un elenco references. Ogni simbolo localizzato ha name, kind e un loc con path, line e column. Per risolvere i simboli tra più file, elenca gli altri file salvati dopo la colonna.
Rinominare con un piano esaminato
Crea un piano che rinomina child in leaf. La creazione del piano non modifica alcun 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")"Il piano ha schemaVersion sv-rename-plan.v1. Ogni modifica ha path, line, column, length e replacement. Esamina ogni modifica, quindi applica la stessa ridenominazione con il canonicalSha256 esaminato:
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"Verifica che il codice di uscita sia 0 e che appliedCurrentRequest sia uguale a true. La ricevuta ha schemaVersion sv-rename-apply.v1. Il passaggio di applicazione ricostruisce il piano dai file SystemVerilog salvati nel progetto e scrive le modifiche solo quando il digest di quel piano è uguale al digest esaminato. Crea il piano su tutti i file SystemVerilog salvati del progetto, in modo che entrambi i piani coprano gli stessi sorgenti.
Esaminare le asserzioni immediate
La revisione legge un sorgente SystemVerilog da stdin e restituisce una revisione strutturata delle asserzioni.
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"Verifica che il codice di uscita sia 0 e leggi il risultato della revisione. alti sv review interprocess legge il proprio sorgente allo stesso modo ed esamina la sincronizzazione tra processi.
Leggere i cataloghi di riferimento
Elenca le voci del catalogo SVA e mostrane una:
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"Entrambi i cataloghi hanno schemaVersion altifigence.sv-library-catalog.v1. Un elenco ha resultLimit, totalAvailable, totalMatches, truncated e entries. Ogni voce ha stableId, category, name, summary, tags e attributes. Per --category, usa checker con sva, oppure item o control con constrained-random. Restringi un elenco con testo --filter da 1 a 128 byte e con --limit da 1 a 64. Il limite predefinito è 64. Utilizza alti sv library constrained-random list e show allo stesso modo.
Leggi il contratto del bridge UVM compilato con queste query. alti sv uvm readiness restituisce la ricevuta firmata di prontezza del componente fisso senza caricare né eseguire il componente.
alti sv uvm capabilities
alti sv uvm readinessRiprendere dopo gli errori
Se una query riporta no symbol at rtl/top.sv:2:1, quella posizione non si trova su un nome di simbolo. Prendi una riga e una colonna da un loc dell’indice ed esegui di nuovo la query.
Se rename-apply riporta reviewed SV rename plan changed: expected seguito da due digest, i file sorgente salvati non producono più il piano esaminato. Esegui di nuovo rename-plan, esamina le nuove modifiche e applica con il nuovo canonicalSha256.
Se rename-apply riporta SV rename apply requires --project <absolute-workspace>, aggiungi --project "$PROJECT" ed eseguilo di nuovo.
Se show riporta che la voce della libreria SV non è stata trovata, il comando termina con codice di uscita 2. Copia uno stableId da un risultato di list ed esegui di nuovo show.
Esaminare simboli, dettagli al passaggio del puntatore e completamenti
Dopo aver applicato la ridenominazione, utilizza la stessa fixture salvata rtl/top.sv per esaminarne i simboli. symbols restituisce simboli dei moduli, riferimenti e conteggi delle risoluzioni. symbols-v2 include anche valori costanti, larghezze ed espansione dei blocchi 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"]}Utilizza hover nella posizione di un simbolo e complete con un prefisso del nome. I dettagli al passaggio del puntatore includono il simbolo interrogato e la sua definizione; gli elementi di completamento includono label, kind e 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"]}Verifica che il codice di uscita sia 0 prima di utilizzare le posizioni restituite. Se non è presente un simbolo in una posizione, scegli un loc da un simbolo restituito e riprova hover. Se complete segnala un prefisso non valido, utilizza da 1 a 128 byte, ad esempio lea.
Esaminare l’ambiente UVM e i contratti ABI
Salva i rapporti dell’ambiente e dell’ABI insieme ai rapporti sulle funzionalità e sulla disponibilità. environment descrive la politica di individuazione dei componenti firmati. abi elenca l’interfaccia C compilata, i codici di ritorno, i nomi esportati e i tipi dei parametri.
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"}Esaminare i contratti delle richieste di simulazione UVM
Interroga il contratto di simulazione e le ricevute di disponibilità, quindi convalida un descrittore delle sorgenti salvate e i suoi limiti di risorse con admit. L’esempio seguente utilizza la fixture salvata come descrittore a sorgente singola. Registra il requestSha256 restituito insieme al descrittore che hai esaminato.
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 convalida anche un ID del tentativo e il tempo rimanente entro il suo limite di durata. Restituisce l’ammissione, la disponibilità del componente e di DPI e la valutazione dell’autorità sulle risorse per quel tentativo. Salva la ricevuta completa per la revisione.
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}Per source bundle digest must be lowercase SHA-256, copia il digest di 64 caratteri senza modificarlo. Per resource ceilings are outside v1 bounds, interroga capabilities e scegli valori positivi entro i massimi indicati. Per deadline is absent or exceeds the admitted wall-time ceiling, imposta una scadenza positiva entro max-wall-time-ms dal momento di osservazione e ripeti preflight. I timestamp dei tentativi sopra riportati sono valori illustrativi.