एक FPGA क्या है?


38

मैंने बहुत से लोगों को FPGA के बारे में बात करते देखा है और मुझे पता है कि यह फील्ड-प्रोग्रामेबल गेट ऐरे के लिए है लेकिन यह कैसे काम करता है और FPGA का उपयोग करने का उद्देश्य क्या है?

जवाबों:


30

वे इलेक्ट्रॉनिक घटक हैं जो आपके सर्किट में तर्क जोड़ते हैं (इसलिए वे माइक्रो-कंट्रोलर के समान हैं)। लेकिन डिजाइन दृष्टिकोण फिर यूसी (माइक्रो कंट्रोलर) की तुलना में पूरी तरह से अलग है। एक यूसी में, आप आंतरिक यूसी डिजाइन को नहीं बदल सकते हैं; आप इस पर केवल "शास्त्रीय" कार्यक्रम चला सकते हैं। FPGAs प्रोग्रामिंग नए हार्डवेयर बनाने की तरह है। आप तार्किक फाटकों के बीच नए कनेक्शन बनाते हैं और एक नया, विशेष प्रोसेसर बनाते हैं। और आप इसे अपने घर पर, अपने डेस्क और अपने पीसी पर कर सकते हैं।

अच्छा लग रहा है? हां, लेकिन इसके कुछ नुकसान भी हैं। उदाहरण के लिए, मूल्य (लेकिन मुझे लगता है कि इसकी तुलना करना कठिन है), उच्च बिजली की खपत, और कम घड़ी की गति (लेकिन आप अपने आवेदन को स्मार्ट तरीके से डिजाइन कर सकते हैं, और एक घड़ी चक्र में अधिक संचालन कर सकते हैं)।

उपयोगी कड़ियाँ:

उदाहरण का उपयोग: http://nsa.unaligned.org/


3
मैं ध्यान दूंगा कि कई FPGAs कई CPU कोर सम्‍मिलित करने के लिए काफी बड़े हैं, इस प्रकार FPGA को अपने आप में संपूर्ण कंप्‍यूटर होने देता है।
क्रेग ट्रेडर

3
एक नोट के रूप में, मुझे लगता है कि कम घड़ी की गति भ्रामक हो सकती है। एक पीसी की तुलना में, हाँ। एक pic16 की तुलना में, वे तेज हो सकते हैं, लेकिन यह लागत पर निर्भर करता है। 40MHz पर चलने वाले मेरे हाथों में सबसे सस्ता, लेकिन फिर से उत्पाद भिन्नता।
कोर्तुक

23

एक 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 से परेशान क्यों हों?


2
"मैं एक FPGA खरीद सकता हूं जो लगभग $ 5 के लिए मैंने कभी भी देखे गए किसी भी Arduino डिजाइन को लागू कर सकता है" मुझे खेद है, लेकिन hv ,t? कहा पे?
14

9

यदि आप बुनियादी तर्क द्वारों से परिचित हैं, तो आपको पता होना चाहिए कि वे लगभग तात्कालिक हैं। जब A, B या C बदलते हैं तो ऑपरेशन A और B या C तुरंत बदल जाते हैं।

एक FPGA क्रमबद्ध लॉजिक गेट्स का एक मैट्रिक्स है (जैसे)। आप इनपुट और आउटपुट को परिभाषित कर सकते हैं (इनपुट के संयोजन के रूप में)।

UC में, A + B / C * sqrt (D) कई घड़ी चक्र और कुछ मेमोरी लेगा। एक FPGA में, परिणाम लगभग तत्काल है।

वे वीडियो, डीएसपी, क्रिप्टोग्राफी के लिए महान हैं ...

यही मुख्य लाभ है। आधुनिक FPGAs अब मेमोरी के साथ अनुकूल हैं और uC / FPGA संकर हैं।


मैं कई वर्षों के अनुभव के साथ कई प्रैक्टिसिंग ईई जानता हूं जो अक्सर एक यूपीसी के बजाय डिजाइन में एक एफपीजीए के माध्यम से होता है जहां आप यूसी देखते थे। मुझे वास्तव में लगता है कि वे इंटरफ़ेस हैंडलिंग के लिए महान हैं।
कोर्तुक

हां मुझे लगता है कि यह अच्छा उदाहरण है: armadeus.com/english/index.html । मेरे लिए विशेष रूप से दिलचस्प है सर्वो नियंत्रण उदाहरण: marwww.in2p3.fr/~duval/wiki_html_dump/articles/m/o/t/…
Maciek Sawicki

2
यह भी ध्यान दें कि अधिक से अधिक "C से VHDL" या "C से Verilog" कन्वर्टर्स हैं। वे अभी तक सबसे कुशल चीजें नहीं हैं, लेकिन आप पहले से ही लिखित कोड को हार्डवेयर में बदल सकते हैं जिसका उपयोग गति में सुधार के लिए किया जा सकता है। बहुत अच्छा है अगर आप मुझसे पूछें (और अगर आपके पास इसके लिए आटा है)।
क्रिस गमेल

5

वे एक सामान्य प्रयोजन कंप्यूटर की तुलना में बहुत तेज़ी से एन्क्रिप्शन कुंजी को क्रैक करने के लिए उपयोग किया जाता है। : डी


1
हाहा, मैंने आपके बहुत ही कार्यात्मक वर्णन का आनंद लिया। वे समानांतर प्रसंस्करण में बिल्कुल अद्भुत हैं।
कोर्तुक

एक कोडब्रेकर परियोजना: copacobana.org
hhh

2

एक ASIC बनाम पैसे और जोखिम को बचाने के लिए। जब तक आप

  1. शक्ति या के बारे में गहराई से ध्यान रखें
  2. उनमें से एक गुच्छा का निर्माण कर रहे हैं (कहते हैं> 10k इकाइयों)

एएसआईसी करने की निर्धारित (एनआरई) लागत इसे निषेधात्मक बनाती है।

चूंकि आप आसानी से एक FPGA को बदल सकते हैं, आप डिजाइन को कम अनुकरण कर सकते हैं और लैब क्विकर में प्रवेश कर सकते हैं। इसके अलावा, आप एक आंशिक डिजाइन कर सकते हैं और उस पर निर्माण कर सकते हैं, जैसे कि सॉफ्टवेयर में।

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