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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

यह भी देखें

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

बाहरी संबंध

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