Kiểm tra, đổi tên và xem xét SystemVerilog cục bộ

Lập chỉ mục SystemVerilog đã lưu, tìm và đổi tên một symbol qua kế hoạch đã xem xét, xem xét các assertion tức thời và đọc các danh mục tham chiếu.

Dùng Altifigence CLI 0.1.9 trên Linux để kiểm tra các tệp SystemVerilog đã lưu trong một dự án cục bộ, đổi tên một symbol qua kế hoạch đã xem xét, xem xét các assertion tức thời và đọc các danh mục tham chiếu SVA và ngẫu nhiên có ràng buộc.

Lập chỉ mục một tệp nguồn đã lưu

Dùng một dự án cục bộ mới cho ví dụ này, với một tệp SystemVerilog đã lưu. Chạy các lệnh bằng tài khoản người dùng thông thường.

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"

Xác nhận trạng thái thoát là 0. Chỉ mục có schemaVersion sv-index.v1. Mỗi mục trong files có path, bytes và lineCount. Mỗi mô-đun có ports, params, instances và loc của nó.

Tìm một định nghĩa và các tham chiếu của nó

Vị trí dùng số dòng và số cột bắt đầu từ 1. Dòng 1, cột 8 là tên 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"

Kết quả định nghĩa có schemaVersion sv-definition.v1 với query, symbol và definition. Kết quả tham chiếu có schemaVersion sv-references.v1 và danh sách references. Mỗi symbol được định vị có name, kind và một loc với path, line và column. Để phân giải symbol giữa các tệp, hãy liệt kê các tệp đã lưu khác sau cột.

Đổi tên bằng kế hoạch đã xem xét

Tạo một kế hoạch đổi tên child thành leaf. Việc tạo kế hoạch không thay đổi tệp.

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

Kế hoạch có schemaVersion sv-rename-plan.v1. Mỗi chỉnh sửa có path, line, column, length và replacement. Xem xét mọi chỉnh sửa, rồi áp dụng cùng thao tác đổi tên với canonicalSha256 đã xem xét:

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"

Xác nhận trạng thái thoát là 0 và appliedCurrentRequest bằng true. Biên nhận có schemaVersion sv-rename-apply.v1. Bước áp dụng tạo lại kế hoạch từ các tệp SystemVerilog đã lưu trong dự án và chỉ ghi các chỉnh sửa khi mã băm của kế hoạch đó bằng mã băm đã xem xét. Hãy tạo kế hoạch trên tất cả tệp SystemVerilog đã lưu của dự án để cả hai kế hoạch bao phủ cùng các tệp nguồn.

Xem xét assertion tức thời

Việc xem xét đọc một mã nguồn SystemVerilog từ stdin và trả về kết quả xem xét assertion có cấu trúc.

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"

Xác nhận trạng thái thoát là 0 và đọc kết quả xem xét. alti sv review interprocess đọc mã nguồn của nó theo cách tương tự và xem xét đồng bộ hóa liên tiến trình.

Đọc các danh mục tham chiếu

Liệt kê các mục danh mục SVA và hiển thị một trong số đó:

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"

Cả hai danh mục đều có schemaVersion altifigence.sv-library-catalog.v1. Một danh sách có resultLimit, totalAvailable, totalMatches, truncated và entries. Mỗi mục có stableId, category, name, summary, tags và attributes. Với --category, dùng checker với sva, hoặc item hoặc control với constrained-random. Thu hẹp danh sách bằng văn bản --filter dài từ 1 đến 128 byte, và bằng --limit từ 1 đến 64. Giới hạn mặc định là 64. Dùng alti sv library constrained-random list và show theo cách tương tự.

Đọc hợp đồng cầu nối UVM đã biên dịch bằng các truy vấn này. alti sv uvm readiness trả về biên nhận sẵn sàng đã ký của thành phần cố định mà không tải hay chạy thành phần đó.

alti sv uvm capabilities
alti sv uvm readiness

Xử lý lỗi

Nếu một truy vấn báo no symbol at rtl/top.sv:2:1, vị trí đó không nằm trên tên symbol. Lấy dòng và cột từ một loc trong chỉ mục rồi chạy lại truy vấn.

Nếu rename-apply báo reviewed SV rename plan changed: expected theo sau là hai mã băm, các tệp nguồn đã lưu không còn tạo ra kế hoạch đã xem xét. Chạy lại rename-plan, xem xét các chỉnh sửa mới và áp dụng với canonicalSha256 mới.

Nếu rename-apply báo SV rename apply requires --project <absolute-workspace>, hãy thêm --project "$PROJECT" rồi chạy lại.

Nếu show báo không tìm thấy mục thư viện SV, lệnh thoát với trạng thái 2. Sao chép một stableId từ kết quả list rồi chạy lại show.

Kiểm tra symbol, chi tiết hover và các mục hoàn thành

Sau khi áp dụng đổi tên, dùng cùng fixture rtl/top.sv đã lưu để kiểm tra các symbol của nó. symbols trả về các symbol mô-đun, tham chiếu và số lượng phân giải. symbols-v2 cũng bao gồm giá trị hằng số, độ rộng và mở rộng 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"]}

Dùng hover tại vị trí symbol và complete với tiền tố tên. Hover bao gồm symbol được truy vấn và định nghĩa của nó; các mục hoàn thành bao gồm label, kind và 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"]}

Xác nhận trạng thái thoát là 0 trước khi dùng các vị trí được trả về. Nếu không có symbol tại một vị trí, hãy chọn một loc từ symbol được trả về và thử lại hover. Nếu complete báo tiền tố không hợp lệ, hãy dùng từ 1 đến 128 byte, chẳng hạn lea.

Kiểm tra các hợp đồng môi trường UVM và ABI

Lưu các báo cáo môi trường và ABI cùng với báo cáo khả năng và sẵn sàng. environment mô tả chính sách tìm các thành phần đã ký. abi liệt kê giao diện C đã biên dịch, mã trả về, tên export và kiểu tham số.

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

Xem xét các hợp đồng yêu cầu mô phỏng UVM

Truy vấn hợp đồng mô phỏng và các biên nhận sẵn sàng, rồi xác thực descriptor tệp nguồn đã lưu và các trần tài nguyên của nó bằng admit. Ví dụ bên dưới dùng fixture đã lưu làm descriptor có một tệp nguồn. Ghi lại requestSha256 được trả về cùng với descriptor mà bạn đã xem xét.

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 cũng xác thực ID lần thử và thời gian còn lại trong trần thời gian thực của nó. Nó trả về admission, trạng thái sẵn sàng của thành phần và DPI, cùng đánh giá thẩm quyền tài nguyên cho lần thử đó. Lưu biên nhận đầy đủ để xem xét.

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}

Với source bundle digest must be lowercase SHA-256, hãy sao chép nguyên vẹn mã băm 64 chữ số. Với resource ceilings are outside v1 bounds, hãy truy vấn capabilities và chọn các giá trị dương trong giới hạn tối đa của nó. Với deadline is absent or exceeds the admitted wall-time ceiling, hãy đặt thời hạn dương trong khoảng max-wall-time-ms kể từ thời điểm quan sát và lặp lại preflight. Các dấu thời gian lần thử ở trên là giá trị minh họa.

Các lệnh engine của CLI