ई (सत्यापन भाषा): Difference between revisions

From Vigyanwiki
m (26 revisions imported from alpha:ई_(सत्यापन_भाषा))
 
(23 intermediate revisions by 2 users not shown)
Line 46: Line 46:
== लैंग्वेज विशेषताएँ ==
== लैंग्वेज विशेषताएँ ==


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


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


==== उदाहरण ====
==== उदाहरण ====
<पूर्व>
<pre>
मार्करों के बाहर कुछ भी एक टिप्पणी है
Anything outside the markers is a comment
<'
<'
सिस्टम का विस्तार करें {
extend sys {
   // यह एक टिप्पणी वेरिलॉग शैली है
   // This is a comment Verilog style
   - यह वीएचडीएल शैली में एक टिप्पणी है
   -- This is a comment in VHDL style
   post_generate() भी { है
   post_generate() is also {
     आउट (... और मार्कर के भीतर बाकी सब कुछ निष्पादन योग्य कोड है। );
     out("... and everything else within the markers is executable code.");
   };
   };
};
};
'>
'>
</पूर्व>
</pre>


=== कक्षाएं ===
[[Category:Articles with hatnote templates targeting a nonexistent page]]
इसके भी दो प्रकार के वर्ग हैं:
[[Category:Created On 10/08/2023]]
* गतिशील कक्षाओं को कीवर्ड 'स्ट्रक्चर' के साथ लेबल किया जाता है। संरचनाओं का उपयोग डेटा बनाने के लिए किया जाता है जो केवल अस्थायी रूप से मौजूद होता है और कचरा संग्रहकर्ता द्वारा साफ किया जा सकता है।
[[Category:Machine Translated Page]]
* स्टेटिक कक्षाओं को कीवर्ड 'यूनिट' के साथ लेबल किया जाता है। इकाइयों का उपयोग स्थायी टेस्टबेंच संरचना बनाने के लिए किया जाता है।
[[Category:Templates Vigyan Ready]]


एक वर्ग में फ़ील्ड, विधियाँ, पोर्ट और बाधाएँ हो सकती हैं। फ़ील्ड पूर्णांक, वास्तविक, एनम, स्ट्रिंग और यहां तक ​​कि जटिल ऑब्जेक्ट प्रकार के हो सकते हैं। कोड खंड ई रूट 'sys' के भीतर 'environment_u' नामक इकाई को तत्काल चालू करता हुआ दिखाता है। इस पर्यावरण_यू वर्ग में 5 पैकेट_एस ऑब्जेक्ट की एक सूची है और इस पैकेट_एस वर्ग में दो फ़ील्ड और एक विधि है।
=== क्लासेस ===
ई के भी दो प्रकार के क्लास हैं:
* डाइनैमिक क्लासेस को 'struct' (स्ट्रक्ट) कीवर्ड के साथ लेबल किया जाता है। "स्ट्रक्ट" का उपयोग डेटा निर्मित करने के लिए किया जाता है जो केवल अस्थायी रूप से उपलब्ध होता है और गारबेज कलेक्टर द्वारा क्लीन किया जा सकता है।
* स्टेटिक क्लासेस को कीवर्ड 'unit' (यूनिट) के साथ लेबल किया जाता है। इकाइयों का उपयोग स्थायी टेस्टबेंच स्ट्रक्चर बनाने के लिए किया जाता है।
 
एक क्लास में, फ़ील्ड, मेथड, पोर्ट और कन्स्ट्रैन्ट हो सकते हैं। फ़ील्ड, इन्टिजर, रियल, एनम, स्ट्रिंग और यहां तक ​​कि कॉम्प्लेक्स ऑब्जेक्ट प्रकार के हो सकते हैं। कोड सेगमेंट ई रूट 'sys' के भीतर 'environment_u' नामक यूनिट को इनिशियलाइज़ करता हुआ दिखाता है। इस 'environment_u' क्लास में 5 packet_s ऑब्जेक्ट की एक सूची है और इस packet_s क्लास में दो फ़ील्ड और एक मेथड होता है।


==== उदाहरण ====
==== उदाहरण ====
<पूर्व>
<pre>
<'
<'
// यह दो फ़ील्ड वाला एक गतिशील वर्ग है
// This is a dynamic class with two fields
संरचना पैकेट_एस {
struct packet_s {
   फ़ील्ड0: यूइंट (बिट्स: 32); // इस फ़ील्ड को 'फ़ील्ड0' कहा जाता है और यह एक है
   field0: uint (bits: 32);   // This field is called 'field0' and is a
                             // 32 बिट चौड़ा अहस्ताक्षरित पूर्णांक।
                             // 32 bit wide unsigned integer.
   फ़ील्ड1: बाइट; // इस फ़ील्ड को 'फ़ील्ड1' कहा जाता है और यह एक बाइट है।
   field1: byte;             // This field is called 'field1' and is a byte.
    
    
   // पैकेट_एस ऑब्जेक्ट उत्पन्न होने के बाद इस विधि को कॉल किया जाता है
   // This method is called once a packet_s object has been generated
   post_generate() भी { है
   post_generate() is also {  
     बाहर(फ़ील्ड0); // 'फ़ील्ड0' का मान प्रिंट करना
     out(field0);           // Printing the value of 'field0'
   };
   };
};
};


// यह पांच पैकेट संरचना की सूची वाला एक स्थिर वर्ग है
// This is a static class with a list of five packet struct
इकाई पर्यावरण_यू {
unit environment_u {
   my_pkt[5]: पैकेट_एस की सूची;
   my_pkt[5]: list of packet_s;
};
};


// sys प्रत्येक ई वातावरण का मूल है और 'test_env' ऑब्जेक्ट को इंस्टेंट करता है
// sys is the root for every e environment and instantiates the 'test_env' object
सिस्टम का विस्तार करें {
extend sys {
   test_env: पर्यावरण_यू उदाहरण है;
   test_env: environment_u is instance;
};
};
'>
'>
</पूर्व>
</pre>


=== रैन्डमीकरण ===
[[Category:Articles with hatnote templates targeting a nonexistent page]]
ई में प्रत्येक फ़ील्ड डिफ़ॉल्ट रूप से रैन्डम होती है। फ़ील्ड रैन्डमीकरण को कठोर बाधाओं, नरम बाधाओं द्वारा नियंत्रित किया जा सकता है या यहां तक ​​कि पूरी तरह से बंद भी किया जा सकता है। सॉफ्ट बाधाओं को डिफ़ॉल्ट बाधाओं के रूप में उपयोग किया जाता है, और यदि कोई विरोध होता है तो परीक्षण परत द्वारा स्वचालित रूप से ओवरराइड किया जा सकता है। अन्यथा यह एक नियमित बाधा की तरह व्यवहार करता है।
[[Category:Created On 10/08/2023]]
[[Category:Machine Translated Page]]
[[Category:Templates Vigyan Ready]]
 
=== रैंडमाइजेशन ===
ई में प्रत्येक फ़ील्ड डिफ़ॉल्ट रूप से रैन्डम होती है। फ़ील्ड रैंडमाइजेशन को हार्ड कन्स्ट्रैन्ट, सॉफ्ट कन्स्ट्रैन्ट द्वारा नियंत्रित किया जा सकता है या यहां तक ​​कि पूरी तरह से बंद भी किया जा सकता है। सॉफ्ट कन्स्ट्रैन्ट को डिफ़ॉल्ट कन्स्ट्रैन्ट के रूप में उपयोग किया जाता है, और यदि कोई कान्फ्लिक्ट होता है तो टेस्ट लेयर द्वारा स्वचालित रूप से ओवरराइड किया जा सकता है। अन्यथा यह एक रेगुलर कन्स्ट्रैन्ट की तरह व्यवहार करता है।


==== उदाहरण ====
==== उदाहरण ====
<पूर्व>
<pre>
<'
<'
संरचना my_pkt_s {
struct my_pkt_s {
   गंतव्य_पता: यूइंट (बिट्स: 48); // यह फ़ील्ड रैन्डम है और प्रतिबंधित नहीं है।
   destination_address: uint (bits: 48);   // this field is randomized and is not constrained.
   data_payloadd: बाइट की सूची;
   data_payload      : list of byte;    
   !parity_fieldl: uint (बिट्स: 32); // '!' समता_फ़ील्ड को रैन्डम होने से रोकता है।
   !parity_field      : uint (bits: 32);   // '!' prevents the parity_field from being randomized.
    
    
   [64..1500] में सॉफ्ट data_payload.size() रखें; // एक नरम बाधा, डिफ़ॉल्ट रैंडमाइजेशन प्रदान करने के लिए उपयोग किया जाता है
   keep soft data_payload.size() in [64..1500]; // a soft constraint, used to provide a default randomization
   data_payload.size() को [128..256] में नहीं रखें; // यह एक कठिन बाधा है
   keep data_payload.size() not in [128..256];   // this is a hard constraint
};
};
'>
'>
</पूर्व>
</pre>
 
[[Category:Articles with hatnote templates targeting a nonexistent page]]
[[Category:Created On 10/08/2023]]
[[Category:Machine Translated Page]]
[[Category:Templates Vigyan Ready]]


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


==== उदाहरण ====
==== उदाहरण ====
<पूर्व>
<pre>
<'
<'
यूनिट टेम्पोरल_उदाहरण_यू {
unit temporal_example_u {
   घटना ए; // एक घटना '' घोषित करना
   event a;   // declaring an event 'a'
   घटना बी; // एक घटना 'बी' घोषित करना
   event b;   // declaring an event 'b'
   घटना सी; // एक घटना 'सी' घोषित करना
   event c;   // declaring an event 'c'
    
    
   // यह दावा उम्मीद करता है कि घटना के बाद अगला चक्र a
   // This assertion expects that the next cycle after event a
   // पता चला है कि इवेंट बी के बाद इवेंट सी होता है।
   // has been detected that event b followed by event c occurs.
   उम्मीद है @a => {@b;@c}
   expect @a => {@b;@c}
};
};
'>
'>
</पूर्व>
</pre>
 
[[Category:Articles with hatnote templates targeting a nonexistent page]]
[[Category:Created On 10/08/2023]]
[[Category:Machine Translated Page]]
[[Category:Templates Vigyan Ready]]


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


==== उदाहरण ====
==== उदाहरण ====
<पूर्व>
<pre>
यूनिट कवरेज_उदाहरण_यू {
unit coverage_example_u {
   घटना cov_event_e; //कवरेज एकत्रित करना इस घटना से जुड़ा होगा
   event cov_event_e;   // collecting coverage will be tied to this event


   कवर cov_event_e { है
   cover cov_event_e is {
     आइटम ए: यूइंट (बिट्स: 4); // इस आइटम में 0 से 15 तक 16 बकेट हैं
     item  a: uint (bits: 4);   // this item has 16 buckets from 0 to 15
     आइटम बी: बूल; // इस आइटम में दो बकेट हैं: सत्य और असत्य
     item  b: bool;           // this item has two buckets: TRUE and FALSE
     क्रॉस ए, बी; // इस आइटम में ए और बी का क्रॉस गुणन मैट्रिक्स है
     cross a, b;               // this item contains a cross multiplication matrix of a and b
     ट्रांस बी; // यह आइटम आइटम बी से लिया गया है और इसमें चार बकेट हैं
     trans b;                 // this item is derived of item b and has four buckets
                               // प्रत्येक सत्य-असत्य संयोजन को परिवर्तित करना
                               // transitioning each TRUE - FALSE combination
   };
   };
};
};
</पूर्व>
</pre>


=== संदेश एवं रिपोर्टिंग ===
[[Category:Articles with hatnote templates targeting a nonexistent page]]
ई के अंदर मैसेजिंग विभिन्न तरीकों से की जा सकती है।
[[Category:Created On 10/08/2023]]
[[Category:Machine Translated Page]]
[[Category:Templates Vigyan Ready]]
 
=== मेसेजींग एवं रिपोर्टिंग ===
ई के भीतर मैसेजिंग विभिन्न विधियों से की जा सकती है।


==== उदाहरण ====
==== उदाहरण ====
<पूर्व>
<pre>
इकाई संदेश_उदाहरण_यू {
unit message_example_u {
   example_message_method() है {
   example_message_method() is {
     आउट (यह एक बिना शर्त, बिना स्वरूपित आउटपुट संदेश है। );
     out("This is an unconditional, unformatted output message.");
     आउटफ़ (यह HEX %x,15 में प्रदर्शित होने वाला एक बिना शर्त, स्वरूपित आउटपुट संदेश है);
     outf("This is an unconditional, formatted output message displaying in HEX %x",15);
     प्रिंट करें यह एक बिना शर्त संदेश है. ;
     print "This is an unconditional message.";
     संदेश (कम, यह एक सशर्त संदेश है, जो आमतौर पर एक संदेश लॉगर से जुड़ा होता है।)
     message( LOW, "This is a conditional message, usually tied to a message logger. ",
                  आप इस तरह से स्ट्रिंग्स को भी जोड़ सकते हैं और यहां तक ​​कि ,me, जैसे ऑब्जेक्ट भी जोड़ सकते हैं।
                  "You can also concatenate strings like this and even add objects like ",me,
                    इस आउटपुट में. );
                  " in this output." );
     संदेशएफ (कम, यह सशर्त आउटपुट %x स्वरूपित है।,15);
     messagef( LOW, "This conditional output is formatted %x.",15 );
   };
   };
};
};
</पूर्व>
</pre>


=== अन्य लैंग्वेजओं के साथ इंटरफेसिंग ===
[[Category:Articles with hatnote templates targeting a nonexistent page]]
एक ई टेस्टबेंच को आरटीएल या उच्च-स्तरीय मॉडल के साथ चलाए जाने की संभावना है। इसे ध्यान में रखते हुए, e [[VHDL]], [[Verilog]], C (प्रोग्रामिंग लैंग्वेज), [[C++]] और [[SystemVerilog]] के साथ इंटरफेस करने में सक्षम है।
[[Category:Created On 10/08/2023]]
[[Category:Machine Translated Page]]
[[Category:Templates Vigyan Ready]]


==== एक ई का उदाहरण <-> वेरिलॉग हुकअप ====
=== अन्य लैंग्वेजों के साथ इंटरफेसिंग ===
एक ई टेस्टबेंच को आरटीएल या हाई-लेवेल मॉडल के साथ चलाए जाने की संभावना है। इसे ध्यान में रखते हुए, ई [[VHDL|वीएचडीएल]], [[Verilog|वेरिलोग]], सी प्रोग्रामिंग लैंग्वेज, [[C++|सी++]] और [[SystemVerilog|सिस्टम वेरिलोग]] के साथ इंटरफेस करने में सक्षम है।
 
==== ई का एक उदाहरण <-> वेरिलॉग हुकअप ====
<syntaxhighlight lang="verilog">
<syntaxhighlight lang="verilog">
// This code is in a Verilog file tb_top.v
// This code is in a Verilog file tb_top.v
Line 184: Line 214:
endmodule
endmodule
</syntaxhighlight>
</syntaxhighlight>
<पूर्व>
 
यह कोड सिग्नल_मैप.ई फ़ाइल में है
<pre>
This code is in a signal_map.e file
<'
<'
यूनिट सिग्नल_मैप_यू {
unit signal_map_u {
   // 'a_clk_p' नामक पोर्ट को परिभाषित करें
   // Define a port named 'a_clk_p'
   a_clk_p: सरल_पोर्ट में बिट का उदाहरण है;
   a_clk_p: in simple_port of bit is instance;
   // शीर्ष-स्तरीय टेस्टबेंच में 'a_clk' सिग्नल को इंगित करने के लिए पोर्ट की hdl_path प्रॉपर्टी सेट करें
   // Set the port's hdl_path property to point to the 'a_clk' signal in the top-level testbench
   a_clk_p.hdl_path() == ~/testbench_top/a_clk रखें;
   keep a_clk_p.hdl_path() == "~/testbench_top/a_clk";
};
};
'>
'>
</पूर्व>
</pre>


== ई में पहलू-उन्मुख प्रोग्रामिंग समर्थन ==
[[Category:Articles with hatnote templates targeting a nonexistent page]]
कार्यात्मक वेरीफिकेशन की प्रक्रिया के लिए किसी भी डिज़ाइन अंडर टेस्ट (डीयूटी) के अमूर्त स्तर को आरटीएल स्तर से ऊपर उठाना आवश्यक है। यह आवश्यकता एक ऐसी लैंग्वेज की मांग करती है जो डेटा और मॉडलों को समाहित करने में सक्षम हो, जो ऑब्जेक्ट-ओरिएंटेड लैंग्वेजओं में आसानी से उपलब्ध हो। इस आवश्यकता को संबोधित करने के लिए एक ऑब्जेक्ट-ओरिएंटेड लैंग्वेज तैयार की गई है और इसके शीर्ष पर पहलू-उन्मुख तंत्र के साथ संवर्धित किया गया है जो न केवल अत्यधिक लचीली और पुन: प्रयोज्य टेस्टबेंच लिखने की सुविधा प्रदान करता है, बल्कि खोजे गए आरटीएल को पैच करने में सक्षम करके वेरीफिकेशन इंजीनियरों की सहायता भी करता है। पहले से मौजूद किसी भी कोड बेस को फिर से लिखने या छूने की आवश्यकता के बिना बग।<br />
[[Category:Created On 10/08/2023]]
ई में पहलू-उन्मुख प्रोग्रामिंग वेरीफिकेशन इंजीनियरों को पहलुओं में अपने टेस्टबेंच की संरचना करने की अनुमति देती है। इसलिए एक वस्तु उसके सभी पहलुओं का योग है, जिसे कई फाइलों में वितरित किया जा सकता है। निम्नलिखित अनुभाग ई में बुनियादी पहलू-उन्मुख तंत्र का वर्णन करते हैं।
[[Category:Machine Translated Page]]
[[Category:Templates Vigyan Ready]]


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


==== उपप्रकार तंत्र उदाहरण ====
=== सबटायपिंग मेकेनिज़्म ===
<पूर्व>
सबटाइपिंग इस बात का प्रमुख उदाहरण है कि ऐस्पेक्ट-ऑरिएन्टेड फीचर के बिना ऑब्जेक्ट-ओरिएंटेड लैंग्वेज क्या प्राप्त नहीं कर सकती हैं। सबटाइपिंग एक वेरीफिकेशन इंजीनियर को आधार वर्ग से प्राप्त किए बिना पहले से परिभाषित/कार्यान्वित वर्ग में फंक्शनैलिटी जोड़ने की अनुमति देता है। निम्नलिखित कोड बेस-क्लास के मूल कार्यान्वयन को दिखाता है और इसे कैसे बढ़ाया जाता है। एक बार एक्सटेंशन हो जाने के बाद, सभी बेस-क्लास ऑब्जेक्ट में एक्सटेंशन भी सम्मिलित हो जाते हैं। दो अलग-अलग सबटाइप में दी गई कन्स्ट्रैन्ट सामान्यतः विरोधाभास का कारण बनती हैं, यद्यपि दोनों सबटाइप को अलग-अलग हैन्डल किया जाता है और इस प्रकार प्रत्येक सबटाइप एक अलग कन्स्ट्रैन्ट गणना उत्पन्न करता है।
उपप्रकार_example.e
 
==== सबटाइप मेकेनिज़्म उदाहरण ====
<pre>
subtyping_example.e
<'
<'
// इस एनम प्रकार की परिलैंग्वेज का उपयोग उपप्रकार ODD और EVEN घोषित करने के लिए किया जाता है
// This enum type definition is used to declare the subtypes ODD and EVEN
ctrl_field_type_t टाइप करें: [ODD, EVEN];
type ctrl_field_type_t: [ODD, EVEN];
यूनिट बेस_एक्स_यू {
unit base_ex_u {
   // उपप्रकार_फ़ील्ड वह निर्धारक फ़ील्ड है जिस पर गणना लागू की जा रही है
   // The subtype_field is the determinant field which calculation is being applied
   उपप्रकार_फ़ील्ड: ctrl_field_type_t;
   subtype_field: ctrl_field_type_t;
   डेटा_वर्ड: यूइंट (बिट्स: 32);
   data_word    : uint (bits: 32);
   समता_बिट : बिट;
   parity_bit  : bit;
    
    
   // ODD प्रकार को उपटाइप करना
   // Subtyping the ODD type
   जब ODD'subtype_field Base_ex_u {
   when ODD'subtype_field base_ex_u {
     // यह एक साधारण बाधा है कि XOR डेटा_वर्ड के इंडेक्स बिट 0 को बढ़ाता है और उस मान को बढ़ाता है
     // This is a simple constraint that XORs the index bit 0 of data_word and increments that value
     समता_बिट रखें == (डेटा_वर्ड[0:0] ^ डेटा_वर्ड[0:0] + 1);
     keep parity_bit == (data_word[0:0] ^ data_word[0:0] + 1);
   };
   };


   //EVEN प्रकार को उपटाइप करना
   // Subtyping the EVEN type
   जब EVEN'subtype_field Base_ex_u {
   when EVEN'subtype_field base_ex_u {
     // यह बाधा उपरोक्त के समान है, हालाँकि वृद्धि नहीं की गई है
     // This constraint is the same as above, however the increment is not done
     समता_बिट रखें == (डेटा_वर्ड[0:0] ^ डेटा_वर्ड[0:0]);
     keep parity_bit == (data_word[0:0] ^ data_word[0:0]);
   };
   };
};
};
'>
'>
</पूर्व>
</pre>


=== विस्तार के तरीके ===
[[Category:Articles with hatnote templates targeting a nonexistent page]]
मूल इकाई परिलैंग्वेज फ़ाइल1.ई. में दी गई है। इस उदाहरण में प्रयुक्त पहलू-उन्मुख तंत्र दिखाता है कि पहले से लागू विधि से पहले और बाद में कोड को कैसे निष्पादित किया जाए।
[[Category:Created On 10/08/2023]]
[[Category:Machine Translated Page]]
[[Category:Templates Vigyan Ready]]
 
=== एक्सटेंडिंग मेथड ===
ओरिजिनल यूनिट डेफनिशन फ़ाइल1.ई. में दी गई है। इस उदाहरण में प्रयुक्त ऐस्पेक्ट-उन्मुख मेछानिज़्म दिखाता है कि पहले से लागू विधि के पहले और बाद में कोड को कैसे निष्पादित किया जाए।


==== विधि विस्तार उदाहरण ====
==== मेथड इक्स्टेन्शन उदाहरण ====
<पूर्व>
<pre>
यह कोड file1.e में है
This code is in file1.e
<'
<'
इकाई aop_example_u {
unit aop_example_u {
   meth_ext() है {
   meth_ext() is {
     आउट (यह मूल विधि कार्यान्वयन है। );
     out("This is the original method implementation.");
   };
   };
};
};
'>
'>
</पूर्व>
</pre>


<पूर्व>
<pre>
यह कोड file2.e में है
This code is in file2.e
<'
<'
aop_example_u का विस्तार करें {
extend aop_example_u {
   meth_ext() पहला है {
   meth_ext() is first {
     आउट (यह विधि विस्तार मूल विधि कार्यान्वयन से पहले निष्पादित किया जाता है। );
     out("This method extension is executed before the original method implementation.");
   };
   };


   meth_ext() भी { है
   meth_ext() is also {
     आउट (यह विधि विस्तार मूल विधि कार्यान्वयन के बाद निष्पादित किया जाता है। );
     out("This method extension is executed after the original method implementation.");
   };
   };
};
};
'>
'>
</पूर्व>
</pre>
 
[[Category:Articles with hatnote templates targeting a nonexistent page]]
[[Category:Created On 10/08/2023]]
[[Category:Machine Translated Page]]
[[Category:Templates Vigyan Ready]]


== संदर्भ ==
== संदर्भ ==
Line 271: Line 316:
* http://www.cadence.com/products/functional_ver/specman_elite/index.aspx
* http://www.cadence.com/products/functional_ver/specman_elite/index.aspx
* http://www.us.design-reuse.com/articles/article5646.html
* http://www.us.design-reuse.com/articles/article5646.html
* जेनिक बर्जरॉन: राइटिंग टेस्टबेंच: एचडीएल मॉडल्स का कार्यात्मक वेरीफिकेशन, दूसरा संस्करण, क्लूवर एकेडमिक पब्लिशर्स, 2003, {{ISBN|1-4020-7401-8}}
* जेनिक बर्जरॉन: राइटिंग टेस्टबेंच: एचडीएल मॉडल्स का फंक्शनल वेरीफिकेशन, दूसरा संस्करण, क्लूवर एकेडमिक पब्लिशर्स, 2003, {{ISBN|1-4020-7401-8}}
* https://web.archive.org/web/20070405162901/http://amiq.ro/eparser.html
* https://web.archive.org/web/20070405162901/http://amiq.ro/eparser.html
* http://www.thinkverification.com/
* http://www.thinkverification.com/
Line 281: Line 326:
[[Category: Machine Translated Page]]
[[Category: Machine Translated Page]]
[[Category:Created On 10/08/2023]]
[[Category:Created On 10/08/2023]]
[[Category:Vigyan Ready]]

Latest revision as of 07:17, 28 September 2023

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] वेरिसिटी को तब से कैडन्स डिजाइन सिस्टम द्वारा अधिग्रहित कर लिया गया है।

विशेषताएँ

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

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

लैंग्वेज विशेषताएँ

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

कमेन्ट

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

उदाहरण

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.");
  };
};
'>

क्लासेस

ई के भी दो प्रकार के क्लास हैं:

  • डाइनैमिक क्लासेस को 'struct' (स्ट्रक्ट) कीवर्ड के साथ लेबल किया जाता है। "स्ट्रक्ट" का उपयोग डेटा निर्मित करने के लिए किया जाता है जो केवल अस्थायी रूप से उपलब्ध होता है और गारबेज कलेक्टर द्वारा क्लीन किया जा सकता है।
  • स्टेटिक क्लासेस को कीवर्ड 'unit' (यूनिट) के साथ लेबल किया जाता है। इकाइयों का उपयोग स्थायी टेस्टबेंच स्ट्रक्चर बनाने के लिए किया जाता है।

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

उदाहरण

<'
// This is a dynamic class with two fields
struct packet_s {
  field0: uint (bits: 32);   // This field is called 'field0' and is a 
                            // 32 bit wide unsigned integer.
  field1: byte;             // This field is called 'field1' and is a byte.
  
  // This method is called once a packet_s object has been generated
  post_generate() is also { 
    out(field0);            // Printing the value of 'field0'
  };
};

// This is a static class with a list of five packet struct
unit environment_u {
  my_pkt[5]: list of packet_s;
};

// sys is the root for every e environment and instantiates the 'test_env' object
extend sys {
  test_env: environment_u is instance;
};
'>

रैंडमाइजेशन

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

उदाहरण

<'
struct my_pkt_s {
  destination_address: uint (bits: 48);   // this field is randomized and is not constrained.
  data_payload       : list of byte;     
  !parity_field      : uint (bits: 32);   // '!' prevents the parity_field from being randomized.
  
  keep soft data_payload.size() in [64..1500];  // a soft constraint, used to provide a default randomization
  keep data_payload.size() not in [128..256];   // this is a hard constraint
};
'>

असर्शन

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

उदाहरण

<'
unit temporal_example_u {
  event a;   // declaring an event 'a'
  event b;   // declaring an event 'b'
  event c;   // declaring an event 'c'
  
  // This assertion expects that the next cycle after event a
  // has been detected that event b followed by event c occurs.
  expect @a => {@b;@c}
};
'>

कवरेज

ई, उन कवरेज का समर्थन करता है जिन्हें उनके सैंपल ईवेंट के अनुसार समूहीकृत किया जाता है और उन समूहों को आंतरिक रूप से आइटमों के साथ संरचित किया जाता है। आइटम सरल आइटम या कॉम्प्लेक्स आइटम हो सकते हैं जैसे कि क्रॉसड आइटम या ट्रांज़िशनल आइटम।

उदाहरण

unit coverage_example_u {
  event cov_event_e;   // collecting coverage will be tied to this event

  cover cov_event_e is {
    item  a: uint (bits: 4);   // this item has 16 buckets from 0 to 15
    item  b: bool;            // this item has two buckets: TRUE and FALSE
    cross a, b;               // this item contains a cross multiplication matrix of a and b
    trans b;                  // this item is derived of item b and has four buckets
                              // transitioning each TRUE - FALSE combination
  };
};

मेसेजींग एवं रिपोर्टिंग

ई के भीतर मैसेजिंग विभिन्न विधियों से की जा सकती है।

उदाहरण

unit message_example_u {
  example_message_method() is {
    out("This is an unconditional, unformatted output message.");
    outf("This is an unconditional, formatted output message displaying in HEX %x",15);
    print "This is an unconditional message.";
    message( LOW, "This is a conditional message, usually tied to a message logger. ",
                  "You can also concatenate strings like this and even add objects like ",me,
                  " in this output." );
    messagef( LOW, "This conditional output is formatted %x.",15 );
  };
};

अन्य लैंग्वेजों के साथ इंटरफेसिंग

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

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

// 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
This code is in a signal_map.e file
<'
unit signal_map_u {
  // Define a port named 'a_clk_p'
  a_clk_p: in simple_port of bit is instance;
  // Set the port's hdl_path property to point to the 'a_clk' signal in the top-level testbench
  keep a_clk_p.hdl_path() == "~/testbench_top/a_clk";
};
'>

ई में ऐस्पेक्ट-ऑरिएन्टेड प्रोग्रामिंग समर्थन

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

सबटायपिंग मेकेनिज़्म

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

सबटाइप मेकेनिज़्म उदाहरण

subtyping_example.e
<'
// This enum type definition is used to declare the subtypes ODD and EVEN
type ctrl_field_type_t: [ODD, EVEN];
unit base_ex_u {
  // The subtype_field is the determinant field which calculation is being applied
  subtype_field: ctrl_field_type_t;
  data_word    : uint (bits: 32);
  parity_bit   : bit;
  
  // Subtyping the ODD type
  when ODD'subtype_field base_ex_u {
    // This is a simple constraint that XORs the index bit 0 of data_word and increments that value
    keep parity_bit == (data_word[0:0] ^ data_word[0:0] + 1);
  };

  // Subtyping the EVEN type
  when EVEN'subtype_field base_ex_u {
    // This constraint is the same as above, however the increment is not done
    keep parity_bit == (data_word[0:0] ^ data_word[0:0]);
  };
};
'>

एक्सटेंडिंग मेथड

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

मेथड इक्स्टेन्शन उदाहरण

This code is in file1.e
<'
unit aop_example_u {
  meth_ext() is {
    out("This is the original method implementation.");
  };
};
'>
This code is in file2.e
<'
extend aop_example_u {
  meth_ext() is first {
    out("This method extension is executed before the original method implementation.");
  };

  meth_ext() is also {
    out("This method extension is executed after the original method implementation.");
  };
};
'>

संदर्भ

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


स्रोत

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