FPGA के बनाम माइक्रोकंट्रोलर [बंद]


36

मैंने Arduino परिवार (विशेषकर Sanguino) पर काम किया है, कुछ सरल उपकरणों और एक साधारण फोटोट्रोप का निर्माण किया है। मैं इस प्रकार माइक्रोकंट्रोलर्स के साथ बहुत सहज हूं - विशेष रूप से एटलम का। मैं यह जानने के लिए उत्सुक हूं कि FPGA के मानक माइक्रोकंट्रोलर से कैसे भिन्न हैं। मैं एक तकनीकी पृष्ठभूमि (C / C ++ प्रोग्रामिंग) से हूं और इस प्रकार तकनीकी उत्तरों को पसंद करूंगा। बस यह ध्यान रखें कि मैं इलेक्ट्रॉनिक्स डोमेन में एक नौसिखिया (मेरे s / w अनुभव के सापेक्ष) हूं। :)

मैं इस प्रश्न के माध्यम से गया था और यह अच्छा था लेकिन मैं और अधिक गहन विवरणों की तलाश कर रहा हूं।

धन्यवाद! सुश्रुत।


परिशिष्ट - क्या वास्तविक दुनिया में कोई भी अच्छा उदाहरण है जो हाइब्रिड आर्किटेक्चर का उपयोग करता है, अर्थात, fpga के माइक्रोकंट्रोलर्स के साथ संयोजन?
सुश्रुत जे मैयर

सुश्रुत जे मैयर - आम तौर पर जब आपके पास एफपीजीए होता है और माइक्रो की जरूरत होती है, तो माइक्रो एफपीजीए में लागू हो जाता है ।
कॉनर वुल्फ

हां, फेक नेम, सहमति। हालाँकि, मैं किसी भी वास्तविक दुनिया के मामलों को देखना चाह रहा था जहाँ FPGA और MCU दोनों का उपयोग सिस्टम को डिजाइन करने के लिए किया जाता है। यह विचार किया जा रहा है कि डिजाइन के FPGA भाग का उपयोग 'evolvable' h / w को कार्यान्वित करने के लिए किया जाता है, जो सिस्टम में बदलते इनपुट के अनुसार प्रतिक्रिया करता है और मॉर्फ करता है, जबकि मुख्य तार्किक प्रसंस्करण MCU द्वारा किया जाता है।
सुश्रुत जे मैयर

जवाबों:


48

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

एक MCU समय-सीमित है। अधिक काम पूरा करने के लिए, आपको अधिक प्रोसेसर चक्र की आवश्यकता होती है। घड़ियों में उनकी आवृत्तियों के लिए बहुत वास्तविक सीमाएं होती हैं, इसलिए एक कम्प्यूटेशनल दीवार को हिट करना आसान होता है। हालाँकि, एक FPGA अंतरिक्ष-सीमित है। अधिक काम पूरा करने के लिए, आप केवल अधिक सर्किट जोड़ते हैं। यदि आपका FPGA पर्याप्त बड़ा नहीं है, तो आप एक बड़ा खरीद सकते हैं। यह एक ऐसे सर्किट का निर्माण करना बहुत कठिन है जो सबसे बड़े FPGA में फिट नहीं हो सकता है, और यहां तक ​​कि अगर आप ऐसा करते हैं तो एक साथ कैसे FPGAs को चेन डेज़ी करने का वर्णन करने वाले ऐप नोट हैं।

FPGAs समानांतर निष्पादन पर अधिक ध्यान केंद्रित करते हैं। कभी-कभी आपको इस बात की चिंता होती है कि आपके MCU के ISR को कितनी देर तक सेवा में बाधा आती है, और क्या आप अपनी कठिन-वास्तविक समय सीमा को प्राप्त कर पाएंगे। हालाँकि, FPGA में हर समय बहुत सी Finite State Machines (FSM) चल रही हैं। वे "फेमटो-कंट्रोलर" की तरह हैं, नियंत्रण तर्क के छोटे बादलों की तरह। वे सभी एक साथ चल रहे हैं, इसलिए एक बाधा को याद करने के बारे में कोई चिंता नहीं है। आपके पास ADC को इंटरफ़ेस करने के लिए एक FSM हो सकता है, एक microcontroller के पते / डेटा बस के लिए एक अन्य FSM, एक स्टीरियो कोडेक को डेटा स्ट्रीम करने के लिए एक और FSM, फिर भी ADC से कोडेक के लिए डेटाफ्लो को बफर करने के लिए एक और FSM ... - यह सुनिश्चित करने के लिए एक सिम्युलेटर का उपयोग करने की आवश्यकता है कि सभी FSM सद्भाव में गाते हैं।

FPGAs एक पीसीबी लेआउट डिजाइनर के गीले सपने हैं। वे बेहद कंफर्टेबल हैं। आपके पास कई अलग-अलग लॉजिक इंटरफेस (LVTTL, LVCMOS, LVDS, आदि), अलग-अलग वोल्टेज और यहां तक ​​कि ड्राइव स्ट्रेंथ हो सकते हैं (इसलिए आपको श्रृंखला-समाप्ति प्रतिरोधों की आवश्यकता नहीं है)। पिन swappable हैं; क्या आपने कभी एक MCU पता बस देखी है जहां पिन चिप के आसपास बिखरे हुए थे? आपके पीसीबी डिजाइनर को शायद सभी संकेतों को एक साथ सही ढंग से टाई करने के लिए बस vias का एक गुच्छा गिराना होगा। FPGA के साथ, PCB डिज़ाइनर तब सिग्नलों को चिप में चला सकता है जो किसी भी क्रम में सुविधाजनक हो, और फिर डिज़ाइन को FPGA टूलकिन में वापस एनोटेट किया जा सकता है।

FPGAs में बहुत सारे अच्छे, फैंसी खिलौने भी हैं। मेरे पसंदीदा में से एक Xilinx चिप्स में डिजिटल क्लॉक मैनेजर है। आप इसे एक घड़ी सिग्नल खिलाते हैं, और यह चार से अधिक आवृत्ति वाले मल्टीप्लायरों और डिवाइडर का उपयोग करके प्राप्त कर सकता है, जो कि प्राचीन 50% शुल्क चक्र और 100% चरण के साथ है ... और यह घड़ी के तिरछे हिस्से का भी हिसाब लगा सकता है। प्रचार से उत्पन्न होता है चिप के लिए बाहरी देरी!

EDIT (परिशिष्ट का उत्तर):

आप एक "सॉफ्ट कोर" को FPGA में रख सकते हैं। आप शाब्दिक रूप से एक माइक्रोकंट्रोलर सर्किट के साथ एक साथ वायरिंग कर रहे हैं, या शायद आप किसी और के सर्किट को अपने डिज़ाइन में गिरा रहे हैं, जैसे कि Xilinx का PicoBlaze या MicroBlaze या Altera का Nios। लेकिन C-> VHDL कंपाइलर की तरह, ये कोर एक FSM और डेटापैड, या एक वास्तविक माइक्रोकंट्रोलर का उपयोग करने की तुलना में थोड़ा फूला हुआ और धीमा होता है। विकास उपकरण डिजाइन प्रक्रिया में महत्वपूर्ण जटिलता भी जोड़ सकते हैं, जो एक बुरी बात हो सकती है जब FPGAs पहले से ही बेहद जटिल चिप्स हैं।

कुछ FPGAs भी हैं जिनमें "हार्ड कोर" हैं, जो कि Xilinx की Virtex4 श्रृंखला में अंतर्निहित हैं, जिनके पास FPGA कपड़े के साथ एक वास्तविक, समर्पित IBM PowerPC है।

EDIT2 (टिप्पणी का जवाब):

मुझे लगता है कि अब मैं देख रहा हूँ ... आप एक असतत MCU को एक FPGA से जोड़ने के बारे में पूछ रहे हैं; यानी दो अलग-अलग चिप्स। ऐसा करने के लिए अच्छे कारण हैं; FPGA की हार्ड कोरेस हैं और जो कि सभ्य नरम कोर का समर्थन करने के लिए काफी बड़ी हैं, आमतौर पर कई सैकड़ों पिन के साथ राक्षस होते हैं जो एक BGA पैकेज की आवश्यकता होती है, जो आसानी से पीसीबी के डिजाइन को 10 के कारक से बढ़ाता है।

सी बहुत आसान है, हालांकि, इसलिए MCUs निश्चित रूप से एक FPGA के साथ मिलकर काम कर रहे हैं। चूंकि सी लिखना आसान है, आप एमसीयू में "दिमाग" या केंद्रीय एल्गोरिथ्म लिख सकते हैं, जबकि एफपीजीए उप-एल्गोरिदम को लागू कर सकता है जिसे त्वरित करने की आवश्यकता हो सकती है। सी कोड में बदलने वाली चीजों को डालने की कोशिश करें, क्योंकि इसे बदलना आसान है, और एफपीजीए को अधिक समर्पित प्रकार के सामान होने के लिए छोड़ दें जो अक्सर बदल जाएगा।

MCU डिजाइन टूल का उपयोग करना भी आसान है। डिज़ाइन टूल्स के लिए FPGA बिट फ़ाइल बनाने में कई मिनट लगते हैं, यहां तक ​​कि कुछ सरल डिज़ाइनों के लिए, लेकिन जटिल MCU प्रोग्राम आमतौर पर कुछ सेकंड लगते हैं। MCU के साथ गलत होने के लिए बहुत कम है, इसलिए वे डीबग करना भी आसान कर रहे हैं ... मैं समझ नहीं पा रहा हूं कि FPGAs कितने जटिल हो सकते हैं। आपके पास जो भी आपके पास है उसके लिए आपको वास्तव में डेटशीट प्राप्त करने की आवश्यकता है, और आपको इसके प्रत्येक पृष्ठ को पढ़ने का प्रयास करना चाहिए। मुझे पता है, यह कुछ सौ पृष्ठों का है ... वैसे भी करो।

उन्हें कनेक्ट करने का सबसे अच्छा तरीका एक बाहरी पते और डेटा बस के साथ एमसीयू का उपयोग करना है। तब आप बस MCU में FPGA सर्किट को मैप कर सकते हैं, और अपना "रजिस्टर" जोड़ सकते हैं, जिसमें प्रत्येक का अपना पता हो। अब FPGA 32-बिट टाइमर की तरह कस्टम परिधीय जोड़ सकता है, जो 8 बाइट्स के बीच ओवरफ्लो को रोकने के लिए पहली बाइट पढ़ने पर सभी 4 बाइट्स को एक साथ ला सकता है। आप इसे अलग-अलग एडीसी की तरह अन्य चिप्स से मेमोरी मैप्स में ग्लू लॉजिक के रूप में भी उपयोग कर सकते हैं।

अंत में, कुछ MCU को FPGA जैसे "बाहरी मास्टर" के साथ उपयोग करने के लिए डिज़ाइन किया गया है। सरू कुछ USB MCUs बनाता है जिनके अंदर एक 8051 है, लेकिन आशय यह है कि USB डेटा को FPGA द्वारा उत्पादित / खपत किया जाए।


यह अच्छी जानकारी है, धन्यवाद। मैंने एचडीएल संकलक को C / C ++ के बारे में सुना है। क्या आपने उन्हें बिल्कुल आज़माया है?
सुश्रुत जे मैयर

वे रहे हैं ... ठीक है। एकल तर्क ब्लॉक के लिए, यह बहुत बुरा नहीं है। लेकिन मैं उस तरह के कंपाइलर के माध्यम से पूरा डिज़ाइन नहीं लिखूंगा। वे बहुत कुशल नहीं हैं क्योंकि भाषाएं अविश्वसनीय रूप से भिन्न हैं ... आपको विशेष सम्मेलनों का उपयोग करना होगा, वे बस किसी पुराने एएनएसआई सी कोड को नहीं लेते हैं।
अज्ज ४१०

धन्यवाद, यह उपयोगी है। मैंने लैटिस सेमीकंडक्टर की XP2 Brevia dev किट ऑर्डर की है। जब मैं बुनियादी FPGA डिजाइनिंग अवधारणाओं के साथ सहज हो जाता हूं, तो मैं कुछ HDL को C कंपाइलरों में आज़माना चाहता हूं।
सुश्रुत जे मैयर

बस मूल प्रश्न में मेरे परिशिष्ट का उत्तर देखा। धन्यवाद - तो क्या आप कह रहे हैं कि व्यावहारिक रूप से (आज की तकनीक के साथ कम से कम), एक मानक MCU + का FPGA का हाइब्रिड आर्किटेक्चर वास्तविक दुनिया की स्थितियों में वास्तव में प्रयोग करने योग्य होने के लिए बहुत कम मूल्य है?
सुश्रुत जे मैयर

बहुत बढ़िया। धन्यवाद ajs410 मुझे उम्मीद है कि रोमांचक हाइब्रिड आर्च संभावनाओं में आने से पहले कुछ सप्ताह अपने आप को fpga में बूट करने में बिताएंगे!
सुश्रुत जे मेरा

10

"वास्तविक दुनिया में उदाहरण ... माइक्रोकंट्रोलर के साथ FPGAs का संयोजन?"

सिद्धांत रूप में, एक पर्याप्त बड़े FPGA अकेले कुछ भी कर सकता है जो एक FPGA प्लस एक माइक्रोकंट्रोलर कर सकता है - शायद FPGA के अंदर एक नरम CPU लागू करके। व्यवहार में, प्रदर्शन के एक स्तर में अक्सर निचले हिस्से की लागत होती है और FPGA के साथ लागू किए जाने पर कम शक्ति की आवश्यकता होती है और अकेले FPGAs (या MCUs) की तुलना में एक अलग माइक्रोकंट्रोलर होता है। यहाँ FPGAs और माइक्रोकंट्रोलर दोनों के साथ कुछ अधिक प्रसिद्ध उपकरण हैं:

  • Elphel कैमरा ; एल्फेल प्रोजेक्ट विकी में Xilinx (R) स्पार्टन 3e 1200K गेट्स FPGA और एक ETRAX FS प्रोसेसर है जो GNU / Linux चला रहा है।
  • TS-7500 एक 5000 lut के जाली FPGA और एक 250MHz Cavium ARM9 सीपीयू कि लिनक्स चला सकते हैं।
  • गुब्बारा बोर्ड एक Xilinx परहेज़गार FPGA और एक एआरएम सीपीयू है
  • कई नन्हा weeny Linux SBCs में FPGA और CPU दोनों शामिल हैं
  • Armadeus परियोजना विकि दस्तावेजों दोनों एक Xilinx परहेज़गार -3 FPGA और एक 400 मेगाहर्ट्ज ARM9 सीपीयू के साथ कुछ बोर्डों बोर्ड।
  • Blackfin हैंडी बोर्ड दोनों एक Xilinx परहेज़गार 3E FPGA और एक 600 मेगाहर्ट्ज एनालॉग डिवाइसेज Blackfin® ADSP-BF537 प्रोसेसर भी शामिल है। (इसमें MMU नहीं है, इसलिए यह पूर्ण लिनक्स नहीं चला सकता है, लेकिन यह uClinux चला सकता है)।
  • "Minimig" (मिनी Amiga) डिस्क नियंत्रक अभिनय के रूप में एक Xilinx परहेज़गार -3 FPGA, एक M68000 सीपीयू, और एक छोटे PIC MCU भी शामिल है।

4

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

हालांकि कुछ उत्पाद लाइनों को धुंधला कर देते हैं। कुछ उदाहरण:

  1. जैसे ही उनके पास RAM और गुणक ब्लॉक होते हैं, बड़े FPGAs में कठिन CPU निर्मित होते हैं (बड़ी परियोजनाओं को अक्सर किसी भी तरह की आवश्यकता होती है)।
  2. कुछ माइक्रोकंट्रोलर्स का लक्ष्य समानांतर संचालन (एक्सएमओएस एक्सएस 1, एटमेल ज़ेमेगा, ग्रीनएरे, पैरालैक्स प्रोपेलर) है
  3. कुछ चिप्स संकर के रूप में तैयार किए गए हैं (सरू PSOC, Atmel FPSLIC)

एक अनिवार्य प्रोग्रामिंग पृष्ठभूमि से आ रहा है, यह हार्डवेयर में डिजाइन करने के लिए काफी समायोजन है क्योंकि आपको FPGAs के लाभ प्राप्त करने की आवश्यकता है। आप अनुभव को अन्यत्र भी उपयोगी पाएंगे, हालाँकि।


1

वास्तव में MCR जैसे AVR में कोई अंतर नहीं है, और एक FPGA में प्रोग्राम किया गया है। OpenCores साइट में एक AVR के लिए VHDL कोड है जिसका उपयोग FPGA में किया जा सकता है। आप इसका अध्ययन कर सकते हैं और देख सकते हैं कि यह कैसे काम करता है, और यहां तक ​​कि एक उपयुक्त FPGA बोर्ड खरीदे बिना एक सिम्युलेटर में अपने लिए इसे आज़माएं।


1
अक्सर मुझे लगता है कि FPGAs को समान MCU के लिए धीमी गति से चलना चाहिए, या वे काफी अधिक महंगे होंगे। अधिक महंगे मामले में आप नियंत्रक और बाहरी पिन के बीच आसानी से अतिरिक्त हार्डवेयर को लागू कर सकते हैं, अक्सर इसके लायक है।
कोर्तुक

अगर किसी सिस्टम में FPGA की जरूरत है, तो MCU "फ्री" है।
लियोन हेलर

1

माइक्रोकंट्रोलर डिजिटल सर्किट होते हैं जो अपने प्रोग्राम मेमोरी से कमांड को क्रमिक रूप से एक के बाद एक कमांड निष्पादित करते हैं। एक माइक्रोकंट्रोलर के डिजिटल हार्डवेयर सर्किट को फिक्स किया जाता है और डिजिटल सर्किट को शामिल करने वाले विभिन्न गेट्स के बीच के इंटरकनेक्ट्स स्थायी होते हैं और सिलिकॉन पर etched होते हैं। जहां FPGAs को डिजिटल गेट्स के एक पूल के रूप में माना जा सकता है (वास्तव में हालांकि इसके बजाय luts मौजूद हैं) जिनमें प्रोग्रामेबल इंटरकनेक्ट्स हैं। अब किसी भी डिजिटल सर्किट (यहां तक ​​कि एक माइक्रोकंट्रोलर) को इंटरकनेक्ट्स प्रोग्रामिंग करके fpga पर बनाया जा सकता है।

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