वीएलएसआई डिज़ाइन - वेरिलोग परिचय
वेरिलॉग एक हार्डवेयर सॉफ्टवेयर भाषा (एचडीएल) है। यह एक नेटवर्क स्विच या माइक्रोप्रोसेसर या मेमोरी या फ्लिप। फ्लॉप जैसी डिजिटल प्रणाली का वर्णन करने के लिए उपयोग की जाने वाली भाषा है। इसका मतलब है, एचडीएल का उपयोग करके हम किसी भी स्तर पर किसी भी डिजिटल हार्डवेयर का वर्णन कर सकते हैं। डिजाइन, जो एचडीएल में वर्णित हैं, तकनीक से स्वतंत्र हैं, डिजाइनिंग और डिबगिंग के लिए बहुत आसान है, और आमतौर पर योजनाबद्ध की तुलना में अधिक उपयोगी होते हैं, खासकर बड़े सर्किट के लिए।
वेरिलोग अमूर्तता के कई स्तरों पर एक डिजाइन का समर्थन करता है। प्रमुख तीन हैं -
- व्यवहार स्तर
- रजिस्टर-स्थानांतरण स्तर
- गेट स्तर
व्यवहार स्तर
यह स्तर समवर्ती एल्गोरिदम (व्यवहार) द्वारा एक प्रणाली का वर्णन करता है। प्रत्येक एल्गोरिदम अनुक्रमिक है, जिसका अर्थ है कि इसमें निर्देशों का एक सेट होता है जो एक-एक करके निष्पादित होते हैं। कार्य, कार्य और ब्लॉक मुख्य तत्व हैं। डिजाइन के संरचनात्मक बोध का कोई संबंध नहीं है।
रजिस्टर − स्थानांतरण स्तर
रजिस्टर ट्रांसफर स्तर का उपयोग करने वाले डिजाइन, संचालन का उपयोग करते हुए एक सर्किट की विशेषताओं और रजिस्टरों के बीच डेटा के हस्तांतरण को निर्दिष्ट करते हैं। RTL कोड की आधुनिक परिभाषा "कोई भी कोड जो संश्लेषित होता है उसे RTL कोड कहा जाता है"।
गेट स्तर
तार्किक स्तर के भीतर, एक प्रणाली की विशेषताओं को तार्किक लिंक और उनके समय गुणों द्वारा वर्णित किया गया है। सभी संकेत असतत संकेत हैं। उनके पास केवल निश्चित तार्किक मान हो सकते हैं (`0 ',` 1', `X ',` Z`)। प्रयोग करने योग्य संचालन पूर्वनिर्धारित तर्क प्रधानता (मूल द्वार) हैं। गेट स्तर मॉडलिंग तर्क डिजाइन के लिए एक सही विचार नहीं हो सकता है। गेट लेवल कोड सिंथेसिस टूल्स जैसे उपकरणों का उपयोग करके उत्पन्न किया जाता है और उनका नेटलिस्ट गेट लेवल सिमुलेशन और बैकेंड के लिए उपयोग किया जाता है।
लेक्सिकल स्तन
वेरिलॉग भाषा स्रोत पाठ फाइलें लेक्सिकल टोकन की एक धारा हैं। एक टोकन में एक या अधिक वर्ण होते हैं, और प्रत्येक एकल वर्ण बिल्कुल एक टोकन में होता है।
वेरिलोग एचडीएल द्वारा उपयोग किए जाने वाले मूल लेक्सिकल टोकन सी प्रोग्रामिंग लैंग्वेज के समान हैं। वेरिलॉग मामला संवेदनशील है। सभी प्रमुख शब्द निचले मामले में हैं।
सफेद जगह
सफेद रिक्त स्थान में रिक्त स्थान, टैब, नई-पंक्तियाँ और प्रपत्र फ़ीड के लिए वर्ण हो सकते हैं। इन पात्रों को अनदेखा किया जाता है सिवाय जब वे अलग टोकन की सेवा करते हैं
व्हाइट स्पेस कैरेक्टर ब्लैंक स्पेस, टैब्स, कैरिज रिटर्न, न्यू लाइन और फॉर्म फीड हैं।
टिप्पणियाँ
टिप्पणियों का प्रतिनिधित्व करने के लिए दो रूप हैं
- 1) एकल पंक्ति टिप्पणियाँ टोकन // से शुरू होती हैं और गाड़ी वापसी के साथ समाप्त होती हैं।
Ex .: // यह सिंगल लाइन सिंटैक्स है
- 2) बहुस्तरीय टिप्पणियां टोकन / * से शुरू होती हैं और टोकन * / के साथ समाप्त होती हैं
Ex .: / * यह बहुस्तरीय सिंटेक्स * है /
नंबर
आप बाइनरी, ऑक्टल, दशमलव या हेक्साडेसिमल प्रारूप में एक संख्या निर्दिष्ट कर सकते हैं। नकारात्मक संख्याओं को 2 की प्रशंसा संख्याओं में दर्शाया गया है। वेरिलॉग पूर्णांक, वास्तविक संख्या और हस्ताक्षरित और अहस्ताक्षरित संख्याओं की अनुमति देता है।
सिंटैक्स द्वारा दिया जाता है - <size> <radix> <value>
आकार या असंबद्ध संख्या को परिभाषित किया जा सकता है <Size> और <radix> परिभाषित करता है कि क्या यह द्विआधारी, अष्टाधारी, षोडश आधारी या दशमलव है।
पहचानकर्ता
आइडेंटिफायर एक फ़ंक्शन, मॉड्यूल या रजिस्टर जैसे ऑब्जेक्ट को परिभाषित करने के लिए उपयोग किया जाने वाला नाम है। पहचानकर्ताओं को एक वर्णमाला वर्ण या अंडरस्कोर वर्ण से शुरू करना चाहिए। पूर्व। A_Z, a_z, _
पहचानकर्ता वर्णमाला, संख्यात्मक, अंडरस्कोर और $ वर्णों का एक संयोजन है। वे 1024 वर्णों तक लंबे हो सकते हैं।
ऑपरेटर्स
ऑपरेटर विशेष वर्ण होते हैं जिनका उपयोग परिस्थितियों को रखने या चर को संचालित करने के लिए किया जाता है। चरों पर संचालन करने के लिए एक, दो और कभी-कभी तीन वर्ण होते हैं।
पूर्व। >, +, ~, &; =।
वेरिलोग कीवर्ड
Verilog में विशेष अर्थ रखने वाले शब्दों को Verilog कीवर्ड कहा जाता है। उदाहरण के लिए, असाइन करें, केस, जबकि, वायर, रेग, और, या, नंद, और मॉड्यूल। उन्हें पहचानकर्ता के रूप में उपयोग नहीं किया जाना चाहिए। वेरिलॉग कीवर्ड में संकलक निर्देश, और सिस्टम कार्य और फ़ंक्शन भी शामिल हैं।
गेट स्तर मॉडलिंग
वेरिलॉग में लॉजिक गेट्स, ट्रांसमिशन गेट्स और स्विचेस जैसी अंतर्निहित प्राइमरी हैं। ये शायद ही कभी डिजाइन के काम के लिए उपयोग किए जाते हैं, लेकिन ASIC / FPGA कोशिकाओं के मॉडलिंग के लिए इनका उपयोग संश्लेषण के बाद की दुनिया में किया जाता है।
गेट स्तर मॉडलिंग दो गुणों का प्रदर्शन करती है -
Drive strength- आउटपुट गेट्स की ताकत ड्राइव की ताकत से परिभाषित होती है। स्रोत से सीधा संबंध होने पर आउटपुट सबसे मजबूत होता है। ताकत कम हो जाती है अगर कनेक्शन एक संवाहक ट्रांजिस्टर के माध्यम से होता है और कम से कम जब पुल-अप / डाउन प्रतिरोधक के माध्यम से जुड़ा होता है। ड्राइव की ताकत आमतौर पर निर्दिष्ट नहीं होती है, इस मामले में ताकत strong1 और strong0 के लिए चूक जाती है।
Delays- यदि देरी निर्दिष्ट नहीं है, तो गेटों में प्रसार देरी नहीं है; यदि दो देरी निर्दिष्ट की जाती है, तो पहले एक वृद्धि में देरी का प्रतिनिधित्व करता है और दूसरा देरी से गिरता है; यदि केवल एक देरी निर्दिष्ट की जाती है, तो वृद्धि और गिरावट दोनों समान हैं। संश्लेषण में देरी को नजरअंदाज किया जा सकता है।
गेट आदिम
मूल तर्क गेट्स एक आउटपुट और कई इनपुट का उपयोग करके वेरिलोग में उपयोग किया जाता है। GATE उन कीवर्ड में से एक का उपयोग करता है - और, नंद, या, और न ही, एक्सोर, एक्सनोर इन नोरिल फॉर एन नंबर ऑफ़ इनपुट्स और 1 आउटपुट।
Example:
Module gate()
Wire ot0;
Wire ot1;
Wire ot2;
Reg in0,in1,in2,in3;
Not U1(ot0,in0);
Xor U2(ot1,in1,in2,in3);
And U3(ot2, in2,in3,in0)
ट्रांसमिशन गेट प्रिमिटिव
ट्रांसमिशन गेट प्रिमिटिव में बफ़र और इनवर्टर दोनों शामिल हैं। उनके पास एकल इनपुट और एक या अधिक आउटपुट हैं। नीचे दिखाए गए गेट तात्कालिक वाक्य-विन्यास में GATE का अर्थ कीवर्ड बफ़ या नॉट गेट है।
उदाहरण: नहीं, buf, bufif0, bufif1, notif0, notif1
नहीं - एन आउटआउट इन्वर्टर
Buf - n आउटपुट बफर
बुफ़िफो - ट्रिस्टेट बफर, सक्रिय कम सक्षम
Bufif1 - ट्रिस्टेट बफर, सक्रिय उच्च सक्षम
नोटिफ़ो - ट्रिस्टेट इन्वर्टर, सक्रिय कम सक्षम
नोटिफ़ 1 - ट्रिस्टेट इन्वर्टर, सक्रिय उच्च सक्षम
Example:
Module gate()
Wire out0;
Wire out1;
Reg in0,in1;
Not U1(out0,in0);
Buf U2(out0,in0);
जानकारी का प्रकार
मान सेट करें
वेरिलॉग में मुख्य रूप से चार मूल मूल्य शामिल हैं। वेरीलॉग डेटा प्रकार, जो कि वेरिलॉग स्टोर में उपयोग किए जाते हैं, ये मूल्य हैं -
0 (तर्क शून्य या गलत स्थिति)
1 (तर्क एक, या सही स्थिति)
x (अज्ञात तर्क मान)
z (उच्च प्रतिबाधा अवस्था)
एक्स और जेड का उपयोग संश्लेषण के लिए बहुत सीमित है।
वायर
एक तार का उपयोग सर्किट में एक भौतिक तार का प्रतिनिधित्व करने के लिए किया जाता है और इसका उपयोग गेट या मॉड्यूल के कनेक्शन के लिए किया जाता है। एक तार का मूल्य केवल एक फ़ंक्शन या ब्लॉक में पढ़ा और सौंपा नहीं जा सकता है। एक तार मूल्य संचय नहीं कर सकता है लेकिन हमेशा एक निरंतर असाइनमेंट स्टेटमेंट या गेट / मॉड्यूल के आउटपुट से तार को जोड़कर संचालित होता है। अन्य विशिष्ट प्रकार के तार हैं -
Wand (wired-AND) - यहां वैंड का मूल्य तार्किक और उससे जुड़े सभी डिवाइस ड्राइवरों पर निर्भर है।
Wor (wired-OR) - यहाँ एक Wor का मान तार्किक OR से जुड़े सभी डिवाइस ड्राइवरों पर निर्भर करता है।
Tri (three-state) - यहाँ केवल एक को छोड़कर सभी त्रि से जुड़े ड्राइवरों को z होना चाहिए (जो त्रि का मान निर्धारित करता है)।
Example:
Wire [msb:lsb] wire_variable_list;
Wirec // simple wire
Wand d;
Assign d = a; // value of d is the logical AND of
Assign d = b; // a and b
Wire [9:0] A; // a cable (vector) of 10 wires.
Wand [msb:lsb] wand_variable_list;
Wor [msb:lsb] wor_variable_list;
Tri [msb:lsb] tri_variable_list;
रजिस्टर करें
एक reg (रजिस्टर) एक डेटा ऑब्जेक्ट है, जो एक प्रक्रियात्मक असाइनमेंट से अगले एक तक मूल्य पकड़ रहा है और केवल विभिन्न कार्यों और प्रक्रियात्मक ब्लॉकों में उपयोग किया जाता है। एक reg एक सरल वेरिलॉग है, चर-प्रकार रजिस्टर और एक भौतिक रजिस्टर नहीं कर सकता है। मल्टी-बिट रजिस्टरों में, डेटा को अहस्ताक्षरित संख्याओं के रूप में संग्रहीत किया जाता है और साइन एक्सटेंशन का उपयोग नहीं किया जाता है।
उदाहरण -
रे ग; // सिंगल 1-बिट रजिस्टर चर
reg [५: ०] मणि; // 6-बिट वेक्टर;
रेग [6: 0] डी, ई; // दो 7-बिट चर
इनपुट, आउटपुट, इनाउट
इन कीवर्ड का उपयोग किसी कार्य या मॉड्यूल के इनपुट, आउटपुट और द्विदिश बंदरगाहों को घोषित करने के लिए किया जाता है। यहां इनपुट और इनऑउट पोर्ट, जो वायर टाइप के होते हैं और आउटपुट पोर्ट वायर, रेग, वंड, वर्स्ट या ट्राई टाइप के होते हैं। हमेशा, डिफ़ॉल्ट तार प्रकार है।
Example
Module sample(a, c, b, d);
Input c; // An input where wire is used.
Output a, b; // Two outputs where wire is used.
Output [2:0] d; /* A three-bit output. One must declare type in a separate statement. */
reg [1:0] a; // The above ‘a’ port is for declaration in reg.
पूर्णांक
इंटेगर का उपयोग सामान्य प्रयोजन के चर में किया जाता है। वे मुख्य रूप से छोरों-संकेत, स्थिरांक और मापदंडों में उपयोग किए जाते हैं। वे 'reg' प्रकार के डेटा प्रकार के होते हैं। वे डेटा को हस्ताक्षरित संख्याओं के रूप में संग्रहीत करते हैं जबकि स्पष्ट रूप से घोषित reg प्रकार उन्हें एक अहस्ताक्षरित डेटा के रूप में संग्रहीत करते हैं। यदि संकलन के समय पूर्णांक को परिभाषित नहीं किया जाता है, तो डिफ़ॉल्ट आकार 32 बिट्स होगा।
यदि एक पूर्णांक एक स्थिर रखता है, तो सिंथेसाइज़र उन्हें संकलन के समय आवश्यक न्यूनतम चौड़ाई पर समायोजित करता है।
Example
Integer c; // single 32-bit integer
Assign a = 63; // 63 defaults to a 7-bit variable.
सप्लाई, सप्लाई १
Supply0 परिभाषित तारों को तर्क 0 (जमीन) से जोड़ते हैं और supply1 तर्क 1 (शक्ति) से बंधे तारों को परिभाषित करते हैं।
Example
supply0 logic_0_wires;
supply0 gnd1; // equivalent to a wire assigned as 0
supply1 logic_1_wires;
supply1 c, s;
समय
समय एक 64-बिट मात्रा है जिसे सिमुलेशन समय धारण करने के लिए $ टाइम सिस्टम कार्य के साथ संयोजन में उपयोग किया जा सकता है। समय संश्लेषण के लिए समर्थित नहीं है और इसलिए इसका उपयोग केवल सिमुलेशन उद्देश्यों के लिए किया जाता है।
Example
time time_variable_list;
time c;
c = $time; //c = current simulation time
पैरामीटर
एक पैरामीटर एक स्थिरांक को परिभाषित कर रहा है जिसे सेट किया जा सकता है जब आप एक मॉड्यूल का उपयोग करते हैं, जो इंस्टेंटेशन प्रक्रिया के दौरान मॉड्यूल के अनुकूलन की अनुमति देता है।
Example
Parameter add = 3’b010, sub = 2’b11;
Parameter n = 3;
Parameter [2:0] param2 = 3’b110;
reg [n-1:0] jam; /* A 3-bit register with length of n or above. */
always @(z)
y = {{(add - sub){z}};
if (z)
begin
state = param2[1];
else
state = param2[2];
end
ऑपरेटर्स
अंकगणितीय आपरेटर
ये संचालक अंकगणितीय ऑपरेशन करते हैं। + + और +are का उपयोग unary (x) या बाइनरी (z operators y) ऑपरेटरों के रूप में किया जाता है।
जिन ऑपरेटरों को अंकगणितीय ऑपरेशन में शामिल किया गया है वे हैं -
+ (जोड़), - (घटाव), * (गुणा), / (विभाजन),% (मापांक)
Example -
parameter v = 5;
reg[3:0] b, d, h, i, count;
h = b + d;
i = d - v;
cnt = (cnt +1)%16; //Can count 0 thru 15.
संबंधपरक संकारक
ये ऑपरेटर दो ऑपरेंड की तुलना करते हैं और परिणाम को एक बिट, 1 या 0 में वापस करते हैं।
तार और reg चर सकारात्मक हैं। इस प्रकार ((3'd001) = = 3'd111 और (0013b001)> 3b110।
ऑपरेटर जो रिलेशनल ऑपरेशन में शामिल हैं, वे हैं -
- == (बराबर)
- ! = (बराबर नहीं)
- > (इससे अधिक)
- > = (से अधिक या बराबर)
- <(से कम)
- <= (इससे कम या बराबर)
Example
if (z = = y) c = 1;
else c = 0; // Compare in 2’s compliment; d>b
reg [3:0] d,b;
if (d[3]= = b[3]) d[2:0] > b[2:0];
else b[3];
Equivalent Statement
e = (z == y);
बिट-वार ऑपरेटर्स
बिट-वार ऑपरेटर जो दो ऑपरेंड के बीच एक बिट-बाय-बिट तुलना कर रहे हैं।
वे ऑपरेटर जो बिट वार ऑपरेशन में शामिल हैं, वे हैं -
- और (बिट वाइज)
- | (BitwiseOR)
- ~ (बिट वाइज नहीं)
- ^ (बिट वाइज XOR)
- ~ ^ या ^ ~ (बिटवाइंड एक्सएनओआर)
Example
module and2 (d, b, c);
input [1:0] d, b;
output [1:0] c;
assign c = d & b;
end module
लॉजिकल ऑपरेटर्स
लॉजिकल ऑपरेटर बिट-वार ऑपरेटर होते हैं और केवल सिंगल-बिट ऑपरेंड के लिए उपयोग किए जाते हैं। वे एक एकल बिट मान लौटाते हैं, 0 या 1. वे पूर्णांक या बिट के समूह पर काम कर सकते हैं, सभी गैर-शून्य मानों के साथ व्यवहार कर सकते हैं क्योंकि 1. तार्किक संचालक आमतौर पर, सशर्त बयानों में उपयोग किए जाते हैं क्योंकि वे भावों के साथ काम करते हैं।
लॉजिकल ऑपरेशन में शामिल होने वाले ऑपरेटर हैं -
- ! (तार्किक नहीं)
- && (तार्किक और)
- || (तार्किक या)
Example
wire[7:0] a, b, c; // a, b and c are multibit variables.
reg x;
if ((a == b) && (c)) x = 1; //x = 1 if a equals b, and c is nonzero.
else x = !a; // x =0 if a is anything but zero.
रिडक्शन ऑपरेटर्स
रिडक्शन ऑपरेटर बिटवाइज़ ऑपरेटरों का एकरूप रूप है और एक ऑपरेंड वेक्टर के सभी बिट्स पर काम करता है। ये एकल-बिट मान भी लौटाते हैं।
जो ऑपरेटर रिडक्शन ऑपरेशन में शामिल हैं, वे हैं -
- और (कमी और)
- | (कमी या)
- ~ & (कमी नंद)
- ~ | (कमी NOR)
- ^ (कमी XOR)
- ~ ^ या ^ ~ (कमी XNOR)
Example
Module chk_zero (x, z);
Input [2:0] x;
Output z;
Assign z = & x; // Reduction AND
End module
शिफ्ट ऑपरेटर्स
शिफ्ट ऑपरेटर, जो सिंटैक्स में दूसरे ऑपरेंड द्वारा निर्दिष्ट बिट्स की संख्या से पहले ऑपरेंड को स्थानांतरित कर रहे हैं। रिक्त स्थान दोनों दिशाओं के लिए शून्य, बाएं और दाएं पारियों से भरा है (कोई उपयोग संकेत विस्तार नहीं है)।
शिफ्ट ऑपरेशन में शामिल होने वाले ऑपरेटर हैं -
- << (बाईं ओर शिफ्ट)
- >> (सही पारी)
Example
Assign z = c << 3; /* z = c shifted left 3 bits;
रिक्त पदों को 0 * से भरा जाता है।
संघटन संचालक
संघनन संचालक दो या दो से अधिक संचालकों को मिलाकर एक बड़ा वेक्टर बनाता है।
कॉनटेनटेशन ऑपरेशन में शामिल ऑपरेटर है - {} (कॉन्सेप्टन)
Example
wire [1:0] a, h; wire [2:0] x; wire [3;0] y, Z;
assign x = {1’b0, a}; // x[2] = 0, x[1] = a[1], x[0] = a[0]
assign b = {a, h}; /* b[3] = a[1], b[2] = a[0], b[1] = h[1],
b[0] = h[0] */
assign {cout, b} = x + Z; // Concatenation of a result
प्रतिकृति ऑपरेटर
प्रतिकृति ऑपरेटर किसी आइटम की कई प्रतियाँ बना रहा है।
प्रतिकृति संचालन में उपयोग किया जाने वाला ऑपरेटर है - {n {आइटम}} (किसी आइटम का एन गुना प्रतिकृति)
Example
Wire [1:0] a, f; wire [4:0] x;
Assign x = {2{1’f0}, a}; // Equivalent to x = {0,0,a }
Assign y = {2{a}, 3{f}}; //Equivalent to y = {a,a,f,f}
For synthesis, Synopsis did not like a zero replication.
For example:-
Parameter l = 5, k = 5;
Assign x = {(l-k){a}}
सशर्त संचालक
सशर्त ऑपरेटर मल्टीप्लेक्सर को संश्लेषित करता है। यह उसी तरह का है जैसा C / C ++ में उपयोग किया जाता है और स्थिति के आधार पर दो भावों में से एक का मूल्यांकन करता है।
सशर्त संचालन में प्रयुक्त ऑपरेटर है -
(स्थिति) ? (यदि शर्त सही है तो परिणाम दें) -
(परिणाम झूठा होने पर परिणाम)
Example
Assign x = (g) ? a : b;
Assign x = (inc = = 2) ? x+1 : x-1;
/* if (inc), x = x+1, else x = x-1 */
ऑपरेंड
शाब्दिक
साहित्य निरंतर-मूल्यवान ऑपरेशंस हैं जो वेरिलॉग अभिव्यक्तियों में उपयोग किए जाते हैं। आमतौर पर इस्तेमाल किए जाने वाले दो वेरिलॉग शाब्दिक हैं -
String - एक स्ट्रिंग शाब्दिक ऑपरेंड वर्णों का एक आयामी आयाम है, जो दोहरे उद्धरण चिह्नों ("") में संलग्न है।
Numeric - एक निरंतर संख्या ऑपरेंड बाइनरी, ऑक्टल, दशमलव या हेक्साडेसिमल संख्या में निर्दिष्ट है।
Example
n - बिट्स की संख्या का प्रतिनिधित्व करने वाला पूर्णांक
एफ - चार संभावित आधार प्रारूपों में से एक -
बाइनरी के लिए बी, ओक्टल के लिए ओ, दशमलव के लिए डी, हेक्साडेसिमल के लिए एच।
“time is” // string literal
267 // 32-bit decimal number
2’b01 // 2-bit binary
20’hB36F // 20-bit hexadecimal number
‘062 // 32-bit octal number
तारों, Regs, और पैरामीटर
तारों, regs और पैरामीटर वेरीलॉग अभिव्यक्तियों में ऑपरेंड के रूप में उपयोग किए जाने वाले डेटा प्रकार हैं।
बिट-चयन "x [2]" और भाग-चयन "x [4: 2]"
बिट-सलेक्ट्स और पार्ट-सलेक्ट्स का उपयोग स्क्वायर ब्रैकेट्स के उपयोग के साथ एक तार, रेग या पैरामीटर वेक्टर से क्रमशः एक बिट और कई बिट्स को चुनने के लिए किया जाता है। बिट-सलेक्ट्स और पार्ट-सलेक्ट्स को अभिव्यक्ति में ऑपरेंड के रूप में उसी तरह से उपयोग किया जाता है जिस तरह से उनके मुख्य डेटा ऑब्जेक्ट का उपयोग किया जाता है।
Example
reg [7:0] x, y;
reg [3:0] z;
reg a;
a = x[7] & y[7]; // bit-selects
z = x[7:4] + y[3:0]; // part-selects
समारोह कॉल
फ़ंक्शन कॉल में, किसी फ़ंक्शन का रिटर्न मान सीधे एक अभिव्यक्ति में उपयोग किया जाता है, बिना पहले इसे रजिस्टर या वायर को असाइन किए बिना। यह केवल फ़ंक्शन कॉल को ऑपरेंड के प्रकार में से एक के रूप में रखता है। यह सुनिश्चित करने के लिए आवश्यक है कि आप फ़ंक्शन कॉल के रिटर्न मान की थोड़ी चौड़ाई जान रहे हैं।
Example
Assign x = y & z & chk_yz(z, y); // chk_yz is a function
. . ./* Definition of the function */
Function chk_yz; // function definition
Input z,y;
chk_yz = y^z;
End function
मॉड्यूल
मॉड्यूल घोषणा
वेरिलोग में, एक मॉड्यूल प्रमुख डिजाइन इकाई है। यह नाम और पोर्ट सूची (तर्क) को इंगित करता है। अगली कुछ लाइनें जो इनपुट / आउटपुट प्रकार (इनपुट, आउटपुट या इनऑट) और प्रत्येक पोर्ट की चौड़ाई को निर्दिष्ट करती हैं। डिफ़ॉल्ट पोर्ट चौड़ाई केवल 1 बिट है। पोर्ट चर को तार, छड़ी, द्वारा घोषित किया जाना चाहिए। । ।, रेग। डिफ़ॉल्ट पोर्ट चर तार है। आम तौर पर, इनपुट तार होते हैं क्योंकि उनका डेटा मॉड्यूल के बाहर लगाया जाता है। यदि उनके संकेत अंदर संग्रहीत हैं तो आउटपुट reg प्रकार के होते हैं।
Example
module sub_add(add, in1, in2, out);
input add; // defaults to wire
input [7:0] in1, in2; wire in1, in2;
output [7:0] out; reg out;
... statements ...
End module
निरंतर असाइनमेंट
एक मॉड्यूल में निरंतर असाइनमेंट का उपयोग किसी तार पर मान निर्दिष्ट करने के लिए किया जाता है, जो हमेशा या प्रारंभिक ब्लॉकों के बाहर उपयोग किया जाने वाला सामान्य असाइनमेंट है। यह असाइनमेंट एक स्पष्ट असाइनमेंट स्टेटमेंट के साथ किया जाता है या इसकी घोषणा के दौरान एक तार के लिए एक मान असाइन किया जाता है। सिमुलेशन के समय लगातार असाइनमेंट को निष्पादित किया जाता है। असाइनमेंट स्टेटमेंट का क्रम उस पर प्रभाव नहीं डालता है। यदि आप किसी भी राइट-साइड-साइड इनपुट सिग्नल में कोई बदलाव करते हैं तो यह लेफ्ट-हैंड-साइड आउटपुट सिग्नल को बदल देगा।
Example
Wire [1:0] x = 2’y01; // assigned on declaration
Assign y = c | d; // using assign statement
Assign d = a & b;
/* the order of the assign statements does not matter. */
मॉड्यूल इंस्टेंटिएशन
मॉड्यूल घोषणाएं वास्तविक वस्तुओं को बनाने के लिए टेम्पलेट हैं। मॉड्यूल अन्य मॉड्यूल के अंदर त्वरित हैं, और प्रत्येक तात्कालिकता उस टेम्पलेट से एक एकल ऑब्जेक्ट बना रहा है। अपवाद शीर्ष-स्तरीय मॉड्यूल है जो इसका अपना तात्कालिकता है। मॉड्यूल के बंदरगाहों को उन लोगों से मेल खाना चाहिए जो टेम्पलेट में परिभाषित किए गए हैं। यह निर्दिष्ट है -
By name, एक डॉट ".template पोर्ट नाम (पोर्ट से जुड़े तार का नाम)" का उपयोग कर। या
By position, टेम्पलेट और उदाहरण दोनों की पोर्ट सूचियों में पोर्ट को एक ही स्थान पर रखना।
Example
MODULE DEFINITION
Module and4 (x, y, z);
Input [3:0] x, y;
Output [3:0] z;
Assign z = x | y;
End module