प्रोग्रामिंग भाषा Chisel

चिज़ल भाषा

चिज़ल का अवलोकन

चिज़ल (स्काला एम्बेडेड भाषा में हार्डवेयर का निर्माण) एक हार्डवेयर निर्माण भाषा है जो हार्डवेयर डिज़ाइन और सत्यापन को सरल बनाती है। यह स्काला प्रोग्रामिंग भाषा के ऊपर बनाई गई है, जो इसके अभिव्यक्तिपूर्णता और कार्यात्मक प्रोग्रामिंग क्षमताओं का लाभ उठाती है ताकि डिज़ाइनरों को जटिल हार्डवेयर डिज़ाइन और टेस्टबेंच आसानी से बनाने में सक्षम बनाया जा सके। चिज़ल का मुख्य उपयोग डिजिटल सर्किट के विकास में होता है, विशेष रूप से FPGA और ASIC डिज़ाइन के क्षेत्र में।

ऐतिहासिक पहलू

निर्माण और प्रारंभिक विकास

चिज़ल को कैलिफोर्निया विश्वविद्यालय, बर्कले में बर्कले आर्किटेक्चर रिसर्च समूह के तहत एक शोध परियोजना के रूप में विकसित किया गया था। इसके निर्माण के पीछे का उद्देश्य पारंपरिक हार्डवेयर विवरण भाषाओं (HDLs) जैसे वेरिलॉग या VHDL की तुलना में हार्डवेयर डिज़ाइन करने के लिए एक अधिक उत्पादक और कुशल साधन प्रदान करना था। उच्च-स्तरीय प्रोग्रामिंग भाषा के भीतर हार्डवेयर डिज़ाइन को एम्बेड करके, चिज़ल ने बेहतर अमूर्तता, उच्च-स्तरीय निर्माण और कोड पुन: उपयोग की पेशकश करने का लक्ष्य रखा।

विकास और वर्तमान स्थिति

अपने आरंभ के बाद से, चिज़ल ने शैक्षणिक और औद्योगिक सेटिंग्स में लोकप्रियता हासिल की है। भाषा ने कई डेवलपर्स के योगदान के साथ विकास किया है, जिससे इसकी विशेषताओं, पुस्तकालयों और उपयोगिता में सुधार हुआ है। स्काला के साथ इसके एकीकरण ने डिज़ाइनरों को कार्यात्मक प्रोग्रामिंग, प्रकार सुरक्षा और उन्नत संग्रह पुस्तकालयों जैसी शक्तिशाली सुविधाओं का लाभ उठाने की अनुमति दी है। चिज़ल अब आधुनिक हार्डवेयर विकास परियोजनाओं में व्यापक रूप से उपयोग किया जाता है, जो शैक्षणिक अनुसंधान से लेकर व्यावसायिक उत्पादों तक फैला हुआ है।

अन्य भाषाओं और प्लेटफार्मों के साथ संबंध

चिज़ल वेरिलॉग और VHDL जैसी HDLs से प्रेरणा लेता है, उनके मूल सिद्धांतों को उधार लेते हुए और उन्हें स्काला के प्रोग्रामिंग पैराजाइम से बढ़ाता है। यह अन्य हार्डवेयर निर्माण ढांचों जैसे स्पाइनलएचडीएल के साथ भी निकटता से संबंधित है, जो समान रूप से उत्पादकता और अभिव्यक्तिपूर्णता पर ध्यान केंद्रित करते हैं। चिज़ल डिज़ाइन को वेरिलॉग में परिवर्तित किया जा सकता है, जिससे मौजूदा संश्लेषण उपकरणों और कार्यप्रवाहों का उपयोग संभव होता है।

वाक्य रचना विशेषताएँ

एम्बेडेड DSL

चिज़ल स्काला के भीतर एक एम्बेडेड डोमेन-विशिष्ट भाषा (DSL) प्रदान करता है, जिससे हार्डवेयर डिज़ाइनरों को हार्डवेयर विवरण के लिए स्काला की वाक्य रचना का उपयोग करने की अनुमति मिलती है। उदाहरण के लिए, एक सरल 2-इनपुट मल्टीप्लेक्सर को इस प्रकार व्यक्त किया जा सकता है:

class SimpleMux extends Module {
    val io = IO(new Bundle {
        val a = Input(Bool())
        val b = Input(Bool())
        val sel = Input(Bool())
        val out = Output(Bool())
    })
    
    io.out := Mux(io.sel, io.b, io.a)
}

प्रकार और बिट चौड़ाई

चिज़ल विभिन्न प्रकारों का समर्थन करता है और डिज़ाइनरों को स्पष्ट रूप से बिट चौड़ाई निर्दिष्ट करने की अनुमति देता है, जिससे हार्डवेयर संसाधन उपयोग पर बेहतर नियंत्रण मिलता है। उदाहरण के लिए:

val myWire = Wire(UInt(8.W)) // 8-बिट बिना चिह्नित पूर्णांक

हार्डवेयर घटकों का अमूर्तता

भाषा सामान्य हार्डवेयर घटकों के लिए अमूर्तता प्रदान करती है। उदाहरण के लिए, एक सरल रजिस्टर बनाने के लिए:

val reg = RegInit(0.U(8.W)) // 0 पर प्रारंभित 8-बिट रजिस्टर

पैरामीटरयुक्त मॉड्यूल

चिज़ल पैरामीटरयुक्त मॉड्यूल बनाने की अनुमति देता है, जिससे विभिन्न कॉन्फ़िगरेशन के साथ पुन: प्रयोज्य डिज़ाइन संभव होते हैं:

class ParamModule(val size: Int) extends Module {
    val io = IO(new Bundle {
        val input = Input(UInt(size.W))
        val output = Output(UInt(size.W))
    })
    
    io.output := io.input + 1.U
}

शर्तीय अभिव्यक्तियाँ

चिज़ल जटिल हार्डवेयर लॉजिक को सरल बनाने के लिए शर्तीय अभिव्यक्तियों का समर्थन करता है:

val result = Mux(condition, trueValue, falseValue) // मल्टीप्लेक्सर

हार्डवेयर जनरेटर

उच्च-क्रम के कार्यों का उपयोग करके मॉड्यूलर हार्डवेयर घटकों का निर्माण करें ताकि हार्डवेयर कॉन्फ़िगरेशन उत्पन्न किया जा सके:

def makeAdder(n: Int) = new Module {
    val io = IO(new Bundle {
        val a = Input(UInt(n.W))
        val b = Input(UInt(n.W))
        val sum = Output(UInt(n.W))
    })
    io.sum := io.a + io.b
}

संग्रह उपयोगिताएँ

चिज़ल हार्डवेयर तत्वों को प्रभावी ढंग से संशोधित करने के लिए स्काला संग्रह उपयोगिताओं का उपयोग करने की अनुमति देता है:

val wires = VecInit(Seq.fill(4)(Wire(UInt(8.W)))) // 4 तारों का एक वेक्टर बनाएं

अनुक्रमिक लॉजिक

अनुक्रमिक लॉजिक को चिज़ल के समर्पित निर्माणों का उपयोग करके आसानी से व्यक्त किया जा सकता है, जैसे रजिस्टर:

when(condition) {
    reg := newValue
} .otherwise {
    reg := oldValue
}

अंतर्निहित परीक्षण ढांचा

चिज़ल स्काला टेस्ट के साथ एकीकृत होता है, जिससे डेवलपर्स अपने हार्डवेयर डिज़ाइन के लिए स्वाभाविक रूप से परीक्षण लिख सकते हैं:

class MyModuleTester extends PeekPokeTester(new MyModule) {
    poke(dut.a, 1)
    poke(dut.b, 0)
    expect(dut.out, 1)
}

विधियों की श्रृंखला

चिज़ल विधियों की श्रृंखला का समर्थन करता है, जिससे जटिल हार्डवेयर सर्किट की संक्षिप्त और पठनीय परिभाषाएँ संभव होती हैं:

val result = (a + b).asUInt + c

डेवलपर के उपकरण और रनटाइम

IDEs और कंपाइलर

चिज़ल को किसी भी IDE का उपयोग करके विकसित किया जा सकता है जो स्काला का समर्थन करता है, जैसे IntelliJ IDEA जिसमें स्काला प्लगइन है। इसके अतिरिक्त, sbt (स्काला बिल्ड टूल) का सामान्यत: उपयोग परियोजनाओं और निर्भरताओं को प्रबंधित करने के लिए किया जाता है, साथ ही चिज़ल परियोजनाओं को वेरिलॉग कोड में संकलित करने के लिए भी।

एक परियोजना बनाना

चिज़ल परियोजना बनाने के लिए, आप एक मानक sbt परियोजना संरचना स्थापित कर सकते हैं। एक सरल build.sbt फ़ाइल इस प्रकार दिख सकती है:

name := "MyChiselProject"
version := "0.1"
scalaVersion := "2.12.10"

libraryDependencies += "edu.berkeley.cs" %% "chisel3" % "3.4.4"

बनाने के लिए, आप कमांड लाइन से sbt run चलाएंगे और आउटपुट वेरिलॉग फ़ाइलें लक्ष्य निर्देशिका में उत्पन्न होंगी।

अनुप्रयोग

चिज़ल मुख्य रूप से डिजिटल हार्डवेयर डिज़ाइन और सत्यापन में उपयोग किया जाता है। यह निम्नलिखित क्षेत्रों में अनुप्रयोग पाता है:

अन्य भाषाओं के साथ तुलना

चिज़ल पारंपरिक HDLs जैसे वेरिलॉग और VHDL से अलग है क्योंकि यह उच्च-स्तरीय प्रोग्रामिंग भाषाओं में पाए जाने वाले फीचर्स प्रदान करता है, जैसे कार्यात्मक प्रोग्रामिंग, प्रकार सुरक्षा, और उच्च-स्तरीय अमूर्तता।

अन्य भाषाओं की तुलना में:

स्रोत से स्रोत अनुवाद टिप्स

चिज़ल को अन्य हार्डवेयर विवरण भाषाओं में अनुवाद करने के लिए, चिज़ल कंपाइलर जैसे उपकरण सीधे चिज़ल स्रोत कोड से वेरिलॉग उत्पन्न कर सकते हैं। चिज़ल को सीधे किसी अन्य HDL में परिवर्तित करने के लिए कोई व्यापक रूप से ज्ञात स्रोत से स्रोत अनुवाद उपकरण नहीं हैं, लेकिन उत्पन्न वेरिलॉग को आवश्यकतानुसार मैन्युअल रूप से अनुकूलित किया जा सकता है।

मौजूदा स्रोत से स्रोत उपकरण

वर्तमान में, सबसे मान्यता प्राप्त उपकरण स्वयं चिज़ल टूलचेन है, जो उपयोगकर्ताओं को चिज़ल डिज़ाइन को संश्लेषणीय वेरिलॉग कोड में संकलित करने की अनुमति देता है। विभिन्न पुस्तकालयों और उपकरणों के माध्यम से अन्य हार्डवेयर ढांचों के साथ चिज़ल को एकीकृत करने के प्रयास भी चल रहे हैं, जो विभिन्न हार्डवेयर डिज़ाइन पद्धतियों के बीच सहयोग और अंतःक्रियाशीलता को बढ़ावा देते हैं।