2012-01-18 17 views
9

वहाँ@ (पॉज क्लर्क) के बीच अंतर; एक <= 1'b1; और @ (पॉज क्लर्क) एक <= 1'b1;

@(posedge Clk); 
    a<= 1'b1; 

और

@(posedge Clk) 
    a<= 1'b1; 

नोट Clk के बाद अर्धविराम के बीच कोई अंतर है। जब मैं टेस्टबेंच के माध्यम से ब्राउज़ कर रहा था तो मैं कोड की समान रेखाओं में आया था। मैंने कुछ सरल प्रयोग किए और मुझे सिमुलेशन के दौरान कोई अंतर नहीं मिला। अर्धविराम की उपस्थिति/अनुपस्थिति के कारण इन पंक्तियों के बाद कोड के निष्पादन का अनुक्रम किसी भी तरह से बदल जाएगा?

उत्तर

10

आप सही हैं-कोई व्यवहारिक अंतर नहीं है।

अर्धविराम संस्करण है: प्रतीक्षा करें। यह करो। गैर-अर्धविराम संस्करण है: प्रतीक्षा करें, फिर ऐसा करें। कभी-कभी आपको इस फार्म एक liners में उपयोग देखेंगे:

@(posedge Clk) a<= 1'b1; 
12

किसी भी प्रक्रियात्मक बयान के लिए BNF वाक्यविन्यास अनिवार्य है

statement_item := 
     {procedural_timing_control} statement; 

इसका मतलब यह है कि आप किसी भी के सामने 0 या उससे अधिक समय नियंत्रण हो सकता है बयान। आपके उदाहरण में @(posedge Clk) एक समय नियंत्रण है और a<= 1'b1; बयान है।

यदि आपका उदाहरण एक कांटा/जुड़ने के अंदर था, तो एक व्यवहारिक अंतर होगा क्योंकि पूर्व दो बयान हैं; बाद में एक बयान है।

fork 
    @(posedge Clk); a<1'b1; 
join 

इस मामले में, 2 बयान समानांतर में शुरू कर रहे हैं - के लिए posedge आवंटित करने के लिए a इंतजार नहीं होता।

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