जवाबों:
वे इलेक्ट्रॉनिक घटक हैं जो आपके सर्किट में तर्क जोड़ते हैं (इसलिए वे माइक्रो-कंट्रोलर के समान हैं)। लेकिन डिजाइन दृष्टिकोण फिर यूसी (माइक्रो कंट्रोलर) की तुलना में पूरी तरह से अलग है। एक यूसी में, आप आंतरिक यूसी डिजाइन को नहीं बदल सकते हैं; आप इस पर केवल "शास्त्रीय" कार्यक्रम चला सकते हैं। FPGAs प्रोग्रामिंग नए हार्डवेयर बनाने की तरह है। आप तार्किक फाटकों के बीच नए कनेक्शन बनाते हैं और एक नया, विशेष प्रोसेसर बनाते हैं। और आप इसे अपने घर पर, अपने डेस्क और अपने पीसी पर कर सकते हैं।
अच्छा लग रहा है? हां, लेकिन इसके कुछ नुकसान भी हैं। उदाहरण के लिए, मूल्य (लेकिन मुझे लगता है कि इसकी तुलना करना कठिन है), उच्च बिजली की खपत, और कम घड़ी की गति (लेकिन आप अपने आवेदन को स्मार्ट तरीके से डिजाइन कर सकते हैं, और एक घड़ी चक्र में अधिक संचालन कर सकते हैं)।
उपयोगी कड़ियाँ:
उदाहरण का उपयोग: http://nsa.unaligned.org/
एक FPGA का शाब्दिक तर्क गेट्स का एक सरणी है जिसे क्षेत्र में प्रोग्राम किया जा सकता है। फ्लिप फ्लॉप, मल्टीप्लेक्सर्स, 4-बिट लुक टेबल, आदि जो सी-लाइक लैंग्वेज (वेरिलॉग) का उपयोग करके किसी भी तरह से कनेक्ट किया जा सकता है।
एक यूसी, जैसे कि एवीआर, भी इसी तरह के लॉजिक गेट से बना होता है, लेकिन डिवाइस के बन जाने पर वे कॉन्फ़िगर हो जाते हैं। ज़रूर, इसमें रैम और फ्लैश है ताकि आप इनपुट्स पढ़ने और आउटपुट को नियंत्रित करने के लिए सॉफ्टवेयर लिख सकें, लेकिन आप गेट्स की वास्तविक व्यवस्था को नहीं बदल सकते। गेट्स को हमेशा ALU, मेमोरी कंट्रोलर, सीरियल पोर्ट आदि में व्यवस्थित किया जाएगा।
यूसी का लाभ यह है कि आप इसे (अपने डेस्क पर) फ़ील्ड में प्रोग्राम कर सकते हैं, एक आसान, परिचित, उच्च स्तरीय भाषा जैसे कि सी। समस्या है, सॉफ्टवेयर "धीमा" है। इनपुट नियंत्रण को आउटपुट के लिए, सरलतम स्थिति में, आप लिख सकते हैं:
शून्य लूप () {buttonState = digitalRead (buttonPin); if (buttonState == High) {
digitalWrite (ledPin, HIGH);
} और {digitalWrite (ledPin, LOW); }}
इसे एक दर्जन विधानसभा निर्देशों में बदल दिया जाएगा, इसलिए लूप एक इनपुट से एक आउटपुट को नियंत्रित करने के लिए एक माइक्रोसेकंड या ऐसा करेगा। और यह तेजी से करने के लिए पूरी यूसी चिप लेता है। निश्चित रूप से, आप बहुत कुछ कर सकते हैं, लेकिन फिर उस आउटपुट को नियंत्रित करने की आपकी क्षमता कम हो जाएगी क्योंकि यूसी अन्य चीजों को करने में व्यस्त हो जाता है।
एक FPGA में, मैं गेट्स को 1 घड़ी में आउटपुट कंट्रोल कंट्रोल करने के लिए कॉन्फ़िगर कर सकता था। इसलिए आउटपुट शायद 25 नैनोसेकंड की देरी के साथ इनपुट का पालन करेगा। वही घड़ी की अवधि का उपयोग करते हुए, यह 40X तेज है। और FPGA के बाकी द्वार कई अन्य काम करने के लिए उपलब्ध हैं, जो इस छोटे से कार्य की गति को प्रभावित नहीं करेंगे।
FPGA के लिए कोड एक साधारण फ्लिप फ्लॉप होगा:
हमेशा @ (posedge घड़ी) ledPin <= बटनपिन;
यह केवल 1 FPGA सेल लेता है, लगभग 40 गेट, एक FPGA में हजारों में से।
मैं अपने FPGA को कुछ और करने के लिए फिर से शुरू कर सकता हूं, उदाहरण के लिए चार इनपुट के संयोजन के आधार पर एलईडी को नियंत्रित करना, अभी भी एक घड़ी में, फिर भी उस 1 FPGA सेल का उपयोग करना। या इनपुट से एक धारा धारा के आधार पर एलईडी को नियंत्रित करें, कुछ FPGA कोशिकाओं में, जो 100 द्वारों की होगी। इसलिए मैं सीरियल डेटा के आधार पर एलईडी को नियंत्रित कर सकता हूं, "ON" या "OFF" कह सकता हूं, धारावाहिक धारा के साथ बहुत उच्च दर (आसानी से 20MHz) पर, और फिर भी केवल FPGA की क्षमता के एक छोटे से अंश का उपयोग कर सकता है।
तो एक FPGA का लाभ स्पष्ट रूप से गति है। यह कुछ भी कर सकता है जो एक यूसी कर सकता है, और यह बहुत तेजी से कर सकता है, समानांतर में किया गया सब कुछ के साथ। जटिल चीजें जो एक यूसी को मिलीसेकंड में ले जाती हैं, एक एफपीजीए माइक्रोसेकंड या उससे कम में कर सकता है। जब तक FPGA में द्वार बचे हैं, मैं FPGA में पिछले कार्यों की गति या संचालन को प्रभावित किए बिना इसमें और अधिक कार्य जोड़ सकता हूं। वैसे, एक FPGA बहुत आसानी से 20MHz की क्लॉक रेट चला सकता है।
लागत एक विभेदक नहीं है। मैं एक FPGA खरीद सकता हूं जो लगभग किसी भी Arduino डिज़ाइन को लागू कर सकता है जिसे मैंने कभी भी $ 5 के लिए देखा है, एक Arduino AVR चिप के समान। FPGAs के लिए मुफ्त टूलचाइन्स (IDE, कंपाइलर, डीबगर) भी हैं।
शक्ति कोई विभेदक नहीं है। चूँकि मैं एक समान फ़ंक्शन को UC प्राप्त करने के लिए FPGA को बहुत कम क्लॉक रेट पर चला सकता हूं, और इसके गेट्स के छोटे हिस्से (अप्रयुक्त गेट्स केवल लीकेज पावर का उपयोग करता हूं), FPGA लगभग किसी भी CC- आधारित की शक्ति को हरा सकता है डिज़ाइन।
एक FPGA के लिए सबसे बड़ा नकारात्मक पहलू यह है कि यह परिभाषित करने के लिए कोड लिखने और एक गैर-तुच्छ FPGA डिज़ाइन को UC प्रोग्राम की तुलना में अधिक जटिल और समय लेने वाला है। एक विशिष्ट यूसी परियोजना जो आप एक शाम में कर सकते हैं एक FPGA पर दिन लग सकते हैं।
अन्य, संभावित रूप से ठीक करने योग्य समस्याएं यह हैं कि अधिकांश लोग सॉफ्टवेयर प्रोग्रामिंग में प्रशिक्षित होते हैं, लेकिन कुछ हार्डवेयर प्रोग्रामिंग को समझते हैं। आप वेरिलॉग को काफी आसानी से सीख सकते हैं। लेकिन आपको सॉफ़्टवेयर डिज़ाइन के बजाय हार्डवेयर डिज़ाइन के बारे में भी सोचना होगा। डिजाइन पैटर्न बहुत अलग हैं।
एक और मुद्दा यह है कि एफपीजीए 8 से 20 पिन डीआईपी पैकेज में नहीं आता है। वे 100-पिन या बड़े सतह माउंट पैकेज में आते हैं, इसलिए बोर्ड बनाना कठिन है।
और एक अंतिम समस्या यह है कि UC का उपयोग करने के लिए उन सभी दिलचस्प परियोजनाओं को ठीक-ठीक लागू किया जा सकता है, इसलिए एक FPGA से परेशान क्यों हों?
यदि आप बुनियादी तर्क द्वारों से परिचित हैं, तो आपको पता होना चाहिए कि वे लगभग तात्कालिक हैं। जब A, B या C बदलते हैं तो ऑपरेशन A और B या C तुरंत बदल जाते हैं।
एक FPGA क्रमबद्ध लॉजिक गेट्स का एक मैट्रिक्स है (जैसे)। आप इनपुट और आउटपुट को परिभाषित कर सकते हैं (इनपुट के संयोजन के रूप में)।
UC में, A + B / C * sqrt (D) कई घड़ी चक्र और कुछ मेमोरी लेगा। एक FPGA में, परिणाम लगभग तत्काल है।
वे वीडियो, डीएसपी, क्रिप्टोग्राफी के लिए महान हैं ...
यही मुख्य लाभ है। आधुनिक FPGAs अब मेमोरी के साथ अनुकूल हैं और uC / FPGA संकर हैं।
वे एक सामान्य प्रयोजन कंप्यूटर की तुलना में बहुत तेज़ी से एन्क्रिप्शन कुंजी को क्रैक करने के लिए उपयोग किया जाता है। : डी
एक ASIC बनाम पैसे और जोखिम को बचाने के लिए। जब तक आप
एएसआईसी करने की निर्धारित (एनआरई) लागत इसे निषेधात्मक बनाती है।
चूंकि आप आसानी से एक FPGA को बदल सकते हैं, आप डिजाइन को कम अनुकरण कर सकते हैं और लैब क्विकर में प्रवेश कर सकते हैं। इसके अलावा, आप एक आंशिक डिजाइन कर सकते हैं और उस पर निर्माण कर सकते हैं, जैसे कि सॉफ्टवेयर में।