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

From Vigyanwiki
Revision as of 19:28, 12 August 2023 by alpha>KishanNayak
e
ParadigmAspect-oriented
द्वारा डिज़ाइन किया गयाYoav Hollander
पहली प्रस्तुति1992 (1992)
Stable release
IEEE 1647-2016 / January 6, 2017; 7 years ago (2017-01-06)
फ़ाइल नाम एक्सटेंशनएस.e
वेबसाइटTWiki @ eda.org

ई, एक हार्डवेयर वेरीफिकेशन लैंग्वेज है जिसे अत्यधिक फ्लेक्सिबल और री-यूजेबल वेरीफिकेशन टेस्टबेंच को लागू करने के लिए तैयार किया गया है।

इतिहास

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

विशेषताएँ

ई की मुख्य विशेषताएं हैं:

  • यादृच्छिक और विवश यादृच्छिक प्रोत्साहन पीढ़ी
  • कार्यात्मक कवरेज मीट्रिक परिलैंग्वेज और संग्रह
  • अस्थायी लैंग्वेज जिसका उपयोग दावे लिखने के लिए किया जा सकता है
  • प्रतिबिंब क्षमता के साथ पहलू-उन्मुख प्रोग्रामिंग लैंग्वेज
  • लैंग्वेज 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 के साथ इंटरफेस करने में सक्षम है।

एक ई का उदाहरण <-> वेरिलॉग हुकअप

// 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() भी { है
   आउट (यह विधि विस्तार मूल विधि कार्यान्वयन के बाद निष्पादित किया जाता है। );
 };

}; '> </पूर्व>

संदर्भ

  1. Samir Palnitkar: Design verification with e, Prentice Hall PTR. October 5, 2003. ISBN 978-0-13-141309-2


स्रोत

श्रेणी:हार्डवेयर वेरीफिकेशन लैंग्वेजएँ