नेटिव XLS से जाँचें, मूल्यांकन करें और RTL बनाएँ

DSLX या XLS IR जाँचें, वेक्टर का मूल्यांकन करें, IR ऑप्टिमाइज़ करें, SystemVerilog बनाएँ और लोकल जॉब का परिणाम सहेजें।

Linux पर Altifigence CLI 0.1.9 से इनलाइन DSLX और XLS IR फ़ंक्शन पर काम करें। इंस्टॉल किए गए रनर के समर्थित ऑपरेशन जानने के लिए पहले alti xls capabilities चलाएँ। इन उदाहरणों में CPU बैकएंड चुना गया है।

फ़ंक्शन का मूल्यांकन करें

इस अनुरोध को eval.json के रूप में सहेजें। इनपुट मान फ़ंक्शन के पैरामीटर के क्रम में होते हैं।

{
  "schema": "altifigence.xls.operation-request.v1",
  "operation": "eval",
  "input_kind": "dslx",
  "source": "fn compute(x: u8, y: u8) -> u8 { x + y }",
  "top": "compute",
  "backend": "cpu",
  "vectors": [
    [
      "255",
      "1"
    ],
    [
      "0x10",
      "0b11"
    ]
  ]
}
alti xls eval --request eval.json

परिणाम का status "succeeded" होता है और ये आउटपुट मिलते हैं:

["bits[8]:0x0","bits[8]:0x13"]

पहला योग फ़ंक्शन की 8-बिट चौड़ाई के अनुसार रैप होता है। परिणाम में अनुरोध, पैरामीटर की चौड़ाइयाँ तथा सोर्स और अनुरोध के डाइजेस्ट होते हैं। नेटिव अनुरोध 1–64-बिट फ़ंक्शन और अधिकतम 256 वेक्टर स्वीकार करते हैं। इनलाइन सोर्स 8192 बाइट और अनुरोध 16384 बाइट के भीतर रखें।

जाँचें और ऑप्टिमाइज़ करें

eval.json को check.json में कॉपी करें। operation को "check" और vectors को [] पर सेट करें। दूसरी कॉपी optimize.json के रूप में सहेजें, जिसमें operation "optimize" और vectors [] हों।

alti xls check --request check.json
alti xls optimize --request optimize.json > optimized.json

Check पार्स किए गए फ़ंक्शन की जानकारी लौटाता है। Optimize कॉन्स्टेंट फ़ोल्डिंग करता है और उपयोग में न आने वाले प्योर नोड हटाता है। ऑप्टिमाइज़ किए गए IR और एंट्री पॉइंट के लिए compilation.ir और compilation.ir_top पढ़ें। उसका मूल्यांकन करने के लिए ये मान input_kind "xls-ir" वाले नए अनुरोध में रखें।

SystemVerilog बनाएँ

इस अनुरोध को codegen.json के रूप में सहेजें:

{
  "schema": "altifigence.xls.operation-request.v1",
  "operation": "codegen",
  "input_kind": "dslx",
  "source": "fn compute(x: u8, y: u8) -> u8 { x + y }",
  "top": "compute",
  "backend": "cpu",
  "vectors": [],
  "pipeline": {
    "stages": 2
  }
}
alti xls codegen --request codegen.json > generated.json

RTL के लिए compilation.system_verilog और उसके टॉप मॉड्यूल के लिए compilation.rtl_top पढ़ें। यह अनुरोध latency_cycles 2 और interface "synchronous-reset-valid-delay" वाला xls_pipeline बनाता है। आउटपुट रजिस्टर के 1 से 16 चरण चुनें। कॉम्बिनेशनल RTL के लिए pipeline छोड़ दें; टॉप मॉड्यूल xls_top होगा।

लोकल जॉब चलाएँ और परिणाम फिर खोलें

इस पूरे CPU जॉब अनुरोध को job.json के रूप में सहेजें। इसका डाइजेस्ट अंदर शामिल XLS अनुरोध को बाँधता है।

{
  "schema": "altifigence.xls.job-request.v1",
  "job": {
    "schema": "altifigence.engine.job.v1",
    "job_id": "xls-example",
    "operation": {
      "engine_id": "xls-engine",
      "operation_id": "eval",
      "contract_id": "altifigence.xls.operation-request.v1"
    },
    "execution_placement": "local",
    "device_preference": {
      "selection": {
        "mode": "class",
        "value": "cpu"
      },
      "fallback": "deny"
    },
    "resources": {
      "cpu_slots": 1,
      "memory_bytes": 1048576,
      "device_slots": 0,
      "device_memory_bytes": 0,
      "max_wall_time_ms": 30000
    },
    "inputs": [
      {
        "artifact_id": "request",
        "role": "xls-request",
        "artifact_schema": "altifigence.xls.operation-request.v1",
        "uri": "workspace://inputs/request.json",
        "sha256": "fea82ea569518661ed34f31da0a1bd3df7387bd7d4b33e6c171a605bfe547325"
      }
    ],
    "cancellation": {
      "cancellation_id": "xls-example-cancel"
    }
  },
  "request": {
    "schema": "altifigence.xls.operation-request.v1",
    "operation": "eval",
    "input_kind": "dslx",
    "source": "fn compute(x: u8, y: u8) -> u8 { x + y }",
    "top": "compute",
    "backend": "cpu",
    "vectors": [
      [
        "255",
        "1"
      ],
      [
        "0x10",
        "0b11"
      ]
    ]
  }
}
alti xls run --project /home/me/design --request job.json

सफल परिणाम में result.status "succeeded", आर्टिफ़ैक्ट और result.outputs में उसका संदर्भ होता है। परिणाम फिर खोलने और दोबारा चलाने के लिए उसका artifact_id कॉपी करके ARTIFACT_ID की जगह रखें:

alti xls artifact show --project /home/me/design ARTIFACT_ID

सीधे ऑपरेशन अनुरोध के परिणाम सहेजने और उनकी सूची देखने के लिए आप ये कमांड भी इस्तेमाल कर सकते हैं:

alti xls artifact store --project /home/me/design --request eval.json
alti xls artifact list --project /home/me/design

अनुरोध ठीक करें

8-बिट इनपुट के लिए "256" से invalid-input मिलता है। इसे सीमा के भीतर किसी बिट पैटर्न, जैसे "255", से बदलें और दोबारा प्रयास करें। "command and request operation differ" आने पर JSON में operation को चलाए जा रहे कमांड के अनुसार सेट करें। Check, optimize और codegen में vectors [] होता है; मूल्यांकन में कम से कम एक वेक्टर होता है।

"XLS request digest differs" आने पर जॉब इनपुट का SHA-256 अपडेट करें, ताकि वह शामिल अनुरोध के कॉम्पैक्ट UTF-8 JSON सीरियलाइज़ेशन से मेल खाए। फ़ील्ड का क्रम यह रखें: schema, operation, input_kind, source, top, backend, vectors, और दिए जाने पर अंत में pipeline। ठीक किया गया जॉब फिर चलाएँ।

जिस जॉब का वैकल्पिक deadline_unix_ms बीत चुका हो, वह एग्ज़िट कोड 3 के साथ cancelled लौटाता है। दोबारा प्रयास करने से पहले भविष्य की समय-सीमा दें या वैकल्पिक समय-सीमा छोड़ दें।

CLI का पहला सफल उपयोग