ई (सत्यापन भाषा)
Paradigm | Aspect-oriented |
---|---|
द्वारा डिज़ाइन किया गया | Yoav Hollander |
पहली प्रस्तुति | 1992 |
Stable release | IEEE 1647-2016
/ January 6, 2017 |
फ़ाइल नाम एक्सटेंशनएस | .e |
वेबसाइट | TWiki @ eda.org |
ई, एक हार्डवेयर वेरीफिकेशन लैंग्वेज है जिसे अत्यधिक फ्लेक्सिबल और री-यूजेबल वेरीफिकेशन टेस्टबेंच को लागू करने के लिए तैयार किया गया है।
इतिहास
ई को पहली बार 1992 में इज़राइल में योव हॉलैंडर द्वारा अपने स्पेकमैन सॉफ़्टवेयर के लिए विकसित किया गया था। 1995 में उन्होंने सॉफ्टवेयर का व्यावसायीकरण करने के लिए एक कंपनी, इनस्पेक (बाद में इसका नाम परिवर्तन करके वेरिसीटी रखा गया) की स्थापना की। उत्पाद को 1996 डिज़ाइन ऑटोमेशन सम्मेलन में प्रस्तुत किया गया था।[1] वेरिसिटी को तब से कैडन्स डिजाइन सिस्टम द्वारा अधिग्रहित कर लिया गया है।
विशेषताएँ
ई की मुख्य विशेषताएं निम्नलिखित हैं:
- रैन्डम और कन्स्ट्रैन्ड रैन्डम स्टिमुलस जनरेशन
- फंक्शनल कवरेज मीट्रिक डेफनिशन और कवरेज
- टेंपोरल लैंग्वेज जिसका उपयोग असर्शन लिखने के लिए किया जा सकता है।
- रिफ्लेक्शन कैपबिलटी के साथ ऐस्पेक्ट-ऑरिएन्टेड प्रोग्रामिंग लैंग्वेज
- लैंग्वेज डीयूटी-न्यूट्रल है जिसमें आप सिस्टमसी/सी++ मॉडल, आरटीएल मॉडल, गेट लेवल मॉडल, या यहां तक कि हार्डवेयर ऐक्सेलरैशन बॉक्स में स्थित डीयूटी को सत्यापित करने के लिए सिंगल ई टेस्टबेंच का उपयोग कर सकते हैं। ई मेथडालजी के लिए यूवीएम एक्सेलेरेशन का उपयोग करता है।
- अत्यधिक री-यूजेबल कोड बनाता हैं, विशेषतः जब टेस्टबेंच यूनिवर्सल वेरीफिकेशन मेथडालजी (यूवीएम) का पालन करते हुए लिखा गया हो
- पूर्व में इसे ई री-यूजेबल मेथडालजी (ईआरएम) के रूप में जाना जाता था
- यूवीएम ई लाइब्रेरी और डाक्यूमेन्टैशन यहां से डाउनलोड किया जा सकता है: यूवीएम वर्ल्ड
लैंग्वेज विशेषताएँ
ई लैंग्वेज एक ऐस्पेक्ट-ऑरिएन्टेड प्रोग्रामिंग (एओपी) उपागम का उपयोग करती है, जो फंक्शनल वेरीफिकेशन में आवश्यक आवश्यकताओं को विशेष रूप से संबोधित करने के लिए ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग उपागम का एक विस्तार है। एओपी उपयोगकर्ताओं को गैर-आक्रामक विधि से उपलब्ध कोड में अतिरिक्त फंगक्शनैलिटी को सरलता से जोड़ने की अनुमति देने वाली एक प्रमुख विशेषता है। यह सरल री-यूजेबल और कोड मैनटेनेंस की अनुमति देता है जो हार्डवेयर दुनिया में एक बड़ा लाभ है, जहां परियोजना जीवनचक्र के समय बाजार की मांगों को पूरा करने के लिए डिजाइनों में लगातार परिवर्तन किया जा रहा है। एओपी उपयोगकर्ताओं को फंगक्शनैलिटी जोड़ने के लिए किसी विशेष संरचना के विशिष्ट या सभी उदाहरणों का विस्तार करने की अनुमति देकर क्रॉस कटिंग चिंताओं को सरलता से संबोधित करता है। उपयोगकर्ता किसी विशेष सुविधा से संबंधित फंगक्शनैलिटी जोड़ने के लिए कई संरचनाओं का विस्तार कर सकते हैं और यदि चाहें तो एक्सटेंशन को एक फ़ाइल में बंडल कर सकते हैं, जिससे अधिक ऑर्गनाइज़्ड फ़ाइल पार्टिशनिंग प्रदान किया जा सकता है।
कमेन्ट
निष्पादन योग्य ई कोड, कोड-सेगमेंट मार्कर '<' तथा '>' के भीतर संलग्न होता है:
उदाहरण
Anything outside the markers is a comment <' extend sys { // This is a comment Verilog style -- This is a comment in VHDL style post_generate() is also { out("... and everything else within the markers is executable code."); }; }; '>
कक्षाएं
इसके भी दो प्रकार के वर्ग हैं:
- गतिशील कक्षाओं को कीवर्ड 'स्ट्रक्चर' के साथ लेबल किया जाता है। संरचनाओं का उपयोग डेटा बनाने के लिए किया जाता है जो केवल अस्थायी रूप से मौजूद होता है और कचरा संग्रहकर्ता द्वारा साफ किया जा सकता है।
- स्टेटिक कक्षाओं को कीवर्ड 'यूनिट' के साथ लेबल किया जाता है। इकाइयों का उपयोग स्थायी टेस्टबेंच संरचना बनाने के लिए किया जाता है।
एक वर्ग में फ़ील्ड, विधियाँ, पोर्ट और बाधाएँ हो सकती हैं। फ़ील्ड पूर्णांक, वास्तविक, एनम, स्ट्रिंग और यहां तक कि जटिल ऑब्जेक्ट प्रकार के हो सकते हैं। कोड खंड ई रूट '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_payloadd: बाइट की सूची; !parity_fieldl: 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 के साथ इंटरफेस करने में सक्षम है।
एक ई का उदाहरण <-> वेरिलॉग हुकअप
// This code is in a Verilog file tb_top.v
module testbench_top;
reg a_clk;
always #5 a_clk = ~a_clk;
initial begin
a_clk = 0;
end
endmodule
<पूर्व> यह कोड सिग्नल_मैप.ई फ़ाइल में है <' यूनिट सिग्नल_मैप_यू {
// '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
- ↑ Samir Palnitkar: Design verification with e, Prentice Hall PTR. October 5, 2003. ISBN 978-0-13-141309-2
स्रोत
- ई लैंग्वेज ब्लॉग (टीम स्पेकमैन)
- 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
श्रेणी:हार्डवेयर वेरीफिकेशन लैंग्वेजएँ