Inspeccionar, renombrar y revisar SystemVerilog de forma local
Indexe SystemVerilog guardado, busque un símbolo y cámbiele el nombre mediante un plan revisado, revise las aserciones inmediatas y lea los catálogos de referencia.
Utilice Altifigence CLI 0.1.9 en Linux para inspeccionar archivos SystemVerilog guardados en un proyecto local, cambiar el nombre de un símbolo mediante un plan revisado, revisar aserciones inmediatas y leer los catálogos de referencia de SVA y de aleatorización restringida.
Indexar un archivo de código fuente guardado
Utilice un proyecto local nuevo para este ejemplo, con un archivo SystemVerilog guardado. Ejecute los comandos con su usuario habitual.
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"Compruebe que el estado de salida sea 0. El índice tiene schemaVersion sv-index.v1. Cada entrada de files tiene path, bytes y lineCount. Cada módulo tiene sus ports, params, instances y loc.
Buscar una definición y sus referencias
Las posiciones usan números de línea y de columna que empiezan en 1. La línea 1, columna 8 es el nombre 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"El resultado de definición tiene schemaVersion sv-definition.v1 con query, symbol y definition. El resultado de referencias tiene schemaVersion sv-references.v1 y una lista references. Cada símbolo localizado tiene name, kind y un loc con path, line y column. Para resolver símbolos entre archivos, indique los demás archivos guardados después de la columna.
Renombrar mediante un plan revisado
Cree un plan que cambie el nombre de child a leaf. La creación del plan no modifica ningún archivo.
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")"El plan tiene schemaVersion sv-rename-plan.v1. Cada edición tiene path, line, column, length y replacement. Revise todas las ediciones y, después, aplique el mismo cambio de nombre con el canonicalSha256 revisado:
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"Compruebe que el estado de salida sea 0 y que appliedCurrentRequest sea igual a true. El comprobante tiene schemaVersion sv-rename-apply.v1. El paso de aplicación vuelve a generar el plan a partir de los archivos SystemVerilog guardados del proyecto y escribe las ediciones solo cuando el resumen de ese plan es igual al resumen revisado. Cree el plan sobre todos los archivos SystemVerilog guardados del proyecto para que ambos planes cubran los mismos archivos de código fuente.
Revisar aserciones inmediatas
La revisión lee un código fuente SystemVerilog de stdin y devuelve una revisión estructurada de aserciones.
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"Compruebe que el estado de salida sea 0 y lea el resultado de la revisión. alti sv review interprocess lee su código fuente de la misma manera y revisa la sincronización entre procesos.
Leer los catálogos de referencia
Enumere las entradas del catálogo de SVA y muestre una de ellas:
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"Ambos catálogos tienen schemaVersion altifigence.sv-library-catalog.v1. Una lista tiene resultLimit, totalAvailable, totalMatches, truncated y entries. Cada entrada tiene stableId, category, name, summary, tags y attributes. Para --category, utilice checker con sva, o item o control con constrained-random. Restrinja una lista con texto de --filter de 1 a 128 bytes y con --limit de 1 a 64. El límite predeterminado es 64. Utilice alti sv library constrained-random list y show de la misma manera.
Lea el contrato del puente UVM compilado con estas consultas. alti sv uvm readiness devuelve el comprobante firmado de preparación del componente fijo sin cargar ni ejecutar el componente.
alti sv uvm capabilities
alti sv uvm readinessResolver errores
Si una consulta informa de no symbol at rtl/top.sv:2:1, esa posición no está sobre un nombre de símbolo. Tome una línea y una columna de un loc del índice y ejecute la consulta de nuevo.
Si rename-apply informa de reviewed SV rename plan changed: expected seguido de dos resúmenes, los archivos de código fuente guardados ya no producen el plan revisado. Ejecute rename-plan de nuevo, revise las ediciones nuevas y aplique con el nuevo canonicalSha256.
Si rename-apply informa de SV rename apply requires --project <absolute-workspace>, añada --project "$PROJECT" y ejecútelo de nuevo.
Si show informa de que no se encontró la entrada de la biblioteca de SV, el comando termina con el estado de salida 2. Copie un stableId de un resultado de list y ejecute show de nuevo.
Examinar símbolos, detalles al pasar el cursor y completados
Después de aplicar el cambio de nombre, utilice el mismo caso de prueba guardado rtl/top.sv para examinar sus símbolos. symbols devuelve símbolos de módulos, referencias y recuentos de resoluciones. symbols-v2 también incluye valores constantes, anchos y expansión de bloques 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"]}Utilice hover en la ubicación de un símbolo y complete con un prefijo de nombre. La información al pasar el cursor incluye el símbolo consultado y su definición; los elementos de completado incluyen label, kind y 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"]}Compruebe que el estado de salida sea 0 antes de utilizar las ubicaciones devueltas. Si no hay ningún símbolo en una ubicación, elija un loc de un símbolo devuelto y vuelva a intentar hover. Si complete indica un prefijo no válido, utilice de 1 a 128 bytes, como lea.
Examinar el entorno UVM y los contratos ABI
Guarde los informes del entorno y de ABI junto con los informes de capacidades y disponibilidad. environment describe la política de detección de componentes firmados. abi enumera la interfaz C compilada, los códigos de retorno, los nombres exportados y los tipos de parámetros.
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"}Revisar los contratos de solicitud de simulación UVM
Consulte el contrato de simulación y los comprobantes de disponibilidad y, después, valide un descriptor de fuentes guardadas y sus límites de recursos con admit. El ejemplo siguiente utiliza el caso de prueba guardado como descriptor de una sola fuente. Registre el requestSha256 devuelto junto con el descriptor que haya revisado.
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 también valida un identificador de intento y el tiempo restante dentro de su límite de duración. Devuelve la admisión, la disponibilidad del componente y de DPI, y la evaluación de la autoridad sobre recursos para ese intento. Guarde el comprobante completo para revisarlo.
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}Para source bundle digest must be lowercase SHA-256, copie el resumen criptográfico de 64 caracteres sin modificarlo. Para resource ceilings are outside v1 bounds, consulte capabilities y elija valores positivos dentro de sus máximos. Para deadline is absent or exceeds the admitted wall-time ceiling, establezca un plazo positivo dentro de max-wall-time-ms desde el momento de observación y repita preflight. Las marcas de tiempo de los intentos anteriores son valores ilustrativos.