अन्तःपरिपथ अनुकरण

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

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

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

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

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

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

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

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

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

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

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

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

अधिकांश होस्ट प्रणाली साधारण व्यावसायिक कंप्यूटर होते हैं जो विकास के लिए उपयोग किए जाने वाले सीपीयू से संबंधित नहीं होते हैं। उदाहरण के लिए, लिनक्स पीसी का उपयोग फ्रीस्केल 68एचसी11 चिप, प्रोसेसर जो लिनक्स नहीं चला सकता है, का उपयोग करके प्रणाली के लिए सॉफ्टवेयर विकसित करने के लिए किया जा सकता है।

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

ऑन-चिप डिबगिंग
ऑन-चिप डिबगिंग अन्तःपरिपथ अनुकरण का विकल्प है। यह समान लक्ष्य को पूरा करने के लिए पृथक दृष्टिकोण का उपयोग करता है।

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

इंटेल
इंटेल 286 पर अन्तःपरिपथ अनुकरण (आईसीई) डिबगिंग का समर्थन करने के लिए, प्रोसेसर पर पांच अतिरिक्त पिन उपलब्ध थे: आईसीई ब्रेकप्वाइंट को बाहरी रूप से बाध्य करने के लिए इनपुट पिन, और उपयोगकर्ता मेमोरी के अतिरिक्त आईसीई-बस के माध्यम से संचालन का चयन करने के लिए आउटपुट पिन के दो वैकल्पिक संयोजन उपलब्ध हैं। 80286 पर दो निर्देशों  सिंगल-बाइट ओवरराइड प्रीफिक्स के साथ, मेमोरी ऑफ़सेट 0x800 में पूर्ण सीपीयू स्थिति को डंप/पुनर्स्थापित करने के लिए सम्मिलित किया गया हैं, इस प्रकार  उपयोगकर्ता-स्मृति तक पहुँचने के लिए आईसीई- मोड को सक्षम करने के लिए अग्रेषिक किया जाता हैं।

यह भी देखें

 * संयुक्त परीक्षण कार्य समूह
 * पृष्ठभूमि डिबग मोड इंटरफ़ेस
 * हार्डवेयर-असिस्टेड वर्चुअलाइजेशन
 * सॉफ्टिस

बाहरी संबंध

 * Jack Ganssle's Beginner's Corner article
 * How to choose an in-circuit emulator By Jonathan Hector