वेरिलोग या वीएचडीएल ओवर सी का उपयोग करने में प्रेरणा क्या है?


12

मैं एक प्रोग्रामिंग बैकग्राउंड से आता हूं और हार्डवेयर या फर्मवेयर (कम से कम इलेक्ट्रॉनिक्स और Arduino) के साथ बहुत ज्यादा गड़बड़ नहीं करता।

C या कुछ असेंबली जैसी प्रोग्रामिंग भाषाओं पर Verilog और VHDL जैसे हार्डवेयर विवरण भाषाओं (HDL) का उपयोग करने में क्या प्रेरणा है?

क्या यह मुद्दा पसंद का है?

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

इसलिए, मेरे कुछ सवाल हैं (कुछ भी समझाने में संकोच न करें):

  1. एक फर्मवेयर वास्तव में या तो एचडीएल में या एक सॉफ्टवेयर प्रोग्रामिंग भाषा में लिखा जा सकता है, या यह उसी मिशन को पूरा करने का एक और तरीका है? मुझे वास्तविक दुनिया के उदाहरण पसंद आएंगे। प्रत्येक विकल्प से क्या अड़चनें आती हैं?

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

  3. मैंने पढ़ा है कि फर्मवेयर ज्यादातर ROM या फ्लैश पर जलाया जाता है। इसमें किस तरह से प्रतिनिधित्व किया गया है? बिट्स में, सॉफ्टवेयर की तरह? यदि हां, तो गहरा अंतर क्या है? क्या यह फर्मवेयर के मामले में अनुकूलित सर्किट की उपलब्धता है?

मुझे लगता है कि मैंने कुछ मान्यताओं में यहां और वहां गलती की, कृपया मुझे माफ कर दें। धन्यवाद!


14
प्रोग्रामिंग भाषाएं सॉफ्टवेयर का वर्णन करने के लिए हैं, हार्डवेयर वर्णन भाषाएं हार्डवेयर का वर्णन करने के लिए हैं।
इग्नासियो वाज़केज़-अब्राम्स

1
आप Verilog या VHDL के साथ फर्मवेयर नहीं लिखते हैं - आप चिप्स, प्रोग्राम FPGA और डिज़ाइन मदरबोर्ड को डिज़ाइन करने के लिए Verilog या VHDL का उपयोग करते हैं। फर्मवेयर लिखने के लिए आप C या असेंबली का उपयोग करें। मदरबोर्ड को डिज़ाइन करने के लिए आप C / C ++ का भी उपयोग कर सकते हैं - एक पुस्तकालय है जिसे SystemC कहा जाता है जिसे C कंपाइलर द्वारा एक प्रोग्राम बनाने के लिए संकलित किया जा सकता है जो आपके डिज़ाइन को सिमुलेट करता है लेकिन सर्किट में SystemC कंपाइलर द्वारा भी संकलित किया जा सकता है।
स्लीबेटमैन 13

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

जवाबों:


28

C या कुछ असेंबली जैसी प्रोग्रामिंग भाषाओं पर Verilog और VHDL जैसे हार्डवेयर विवरण भाषाओं (HDL) का उपयोग करने में क्या प्रेरणा है?

सीपीयू और सीएम असेंबली एक सीपीयू को बताने के लिए अच्छी भाषाएँ हैं कि क्या करना है। वे एक राज्य मशीन द्वारा क्रमिक रूप से किए जाने वाले कार्यों का वर्णन करते हैं।

डिजिटल सर्किट के मनमाने संग्रह का वर्णन करने या उसे परिभाषित करने के लिए एचडीएल अच्छी भाषाएं हैं। वे उन तरीकों से समानांतर रूप से किए गए कार्यों को व्यक्त कर सकते हैं जो प्रोग्रामिंग भाषाएं नहीं कर सकती हैं। वे उन तरीकों के बीच के अंतराल के लिए समय सीमा का भी वर्णन कर सकते हैं जो प्रोग्रामिंग भाषाएं नहीं कर सकती हैं।

मुझे संदेह व्यक्त करते हुए आश्चर्य हुआ कि क्या सी या असेंबली में फर्मवेयर लिखना है (यदि आपके पास आवश्यक रूप से सीपीयू नहीं है तो विधानसभा उपयुक्त कैसे है?)

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

चूंकि वह विशेष रूप से एक माइक्रोकंट्रोलर (बाह्य उपकरणों के साथ एक सीपीयू), सी या असेंबली के साथ सिस्टम के बारे में पूछ रहे हैं, दोनों फायरवायर विकास के लिए उचित विकल्प हैं, और एचडीएल नहीं हैं।

एक फर्मवेयर वास्तव में या तो एचडीएल में या एक सॉफ्टवेयर प्रोग्रामिंग भाषा में लिखा जा सकता है, या यह उसी मिशन को पूरा करने का एक और तरीका है?

यह निर्भर करता है कि आपके पास किस तरह का हार्डवेयर है। यदि आपके पास सीपीयू है, तो एक प्रोग्रामिंग भाषा का उपयोग करें। यदि आपके पास एक FPGA है या आप एक ASIC डिजाइन कर रहे हैं, तो एक HDL का उपयोग करें। यदि आप बहुत बड़ी मात्रा में डिजिटल लॉजिक डिज़ाइन कर रहे हैं, तो आप सिस्टमविरल जैसी भाषाओं के बीच में से एक को देख सकते हैं।

मैंने पढ़ा है कि फर्मवेयर ज्यादातर ROM या फ्लैश पर जलाया जाता है। इसमें किस तरह से प्रतिनिधित्व किया गया है? बिट्स में, सॉफ्टवेयर की तरह? यदि हां, तो गहरा अंतर क्या है? क्या यह फर्मवेयर के मामले में अनुकूलित सर्किट की उपलब्धता है?

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

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

या तो मामले में, फर्मवेयर को आमतौर पर एक एप्रोम (या एक मेजबान मशीन पर डिस्क पर बिट्स के रूप में संग्रहीत किया जाता है जो एम्बेडेड सिस्टम के फिर से शुरू होने पर इसे डोनलोड करेगा)। लेकिन यह उन्हें एक दूसरे के समान नहीं बनाता है।


जब आप VHDL / Verilog में लिखते हैं, तो यह उस तर्क की कल्पना करना आसान होता है जिसे लागू किया जाएगा और इस प्रकार अनुकूलित किया जाएगा। सी। के लिए भी ऐसा नहीं कहा जा सकता है। यहां तक ​​कि SystemC को अभी भी वास्तविक भौतिक कार्यान्वयन से पर्याप्त तलाक दिया गया है कि अप्रत्याशित संश्लेषण परिणाम हो सकते हैं
जोनरब

@JonRB, यदि आप यूसी या यूपी के लिए कोडिंग कर रहे हैं, तो मुझे वास्तव में एचडीएल के साथ ऐसा करने के किसी भी तरीके के बारे में पता नहीं है। मैं मानता हूं कि जब कोडिंग लॉजिक, SystemVerilog या SystemC ऐसे सिस्टम के लिए है जो इतने बड़े हैं कि व्यक्तिगत गेट स्तर पर सब कुछ डिजाइन करने की कोशिश करने के लिए व्यावहारिक नहीं है।
फोटॉन

2
ध्यान दें कि VHDL और Verilog का उपयोग तब भी किया जाता है जब आपके पास कोई हार्डवेयर नहीं होता है। उन्हें FPGA बिटस्ट्रीम के बजाय सीधे सर्किट में संकलित किया जा सकता है। उदाहरण के लिए Apple ने GUI योजनाबद्ध कैप्चर के बजाय Verilog का उपयोग करके अपने मदरबोर्ड को डिज़ाइन करने के लिए उपयोग किया है क्योंकि संस्करण नियंत्रण के लिए बेहतर समर्थन है, ग्रीटिंग और बस स्क्रिप्ट का उपयोग करके पार्स करना जब आपका डिज़ाइन मालिकाना बाइनरी चित्र के बजाय सादे पाठ है।
स्लीपबेटमैन

10

आपके प्रश्न के पहले भाग के लिए, एक या दूसरे का उपयोग करने की प्रेरणाओं के बारे में: सी और एचडीएल (वीएचडीएल / वेरिलोग) के बीच एक बुनियादी अंतर है । C एक सॉफ्टवेयर प्रोग्रामिंग लैंग्वेज है (असेंबली है), VHDL / Verilog हार्डवेयर डिस्क्रिप्शन लैंग्वेज हैं। वे एक ही उद्देश्य के लिए नहीं हैं।

संकलित होने पर C को असेंबली कोड में अनुवादित किया जाता है (इसके द्विआधारी रूप में, अर्थात, मशीन भाषा) । यह कोड निर्देशों की एक श्रृंखला है जो सीपीयू को बुनियादी कार्यों की एक श्रृंखला करने के लिए कहता है (एक रजिस्टर मूल्य बदलें, एक अतिरिक्त प्रदर्शन करें, आदि)।

दूसरी ओर, एक एचडीएल को हार्डवेयर में संश्लेषित किया जाता है। VHDL में आप उदाहरण के लिए कुछ लिख सकते हैं:

output <= input1 + input2;

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

दरअसल, आप VHDL में एक CPU डिज़ाइन कर सकते हैं ( सॉफ्ट कोर प्रोसेसर वीएस हार्ड कोर प्रोसेसर देखें ), और सी में इसके लिए सॉफ्टवेयर लिखें ...

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


3
  1. यह आपकी वास्तुकला पर निर्भर करता है। यदि आपके पास एक सीपीयू (या, आमतौर पर, एक माइक्रोकंट्रोलर) है, तो आपको फर्मवेयर को एक नियमित प्रोग्रामिंग भाषा (विधानसभा सहित) में लिखने की आवश्यकता है। यदि आपके पास FPGA जैसा कुछ है, तो आपके फर्मवेयर को एचडीएल में लिखा जाना चाहिए। HDLs (मेरे ज्ञान के अनुसार) ऐसे प्रोग्राम उत्पन्न नहीं कर सकते जिन्हें पारंपरिक सीपीयू द्वारा कुशलता से निष्पादित किया जा सकता है, और एक एफपीजीए पारंपरिक कार्यक्रमों को बॉक्स से बाहर नहीं करता है। हालाँकि, आप अपने FPGA को CPU के रूप में कॉन्फ़िगर कर सकते हैं और फिर उसी के साथ एक पारंपरिक कार्यक्रम को अंजाम दे सकते हैं। इसके लिए फर्मवेयर की दो परतों की आवश्यकता होती है, सीपीयू के निर्माण के लिए एचडीएल में लिखी गई निचली परत और उस सीपीयू पर निष्पादित करने के लिए एक पारंपरिक प्रोग्रामिंग भाषा में लिखी गई उच्च परत।
  2. फर्मवेयर और सॉफ्टवेयर के बीच कोई कठिन अंतर नहीं है। कई उपकरणों पर, फर्मवेयर को फ्लैश मेमोरी में संग्रहीत किया जाएगा, लेकिन एक आधुनिक फोन पर, लगभग सब कुछ फ्लैश मेमोरी में संग्रहीत किया जाता है, और फर्मवेयर और सॉफ़्टवेयर के बीच अंतर स्पष्ट नहीं है (ज्यादातर लोग शायद बेसबैंड प्रोसेसर फर्मवेयर को प्रोग्राम करने के लिए कोड पर विचार करेंगे। , और अधिकांश लोग एप्लिकेशन प्रोग्राम सॉफ़्टवेयर पर विचार करेंगे, लेकिन सटीक सीमा कहां है?)।
  3. जैसा कि मैंने 2 में कहा, कोई स्पष्ट कट अंतर नहीं है, इस विचार के अलावा कि फर्मवेयर थोड़ा अधिक स्थायी है।

3

हार्डवेयर संगामिति एक प्रमुख प्रेरणा है।

इलेक्ट्रॉनों समानांतर तारों में एक ही समय में प्रवाह कर सकते हैं, इसलिए हम हार्डवेयर डिजाइन करते समय इसे ध्यान में रखना चाहते हैं।

VHDL में, यदि आप कुछ ऐसा लिखते हैं:

x <= a or b;
y <= a and b;
z <= x xor y;

( processया के बाहर function, जो स्पष्ट रूप से इसे अनुक्रमिक के रूप में चिह्नित करता है), तो आपने इस तथ्य को एनकोड किया है कि:

  • x, y, z, aऔर bतारों हैं
  • aऔर bइनपुट सिग्नल हैं
  • xएक के उत्पादन से जुड़ा है orसर्किट, जो लेता है aऔर bइनपुट के रूप में
  • और इसी तरह अन्य लाइनों के लिए

यह देखने के लिए कैसे है कि वास्तविक हार्डवेयर में संश्लेषित हो जाएगा, और है कि आसान है xऔर yएक ही समय में मूल्यांकन किया जाता है।

        +-----+
A--+----+     |  X
   |    | OR  +-----+
B----+--+     |     |  +-----+
   | |  +-----+     +--+     |
   | |                 | XOR +-- Z
   | |  +-----+     +--+     |
   | +--+     |  Y  |  +-----+
   |    | AND +-----+
   +----+     |
        +-----+

फिर, जब सर्किट में समय लगता है, तो सिम्युलेटर (जो आमतौर पर अनुक्रमिक कार्यक्रम होता है) ने सर्किट के भौतिकी को कुछ इस तरह अनुकरण किया है:

  • है aया bबदल गया है? हाँ? अरे, xपर निर्भर करता है a। आइए अपडेट करते हैं x
  • yपर भी निर्भर करता है a। उसे भी अपडेट करें।
  • zपर निर्भर करता है x। अपडेट होने के कारण xइसे अपडेट करें।
  • कुछ भी है जो xपर निर्भर करता है ( aया b) अद्यतन किया गया है? नहीं? के लिए yऔर z। ठीक है, हम इस कदम के साथ कर रहे हैं।

यह "दिलचस्प" संभावित परिणामों की ओर जाता है जिनका कोई अनुक्रमिक एनालॉग नहीं है, लेकिन जो संभावित भौतिक स्थितियों का प्रतिनिधित्व करते हैं:

  • x <= not xअनुकरण की अनंत पुनरावृत्ति को जन्म देगा। सिमुलेटर बस एक निश्चित गहराई के बाद काट सकते हैं।
  • x <= 0; x <= 1एक त्रुटि (शॉर्ट सर्किट) की ओर जाता है। यह वह जगह है कारणों में से एक कारण है कि std_logicमौजूद है।

फिर भी, भले ही वीएचडीएल मॉडल सी की तुलना में अधिक बारीकी से हार्डवेयर करता है, यह स्वयं इसका पूर्ण विवरण नहीं है:

  • केवल संश्लेषित में वीएचडीएल का एक सबसेट
  • कई भौतिक सरलीकरण किए गए हैं, विशेष रूप से, जो संकेत असीम रूप से तेजी से प्रचारित करते हैं, https://en.wikipedia.org/wiki/Static_timing_analysis TODO देखें, हो सकता है कि वेरीलॉग में देरी का मॉडल संभव हो: http://www.asic-world.com /verilog/gate3.html#Gate_and_Switch_delays

अंत में VHDL उच्च स्तर की मानव समझने योग्य सर्किट कार्यक्षमता और निचले स्तर के सिंथेसिज़ेबिलिटी के बीच एक अच्छा संतुलन प्रदान करता है।

दूसरी ओर सी, सीपीयू के क्रमिक रूप से बात करने पर अधिक केंद्रित है।

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

लेकिन आप अनिवार्य रूप से एक वीएचडीएल सिम्युलेटर, और एक अधिक क्रिया भाषा के साथ फिर से लागू करेंगे। सही काम के लिए सही उपकरण मुझे लगता है।

ऐसे उपकरण भी हैं जो C को VHDL /programming/8988629/can-you-program-fpgas-in-c-like-languages ​​में कनवर्ट करते हैं, लेकिन कम प्रदर्शन की उम्मीद करते हैं क्योंकि वे उच्चतर उच्च रूपांतरण वाले रूपांतरण हैं।


0

एचडीएल का उपयोग हार्डवेयर का वर्णन (संश्लेषण) करने के लिए किया जाता है जहां प्रोग्रामिंग भाषा का उपयोग पहले से ही संश्लेषित हार्डवेयर यानी सीपीयू को प्रोग्राम करने के लिए किया जाता है।

आप एक FPGA पर उस सीपीयू को संश्लेषित करने के लिए वीएचडीएल या बिटस्ट्रीम के रूप में सीपीयू के नरम कोर संस्करण प्राप्त कर सकते हैं।


-1

एक प्रोसेसर एक बड़ी मात्रा में सर्किटरी का उपयोग करता है, क्रमिक रूप से बड़ी संख्या में संचालन करने के लिए, अधिकांश घटकों को अलग-अलग समय पर अलग-अलग संचालन करने के लिए उपयोग करने की अनुमति देता है।

एक FPGA में कई सर्किट होते हैं, जो कम से कम व्यक्तिगत रूप से नहीं कर सकते - विशेष रूप से परिष्कृत संचालन करते हैं, लेकिन सभी एक साथ और स्वतंत्र रूप से कार्य करने में सक्षम हैं।

मान लीजिए कि कोई ऐसा चिप लगाना चाहता है जो कई कार्यों को अंजाम दे, जिसमें से 15 इनपुटों की निगरानी कर रहा है:

  • किसी भी समय उच्च आउटपुट सेट करना सभी इनपुट कम से कम 21ms के लिए स्थिर रहा है और इनपुट की संख्या जो तीन से अधिक है
  • किसी भी समय आउटपुट कम सेट करना सभी इनपुट कम से कम 21ms के लिए स्थिर रहा है और इनपुट की संख्या जो उच्च है तीन में से एक नहीं है
  • किसी भी इनपुट में परिवर्तन और सभी इनपुट कम से कम 20ms के लिए स्थिर रहे हैं।

यदि किसी के पास एक माइक्रोकंट्रोलर है जो अन्य चीजें कर रहा है, लेकिन उन इनपुटों की जांच करने और आउटपुट सेट करने के लिए प्रत्येक 20ms में कुछ माइक्रोसेकंड को अलग कर सकता है, तो माइक्रोकंट्रोलर जो अन्य कार्यों को करने के लिए उपयोग करता है, वह भी इंगित किए गए कार्य करने के लिए उपयोग करने योग्य होगा। ऊपर, इसलिए बहुत कम सर्किटरी (कुछ रॉम और शायद रैम के अलावा) को उस कार्य के लिए समर्पित होने की आवश्यकता होगी। दूसरी ओर, इनपुट में बदलाव के समय और आउटपुट के ठीक से प्रदर्शित होने में समय लग सकता है।

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


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

@ क्रिसस्ट्रैटन: शायद मुझे सुझाव देना चाहिए था कि अगर समय की आवश्यकताएं सख्त हो जाएं तो चीजें बदल सकती हैं? अनुरोध करते हुए कि हर 20ms में एक सीपीयू में कुछ माइक्रोसेकंड उपलब्ध होते हैं, को अंतर्निहित प्रणाली में किसी भी बदलाव की आवश्यकता नहीं हो सकती है, लेकिन यदि प्रतिक्रिया समय 200us की आवश्यकता है, तो ऐसी आवश्यकता के लिए तेजी से सीपीयू की आवश्यकता हो सकती है अन्यथा, यदि आवश्यक हो, तो इसकी आवश्यकता होगी 20us के तहत, इसे संभालने के लिए एक अतिरिक्त CPU जोड़ना आवश्यक हो सकता है, और यदि 200ns से कम है तो CPU के साथ इसे पूरा करना असंभव हो सकता है।
सुपरकैट

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

@ChrisStratton: यदि एक उपयुक्त पिन-चेंज अवरोधन सुविधा मौजूद है और पहले से ही किसी और चीज़ के लिए उपयोग नहीं की जा रही है, जो कि निरंतर मतदान की आवश्यकता से बच सकती है, लेकिन यदि कई चीजें एक बार में होती हैं, तो उन्हें किसी भी दर पर क्रमिक रूप से संसाधित करने की आवश्यकता होगी सीपीयू उन्हें संभाल सकता है।
सुपरकैट

अनुक्रमिक प्रसंस्करण एक गैर-मुद्दा है जिसे इनपुट और प्रतिक्रिया के बीच आपकी समस्या का बयान देने में भारी देरी हुई है। और यहां तक ​​कि अगर वर्तमान एमसीयू बहुत व्यस्त था, तो इस उद्देश्य के लिए एक जोड़ना एक एफपीजीए जोड़ने की लागत का एक अंश होगा। वास्तविक रूप से FPGA में इस समस्या को हल करने का एकमात्र तरीका या तो है क्योंकि पहले से ही स्पेयर स्लाइस के साथ एक है और संकेतों को इसे स्थानांतरित कर दिया गया है, या एक शैक्षिक या शौक संदर्भ में एक कृत्रिम परियोजना के रूप में।
क्रिस स्ट्रैटन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.