Verilog

From alpha
Jump to navigation Jump to search

Verilog
ParadigmStructured
पहली प्रस्तुति1984 (1984)
Stable release
IEEE 1364-2005 / 9 November 2005; 18 years ago (2005-11-09)
टाइपिंग अनुशासनStatic, weak
फ़ाइल नाम एक्सटेंशनएस.v, .vh
Dialects
Verilog-AMS
Influenced by
Pascal, Ada, C, Fortran
Influenced
SystemVerilog

Verilog, IEEE 1364 के रूप में मानकीकृत, एक हार्डवेयर विवरण भाषा (HDL) है जिसका उपयोग इलेक्ट्रॉनिक सिस्टम को मॉडल करने के लिए किया जाता है।यह आमतौर पर अमूर्तता के रजिस्टर-ट्रांसफर स्तर पर डिजिटल सर्किट के डिजाइन और सत्यापन में उपयोग किया जाता है।इसका उपयोग एनालॉग सर्किट और मिश्रित-सिग्नल इंटीग्रेटेड सर्किट के सत्यापन में भी किया जाता है। मिश्रित-सिग्नल सर्किट, साथ ही साथ आनुवंशिक सर्किट के डिजाइन में भी।[1] 2009 में, Verilog मानक (IEEE 1364-2005) को SystemVerilog मानक में विलय कर दिया गया, जिससे IEEE मानक 1800-2009 बन गया।तब से, Verilog आधिकारिक तौर पर SystemVerilog भाषा का हिस्सा है।वर्तमान संस्करण IEEE मानक 1800-2017 है।[2]


अवलोकन

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

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

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

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

वेरिलोग भाषा में बयानों का एक सबसेट संश्लेषण योग्य है। Verilog मॉड्यूल जो एक संश्लेषण योग्य कोडिंग शैली के अनुरूप हैं, जिसे RTL (रजिस्टर-ट्रांसफर स्तर) के रूप में जाना जाता है, को संश्लेषण सॉफ्टवेयर द्वारा शारीरिक रूप से महसूस किया जा सकता है। संश्लेषण सॉफ्टवेयर एल्गोरिदम रूप से (सार) वेरिलोग स्रोत को एक नेटलिस्ट में बदल देता है, एक तार्किक रूप से समतुल्य विवरण जिसमें केवल प्राथमिक लॉजिक प्राइमिटिव्स (और, या, या नहीं, फ्लिप-फ्लॉप, आदि) शामिल हैं जो एक विशिष्ट FPGA या VLSI तकनीक में उपलब्ध हैं। नेटलिस्ट के लिए आगे की जोड़तोड़ अंततः एक सर्किट फैब्रिकेशन ब्लूप्रिंट (जैसे कि एक एप्लिकेशन-विशिष्ट एकीकृत सर्किट के लिए एक फोटो मास्क सेट के रूप में। ASIC या एक FPGA के लिए एक बिटस्ट्रीम फ़ाइल) के लिए नेतृत्व करता है।

इतिहास

शुरुआत

वेरिलोग को प्रभु गोयल, फिल मूरबी, ची-लाई हुआंग और डगलस वार्मके द्वारा 1983 के अंत और 1984 की शुरुआत में बनाया गया था।[3] ची-लाई हुआंग ने पहले एक हार्डवेयर विवरण LALSD पर काम किया था, जो प्रोफेसर S.Y.H द्वारा विकसित एक भाषा है।सु, अपने पीएचडी काम के लिए।[4] इस प्रक्रिया के लिए अधिकार धारक, उस समय के मालिकाना में, स्वचालित एकीकृत डिजाइन प्रणाली थी (बाद में 1985 में गेटवे डिज़ाइन ऑटोमेशन में नाम दिया गया)।गेटवे डिज़ाइन ऑटोमेशन को 1990 में ताल डिज़ाइन सिस्टम द्वारा खरीदा गया था। ताल में अब गेटवे के वेरिलोग और वेरिलोग-एक्सएल के लिए पूर्ण मालिकाना अधिकार हैं, एचडीएल-सिमुलेटर जो अगले दशक के लिए वास्तविक मानक (वेरिलोग लॉजिक सिमुलेटर) बन जाएगा।मूल रूप से, वेरिलोग केवल सिमुलेशन का वर्णन करने और अनुमति देने के लिए था;भाषा के सबसेट को शारीरिक रूप से वास्तविक संरचनाओं (गेट आदि) के लिए भाषा के सबसेट के स्वचालित संश्लेषण के बाद विकसित किया गया था, जब भाषा ने व्यापक उपयोग प्राप्त कर लिया था।

Verilog शब्द सत्यापन और तर्क का एक पोर्टमैंट्यू है।[5]


Verilog-95

उस समय VHDL की बढ़ती सफलता के साथ, ताल ने खुले मानकीकरण के लिए भाषा को उपलब्ध कराने का फैसला किया।कैडेंस ने वेरिलॉग को सार्वजनिक डोमेन में ओपन वेरिलोग इंटरनेशनल (OVI) (अब Accellera के रूप में जाना जाता है) संगठन के तहत सार्वजनिक डोमेन में स्थानांतरित कर दिया।वेरिलोग को बाद में IEEE को प्रस्तुत किया गया और IEEE स्टैंडर्ड 1364-1995 बन गया, जिसे आमतौर पर Verilog-95 कहा जाता है।

उसी समय फ्रेम में ताल ने अपने एनालॉग सिम्युलेटर स्पेक्टर के पीछे मानकों का समर्थन करने के लिए वेरिलोग-ए के निर्माण की शुरुआत की।Verilog-A को कभी भी एक स्टैंडअलोन भाषा होने का इरादा नहीं था और वेरिलोग-एएमएस का एक सबसेट है, जिसमें वेरिलोग -95 शामिल है।

Verilog 2001

Verilog-95 के एक्सटेंशन को IEEE को वापस उन कमियों को कवर करने के लिए प्रस्तुत किया गया था जो उपयोगकर्ताओं ने मूल वेरिलोग मानक में पाए गए थे। ये एक्सटेंशन IEEE स्टैंडर्ड 1364-2001 बन गए, जिन्हें Verilog-2001 के रूप में जाना जाता है।

Verilog-2001 Verilog-95 से एक महत्वपूर्ण उन्नयन है। सबसे पहले, यह (2 के पूरक) हस्ताक्षरित नेट और चर के लिए स्पष्ट समर्थन जोड़ता है। पहले, कोड लेखकों को अजीब बिट-लेवल जोड़तोड़ का उपयोग करके हस्ताक्षरित संचालन करना था (उदाहरण के लिए, एक साधारण 8-बिट अतिरिक्त के कैरी-आउट बिट को इसके सही मूल्य को निर्धारित करने के लिए बूलियन बीजगणित के स्पष्ट विवरण की आवश्यकता थी)। Verilog-2001 के तहत एक ही फ़ंक्शन को अधिक स्पष्ट रूप से अंतर्निहित ऑपरेटरों में से एक द्वारा वर्णित किया जा सकता है: +,-, /, *, >>>। एक जनरेट-एंडजेनरेट कंस्ट्रक्शन (VHDL के जेनरेट-एंडजेनरेट के समान) Verilog-2001 को सामान्य निर्णय ऑपरेटरों (केस-IF-ELSE) के माध्यम से इंस्टेंट और स्टेटमेंट इंस्टेंटेशन को नियंत्रित करने की अनुमति देता है। जनरेट-एंडजेनरेट का उपयोग करते हुए, Verilog-2001 व्यक्तिगत उदाहरणों की कनेक्टिविटी पर नियंत्रण के साथ, उदाहरणों की एक सरणी को त्वरित कर सकता है। फ़ाइल I/O को कई नए सिस्टम कार्यों द्वारा बेहतर बनाया गया है। और अंत में, कोड पठनीयता में सुधार करने के लिए कुछ सिंटैक्स परिवर्धन पेश किए गए (जैसे हमेशा, @*, नाम पैरामीटर ओवरराइड, सी-स्टाइल फ़ंक्शन/टास्क/मॉड्यूल हेडर घोषणा)।

Verilog-2001 वाणिज्यिक EDA सॉफ्टवेयर पैकेजों के बहुमत द्वारा समर्थित Verilog का संस्करण है।

वेरिलोग 2005

SystemVerilog के साथ भ्रमित नहीं होने के लिए, Verilog 2005 (IEEE स्टैंडर्ड 1364-2005) में मामूली सुधार, विशिष्ट स्पष्टीकरण और कुछ नई भाषा विशेषताएं (जैसे Uwire कीवर्ड) शामिल हैं।

वेरिलोग मानक का एक अलग हिस्सा, वेरिलोग-एम्स, पारंपरिक वेरिलोग के साथ एनालॉग और मिश्रित सिग्नल मॉडलिंग को एकीकृत करने का प्रयास करता है।

SystemVerilog

हार्डवेयर सत्यापन भाषाओं जैसे कि ओपनवेरा, और वेरिसिटी की ई भाषा के आगमन ने सह-डिजाइन ऑटोमेशन इंक (सिनोप्सिस द्वारा अधिग्रहित) द्वारा सुपरलॉग के विकास को प्रोत्साहित किया।सुपरलॉग और वेरा की नींव को Accellera को दान कर दिया गया, जो बाद में IEEE मानक P1800-2005: SystemVerilog बन गया।

SystemVerilog Verilog-2005 का एक सुपरसेट है, जिसमें कई नई सुविधाएँ और क्षमताओं के साथ डिजाइन सत्यापन और डिज़ाइन मॉडलिंग में सहायता करने की क्षमता है।2009 तक, SystemVerilog और Verilog भाषा मानकों को SystemVerilog 2009 (IEEE स्टैंडर्ड 1800-2009) में विलय कर दिया गया था।वर्तमान संस्करण IEEE मानक 1800-2017 है।[6]


उदाहरण

दो फ्लिप-फ्लॉप (इलेक्ट्रॉनिक्स) का एक सरल उदाहरण | फ्लिप-फ्लॉप अनुसरण करता है: <syntaxhighighlight lang = verilog> मॉड्यूल टॉपलवेल (घड़ी, रीसेट);

 इनपुट घड़ी;
 इनपुट रीसेट;
 reg flop1;
 रेग फ्लॉप 2;
 हमेशा @ (Posedge Reset या Posedge घड़ी)
   if (रीसेट)
     शुरू करना
       flop1 <= 0;
       flop2 <= 1;
     समाप्त
   वरना
     शुरू करना
       flop1 <= flop2;
       flop2 <= flop1;
     समाप्त

अंत </syntaxhighighlight> <= e> Verilog में ऑपरेटर एक सामान्य प्रक्रियात्मक भाषा के विपरीत एक हार्डवेयर विवरण भाषा होने का एक और पहलू है।इसे एक गैर-अवरुद्ध असाइनमेंट के रूप में जाना जाता है।इसकी कार्रवाई तब तक पंजीकृत नहीं होती है जब तक कि हमेशा ब्लॉक निष्पादित न हो जाए।इसका मतलब यह है कि असाइनमेंट का क्रम अप्रासंगिक है और एक ही परिणाम का उत्पादन करेगा: FLOP1 और FLOP2 हर घड़ी में मूल्यों को स्वैप करेंगे।

अन्य असाइनमेंट ऑपरेटर = एक अवरुद्ध असाइनमेंट के रूप में संदर्भित किया जाता है।कब = असाइनमेंट का उपयोग किया जाता है, तर्क के प्रयोजनों के लिए, लक्ष्य चर को तुरंत अपडेट किया जाता है।उपरोक्त उदाहरण में, बयानों का उपयोग किया गया था = इसके बजाय ऑपरेटर को अवरुद्ध करना <=, FLOP1 और FLOP2 को स्वैप नहीं किया गया होगा। इसके बजाय, पारंपरिक प्रोग्रामिंग के रूप में, कंपाइलर केवल FLOP1 के बराबर Flop1 सेट करने के लिए समझ जाएगा (और बाद में FLOP2 के बराबर FLOP2 सेट करने के लिए निरर्थक तर्क को अनदेखा करें)।

एक उदाहरण काउंटर सर्किट इस प्रकार है: <syntaxhighighlight lang = verilog> मॉड्यूल DIV20X (RST, CLK, CET, CEP, COUNT, TC); // टाइटल 'डिवाइड-बाय -20 काउंटर इन इनेबल्स' // सक्षम CEP केवल एक घड़ी है सक्षम करें // सक्षम CET एक घड़ी सक्षम है और // टीसी आउटपुट को सक्षम करता है // वेरिलोग भाषा का उपयोग करके एक काउंटर

पैरामीटर आकार = 5; पैरामीटर लंबाई = 20;

इनपुट rst; // ये इनपुट/आउटपुट प्रतिनिधित्व करते हैं इनपुट सीएलके; // मॉड्यूल से कनेक्शन। इनपुट CET; इनपुट सीईपी;

आउटपुट [आकार -1: 0] गिनती; आउटपुट टीसी;

reg [आकार -1: 0] गिनती; // संकेत सौंपे गए

                     // हमेशा के भीतर
                     // (या प्रारंभिक) ब्लॉक
                     // टाइप रेग का होना चाहिए

तार टीसी; // अन्य संकेत प्रकार के तार के हैं

// नीचे हमेशा कथन एक समानांतर है // निष्पादन कथन कि // किसी भी समय संकेतों को निष्पादित करता है // आरएसटी या सीएलके संक्रमण कम से उच्च तक

हमेशा @

 if (rst) // यह CNTR के रीसेट का कारण बनता है
   गिनती <= {आकार {1'b0}};
 वरना
 if (cet && cep) // दोनों सत्य को सक्षम करता है
   शुरू करना
     if (गिनती == लंबाई -1)
       गिनती <= {आकार {1'b0}};
     वरना
       गिनती <= गिनती + 1'B1;
   समाप्त

// टीसी का मान लगातार असाइन किया जाता है // अभिव्यक्ति का मूल्य tc = (cet && (count == लंबाई -1) असाइन करें;

अंत </syntaxhighighlight>

देरी का एक उदाहरण: <syntaxhighighlight lang = verilog> ... रेग ए, बी, सी, डी; तार ई; ... हमेशा @(बी या ई)

 शुरू करना
   a = b & e;
   b = a | बी;
   #5 सी = बी;
   d = #6 c ^ e;
 समाप्त

</syntaxhighighlight>

हमेशा उपरोक्त खंड उपयोग की अन्य प्रकार की विधि को दिखाता है, अर्थात् यह तब निष्पादित करता है जब भी सूची में कोई संस्थाएं (बी या ई) बदलती हैं। जब इनमें से एक परिवर्तन होता है, तो A को तुरंत एक नया मान सौंपा जाता है, और अवरुद्ध असाइनमेंट के कारण, B को बाद में एक नया मान सौंपा गया है (A के नए मान को ध्यान में रखते हुए)। 5 समय इकाइयों की देरी के बाद, C को B का मान सौंपा गया है और C ^ e का मान एक अदृश्य स्टोर में दूर है। फिर 6 और समय इकाइयों के बाद, डी को उस मूल्य को सौंपा जाता है जो दूर टक किया गया था।

संकेत जो एक प्रक्रिया के भीतर से संचालित होते हैं (एक प्रारंभिक या हमेशा ब्लॉक) प्रकार के रेग के होने चाहिए। एक प्रक्रिया के बाहर से संचालित संकेतों को प्रकार तार के होना चाहिए। कीवर्ड रेग जरूरी नहीं कि हार्डवेयर रजिस्टर हो।

स्थिरांक की परिभाषा

Verilog में स्थिरांक की परिभाषा एक चौड़ाई पैरामीटर के अलावा का समर्थन करती है।मूल वाक्यविन्यास है:

<बिट्स में चौड़ाई> '<बेस लेटर> <नंबर>

उदाहरण:

  • 12'H123 - हेक्साडेसिमल 123 (12 बिट्स का उपयोग करके)
  • 20'D44 - दशमलव 44 (20 बिट्स का उपयोग करके - 0 एक्सटेंशन स्वचालित है)
  • 4'B1010 - बाइनरी 1010 (4 बिट्स का उपयोग करके)
  • 6'O77 - अक्टूबर 77 (6 बिट्स का उपयोग करके)

सिंथेज़िज़ेबल निर्माण

Verilog को व्यापक रूप से HDL (हार्डवेयर विवरण भाषा) माना जाता है। वेरिलोग में कई कथन हैं जिनमें वास्तविक हार्डवेयर में कोई एनालॉग नहीं है, उदा। $ प्रदर्शन। नतीजतन, हार्डवेयर का वर्णन करने के लिए बहुत सी भाषा का उपयोग नहीं किया जा सकता है। इसका मतलब यह प्रतीत होता है कि सामान्य रूप से वेरिलोग भाषा की बहुत परिभाषा को ठीक से पुनर्निर्मित करने की आवश्यकता है। हालांकि, यहां प्रस्तुत उदाहरण भाषा के क्लासिक (और सीमित) सबसेट हैं, जिसमें वास्तविक गेट्स के लिए सीधा मैपिंग है। <syntaxhighighlight lang = verilog> // MUX उदाहरण - एक ही काम करने के तीन तरीके।

// पहला उदाहरण निरंतर असाइनमेंट का उपयोग करता है तार बाहर; असाइन करें = sel? ए: बी;

// दूसरा उदाहरण एक प्रक्रिया का उपयोग करता है // एक ही बात को पूरा करने के लिए।

बाहर reg; हमेशा @(ए या बी या सेल)

 शुरू करना
   केस (सेल)
     1'B0: आउट = बी;
     1'B1: आउट = ए;
   समाप्ति
 समाप्त

// अंत में - आप एक में/और उपयोग कर सकते हैं // प्रक्रियात्मक संरचना। बाहर reg; हमेशा @(ए या बी या सेल)

 if (सेल)
   बाहर = ए;
 वरना
   बाहर = बी;

</syntaxhighighlight>

अगली दिलचस्प संरचना एक पारदर्शी कुंडी है; जब गेट सिग्नल पास-थ्रू के लिए सेट किया जाता है, तो यह इनपुट को आउटपुट में पास कर देगा, और इनपुट को कैप्चर करता है और इसे पकड़ने के लिए गेट सिग्नल के संक्रमण पर संग्रहीत करता है। इनपुट सिग्नल की परवाह किए बिना आउटपुट स्थिर रहेगा, जबकि गेट को पकड़ने के लिए सेट किया गया है। गेट के पास-थ्रू स्तर के नीचे के उदाहरण में तब होगा जब IF क्लॉज का मान सत्य है, अर्थात् गेट = 1. यह पढ़ा जाता है कि क्या गेट सच है, DIN को लगातार latch_out को खिलाया जाता है। एक बार यदि क्लॉज गलत है, तो Latch_out पर अंतिम मान रहेगा और DIN के मूल्य से स्वतंत्र होगा। <syntaxhighighlight lang = verilog> // पारदर्शी कुंडी उदाहरण

reg latch_out; हमेशा @(गेट या दीन)

 if (गेट)
   latch_out = din; // राज्य से गुजरें
   // ध्यान दें कि यहाँ और आवश्यक नहीं है। चर
   // Latch_out गेट के दीन के मान का पालन करेगा
   // उच्च। जब गेट कम हो जाता है, तो Latch_out स्थिर रहेगा।

</syntaxhighighlight>

फ्लिप-फ्लॉप (इलेक्ट्रॉनिक्स) | फ्लिप-फ्लॉप अगला महत्वपूर्ण टेम्पलेट है; Verilog में, D-Flop सबसे सरल है, और इसे इस तरह से मॉडलिंग किया जा सकता है: <syntaxhighighlight lang = verilog> reg q; हमेशा @(Posedge Clk)

 क्यू <= डी;

</syntaxhighighlight>

उदाहरण में नोटिस करने के लिए महत्वपूर्ण बात गैर-अवरुद्ध असाइनमेंट का उपयोग है। अंगूठे का एक बुनियादी नियम <= का उपयोग करना है जब हमेशा क्लॉज के भीतर कोई पोजेज या नेगेज स्टेटमेंट होता है।

डी-फ्लॉप का एक संस्करण एक अतुल्यकालिक रीसेट के साथ एक है; एक सम्मेलन है कि रीसेट राज्य बयान के भीतर पहला खंड होगा। <syntaxhighighlight lang = verilog> reg q; हमेशा @(Posedge Clk या Posedge Reset)

 if (रीसेट)
   क्यू <= 0;
 वरना
   क्यू <= डी;

</syntaxhighighlight>

अगला संस्करण दोनों एक एसिंक्रोनस रीसेट और एसिंक्रोनस सेट स्थिति सहित है; फिर से सम्मेलन खेल में आता है, यानी रीसेट टर्म के बाद सेट शब्द होता है। <syntaxhighighlight lang = verilog> reg q; हमेशा @(Posedge Clk या Posedge Reset या Posedge सेट)

 if (रीसेट)
   क्यू <= 0;
 वरना
 if (सेट)
   क्यू <= 1;
 वरना
   क्यू <= डी;

</syntaxhighighlight>

नोट: यदि इस मॉडल का उपयोग सेट/रीसेट फ्लिप फ्लॉप को मॉडल करने के लिए किया जाता है, तो सिमुलेशन त्रुटियां परिणाम कर सकती हैं। घटनाओं के निम्नलिखित परीक्षण अनुक्रम पर विचार करें। 1) रीसेट उच्च हो जाता है 2) सीएलके उच्च हो जाता है 3) सेट उच्च हो जाता है 4) सीएलके फिर से उच्च हो जाता है 5) रीसेट कम हो जाता है इसके बाद 6) सेट कम हो रहा है। कोई सेटअप नहीं मानें और उल्लंघन न करें।

इस उदाहरण में हमेशा @ कथन पहले निष्पादित होगा जब रीसेट का बढ़ता हुआ किनारा होता है जो q को 0. के मान पर रखेगा। अगली बार जब हमेशा ब्लॉक निष्पादित होता है तो CLK का बढ़ता हुआ किनारा होगा जो फिर से q को एक मूल्य पर रखेगा। 0. हमेशा ब्लॉक तब निष्पादित होता है जब सेट उच्च हो जाता है, क्योंकि रीसेट उच्च बलों को क्यू होता है। 0. पर बने रहने के लिए यह स्थिति वास्तविक फ्लिप फ्लॉप के आधार पर सही हो सकती है या नहीं हो सकती है। हालांकि, यह इस मॉडल के साथ मुख्य समस्या नहीं है। नोटिस वेंजब रीसेट कम हो जाता है, तो वह सेट अभी भी अधिक है। एक वास्तविक फ्लिप फ्लॉप में यह आउटपुट को 1 तक जाने का कारण होगा, हालांकि, इस मॉडल में यह नहीं होगा क्योंकि हमेशा ब्लॉक सेट और रीसेट के बढ़ते किनारों से ट्रिगर होता है - स्तर नहीं। सेट/रीसेट फ्लिप फ्लॉप के लिए एक अलग दृष्टिकोण आवश्यक हो सकता है।

अंतिम बुनियादी संस्करण वह है जो अपने इनपुट को खिलाने वाले MUX के साथ एक डी-फ्लॉप को लागू करता है। MUX के पास फ्लॉप से ​​ही एक डी-इनपुट और प्रतिक्रिया है। यह एक गेटेड लोड फ़ंक्शन की अनुमति देता है। <syntaxhighighlight lang = verilog> // एक स्पष्ट प्रतिक्रिया पथ के साथ मूल संरचना हमेशा @(Posedge Clk)

 if (गेट)
   क्यू <= डी;
 वरना
   क्यू <= क्यू; // स्पष्ट प्रतिक्रिया पथ

// अधिक सामान्य संरचना मानती है कि प्रतिक्रिया मौजूद है // यह एक सुरक्षित धारणा है क्योंकि यह कैसे है // हार्डवेयर कंपाइलर इसकी व्याख्या करेगा। यह संरचना // एक कुंडी की तरह दिखता है। मतभेद हैं // @(Posedge Clk) और गैर-ब्लॉकिंग <= // हमेशा @(Posedge Clk)

 if (गेट)
   क्यू <= डी; // अन्य MUX निहित है

</syntaxhighighlight>

ध्यान दें कि इस विवरण में कोई प्रारंभिक ब्लॉक उल्लिखित नहीं हैं। इस संरचना पर FPGA और ASIC संश्लेषण उपकरणों के बीच एक विभाजन है। FPGA उपकरण प्रारंभिक ब्लॉकों की अनुमति देते हैं जहां रीसेट सिग्नल का उपयोग करने के बजाय reg मान स्थापित किए जाते हैं। ASIC संश्लेषण उपकरण इस तरह के बयान का समर्थन नहीं करते हैं। इसका कारण यह है कि एक FPGA की प्रारंभिक स्थिति कुछ ऐसी है जो FPGA की मेमोरी टेबल में डाउनलोड की जाती है। एक ASIC एक वास्तविक हार्डवेयर कार्यान्वयन है।

प्रारंभिक और हमेशा

एक वेरिलॉग प्रक्रिया घोषित करने के दो अलग -अलग तरीके हैं। ये हमेशा और प्रारंभिक कीवर्ड हैं। हमेशा कीवर्ड एक फ्री-रनिंग प्रक्रिया को इंगित करता है। प्रारंभिक कीवर्ड एक प्रक्रिया को एक बार निष्पादित करता है। दोनों निर्माण सिम्युलेटर समय 0 पर निष्पादन शुरू करते हैं, और दोनों ब्लॉक के अंत तक निष्पादित होते हैं। एक बार जब एक हमेशा ब्लॉक अपने अंत तक पहुंच गया है, तो इसे फिर से (फिर से) पुनर्निर्धारित किया जाता है। यह मानना ​​एक आम गलत धारणा है कि एक प्रारंभिक ब्लॉक हमेशा ब्लॉक से पहले निष्पादित करेगा। वास्तव में, प्रारंभिक-ब्लॉक को हमेशा-ब्लॉक के विशेष-मामले के रूप में सोचना बेहतर है, जो पहली बार पूरा होने के बाद समाप्त हो जाता है। <syntaxhighighlight lang = verilog> //उदाहरण: शुरुआती

 शुरू करना
   ए = 1; // समय 0 पर reg के लिए एक मान असाइन करें
   #1; // प्रतीक्षा 1 समय इकाई
   बी = ए; // reg a से reg b का मान असाइन करें
 समाप्त

हमेशा @(ए या बी) // किसी भी समय ए या बी बदलते हैं, प्रक्रिया चलाएं शुरू करना

 यदि एक)
   सी = बी;
 वरना
   d = ~ b;

इस ब्लॉक के साथ अंत //, अब शीर्ष पर लौटें (यानी @ ईवेंट-कंट्रोल)

हमेशा @(posedge a) // रन जब भी reg a में उच्च परिवर्तन होता है

 ए <= बी;

</syntaxhighighlight>

ये इन दो कीवर्ड के लिए क्लासिक उपयोग हैं, लेकिन दो महत्वपूर्ण अतिरिक्त उपयोग हैं। इनमें से सबसे आम @(...) संवेदनशीलता सूची के बिना एक हमेशा कीवर्ड है। हमेशा नीचे दिखाए गए अनुसार उपयोग करना संभव है: <syntaxhighighlight lang = verilog> हमेशा

 शुरू // हमेशा समय 0 पर निष्पादित करना शुरू करता है और कभी नहीं रोकता है
   clk = 0; // सेट क्लक 0 पर
   #1; // 1 समय इकाई के लिए प्रतीक्षा करें
   clk = 1; // सेट सीएलके को 1
   #1; // प्रतीक्षा 1 समय इकाई
 अंत // निष्पादित करता रहता है - इसलिए शुरुआत के शीर्ष पर वापस जारी रखें

</syntaxhighighlight>

हमेशा कीवर्ड सी भाषा निर्माण के समान कार्य करता है जबकि (1) {..} इस अर्थ में कि यह हमेशा के लिए निष्पादित करेगा।

अन्य दिलचस्प अपवाद हमेशा कीवर्ड के अतिरिक्त के साथ प्रारंभिक कीवर्ड का उपयोग है।

नीचे दिया गया उदाहरण कार्यात्मक रूप से ऊपर के उदाहरण के समान है। <syntaxhighighlight lang = verilog> प्रारंभिक हमेशा के लिए // समय 0 पर शुरू करें और शुरुआत/अंत को हमेशा के लिए दोहराएं

 शुरू करना
   clk = 0; // सेट क्लक 0 पर
   #1; // 1 समय इकाई के लिए प्रतीक्षा करें
   clk = 1; // सेट सीएलके को 1
   #1; // प्रतीक्षा 1 समय इकाई
 समाप्त

</syntaxhighighlight>

कांटा/JOIN

समानांतर प्रक्रियाओं को बनाने के लिए कांटा/जॉइन जोड़ी का उपयोग वेरिलोग द्वारा किया जाता है। एक कांटा/जॉइन जोड़ी के बीच सभी कथन (या ब्लॉक) कांटे को मारते हुए निष्पादन प्रवाह पर एक साथ निष्पादन शुरू करते हैं। कांटा के बीच सबसे लंबे समय तक चलने वाले बयान या ब्लॉक के पूरा होने पर शामिल होने के बाद निष्पादन जारी रहता है। <syntaxhighighlight lang = verilog> शुरुआती

 काँटा
   $ लिखना (ए); // प्रिंट चार ए
   $ लिखना (बी); // प्रिंट चार बी
   शुरू करना
     #1; // प्रतीक्षा 1 समय इकाई
     $ लिखना (c); // प्रिंट चार सी
   समाप्त
 जोड़ना

</syntaxhighighlight>

जिस तरह से उपरोक्त लिखा गया है, वह या तो अनुक्रम एबीसी या बीएसी प्रिंट आउट होना संभव है। पहले $ लेखन और दूसरा $ लेखन के बीच सिमुलेशन का क्रम सिम्युलेटर कार्यान्वयन पर निर्भर करता है, और उद्देश्यपूर्ण रूप से सिम्युलेटर द्वारा यादृच्छिक किया जा सकता है। यह सिमुलेशन को आकस्मिक दौड़ की स्थिति के साथ-साथ जानबूझकर गैर-नियतात्मक व्यवहार को शामिल करने की अनुमति देता है।

ध्यान दें कि VHDL वैरिलोग जैसी कई प्रक्रियाओं को गतिशील रूप से नहीं कर सकता है।[7]


दौड़ की स्थिति

निष्पादन के क्रम को हमेशा वेरिलोग के भीतर गारंटी नहीं दी जाती है।यह एक क्लासिक उदाहरण द्वारा सचित्र किया जा सकता है।नीचे दिए गए कोड स्निपेट पर विचार करें: <syntaxhighighlight lang = verilog> शुरुआती

 ए = 0;

शुरुआती

 बी = ए;

शुरुआती

 शुरू करना
   #1;
   $ डिस्प्ले (मूल्य a =%d मूल्य b =%d, a, b);
 समाप्त

</syntaxhighighlight>

ए और बी के मूल्यों के लिए क्या मुद्रित किया जाएगा?प्रारंभिक ब्लॉकों के निष्पादन के क्रम के आधार पर, यह शून्य और शून्य हो सकता है, या वैकल्पिक रूप से शून्य और कुछ अन्य मनमाना असिंचित मूल्य हो सकता है।#1 देरी के कारण, दोनों असाइनमेंट ब्लॉक पूरा होने के बाद $ डिस्प्ले स्टेटमेंट हमेशा निष्पादित करेगा।

ऑपरेटर

नोट: इन ऑपरेटरों को पूर्वता के क्रम में नहीं दिखाया गया है।

Operator type Operator symbols Operation performed
Bitwise ~ Bitwise NOT (1's complement)
& Bitwise AND
| Bitwise OR
^ Bitwise XOR
~^ or ^~ Bitwise XNOR
Logical ! NOT
&& AND
|| OR
Reduction & Reduction AND
~& Reduction NAND
| Reduction OR
~| Reduction NOR
^ Reduction XOR
~^ or ^~ Reduction XNOR
Arithmetic + Addition
- Subtraction
- 2's complement
* Multiplication
/ Division
** Exponentiation (*Verilog-2001)
Relational > Greater than
< Less than
>= Greater than or equal to
<= Less than or equal to
== Logical equality (bit-value 1'bX is removed from comparison)
!= Logical inequality (bit-value 1'bX is removed from comparison)
=== 4-state logical equality (bit-value 1'bX is taken as literal)
!== 4-state logical inequality (bit-value 1'bX is taken as literal)
Shift >> Logical right shift
<< Logical left shift
>>> Arithmetic right shift (*Verilog-2001)
<<< Arithmetic left shift (*Verilog-2001)
Concatenation {, } Concatenation
Replication {n{m}} Replicate value m for n times
Conditional ? : Conditional


चार-मूल्यवान तर्क

IEEE 1364 मानक चार राज्यों के साथ चार-मूल्यवान तर्क को परिभाषित करता है: 0, 1, Z (उच्च प्रतिबाधा), और X (अज्ञात तर्क मान)।प्रतिस्पर्धी VHDL के लिए, बहु-मूल्यवान तर्क के लिए एक समर्पित मानक नौ स्तरों के साथ IEEE 1164 के रूप में मौजूद है।[8]


सिस्टम कार्य

सिमुलेशन के दौरान सरल I/O और विभिन्न डिज़ाइन माप कार्यों को संभालने के लिए सिस्टम कार्य उपलब्ध हैं। सभी सिस्टम कार्यों को उपयोगकर्ता कार्यों और कार्यों से अलग करने के लिए $ के साथ उपसर्ग किया जाता है। यह खंड सबसे अधिक उपयोग किए जाने वाले कार्यों की एक छोटी सूची प्रस्तुत करता है। यह किसी भी तरह से एक व्यापक सूची नहीं है।

  • $ डिस्प्ले - एक स्वचालित न्यूलाइन के बाद एक लाइन को स्क्रीन करने के लिए प्रिंट करें।
  • $ लिखें - न्यूलाइन के बिना एक लाइन स्क्रीन करने के लिए प्रिंट करें।
  • $ swrite - न्यूलाइन के बिना एक लाइन को चर के लिए प्रिंट करें।
  • $ SSCANF-चर एक प्रारूप-निर्दिष्ट स्ट्रिंग से पढ़ें। (*Verilog-2001)
  • $ फोपेन - एक फ़ाइल के लिए एक हैंडल खोलें (पढ़ें या लिखें)
  • $ fdisplay - एक फ़ाइल से एक पंक्ति प्रिंट करें एक स्वचालित newline के बाद।
  • $ fwrite - न्यूलाइन के बिना एक लाइन फाइल करने के लिए प्रिंट करें।
  • $ FSCANF-एक प्रारूप-निर्दिष्ट स्ट्रिंग फ़ाइल से पढ़ें। (*Verilog-2001)
  • $ fclose - एक खुली फ़ाइल हैंडल को बंद करें और जारी करें।
  • $ READMEMH - एक मेमोरी सरणी में हेक्स फ़ाइल सामग्री पढ़ें।
  • $ READMEMB - एक मेमोरी सरणी में बाइनरी फ़ाइल सामग्री पढ़ें।
  • $ मॉनिटर - किसी भी परिवर्तन मूल्य पर सभी सूचीबद्ध चर प्रिंट करें।
  • $ समय - वर्तमान सिमुलेशन समय का मूल्य।
  • $ DUMPFILE - VCD (मान परिवर्तन डंप) प्रारूप आउटपुट फ़ाइल नाम की घोषणा करें।
  • $ डंपवर - चालू करें और चर को डंप करें।
  • $ डंपपोर्ट्स-विस्तारित-वीसीडी प्रारूप में चर को चालू और डंप करें।
  • $ यादृच्छिक - एक यादृच्छिक मूल्य लौटाएं।

प्रोग्राम लैंग्वेज इंटरफ़ेस (पीएलआई)

PLI C भाषा में लिखे गए प्रोग्राम फ़ंक्शन के लिए Verilog से नियंत्रण स्थानांतरित करने के लिए एक तंत्र के साथ एक प्रोग्रामर प्रदान करता है।यह आधिकारिक तौर पर IEEE STD 1364-2005 द्वारा नए Verilog प्रक्रियात्मक इंटरफ़ेस के पक्ष में पदावनत किया गया है, जो PLI को पूरी तरह से बदल देता है।

PLI (अब VPI) Verilog को C भाषा में लिखे गए अन्य कार्यक्रमों के साथ सहयोग करने में सक्षम बनाता है जैसे कि टेस्ट हार्नेस, एक माइक्रोकंट्रोलर के निर्देश सेट सिमुलेटर, डिबगर्स, और इसी तरह।उदाहरण के लिए, यह C फ़ंक्शन प्रदान करता है tf_putlongp() तथा tf_getlongp() जिसका उपयोग क्रमशः वर्तमान वेरिलॉग कार्य या कार्य के तर्क को लिखने और पढ़ने के लिए किया जाता है।

सिमुलेशन सॉफ्टवेयर

Verilog सिमुलेटर के बारे में जानकारी के लिए, Verilog सिमुलेटर की सूची देखें।

यह भी देखें

अतिरिक्त सामग्री

  • वेरिलोग सिमुलेटर की सूची
  • वेवफॉर्म व्यूअर
  • SystemVerilog डायरेक्ट प्रोग्रामिंग इंटरफ़ेस (DPI)
  • वेरिलोग प्रक्रियात्मक इंटरफ़ेस (वीपीआई)

समान भाषाएँ

  • VHDL
  • SystemC-C ++ लाइब्रेरी प्रदान करता है HDL इवेंट-चालित शब्दार्थ
  • SystemVerilog
  • ओपनवेरा
  • ई (सत्यापन भाषा)
  • संपत्ति विनिर्देश भाषा
  • छेनी, एक खुला-स्रोत भाषा जो स्काला के शीर्ष पर बनाई गई है

वेरिलोग जनरेटर

संदर्भ

  1. Nielsen AA, Der BS, Shin J, Vaidyanathan P, Paralanov V, Strychalski EA, Ross D, Densmore D, Voigt CA (2016). "Genetic circuit design automation". Science. 352 (6281): aac7341. doi:10.1126/science.aac7341. PMID 27034378.
  2. 1800-2vhhu017 - IEEE Standard for SystemVerilog--Unified Hardware Design, Specification, and Verification Language
  3. "Verilog's inventor nabs EDA's Kaufman award". EE Times. 7 November 2005.
  4. Huang, Chi-Lai; Su, S.Y.H. "Approaches for Computer-Aided Logic System Design Using Hardware Description Language". Proceedings of International Computer Symposium 1980, Taipei, Taiwan, December 1980. pp. 772–79O. OCLC 696254754.
  5. "Oral History of Philip Raymond "Phil" Moorby" (PDF). Computer History Museum. 22 April 2013. pp. 23–25.
  6. 1800-2017 - IEEE Standard for SystemVerilog--Unified Hardware Design, Specification, and Verification Language
  7. Cummings, Clifford E. (2003). "SystemVerilog – Is This The Merging of Verilog & VHDL?" (PDF). SNUG Boston 2003.
  8. Miller, D. Michael; Thornton, Mitchell A. (2008). Multiple valued logic: concepts and representations. Synthesis Lectures on Digital Circuits and Systems. Vol. 12. Morgan & Claypool. ISBN 978-1-59829-190-2.
Notes


बाहरी संबंध



मानक विकास

भाषा एक्सटेंशन

  • verilog ऑटोस-वेरिलॉग कोड को बनाए रखने के लिए उद्योग आईपी द्वारा उपयोग किया जाने वाला एक ओपन-सोर्स मेटा-कॉममेंट।

श्रेणी: हार्डवेयर विवरण भाषाएँ श्रेणी: IEEE DASC मानकों श्रेणी: IEC मानक श्रेणी: उदाहरण कोड के साथ लेख श्रेणी: संरचित प्रोग्रामिंग भाषाएँ श्रेणी: डोमेन-विशिष्ट प्रोग्रामिंग भाषाएँ श्रेणी: 1984 में बनाई गई प्रोग्रामिंग भाषाएँ