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 द्वारा उत्पादित / खपत किया जाए।