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 का उपयोग करें। सूची को 1 से 128 बाइट के --filter टेक्स्ट से और 1 से 64 के --limit से सीमित करें। डिफ़ॉल्ट सीमा 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 अमान्य प्रीफ़िक्स बताए, तो 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 अटेम्प्ट 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 दोहराएँ। ऊपर दिए अटेम्प्ट टाइमस्टैम्प उदाहरण के मान हैं।