अधमरी कुंडी क्यों खराब हैं?


22

मेरे कंपाइलर ने मेरे कॉम्बिनेटरियल लूप्स ( always @(*)वेरिलोग में) के बारे में शिकायत की है । मुझे यह भी बताया गया था कि अनुमान लगाने वाली कुंडी को अधिमानतः बचा जाना चाहिए।

क्या वास्तव में गलत है latches गलत है? वे निश्चित रूप से कॉम्बीनेटरियल छोरों को लिखना आसान बनाते हैं।


यह तुम क्या कर रहे एक एचडीएल उदाहरण शामिल करने के लिए अच्छा होगा
shuckc

मैंने देखा है कि इस प्रश्न को हाल ही में एक दो बार उद्धृत किया गया है। किसी के लिए भी जो इस तरह से आने वाले विशेषज्ञ नहीं हैं, ध्यान दें कि ओली ग्लेसर के अलावा सभी उत्तर, गलत और / या अनहेल्दी के कुछ संयोजन हैं।
ईएमएल

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

जवाबों:


20

एक "कुंडी" एक "फ्लिप-फ्लॉप" से अलग है जिसमें एक एफएफ केवल एक घड़ी की धार के जवाब में अपना आउटपुट बदलता है। एक कुंडी एक घड़ी के अलावा कुछ के जवाब में अपना आउटपुट बदल सकती है। उदाहरण के लिए, SR-Latch में एक सेट और एक रीसेट इनपुट है और यदि उनमें से कोई भी सक्रिय है तो आउटपुट बदल सकता है। जहाँ SR-FF केवल एक सेट पर रीसेट करता है या एक घड़ी के किनारे पर भी रीसेट होता है।

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

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

सभी समय के मुद्दों पर जा रहे हैं कि latches का कारण हो सकता है कि यहाँ क्या कवर किया जा सकता है, लेकिन मैं आपको एक उदाहरण देता हूं:

मान लें कि आपके पास एक SR-Latch है, और आप चाहते हैं कि यह हर बार सेट हो जाए जब 8-बिट काउंटर एक निश्चित मूल्य तक पहुंचता है। मुझे यकीन नहीं है कि वेरिलॉग कोड क्या होगा, लेकिन वीएचडीएल में कोड है: सेट <= '1' जब गिनती = "11010010" बाकी '0'; वह सेट सिग्नल हमारे SR-Latch पर सेट इनपुट पर जाता है।

जो तर्क उत्पन्न होता है वह विशुद्ध रूप से दहनशील है; गेट्स, या गेट्स और इनवर्टर (या LUT) का मिश्रण। लेकिन उस दहनशील तर्क के माध्यम से संकेत पथ हमेशा सही नहीं होता है और "सेट" संकेत उस पर glitches हो सकता है। गेट्स के एक विशेष समूह के माध्यम से संकेत पथ दूसरे समूह की तुलना में अधिक समय ले सकता है, जिससे आउटपुट अंतिम स्थिति में बसने से पहले एक संक्षिप्त क्षण के लिए सक्रिय हो जाता है।

यह आउटपुट गड़बड़ हमारे SR-Latch को सेट कर सकता है, भले ही यह माना नहीं गया था। यदि हम SR-Latch से SR-FF पर स्विच करते हैं, तो उसी घड़ी को बंद किया जाता है जो काउंटर है, तो SR-FF राज्य बदलने से पहले एक पूरे घड़ी चक्र की प्रतीक्षा करेगा। संक्षेप में, यह देखने से पहले सेट सिग्नल के व्यवस्थित होने की प्रतीक्षा करेगा।

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

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

बेशक, कभी-कभी कुंडी की आवश्यकता होती है। आपको बस उन्हें बहुत कम ही उपयोग करना होगा, केवल जब पूरी तरह से आवश्यक हो, और तब आपको तर्क को सही ढंग से डिजाइन करना होगा ताकि कोई गड़बड़ न हो।


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

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

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

13

क्या एक अनुमानित कुंडी बनाता है?
कॉम्बीनेटरियल लॉजिक के लिए, सर्किट का आउटपुट केवल इनपुट का एक कार्य है और इसमें कोई मेमोरी या आंतरिक स्थिति (कुंडी) नहीं होनी चाहिए।

वेरिलोग में, एक वैरिएबल अपने पिछले मूल्य को रखेगा यदि उसे हमेशा ब्लॉक में मान नहीं सौंपा गया है । इस वर्तमान मान को संग्रहीत करने के लिए एक कुंडी बनाई जानी चाहिए।

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

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

Latches समय मुद्दों और दौड़ की स्थिति के लिए नेतृत्व कर सकते हैं। वे कॉम्बीनेटरियल प्रतिक्रिया का नेतृत्व कर सकते हैं - आउटपुट को इनपुट में वापस लाना - जो अप्रत्याशित हो सकता है।

इनफर्ट लैच बनाने से बचने के लिए:

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

पी। चू द्वारा "एफपीजीए प्रोटोटाइप द्वारा वेरिलॉग उदाहरण" से कुछ अंशों को हटा दिया गया


2
"एफपीजीए वेरिफोग उदाहरणों द्वारा प्रोटोटाइप" सिंथेसिस के लिए व्यावहारिक वेरिलोग सीखने के लिए एक अच्छी किताब है। इसमें मूल दहनशील सामान से लेकर मूल अनुक्रमिक तक के कुछ अच्छे उदाहरण हैं, जो UART, VGA, सॉफ्ट कोर प्रोसेसर (Picoblaze) और यहां तक ​​कि पोंग गेम जैसे उपयोगी डिजाइन तक ले जाते हैं। इसमें बेसिक टेस्टबेंच और सिमुलेशन भी शामिल है। @ रैंडमब्लू, अगर आपको यह पहले से नहीं मिला है तो आपको एक कॉपी पकड़नी चाहिए। मेरा मानना ​​है कि उन्होंने वीएचडीएल संस्करण भी किया।
ओली ग्लेसर

8

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

मैं कुंडी का उपयोग करने के खिलाफ सलाह दूंगा जब तक आप उनके बिना बिल्कुल नहीं कर सकते हैं (जैसे कि समय की अधिकतम घड़ी की आवृत्ति को पूरा करने के लिए उधार लेना) और संयोग से कम संभावना को कम करने के लिए कोडिंग तकनीकों का उपयोग करें।


6

दहनशील तर्क और प्रतिक्रिया का उपयोग करके निर्मित अनुक्रमिक तर्क डिजाइन आम तौर पर एक धारणा बनाते हैं जो भौतिक फाटकों का उपयोग करते समय उचित प्रतीत होगा: कि इनपुट के परिवर्तन के जवाब में एक गेट का आउटपुट नहीं बदलेगा, जब तक कि इनपुट के वास्तव में बदलने के कुछ समय बाद तक। कुछ अवसर ऐसे होते हैं, जहां वास्तविक गेट्स का उपयोग करते समय यह धारणा नहीं रह सकती है (जैसे अगर एक तेज़ NOR गेट और एक तेज़ इन्वर्टर दोनों एक सिग्नल द्वारा संचालित होते हैं, जो VSS से VDD तक धीरे-धीरे बढ़ता है, और यदि इन्वर्टर 1.2 वोल्ट पर स्विच करता है, जबकि NOR गेट 1.7 वोल्ट तक स्विच नहीं करता है, NOR गेट पलटनेवाला के उत्पादन को कम देख सकता है इससे पहले कि यह देखता है कि धीरे-धीरे बढ़ते संकेत उच्च हो गए हैं), लेकिन ऐसी समस्याओं को आम तौर पर एक बफर जोड़कर हल किया जा सकता है जब भी धीरे-धीरे बदल रहा हो सिग्नल को एक से अधिक गंतव्य पर रूट किया जाता है। दुर्भाग्य से,

समस्या यह है कि जब तक स्पष्ट रूप से निर्देश नहीं दिया जाता है, तब तक एक FPGA संकलक मनमाने ढंग से एक अलग सर्किट के साथ एक अलग-अलग सर्किट को बदल सकता है जिसमें एक ही स्थिर-राज्य व्यवहार होता है, लेकिन पूरी तरह से अलग समय हो सकता है। उदाहरण के लिए, मान लीजिए कि एक जटिल कॉम्बीनेटरियल फ़ंक्शन F को छह इनपुट U लगते हैं। Z के माध्यम से F को सीधे सर्किट P को खिलाया जाता है, और (F NAND Z) को सर्किट Q को खिलाया जाता है। कंपाइलर को एहसास हो सकता है कि Q को खिलाया गया मूल्य केवल पर निर्भर करेगा। F जब Z उच्च होता है, और एक फ़ंक्शन की गणना कर सकता है F 'जो F की तरह होता है सिवाय इसके कि Z को उच्च मान लिया जाता है; Q को (F NAND Z) के बजाय (F NAND Z) खिलाया जा सकता है। यह पूरी तरह से संभव होगा कि पी के सबसे कुशल प्राप्ति में पांच गेट विलंब होंगे, लेकिन क्यू का सबसे कुशल अहसास केवल दो होगा। इस प्रकार,

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


0

डिजाइन में एक कुंडी कैसे पकड़नी है, इसके बारे में विस्तार से इस लिंक में बताया गया है।

https://www.doulos.com/knowhow/fpga/latches/


1
EE.SE में आपका स्वागत है! आप लिंक से कुछ प्रासंगिक विवरणों को शामिल करके अपने उत्तर को बेहतर बना सकते हैं। यह सुनिश्चित करता है कि मूल पृष्ठ गायब होने पर भी आपका उत्तर उच्च गुणवत्ता वाला है।
डेविड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.