ई (सत्यापन भाषा)

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

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

विशेषताएँ
ई की मुख्य विशेषताएं हैं:
 * यादृच्छिक और विवश यादृच्छिक प्रोत्साहन पीढ़ी
 * कार्यात्मक कवरेज मीट्रिक परिभाषा और संग्रह
 * अस्थायी भाषा जिसका उपयोग दावे लिखने के लिए किया जा सकता है
 * प्रतिबिंब क्षमता के साथ पहलू-उन्मुख प्रोग्रामिंग भाषा
 * भाषा DUT-तटस्थ है जिसमें आप SystemC/C++ मॉडल, RTL मॉडल, गेट लेवल मॉडल, या यहां तक ​​कि हार्डवेयर त्वरण बॉक्स में रहने वाले DUT को सत्यापित करने के लिए एकल ई टेस्टबेंच का उपयोग कर सकते हैं (ई पद्धति के लिए यूवीएम एक्सेलेरेशन का उपयोग करके) )
 * अत्यधिक पुन: प्रयोज्य कोड बना सकते हैं, खासकर जब टेस्टबेंच यूनिवर्सल सत्यापन पद्धति (यूवीएम) का पालन करते हुए लिखा गया हो
 * पूर्व में ई पुन: उपयोग पद्धति (ईआरएम) के रूप में जाना जाता था
 * यूवीएम ई लाइब्रेरी और दस्तावेज़ीकरण यहां से डाउनलोड किया जा सकता है: UVM World

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

टिप्पणियाँ
निष्पादन योग्य ई कोड कोड-सेगमेंट मार्कर <' और '> के भीतर संलग्न है:

उदाहरण
 मार्करों के बाहर कुछ भी एक टिप्पणी है <' सिस्टम का विस्तार करें { // यह एक टिप्पणी वेरिलॉग शैली है - यह वीएचडीएल शैली में एक टिप्पणी है post_generate भी { है आउट (... और मार्कर के भीतर बाकी सब कुछ निष्पादन योग्य कोड है। ); }; }; '> 

कक्षाएं
इसके भी दो प्रकार के वर्ग हैं:
 * गतिशील कक्षाओं को कीवर्ड 'स्ट्रक्चर' के साथ लेबल किया जाता है। संरचनाओं का उपयोग डेटा बनाने के लिए किया जाता है जो केवल अस्थायी रूप से मौजूद होता है और कचरा संग्रहकर्ता द्वारा साफ किया जा सकता है।
 * स्टेटिक कक्षाओं को कीवर्ड 'यूनिट' के साथ लेबल किया जाता है। इकाइयों का उपयोग स्थायी टेस्टबेंच संरचना बनाने के लिए किया जाता है।

एक वर्ग में फ़ील्ड, विधियाँ, पोर्ट और बाधाएँ हो सकती हैं। फ़ील्ड पूर्णांक, वास्तविक, एनम, स्ट्रिंग और यहां तक ​​कि जटिल ऑब्जेक्ट प्रकार के हो सकते हैं। कोड खंड ई रूट 'sys' के भीतर 'environment_u' नामक इकाई को तत्काल चालू करता हुआ दिखाता है। इस पर्यावरण_यू वर्ग में 5 पैकेट_एस ऑब्जेक्ट की एक सूची है और इस पैकेट_एस वर्ग में दो फ़ील्ड और एक विधि है।

उदाहरण
 <' // यह दो फ़ील्ड वाला एक गतिशील वर्ग है संरचना पैकेट_एस { फ़ील्ड0: यूइंट (बिट्स: 32); // इस फ़ील्ड को 'फ़ील्ड0' कहा जाता है और यह एक है // 32 बिट चौड़ा अहस्ताक्षरित पूर्णांक। फ़ील्ड1: बाइट; // इस फ़ील्ड को 'फ़ील्ड1' कहा जाता है और यह एक बाइट है। // पैकेट_एस ऑब्जेक्ट उत्पन्न होने के बाद इस विधि को कॉल किया जाता है post_generate भी { है बाहर(फ़ील्ड0); // 'फ़ील्ड0' का मान प्रिंट करना }; };

// यह पांच पैकेट संरचना की सूची वाला एक स्थिर वर्ग है इकाई पर्यावरण_यू { my_pkt[5]: पैकेट_एस की सूची; };

// sys प्रत्येक ई वातावरण का मूल है और 'test_env' ऑब्जेक्ट को इंस्टेंट करता है सिस्टम का विस्तार करें { test_env: पर्यावरण_यू उदाहरण है; }; '> 

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

उदाहरण
 <' संरचना my_pkt_s { गंतव्य_पता: यूइंट (बिट्स: 48); // यह फ़ील्ड यादृच्छिक है और प्रतिबंधित नहीं है। data_payload : बाइट की सूची; !parity_field : uint (बिट्स: 32); // '!' समता_फ़ील्ड को यादृच्छिक होने से रोकता है। [64..1500] में सॉफ्ट data_payload.size रखें; // एक नरम बाधा, डिफ़ॉल्ट रैंडमाइजेशन प्रदान करने के लिए उपयोग किया जाता है data_payload.size को [128..256] में नहीं रखें; // यह एक कठिन बाधा है }; '> 

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

उदाहरण
 <' यूनिट टेम्पोरल_उदाहरण_यू { घटना ए; // एक घटना 'ए' घोषित करना घटना बी; // एक घटना 'बी' घोषित करना घटना सी; // एक घटना 'सी' घोषित करना // यह दावा उम्मीद करता है कि घटना के बाद अगला चक्र a // पता चला है कि इवेंट बी के बाद इवेंट सी होता है। उम्मीद है @a => {@b;@c} }; '> 

कवरेज
ई उन कवरेज का समर्थन करता है जिन्हें उनके नमूना घटना के अनुसार समूहीकृत किया जाता है और उन समूहों को आंतरिक रूप से वस्तुओं के साथ संरचित किया जाता है। आइटम सरल आइटम या जटिल आइटम हो सकते हैं जैसे कि पार किए गए आइटम या संक्रमणकालीन आइटम।

उदाहरण
 यूनिट कवरेज_उदाहरण_यू { घटना cov_event_e; //कवरेज एकत्रित करना इस घटना से जुड़ा होगा

कवर cov_event_e { है आइटम ए: यूइंट (बिट्स: 4); // इस आइटम में 0 से 15 तक 16 बकेट हैं आइटम बी: बूल; // इस आइटम में दो बकेट हैं: सत्य और असत्य क्रॉस ए, बी; // इस आइटम में ए और बी का क्रॉस गुणन मैट्रिक्स है ट्रांस बी; // यह आइटम आइटम बी से लिया गया है और इसमें चार बकेट हैं // प्रत्येक सत्य-असत्य संयोजन को परिवर्तित करना }; }; 

संदेश एवं रिपोर्टिंग
ई के अंदर मैसेजिंग विभिन्न तरीकों से की जा सकती है।

उदाहरण
 इकाई संदेश_उदाहरण_यू { example_message_method है { आउट (यह एक बिना शर्त, बिना स्वरूपित आउटपुट संदेश है। ); आउटफ़ (यह HEX %x,15 में प्रदर्शित होने वाला एक बिना शर्त, स्वरूपित आउटपुट संदेश है); प्रिंट करें यह एक बिना शर्त संदेश है. ;   संदेश (कम, यह एक सशर्त संदेश है, जो आमतौर पर एक संदेश लॉगर से जुड़ा होता है।) आप इस तरह से स्ट्रिंग्स को भी जोड़ सकते हैं और यहां तक ​​कि ,me, जैसे ऑब्जेक्ट भी जोड़ सकते हैं। इस आउटपुट में. );   संदेशएफ (कम, यह सशर्त आउटपुट %x स्वरूपित है।,15);  }; }; 

अन्य भाषाओं के साथ इंटरफेसिंग
एक ई टेस्टबेंच को आरटीएल या उच्च-स्तरीय मॉडल के साथ चलाए जाने की संभावना है। इसे ध्यान में रखते हुए, e VHDL, Verilog, C (प्रोग्रामिंग भाषा), C++ और SystemVerilog के साथ इंटरफेस करने में सक्षम है।

एक ई का उदाहरण <-> वेरिलॉग हुकअप
 यह कोड सिग्नल_मैप.ई फ़ाइल में है <' यूनिट सिग्नल_मैप_यू { // 'a_clk_p' नामक पोर्ट को परिभाषित करें a_clk_p: सरल_पोर्ट में बिट का उदाहरण है; // शीर्ष-स्तरीय टेस्टबेंच में 'a_clk' सिग्नल को इंगित करने के लिए पोर्ट की hdl_path प्रॉपर्टी सेट करें a_clk_p.hdl_path == ~/testbench_top/a_clk रखें; }; '> 

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

ई में पहलू-उन्मुख प्रोग्रामिंग सत्यापन इंजीनियरों को पहलुओं में अपने टेस्टबेंच की संरचना करने की अनुमति देती है। इसलिए एक वस्तु उसके सभी पहलुओं का योग है, जिसे कई फाइलों में वितरित किया जा सकता है। निम्नलिखित अनुभाग ई में बुनियादी पहलू-उन्मुख तंत्र का वर्णन करते हैं।

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

उपप्रकार तंत्र उदाहरण
 उपप्रकार_example.e <' // इस एनम प्रकार की परिभाषा का उपयोग उपप्रकार ODD और EVEN घोषित करने के लिए किया जाता है ctrl_field_type_t टाइप करें: [ODD, EVEN]; यूनिट बेस_एक्स_यू { // उपप्रकार_फ़ील्ड वह निर्धारक फ़ील्ड है जिस पर गणना लागू की जा रही है उपप्रकार_फ़ील्ड: ctrl_field_type_t; डेटा_वर्ड: यूइंट (बिट्स: 32); समता_बिट : बिट; // ODD प्रकार को उपटाइप करना जब ODD'subtype_field Base_ex_u { // यह एक साधारण बाधा है कि XOR डेटा_वर्ड के इंडेक्स बिट 0 को बढ़ाता है और उस मान को बढ़ाता है समता_बिट रखें == (डेटा_वर्ड[0:0] ^ डेटा_वर्ड[0:0] + 1); };

//EVEN प्रकार को उपटाइप करना जब EVEN'subtype_field Base_ex_u { // यह बाधा उपरोक्त के समान है, हालाँकि वृद्धि नहीं की गई है समता_बिट रखें == (डेटा_वर्ड[0:0] ^ डेटा_वर्ड[0:0]); }; }; '> 

विस्तार के तरीके
मूल इकाई परिभाषा फ़ाइल1.ई. में दी गई है। इस उदाहरण में प्रयुक्त पहलू-उन्मुख तंत्र दिखाता है कि पहले से लागू विधि से पहले और बाद में कोड को कैसे निष्पादित किया जाए।

विधि विस्तार उदाहरण
 यह कोड file1.e में है <' इकाई aop_example_u { meth_ext है { आउट (यह मूल विधि कार्यान्वयन है। ); }; }; '> 

 यह कोड file2.e में है <' aop_example_u का विस्तार करें { meth_ext पहला है { आउट (यह विधि विस्तार मूल विधि कार्यान्वयन से पहले निष्पादित किया जाता है। ); };

meth_ext भी { है आउट (यह विधि विस्तार मूल विधि कार्यान्वयन के बाद निष्पादित किया जाता है। ); }; }; '> 

संदर्भ

 * The e Hardware Verification Language, Sasan Iman and Sunita Joshi, Springer, May 28, 2004
 * Aspect-Oriented Programming with the e Verification Language, David Robinson, 2007

स्रोत

 * ई भाषा ब्लॉग (टीम स्पेकमैन)
 * http://www.depchip.com/items/0488-05.html (ई भाषा के साथ उनके अनुभवों पर उपयोगकर्ताओं से अच्छी प्रतिक्रिया)
 * http://www.cadence.com/products/functional_ver/specman_elite/index.aspx
 * http://www.us.design-reuse.com/articles/article5646.html
 * जेनिक बर्जरॉन: राइटिंग टेस्टबेंच: एचडीएल मॉडल्स का कार्यात्मक सत्यापन, दूसरा संस्करण, क्लूवर एकेडमिक पब्लिशर्स, 2003, ISBN 1-4020-7401-8
 * https://web.archive.org/web/20070405162901/http://amiq.ro/eparser.html
 * http://www.thinkverification.com/
 * http://www.dvteclipse.com/help.html?documentation/e/index.html

श्रेणी:हार्डवेयर सत्यापन भाषाएँ