Локальный анализ, переименование и проверка SystemVerilog

Проиндексируйте сохранённый SystemVerilog, найдите и переименуйте символ через проверенный план, проверьте немедленные утверждения и прочитайте справочные каталоги.

Используйте Altifigence CLI 0.1.9 в Linux, чтобы анализировать сохранённые файлы SystemVerilog в локальном проекте, переименовывать символ через проверенный план, проверять немедленные утверждения и читать справочные каталоги SVA и constrained-random.

Индексирование сохранённого исходного файла

Используйте для этого примера новый локальный проект с одним сохранённым файлом SystemVerilog. Выполняйте команды от имени обычного пользователя.

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"

Убедитесь, что код завершения равен 0. Индекс имеет schemaVersion sv-index.v1. Каждая запись в files содержит path, bytes и lineCount. Каждый модуль содержит свои ports, params, instances и loc.

Поиск определения и ссылок на него

Позиции используют номера строк и столбцов, начиная с 1. Строка 1, столбец 8 — это имя 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"

Результат определения имеет schemaVersion sv-definition.v1 с полями query, symbol и definition. Результат ссылок имеет schemaVersion sv-references.v1 и список references. Каждый найденный символ содержит name, kind и loc с path, line и column. Чтобы разрешать символы между файлами, перечислите после столбца остальные сохранённые файлы.

Переименование через проверенный план

Создайте план, который переименовывает child в leaf. Создание плана не изменяет файлы.

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

План имеет schemaVersion sv-rename-plan.v1. Каждая правка содержит path, line, column, length и replacement. Проверьте каждую правку, затем примените то же переименование с проверенным canonicalSha256:

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"

Убедитесь, что код завершения равен 0, а appliedCurrentRequest равно true. Квитанция имеет schemaVersion sv-rename-apply.v1. Шаг применения заново строит план по сохранённым файлам SystemVerilog проекта и записывает правки только тогда, когда дайджест этого плана равен проверенному дайджесту. Создавайте план по всем сохранённым файлам SystemVerilog проекта, чтобы оба плана охватывали одни и те же исходные файлы.

Проверка немедленных утверждений

Проверка читает один исходный код SystemVerilog из stdin и возвращает структурированный результат проверки утверждений.

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"

Убедитесь, что код завершения равен 0, и прочитайте результат проверки. alti sv review interprocess читает свой исходный код так же и проверяет межпроцессную синхронизацию.

Чтение справочных каталогов

Выведите список записей каталога SVA и покажите одну из них:

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"

Оба каталога имеют schemaVersion altifigence.sv-library-catalog.v1. Список содержит resultLimit, totalAvailable, totalMatches, truncated и entries. Каждая запись содержит stableId, category, name, summary, tags и attributes. Для --category используйте checker с sva, либо item или control с constrained-random. Сузить список можно с помощью текста --filter длиной от 1 до 128 байт и --limit от 1 до 64. Лимит по умолчанию — 64. Аналогично используйте alti sv library constrained-random list и show.

Прочитайте скомпилированный контракт моста UVM с помощью этих запросов. alti sv uvm readiness возвращает подписанную квитанцию о готовности фиксированного компонента, не загружая и не запуская компонент.

alti sv uvm capabilities
alti sv uvm readiness

Действия при ошибках

Если запрос сообщает no symbol at rtl/top.sv:2:1, эта позиция не находится на имени символа. Возьмите строку и столбец из loc в индексе и повторите запрос.

Если rename-apply сообщает reviewed SV rename plan changed: expected, за которым следуют два дайджеста, сохранённые исходные файлы больше не дают проверенный план. Снова выполните rename-plan, проверьте новые правки и примените с новым canonicalSha256.

Если rename-apply сообщает SV rename apply requires --project <absolute-workspace>, добавьте --project "$PROJECT" и запустите команду ещё раз.

Если show сообщает, что запись библиотеки SV не найдена, команда завершается с кодом 2. Скопируйте stableId из результата list и снова запустите show.

Анализ символов, сведений при наведении и дополнений

После применения переименования используйте тот же сохранённый тестовый файл rtl/top.sv, чтобы проанализировать его символы. symbols возвращает символы модулей, ссылки и счётчики разрешения. symbols-v2 также включает значения констант, разрядности и развёртывание 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"]}

Используйте hover в позиции символа, а complete — с префиксом имени. Hover включает запрошенный символ и его определение; элементы дополнения включают label, kind и 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"]}

Прежде чем использовать возвращённые позиции, убедитесь, что код завершения равен 0. Если в позиции нет символа, выберите loc из возвращённого символа и повторите hover. Если complete сообщает о недопустимом префиксе, используйте от 1 до 128 байт, например lea.

Анализ контрактов окружения UVM и ABI

Сохраните отчёты об окружении и ABI вместе с отчётами о возможностях и готовности. environment описывает политику обнаружения подписанных компонентов. abi перечисляет скомпилированный интерфейс C, коды возврата, имена экспортов и типы параметров.

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

Проверка контрактов запросов симуляции UVM

Запросите контракт симуляции и квитанции готовности, затем проверьте дескриптор сохранённых исходных файлов и его предельные ресурсы с помощью admit. В примере ниже сохранённый тестовый файл используется как дескриптор с одним исходным файлом. Запишите возвращённый requestSha256 вместе с проверенным дескриптором.

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 также проверяет идентификатор попытки и время, оставшееся в пределах её ограничения по реальному времени. Он возвращает допуск, готовность компонента и DPI, а также оценку полномочий на ресурсы для этой попытки. Сохраните полную квитанцию для проверки.

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}

При source bundle digest must be lowercase SHA-256 скопируйте дайджест из 64 знаков без изменений. При resource ceilings are outside v1 bounds запросите capabilities и выберите положительные значения в пределах указанных максимумов. При deadline is absent or exceeds the admitted wall-time ceiling задайте положительный срок в пределах max-wall-time-ms от времени наблюдения и повторите preflight. Временные метки попытки выше приведены для примера.

Команды движков CLI