2013-04-10 10 views
7

निम्नलिखित दोनों कोड घड़ी उत्पन्न करते हैं। मुझे यह जानने की ज़रूरत है कि घड़ी की पीढ़ी के अलावा हमेशा के लिए लूप का कोई उपयोग है या नहीं? मैं केवल घड़ी पीढ़ी में हमेशा के लिए आ गया है। अगर यह केवल इस उद्देश्य की सेवा करता है, तो क्या यह बेकार नहीं है?हमेशा के लिए और हमेशा कथन का उपयोग

initial begin 
clk = 0; 
forever begin 
#5 clk = ~clk; 
end 
end 

initial begin 
clk = 0 ; 
always begin 
# 5 clk = ~clk; 
end 
end 

उत्तर

1

हाँ, forever छोरों डिजाइन सत्यापन के लिए testbenches में व्यापक उपयोग, उद्योग मानक पद्धति, UVM, और अपने पूर्ववर्तियों (जैसे VMM के रूप में) में particulalry है। वे सत्यापन घटकों जैसे ड्राइवर और मॉनीटर में उपयोग किए जाते हैं जो SystemVerilog कक्षाओं में कार्यों का व्यापक उपयोग करते हैं।

+0

मुझे लगता है कि UVM और VMM के लिए परिचित नहीं हूँ लेकिन, अपनी सुंदर बेकार सही verilog में – chitranna

+0

? यूवीएम वेरिलोग का उपयोग करता है। – toolic

+0

मुझे लगता है कि @ new2android का मतलब संश्लेषण के लिए वेरिलोग आरटीएल में है। मैंने आरटीएल में हमेशा के लिए कभी भी उपयोग नहीं किया है, क्योंकि लूप का उपयोग किया जा सकता है क्योंकि वे संकलन समय पर अनियंत्रित होते हैं। – Morgan

6

आपका दूसरा कोड स्निपेट वास्तव में एक वाक्यविन्यास त्रुटि है। forever और always के बीच का अंतर यह है कि always "मॉड्यूल आइटम" के रूप में मौजूद हो सकता है, जो वह नाम है जो वेरिलोग स्पेस संरचनाओं को देता है जो सीधे किसी मॉड्यूल के भीतर लिखा जा सकता है, जो कि किसी अन्य निर्माण के भीतर नहीं है। initial एक मॉड्यूल आइटम भी है। always ब्लॉक दोहराए जाते हैं, जबकि initial ब्लॉक सिमुलेशन की शुरुआत में एक बार चलाए जाते हैं।

forever एक प्रक्रियात्मक बयान है जिसका उपयोग केवल प्रक्रियात्मक संदर्भ में किया जा सकता है। तो initial forever या always forever लिखना कानूनी है, लेकिन forever नहीं। इसलिए always के उपयोग के लिए अनुमति नहीं है

स्थिति है जहाँ forever काफी महत्वपूर्ण हो जाता है, कार्य, जो प्रक्रियात्मक संदर्भों हैं के भीतर है। (कार्य प्रक्रियात्मक संदर्भों के साथ-साथ मैं अंतर ;;;;;;; दिखाएगा रहे हैं, लेकिन देरी शामिल नहीं हो सकता है, जो बनाता है यह संभावना नहीं है कि forever उपयोगी में आ जाएगा।

-1

// // हम उपयोग नहीं कर सकते हमेशा के लिए प्रारंभिक ब्लॉक के अंदर ब्लॉक, लेकिन हम हमेशा के लिए त्रुटि के साथ // कोड का उपयोग कर सकते आरंभिक ब्लॉक के अंदर ब्लॉक:।

module stimulus(output reg a,b); 

initial 
begin 
    a = 1'b1; 
    b = 1'b0; 

    always 
    begin 
    #5 a = ~a;   //error when compiling 
    #6 b = ~a; 
    end 

end 

initial 
    #25 $stop; 

endmodule 




    // code with no error 
module stimulus(output reg a,b); 

initial 
begin 
    a = 1'b1; 
    b = 1'b0; 

    always 
    begin 
    #5 a = ~a; //no error when compiling 
    #6 b = ~a; 
    end 

end 

initial 
    #25 $stop; 

endmodule 
संबंधित मुद्दे