26 / 37 · अवधारणा
काउंटर debugging और न्यूनतम प्रतिउदाहरण
Reset, enable और चक्रीय सीमा के दोष अलग करने वाले छोटे परीक्षण बनाएँ।
पाठ पढ़ना मुफ़्त है। प्रगति सेव करने के लिए नामांकन करें।
अंतिम मान सही होने पर भी क्रम गलत हो सकता है
काउंटर का अंत 0 पर होने से reset और wraparound सही सिद्ध नहीं होते। हमेशा 0 पर अटका परिपथ भी यही परिणाम देगा। सामान्य वृद्धि, hold, resetरीसेट अवस्था को विनिर्दिष्ट प्रारंभिक मान पर लौटाने वाला नियंत्रण। उसका तुल्यकालिक या अतुल्यकालिक होना और अन्य नियंत्रणों पर प्राथमिकता साथ तय करें। और पढ़ें और सीमा से वापसी को अलग-अलग दिखाने वाले अवलोकन बिंदु चाहिए।
दो कार्यों को जानबूझकर एक साथ सक्रिय करें
| स्थिति | जाँचने वाला विनिर्देश |
|---|---|
| reset=1, enable=0 | क्या enable reset को रोक देता है? |
| reset=1, enable=1 | क्या reset वृद्धि पर प्राथमिक है? |
| count=M-1, enable=0 | क्या रुका होने पर गलत वापसी होती है? |
| count=M-1, enable=1 | क्या M-1 से ठीक 0 पर लौटता है? |
| किनारों के बीच reset बदलना | क्या तुल्यकालिक reset अगले किनारे पर लागू होता है? |
नियंत्रणों को केवल एक-एक करके जाँचने से प्राथमिकता दोष पकड़ना कठिन है।
हर स्तंभ एक उदयी किनारेउदयी किनारा (rising edge) क्लॉक के 0 से 1 होने का क्षण। यह CLK=1 के पूरे स्तर-अंतराल से अलग है। और पढ़ें का अवलोकन है। इनपुट किनारे से ठीक पहले के हैं; नाम में after वाली अवस्थाएँ अद्यतन के तुरंत बाद की हैं। स्तंभों का क्रम नमूनों का क्रम दिखाता है, भौतिक प्रसार विलंबप्रसार विलंब इनपुट बदलने के बाद आउटपुट सही मान पर स्थिर होने तक का समय। तार्किक समतुल्यता और समय-संबंधी गुण अलग हैं। और पढ़ें नहीं। प्रारंभिक count=5 है। गलत परिपथ reset को केवल enable के अंदर जाँचता है, इसलिए पहले किनारे पर 5 बना रहता है। अंतिम मान समान होने पर भी पहली असंगति दोष दिखा देती है।
तरंगरूप डेटा देखें
| संकेत | तरंगरूप | बस मान |
|---|---|---|
| edge | 234 | E0 → E1 → E2 |
| reset | 101 | |
| enable | 01. | |
| सही बाद में | 234 | 0 → 1 → 0 |
| दोष बाद में | 234 | 5 → 6 → 0 |
Modulo-8 संदर्भ परिपथ को प्रारंभिक 101 से चलाएँ। enable=0, reset=1 चुनकर क्लॉक आगे बढ़ाएँ। सही मान 000 है। Reset को enable के अंदर रखने वाला गलत RTL 101 बनाए रखता है। Reset हटाने के बाद enable=0 पर hold और enable=1 पर वृद्धि भी अलग करें।
तुल्यकालिक reset को enable पर प्राथमिकता है। enable=0 पर संग्रहित मान बनाए रखें। q=101; q_next = (q + 1) mod 8
संदर्भ मॉडल से पहली असंगति खोजें
यह समीकरण 0–M-1 की सामान्य अवस्थाओं पर आधारित कार्यात्मक मॉडल है। सीमा से बाहर की अवस्था से वापसी अलग नीति के रूप में जोड़ें। हर किनारे पर अपेक्षित मान निकालकर वास्तविक मान से मिलाएँ। पहली असंगति से ठीक पहले के किनारे का इनपुट और अवस्था कारण खोजने का सबसे छोटा शुरुआती बिंदु है।
यदि विफलता 1000 चक्र बाद दिखे, तो अनावश्यक इनपुट हिस्से हटाकर वही त्रुटि 3–5 किनारों में दोहराएँ। RTL सुधारने के बाद न्यूनतम प्रतिउदाहरण regression test में रखें। डिज़ाइन और परीक्षण को एक साथ उसी गलत शर्त में बदलने से बचने के लिए संशोधित विनिर्देश और कोड की अलग समीक्षा करें।
खुद आज़माएँ
गलत कोड ने reset को if(en) begin if(rst) ... end में रखा है। इसे सबसे छोटे परीक्षण में दिखाने के लिए प्रारंभिक अवस्था और इनपुट कैसे चुनेंगे?
व्याख्या पढ़ें
शून्य से अलग प्रारंभिक अवस्था चुनें और rst=1, en=0 वाला एक उदयी किनारा दें। Reset प्राथमिक होने के विनिर्देश में परिणाम 0 होना चाहिए, लेकिन गलत परिपथ पुराना मान रखेगा। प्रारंभिक अवस्था 0 रखने से दोष छिप जाएगा।