C से सिलिकॉन: हार्डवेयर के रूप में सॉफ्टवेयर / फर्मवेयर समाधान कैसे लागू करें?


13

इस प्रश्न के प्रकाश में , मैं सोच रहा था कि क्या सॉफ्टवेयर समाधान को हार्डवेयर कार्यान्वयन में बदलने के लिए काफी मानक प्रक्रिया थी। मुझे और मेरी कल्पना को क्षमा करें, लेकिन क्या कोई संकलक होगा जो सी प्रोग्राम ले सकता है और इसे ट्रांजिस्टर, प्रतिरोधों आदि के एक योजनाबद्ध या शायद यहां तक ​​कि प्रसिद्ध पीसीबी के संदर्भ में संकलित कर सकता है?

मुझे एहसास है कि मैं इस परिदृश्य को गलत दृष्टिकोण से देख सकता हूं। ऐतिहासिक रूप से मेरे स्वयं के अनुभव से, आमतौर पर आपके पास हार्डवेयर का कुछ टुकड़ा होता है जिसे किसी व्यक्ति ने सॉफ़्टवेयर समाधान के रूप में लागू किया है (हार्डवेयर अनुकरण सोचें)। क्या यह अवधारणा रिवर्स में भी मौजूद है? ये बड़ी कंपनियां इसे कैसे करती हैं जैसे कि सॉफ्टवेयर बनाम हार्डवेयर आईपी रूटिंग?


यह भी देखें "मैं अपने सिंगलथेड सी प्रोग्राम को मल्टीथ्रेडेड क्यों नहीं बना सकता हूं?"
pjc50

@ pjc50: मैं कहां देख सकता हूं "मैं अपने सिंगलथेड सी प्रोग्राम को मल्टीथ्रेडेड क्यों नहीं बना सकता हूं?" ?
दाविदिक

मेरे पास एक विशिष्ट उदाहरण नहीं है, लेकिन यह एक ऐसा सवाल है जिसे मैंने लोगों को पहले पूछते देखा है। यह भी संबंधित है कि हार्डवेयर आंतरिक रूप से समानांतर है जबकि सॉफ्टवेयर "स्वाभाविक रूप से" अनुक्रमिक है जिस तरह से लोग इसके बारे में सोचते हैं और प्रोग्राम लिखते हैं।
pjc50

जवाबों:


11

नहीं, सॉफ्टवेयर को हार्डवेयर में बदलने का कोई मानक समाधान नहीं है। आम तौर पर बोलना, सॉफ्टवेयर लेना जो हार्डवेयर कार्यान्वयन को ध्यान में रखकर नहीं लिखा गया था, उसे आसानी से विशाल कचरे और अक्षमताओं के बिना हार्डवेयर में परिवर्तित नहीं किया जा सकता है। आमतौर पर, सबसे अच्छी बात यह है कि एक ऐसी चिप बनाएं जिसमें CPU और ROM-- हों और सॉफ्टवेयर को ROM में डालें।

वर्षों से ऐसे कंपाइलर हैं जो "सी-लाइक" कोड लेते हैं और इसे हार्डवेयर में संकलित करते हैं - बहुत उसी तरह जैसे वीएचडीएल या वेरिलॉग को हार्डवेयर में संकलित किया जा सकता है। लेकिन महत्वपूर्ण बात यह है कि यह "सी-लाइक" है, और सी। आप अभी भी नहीं ले सकते हैं, उदाहरण के लिए, एक सी / सी ++ प्रोग्राम जो पीआई की गणना करता है और जादुई रूप से इसे पीआई की गणना करने वाले हार्डवेयर में परिवर्तित करता है। इन सी-लाइन भाषाओं में से अधिकांश चले गए हैं, या किसी भी संख्या में उपयोग नहीं किया गया है। इस के अधिक लोकप्रिय संस्करणों में से एक SystemC है , लेकिन यह ध्यान रखना महत्वपूर्ण है कि यह C / C ++ नहीं है और जेनेरिक "चलो सॉफ्टवेयर लिखें और फिर इसे हार्डवेयर में संकलित करें" के लिए उपयोगी नहीं है। आपको अभी भी "कुछ हार्डवेयर लिखने की ज़रूरत है, जिसे सॉफ्टवेयर में भी संकलित किया जा सकता है"।

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


न केवल SystemC वास्तविक C ++ है, यह सिर्फ C ++ पुस्तकालय है। आप किसी भी साधारण C ++ कोड का उपयोग कर सकते हैं जिसे आप SystemC के साथ पसंद करते हैं। उस ने कहा, SystemC हार्डवेयर के साथ स्वचालित रूप से उत्पन्न करने के लिए बहुत कुछ नहीं है। यह सिस्टम को अनुकरण करने की दिशा में अधिक उन्मुख है, वास्तु निर्णय लेने में मदद करता है, और सॉफ़्टवेयर टीमों को हार्डवेयर उपलब्ध होने से पहले आरंभ करने की अनुमति देता है।
थेरन

यह वास्तव में मुझे यह समझने में मदद करता है कि विशिष्ट कार्य करने वाले विशिष्ट हार्डवेयर क्यों हैं।
चाड हैरिसन

कई अन्य सी से एचडीएल कंपाइलर हैं जो इस उद्देश्य के लिए डिज़ाइन किए गए थे।
एंडरसन ग्रीन

5

सबसे पास की चीज Altera का C-to-Hardware (C2H) कंपाइलर होगा । यह आपके द्वारा सुझाए जा रहे कार्यों में से कुछ कर सकता है। लेकिन वहाँ defiantly caveats हैं। आप किसी भी C कोड को हार्डवेयर में नहीं बदल सकते, न ही आप चाहते हैं। लेकिन विशिष्ट कार्य अच्छी तरह से काम करते हैं और आप प्रदर्शन में नाटकीय वृद्धि देख सकते हैं।

आमतौर पर आप एक Altera FPGA में NIOS II सॉफ्टकोर प्रोसेसर लागू करेंगे। फिर आप इसके लिए कुछ एएनएसआई सी कोड लिखेंगे जैसे आप किसी अन्य प्रोसेसर को। फिर कहें कि आपके द्वारा लिखे गए सी कार्यों में से एक में कुछ भारी गणित शामिल हैं जो कुछ समानांतर निष्पादन से प्रदर्शन-वार को लाभान्वित करेंगे। आप C2H संकलक को लागू करते हैं, "हार्डवेयर में लागू करें" कहते हैं और यह अनिवार्य रूप से उस फ़ंक्शन को NIOS II सॉफ्टकोर प्रोसेसर के परिधीय में बदल देता है।

यहां एएनएसआई सी में एक मंडेलब्रोट अभिकलन कोडिंग और फिर इसे हार्डवेयर में लागू करने का एक उदाहरण है:

संकलक स्तर 2 (-ओ 2) का उपयोग करते हुए सबसे तेज एनआईओएस II प्रोसेसर पर चलने वाले समान एल्गोरिथ्म की तुलना में सी 2 एच संकलक मेंडेलब्रोट एल्गोरिदम के परिणामस्वरूप कम से कम 60x की गति में सुधार होता है। यह गति वृद्धि समानांतरता और तेजी से चलने की गति के कारण है जो हार्डवेयर प्रदान कर सकता है, जो सामान्य-प्रयोजन प्रसंस्करण इकाई से संभव नहीं है।

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


1
Xilinx में विवाडो HLS (उच्च-स्तरीय संश्लेषण) नामक एक तुलनीय उपकरण है, जिसे पहले AutoESL के रूप में जाना जाता था। इसी तरह के कैविएट लागू होते हैं: यह एक अच्छा काम करता है कोड को RTL में बदलना अगर यह उस तरह का कोड है जो स्वचालित रूप से RTL में परिवर्तित करना आसान है।
थेरान

@Theran मैं इस बात से अनजान था कि Xilinx के पास प्रतिस्पर्धी उत्पाद है। मुझे यह देखना होगा। धन्यवाद!
एम्बेड

2

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

C कोड जो संश्लेषित है (यानी एक हार्डवेयर विवरण में प्रदान किया जा सकता है) और यहां हार्डवेयर = डिजिटल लॉजिक, सॉफ़्टवेयर डेवलपर्स द्वारा निर्धारित किसी भी कोडिंग प्रतियोगिता को नहीं जीतेगा।

यहां कुछ उल्लेखनीय विक्रेताओं की सूची दी गई है जो ASIC प्रवाह की भीड़ के लिए C -> सिलिकॉन उपकरण की आपूर्ति करते हैं।

  • Forte Cynthesizer

  • मेंटर गुलेल

  • ब्लूस्पीक सी

  • Synopsys Synphony (पूर्व- Synfora)

  • ताल सी-टू-सिलिकॉन


1

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.