SystemVerilog를 로컬에서 검사, 이름 변경 및 검토하기
저장된 SystemVerilog를 인덱싱하고, 검토된 계획으로 심볼을 찾아 이름을 바꾸고, 즉시 어서션을 검토하고, 참조 카탈로그를 읽습니다.
Linux에서 Altifigence CLI 0.1.9를 사용해 로컬 프로젝트에 저장된 SystemVerilog 파일을 검사하고, 검토된 계획으로 심볼 이름을 바꾸고, 즉시 어서션을 검토하고, SVA 및 제약 랜덤 참조 카탈로그를 읽으세요.
저장된 소스 파일 인덱싱하기
이 예제에는 저장된 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, 그리고 path, line, column으로 이루어진 loc 객체가 있습니다. 여러 파일에 걸쳐 심볼을 해석하려면 열 뒤에 저장된 다른 파일을 나열하세요.
검토된 계획으로 이름 바꾸기
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 파일에 대해 계획을 만드세요.
즉시 어서션 검토하기
검토는 stdin에서 SystemVerilog 소스 하나를 읽고 구조화된 어설션 검토 결과를 반환합니다.
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에는 sva의 경우 checker를, constrained-random의 경우 item 또는 control을 사용하세요. --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로 종료됩니다. list 결과에서 stableId를 복사하고 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가 잘못된 접두사를 보고하면 lea처럼 1에서 128바이트 길이의 값을 사용하세요.
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는 시도 ID와 실제 경과 시간 상한 내에 남은 시간도 검증합니다. 해당 시도의 허용 검사 결과, 구성 요소 및 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를 반복하세요. 위의 시도 타임스탬프는 예시 값입니다.